Unescape HTML · C 🤝 Fable 5.2 · #1 Fastest

SHA-256 b5969cfd7b786d1917134b24d5311bf9cabeabcf5c6ecf1e1bc140e05fd54de6

View source (99.7 KiB of C)
// unescape_html in C with Wasm SIMD: decodes every HTML character reference in UTF-8 text
// the way Python's html.unescape does, and copies all other bytes unchanged.
//
// The design goal is a short path per reference with few unpredictable branches:
// - 64 zero bytes are written after the input, so no load or loop needs a bounds check and
//   nothing stale from an earlier input can be mistaken for part of a reference.
// - Two stages per 4 KiB window. Stage 1 turns each 64-byte block into a bitmask of its `&`
//   and appends their positions to a list, without branching on what it finds. Stage 2
//   walks the list: copy the text since the last reference (32 bytes unconditionally, more
//   in a loop), then decode. The next position is known before the current reference is
//   decoded, so consecutive references do not wait on each other.
// - Inputs without `&` are returned in place; nothing is copied.
// - A name of up to 7 bytes ending in `;` is looked up without measuring it: the first `;`
//   in the next 8 bytes is found with a SWAR zero-byte test, the bytes up to it are the key,
//   and one multiply indexes an open-addressed table of 16-byte entries (key, value, length).
//   A hit proves the name; legacy and common names sit in their home slot.
// - Longer names go through a second table and one masked 32-byte vector compare.
// - Without `;` only the 106 legacy names match. A filter on the first two bytes gives the
//   longest legacy name that could start there, usually none.
// - Numeric references of up to 7 digits, decimal or hexadecimal, share one branch-free
//   SWAR path, and the code point is encoded as UTF-8 without branching on its length.
// Tables are built from the packed entity list on the first call.
//
// Build: zig cc -target wasm32-freestanding -O3 -msimd128 -mbulk-memory -nostdlib
//   -Wl,--no-entry -Wl,--export-memory -Wl,--initial-memory=3145728 -Wl,--max-memory=3145728
//   -Wl,-z,stack-size=8192 -Wl,--strip-all -o unescape.wasm unescape.c
#include <stdint.h>
#include <wasm_simd128.h>

typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
typedef uint64_t u64;

#define INPUT_CAP (1u << 20)
// The largest growth is `&nGt;` (5 bytes) becoming 6 bytes.
#define OUTPUT_CAP (INPUT_CAP / 5 * 6 + 8)
#define PAD 128

#define FAST_BITS 12
#define FAST_TAIL 32
#define LEG_BITS 8
#define LEG_TAIL 16
#define LONG_BITS 11
#define EMPTY (~(u64)0)
// Bytes of input per stage-1 window; a multiple of 64.
#define WINDOW 4096

#define ENTITY_COUNT 2125
#define LONG_COUNT 506
#define FAST_MUL 0x0c6e5973286bef29ull
#define LEG_MUL 0x2ba5322c33c67a59ull
#define LONG_MUL 0xa0c2995f40498cb3ull
static const u8 entity_blob[24470] = {
	133,2,65,69,108,105,103,195,134,131,1,65,77,80,38,134,2,65,97,99,117,116,101,195,
	129,133,2,65,99,105,114,99,195,130,134,2,65,103,114,97,118,101,195,128,133,2,65,114,
	105,110,103,195,133,134,2,65,116,105,108,100,101,195,131,132,2,65,117,109,108,195,132,132,
	2,67,79,80,89,194,169,134,2,67,99,101,100,105,108,195,135,131,2,69,84,72,195,144,
	134,2,69,97,99,117,116,101,195,137,133,2,69,99,105,114,99,195,138,134,2,69,103,114,
	97,118,101,195,136,132,2,69,117,109,108,195,139,130,1,71,84,62,134,2,73,97,99,117,
	116,101,195,141,133,2,73,99,105,114,99,195,142,134,2,73,103,114,97,118,101,195,140,132,
	2,73,117,109,108,195,143,130,1,76,84,60,134,2,78,116,105,108,100,101,195,145,134,2,
	79,97,99,117,116,101,195,147,133,2,79,99,105,114,99,195,148,134,2,79,103,114,97,118,
	101,195,146,134,2,79,115,108,97,115,104,195,152,134,2,79,116,105,108,100,101,195,149,132,
	2,79,117,109,108,195,150,132,1,81,85,79,84,34,131,2,82,69,71,194,174,133,2,84,
	72,79,82,78,195,158,134,2,85,97,99,117,116,101,195,154,133,2,85,99,105,114,99,195,
	155,134,2,85,103,114,97,118,101,195,153,132,2,85,117,109,108,195,156,134,2,89,97,99,
	117,116,101,195,157,134,2,97,97,99,117,116,101,195,161,133,2,97,99,105,114,99,195,162,
	133,2,97,99,117,116,101,194,180,133,2,97,101,108,105,103,195,166,134,2,97,103,114,97,
	118,101,195,160,131,1,97,109,112,38,133,2,97,114,105,110,103,195,165,134,2,97,116,105,
	108,100,101,195,163,132,2,97,117,109,108,195,164,134,2,98,114,118,98,97,114,194,166,134,
	2,99,99,101,100,105,108,195,167,133,2,99,101,100,105,108,194,184,132,2,99,101,110,116,
	194,162,132,2,99,111,112,121,194,169,134,2,99,117,114,114,101,110,194,164,131,2,100,101,
	103,194,176,134,2,100,105,118,105,100,101,195,183,134,2,101,97,99,117,116,101,195,169,133,
	2,101,99,105,114,99,195,170,134,2,101,103,114,97,118,101,195,168,131,2,101,116,104,195,
	176,132,2,101,117,109,108,195,171,134,2,102,114,97,99,49,50,194,189,134,2,102,114,97,
	99,49,52,194,188,134,2,102,114,97,99,51,52,194,190,130,1,103,116,62,134,2,105,97,
	99,117,116,101,195,173,133,2,105,99,105,114,99,195,174,133,2,105,101,120,99,108,194,161,
	134,2,105,103,114,97,118,101,195,172,134,2,105,113,117,101,115,116,194,191,132,2,105,117,
	109,108,195,175,133,2,108,97,113,117,111,194,171,130,1,108,116,60,132,2,109,97,99,114,
	194,175,133,2,109,105,99,114,111,194,181,134,2,109,105,100,100,111,116,194,183,132,2,110,
	98,115,112,194,160,131,2,110,111,116,194,172,134,2,110,116,105,108,100,101,195,177,134,2,
	111,97,99,117,116,101,195,179,133,2,111,99,105,114,99,195,180,134,2,111,103,114,97,118,
	101,195,178,132,2,111,114,100,102,194,170,132,2,111,114,100,109,194,186,134,2,111,115,108,
	97,115,104,195,184,134,2,111,116,105,108,100,101,195,181,132,2,111,117,109,108,195,182,132,
	2,112,97,114,97,194,182,134,2,112,108,117,115,109,110,194,177,133,2,112,111,117,110,100,
	194,163,132,1,113,117,111,116,34,133,2,114,97,113,117,111,194,187,131,2,114,101,103,194,
	174,132,2,115,101,99,116,194,167,131,2,115,104,121,194,173,132,2,115,117,112,49,194,185,
	132,2,115,117,112,50,194,178,132,2,115,117,112,51,194,179,133,2,115,122,108,105,103,195,
	159,133,2,116,104,111,114,110,195,190,133,2,116,105,109,101,115,195,151,134,2,117,97,99,
	117,116,101,195,186,133,2,117,99,105,114,99,195,187,134,2,117,103,114,97,118,101,195,185,
	131,2,117,109,108,194,168,132,2,117,117,109,108,195,188,134,2,121,97,99,117,116,101,195,
	189,131,2,121,101,110,194,165,132,2,121,117,109,108,195,191,4,1,97,112,111,115,39,5,
	3,114,100,113,117,111,226,128,157,5,3,108,100,113,117,111,226,128,156,5,3,114,115,113,
	117,111,226,128,153,5,3,108,115,113,117,111,226,128,152,5,3,109,100,97,115,104,226,128,
	148,5,3,110,100,97,115,104,226,128,147,6,3,104,101,108,108,105,112,226,128,166,4,3,
	101,117,114,111,226,130,172,5,3,116,114,97,100,101,226,132,162,4,3,98,117,108,108,226,
	128,162,5,3,99,104,101,99,107,226,156,147,6,3,100,97,103,103,101,114,226,128,160,6,
	3,68,97,103,103,101,114,226,128,161,4,3,108,97,114,114,226,134,144,4,3,114,97,114,
	114,226,134,146,4,3,117,97,114,114,226,134,145,4,3,100,97,114,114,226,134,147,4,3,
	104,97,114,114,226,134,148,5,3,112,114,105,109,101,226,128,178,5,3,80,114,105,109,101,
	226,128,179,2,3,108,101,226,137,164,2,3,103,101,226,137,165,2,3,110,101,226,137,160,
	5,3,105,110,102,105,110,226,136,158,3,3,115,117,109,226,136,145,5,3,109,105,110,117,
	115,226,136,146,5,3,114,97,100,105,99,226,136,154,5,3,97,115,121,109,112,226,137,136,
	5,3,101,113,117,105,118,226,137,161,5,2,97,108,112,104,97,206,177,4,2,98,101,116,
	97,206,178,5,2,103,97,109,109,97,206,179,5,2,100,101,108,116,97,206,180,2,2,112,
	105,207,128,2,2,109,117,206,188,5,2,115,105,103,109,97,207,131,5,2,111,109,101,103,
	97,207,137,6,2,108,97,109,98,100,97,206,187,5,2,116,104,101,116,97,206,184,6,3,
	112,101,114,109,105,108,226,128,176,6,3,108,115,97,113,117,111,226,128,185,6,3,114,115,
	97,113,117,111,226,128,186,5,3,115,98,113,117,111,226,128,154,5,3,98,100,113,117,111,
	226,128,158,5,2,111,101,108,105,103,197,147,5,2,79,69,108,105,103,197,146,6,2,115,
	99,97,114,111,110,197,161,6,2,83,99,97,114,111,110,197,160,4,2,89,117,109,108,197,
	184,4,2,102,110,111,102,198,146,4,2,99,105,114,99,203,134,5,2,116,105,108,100,101,
	203,156,4,3,101,110,115,112,226,128,130,4,3,101,109,115,112,226,128,131,6,3,116,104,
	105,110,115,112,226,128,137,4,3,122,119,110,106,226,128,140,3,3,122,119,106,226,128,141,
	3,3,108,114,109,226,128,142,3,3,114,108,109,226,128,143,6,3,115,112,97,100,101,115,
	226,153,160,5,3,99,108,117,98,115,226,153,163,6,3,104,101,97,114,116,115,226,153,165,
	5,3,100,105,97,109,115,226,153,166,3,3,108,111,122,226,151,138,4,3,115,116,97,114,
	226,152,134,5,3,115,116,97,114,102,226,152,133,5,3,112,104,111,110,101,226,152,142,5,
	3,99,114,111,115,115,226,156,151,9,3,99,104,101,99,107,109,97,114,107,226,156,147,6,
	2,65,98,114,101,118,101,196,130,3,2,65,99,121,208,144,3,4,65,102,114,240,157,148,
	132,5,2,65,108,112,104,97,206,145,5,2,65,109,97,99,114,196,128,3,3,65,110,100,
	226,169,147,5,2,65,111,103,111,110,196,132,4,4,65,111,112,102,240,157,148,184,13,3,
	65,112,112,108,121,70,117,110,99,116,105,111,110,226,129,161,4,4,65,115,99,114,240,157,
	146,156,6,3,65,115,115,105,103,110,226,137,148,9,3,66,97,99,107,115,108,97,115,104,
	226,136,150,4,3,66,97,114,118,226,171,167,6,3,66,97,114,119,101,100,226,140,134,3,
	2,66,99,121,208,145,7,3,66,101,99,97,117,115,101,226,136,181,10,3,66,101,114,110,
	111,117,108,108,105,115,226,132,172,4,2,66,101,116,97,206,146,3,4,66,102,114,240,157,
	148,133,4,4,66,111,112,102,240,157,148,185,5,2,66,114,101,118,101,203,152,4,3,66,
	115,99,114,226,132,172,6,3,66,117,109,112,101,113,226,137,142,4,2,67,72,99,121,208,
	167,6,2,67,97,99,117,116,101,196,134,3,3,67,97,112,226,139,146,20,3,67,97,112,
	105,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,226,133,133,7,3,67,97,
	121,108,101,121,115,226,132,173,6,2,67,99,97,114,111,110,196,140,5,2,67,99,105,114,
	99,196,136,7,3,67,99,111,110,105,110,116,226,136,176,4,2,67,100,111,116,196,138,7,
	2,67,101,100,105,108,108,97,194,184,9,2,67,101,110,116,101,114,68,111,116,194,183,3,
	3,67,102,114,226,132,173,3,2,67,104,105,206,167,9,3,67,105,114,99,108,101,68,111,
	116,226,138,153,11,3,67,105,114,99,108,101,77,105,110,117,115,226,138,150,10,3,67,105,
	114,99,108,101,80,108,117,115,226,138,149,11,3,67,105,114,99,108,101,84,105,109,101,115,
	226,138,151,24,3,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,
	101,103,114,97,108,226,136,178,21,3,67,108,111,115,101,67,117,114,108,121,68,111,117,98,
	108,101,81,117,111,116,101,226,128,157,15,3,67,108,111,115,101,67,117,114,108,121,81,117,
	111,116,101,226,128,153,5,3,67,111,108,111,110,226,136,183,6,3,67,111,108,111,110,101,
	226,169,180,9,3,67,111,110,103,114,117,101,110,116,226,137,161,6,3,67,111,110,105,110,
	116,226,136,175,15,3,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,226,136,174,
	4,3,67,111,112,102,226,132,130,9,3,67,111,112,114,111,100,117,99,116,226,136,144,31,
	3,67,111,117,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,
	73,110,116,101,103,114,97,108,226,136,179,5,3,67,114,111,115,115,226,168,175,4,4,67,
	115,99,114,240,157,146,158,3,3,67,117,112,226,139,147,6,3,67,117,112,67,97,112,226,
	137,141,2,3,68,68,226,133,133,8,3,68,68,111,116,114,97,104,100,226,164,145,4,2,
	68,74,99,121,208,130,4,2,68,83,99,121,208,133,4,2,68,90,99,121,208,143,4,3,
	68,97,114,114,226,134,161,5,3,68,97,115,104,118,226,171,164,6,2,68,99,97,114,111,
	110,196,142,3,2,68,99,121,208,148,3,3,68,101,108,226,136,135,5,2,68,101,108,116,
	97,206,148,3,4,68,102,114,240,157,148,135,16,2,68,105,97,99,114,105,116,105,99,97,
	108,65,99,117,116,101,194,180,14,2,68,105,97,99,114,105,116,105,99,97,108,68,111,116,
	203,153,22,2,68,105,97,99,114,105,116,105,99,97,108,68,111,117,98,108,101,65,99,117,
	116,101,203,157,16,1,68,105,97,99,114,105,116,105,99,97,108,71,114,97,118,101,96,16,
	2,68,105,97,99,114,105,116,105,99,97,108,84,105,108,100,101,203,156,7,3,68,105,97,
	109,111,110,100,226,139,132,13,3,68,105,102,102,101,114,101,110,116,105,97,108,68,226,133,
	134,4,4,68,111,112,102,240,157,148,187,3,2,68,111,116,194,168,6,3,68,111,116,68,
	111,116,226,131,156,8,3,68,111,116,69,113,117,97,108,226,137,144,21,3,68,111,117,98,
	108,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,226,136,175,9,2,68,111,
	117,98,108,101,68,111,116,194,168,15,3,68,111,117,98,108,101,68,111,119,110,65,114,114,
	111,119,226,135,147,15,3,68,111,117,98,108,101,76,101,102,116,65,114,114,111,119,226,135,
	144,20,3,68,111,117,98,108,101,76,101,102,116,82,105,103,104,116,65,114,114,111,119,226,
	135,148,13,3,68,111,117,98,108,101,76,101,102,116,84,101,101,226,171,164,19,3,68,111,
	117,98,108,101,76,111,110,103,76,101,102,116,65,114,114,111,119,226,159,184,24,3,68,111,
	117,98,108,101,76,111,110,103,76,101,102,116,82,105,103,104,116,65,114,114,111,119,226,159,
	186,20,3,68,111,117,98,108,101,76,111,110,103,82,105,103,104,116,65,114,114,111,119,226,
	159,185,16,3,68,111,117,98,108,101,82,105,103,104,116,65,114,114,111,119,226,135,146,14,
	3,68,111,117,98,108,101,82,105,103,104,116,84,101,101,226,138,168,13,3,68,111,117,98,
	108,101,85,112,65,114,114,111,119,226,135,145,17,3,68,111,117,98,108,101,85,112,68,111,
	119,110,65,114,114,111,119,226,135,149,17,3,68,111,117,98,108,101,86,101,114,116,105,99,
	97,108,66,97,114,226,136,165,9,3,68,111,119,110,65,114,114,111,119,226,134,147,12,3,
	68,111,119,110,65,114,114,111,119,66,97,114,226,164,147,16,3,68,111,119,110,65,114,114,
	111,119,85,112,65,114,114,111,119,226,135,181,9,2,68,111,119,110,66,114,101,118,101,204,
	145,19,3,68,111,119,110,76,101,102,116,82,105,103,104,116,86,101,99,116,111,114,226,165,
	144,17,3,68,111,119,110,76,101,102,116,84,101,101,86,101,99,116,111,114,226,165,158,14,
	3,68,111,119,110,76,101,102,116,86,101,99,116,111,114,226,134,189,17,3,68,111,119,110,
	76,101,102,116,86,101,99,116,111,114,66,97,114,226,165,150,18,3,68,111,119,110,82,105,
	103,104,116,84,101,101,86,101,99,116,111,114,226,165,159,15,3,68,111,119,110,82,105,103,
	104,116,86,101,99,116,111,114,226,135,129,18,3,68,111,119,110,82,105,103,104,116,86,101,
	99,116,111,114,66,97,114,226,165,151,7,3,68,111,119,110,84,101,101,226,138,164,12,3,
	68,111,119,110,84,101,101,65,114,114,111,119,226,134,167,9,3,68,111,119,110,97,114,114,
	111,119,226,135,147,4,4,68,115,99,114,240,157,146,159,6,2,68,115,116,114,111,107,196,
	144,3,2,69,78,71,197,138,6,2,69,99,97,114,111,110,196,154,3,2,69,99,121,208,
	173,4,2,69,100,111,116,196,150,3,4,69,102,114,240,157,148,136,7,3,69,108,101,109,
	101,110,116,226,136,136,5,2,69,109,97,99,114,196,146,16,3,69,109,112,116,121,83,109,
	97,108,108,83,113,117,97,114,101,226,151,187,20,3,69,109,112,116,121,86,101,114,121,83,
	109,97,108,108,83,113,117,97,114,101,226,150,171,5,2,69,111,103,111,110,196,152,4,4,
	69,111,112,102,240,157,148,188,7,2,69,112,115,105,108,111,110,206,149,5,3,69,113,117,
	97,108,226,169,181,10,3,69,113,117,97,108,84,105,108,100,101,226,137,130,11,3,69,113,
	117,105,108,105,98,114,105,117,109,226,135,140,4,3,69,115,99,114,226,132,176,4,3,69,
	115,105,109,226,169,179,3,2,69,116,97,206,151,6,3,69,120,105,115,116,115,226,136,131,
	12,3,69,120,112,111,110,101,110,116,105,97,108,69,226,133,135,3,2,70,99,121,208,164,
	3,4,70,102,114,240,157,148,137,17,3,70,105,108,108,101,100,83,109,97,108,108,83,113,
	117,97,114,101,226,151,188,21,3,70,105,108,108,101,100,86,101,114,121,83,109,97,108,108,
	83,113,117,97,114,101,226,150,170,4,4,70,111,112,102,240,157,148,189,6,3,70,111,114,
	65,108,108,226,136,128,10,3,70,111,117,114,105,101,114,116,114,102,226,132,177,4,3,70,
	115,99,114,226,132,177,4,2,71,74,99,121,208,131,5,2,71,97,109,109,97,206,147,6,
	2,71,97,109,109,97,100,207,156,6,2,71,98,114,101,118,101,196,158,6,2,71,99,101,
	100,105,108,196,162,5,2,71,99,105,114,99,196,156,3,2,71,99,121,208,147,4,2,71,
	100,111,116,196,160,3,4,71,102,114,240,157,148,138,2,3,71,103,226,139,153,4,4,71,
	111,112,102,240,157,148,190,12,3,71,114,101,97,116,101,114,69,113,117,97,108,226,137,165,
	16,3,71,114,101,97,116,101,114,69,113,117,97,108,76,101,115,115,226,139,155,16,3,71,
	114,101,97,116,101,114,70,117,108,108,69,113,117,97,108,226,137,167,14,3,71,114,101,97,
	116,101,114,71,114,101,97,116,101,114,226,170,162,11,3,71,114,101,97,116,101,114,76,101,
	115,115,226,137,183,17,3,71,114,101,97,116,101,114,83,108,97,110,116,69,113,117,97,108,
	226,169,190,12,3,71,114,101,97,116,101,114,84,105,108,100,101,226,137,179,4,4,71,115,
	99,114,240,157,146,162,2,3,71,116,226,137,171,6,2,72,65,82,68,99,121,208,170,5,
	2,72,97,99,101,107,203,135,3,1,72,97,116,94,5,2,72,99,105,114,99,196,164,3,
	3,72,102,114,226,132,140,12,3,72,105,108,98,101,114,116,83,112,97,99,101,226,132,139,
	4,3,72,111,112,102,226,132,141,14,3,72,111,114,105,122,111,110,116,97,108,76,105,110,
	101,226,148,128,4,3,72,115,99,114,226,132,139,6,2,72,115,116,114,111,107,196,166,12,
	3,72,117,109,112,68,111,119,110,72,117,109,112,226,137,142,9,3,72,117,109,112,69,113,
	117,97,108,226,137,143,4,2,73,69,99,121,208,149,5,2,73,74,108,105,103,196,178,4,
	2,73,79,99,121,208,129,3,2,73,99,121,208,152,4,2,73,100,111,116,196,176,3,3,
	73,102,114,226,132,145,2,3,73,109,226,132,145,5,2,73,109,97,99,114,196,170,10,3,
	73,109,97,103,105,110,97,114,121,73,226,133,136,7,3,73,109,112,108,105,101,115,226,135,
	146,3,3,73,110,116,226,136,172,8,3,73,110,116,101,103,114,97,108,226,136,171,12,3,
	73,110,116,101,114,115,101,99,116,105,111,110,226,139,130,14,3,73,110,118,105,115,105,98,
	108,101,67,111,109,109,97,226,129,163,14,3,73,110,118,105,115,105,98,108,101,84,105,109,
	101,115,226,129,162,5,2,73,111,103,111,110,196,174,4,4,73,111,112,102,240,157,149,128,
	4,2,73,111,116,97,206,153,4,3,73,115,99,114,226,132,144,6,2,73,116,105,108,100,
	101,196,168,5,2,73,117,107,99,121,208,134,5,2,74,99,105,114,99,196,180,3,2,74,
	99,121,208,153,3,4,74,102,114,240,157,148,141,4,4,74,111,112,102,240,157,149,129,4,
	4,74,115,99,114,240,157,146,165,6,2,74,115,101,114,99,121,208,136,5,2,74,117,107,
	99,121,208,132,4,2,75,72,99,121,208,165,4,2,75,74,99,121,208,140,5,2,75,97,
	112,112,97,206,154,6,2,75,99,101,100,105,108,196,182,3,2,75,99,121,208,154,3,4,
	75,102,114,240,157,148,142,4,4,75,111,112,102,240,157,149,130,4,4,75,115,99,114,240,
	157,146,166,4,2,76,74,99,121,208,137,6,2,76,97,99,117,116,101,196,185,6,2,76,
	97,109,98,100,97,206,155,4,3,76,97,110,103,226,159,170,10,3,76,97,112,108,97,99,
	101,116,114,102,226,132,146,4,3,76,97,114,114,226,134,158,6,2,76,99,97,114,111,110,
	196,189,6,2,76,99,101,100,105,108,196,187,3,2,76,99,121,208,155,16,3,76,101,102,
	116,65,110,103,108,101,66,114,97,99,107,101,116,226,159,168,9,3,76,101,102,116,65,114,
	114,111,119,226,134,144,12,3,76,101,102,116,65,114,114,111,119,66,97,114,226,135,164,19,
	3,76,101,102,116,65,114,114,111,119,82,105,103,104,116,65,114,114,111,119,226,135,134,11,
	3,76,101,102,116,67,101,105,108,105,110,103,226,140,136,17,3,76,101,102,116,68,111,117,
	98,108,101,66,114,97,99,107,101,116,226,159,166,17,3,76,101,102,116,68,111,119,110,84,
	101,101,86,101,99,116,111,114,226,165,161,14,3,76,101,102,116,68,111,119,110,86,101,99,
	116,111,114,226,135,131,17,3,76,101,102,116,68,111,119,110,86,101,99,116,111,114,66,97,
	114,226,165,153,9,3,76,101,102,116,70,108,111,111,114,226,140,138,14,3,76,101,102,116,
	82,105,103,104,116,65,114,114,111,119,226,134,148,15,3,76,101,102,116,82,105,103,104,116,
	86,101,99,116,111,114,226,165,142,7,3,76,101,102,116,84,101,101,226,138,163,12,3,76,
	101,102,116,84,101,101,65,114,114,111,119,226,134,164,13,3,76,101,102,116,84,101,101,86,
	101,99,116,111,114,226,165,154,12,3,76,101,102,116,84,114,105,97,110,103,108,101,226,138,
	178,15,3,76,101,102,116,84,114,105,97,110,103,108,101,66,97,114,226,167,143,17,3,76,
	101,102,116,84,114,105,97,110,103,108,101,69,113,117,97,108,226,138,180,16,3,76,101,102,
	116,85,112,68,111,119,110,86,101,99,116,111,114,226,165,145,15,3,76,101,102,116,85,112,
	84,101,101,86,101,99,116,111,114,226,165,160,12,3,76,101,102,116,85,112,86,101,99,116,
	111,114,226,134,191,15,3,76,101,102,116,85,112,86,101,99,116,111,114,66,97,114,226,165,
	152,10,3,76,101,102,116,86,101,99,116,111,114,226,134,188,13,3,76,101,102,116,86,101,
	99,116,111,114,66,97,114,226,165,146,9,3,76,101,102,116,97,114,114,111,119,226,135,144,
	14,3,76,101,102,116,114,105,103,104,116,97,114,114,111,119,226,135,148,16,3,76,101,115,
	115,69,113,117,97,108,71,114,101,97,116,101,114,226,139,154,13,3,76,101,115,115,70,117,
	108,108,69,113,117,97,108,226,137,166,11,3,76,101,115,115,71,114,101,97,116,101,114,226,
	137,182,8,3,76,101,115,115,76,101,115,115,226,170,161,14,3,76,101,115,115,83,108,97,
	110,116,69,113,117,97,108,226,169,189,9,3,76,101,115,115,84,105,108,100,101,226,137,178,
	3,4,76,102,114,240,157,148,143,2,3,76,108,226,139,152,10,3,76,108,101,102,116,97,
	114,114,111,119,226,135,154,6,2,76,109,105,100,111,116,196,191,13,3,76,111,110,103,76,
	101,102,116,65,114,114,111,119,226,159,181,18,3,76,111,110,103,76,101,102,116,82,105,103,
	104,116,65,114,114,111,119,226,159,183,14,3,76,111,110,103,82,105,103,104,116,65,114,114,
	111,119,226,159,182,13,3,76,111,110,103,108,101,102,116,97,114,114,111,119,226,159,184,18,
	3,76,111,110,103,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,159,186,14,3,
	76,111,110,103,114,105,103,104,116,97,114,114,111,119,226,159,185,4,4,76,111,112,102,240,
	157,149,131,14,3,76,111,119,101,114,76,101,102,116,65,114,114,111,119,226,134,153,15,3,
	76,111,119,101,114,82,105,103,104,116,65,114,114,111,119,226,134,152,4,3,76,115,99,114,
	226,132,146,3,3,76,115,104,226,134,176,6,2,76,115,116,114,111,107,197,129,2,3,76,
	116,226,137,170,3,3,77,97,112,226,164,133,3,2,77,99,121,208,156,11,3,77,101,100,
	105,117,109,83,112,97,99,101,226,129,159,9,3,77,101,108,108,105,110,116,114,102,226,132,
	179,3,4,77,102,114,240,157,148,144,9,3,77,105,110,117,115,80,108,117,115,226,136,147,
	4,4,77,111,112,102,240,157,149,132,4,3,77,115,99,114,226,132,179,2,2,77,117,206,
	156,4,2,78,74,99,121,208,138,6,2,78,97,99,117,116,101,197,131,6,2,78,99,97,
	114,111,110,197,135,6,2,78,99,101,100,105,108,197,133,3,2,78,99,121,208,157,19,3,
	78,101,103,97,116,105,118,101,77,101,100,105,117,109,83,112,97,99,101,226,128,139,18,3,
	78,101,103,97,116,105,118,101,84,104,105,99,107,83,112,97,99,101,226,128,139,17,3,78,
	101,103,97,116,105,118,101,84,104,105,110,83,112,97,99,101,226,128,139,21,3,78,101,103,
	97,116,105,118,101,86,101,114,121,84,104,105,110,83,112,97,99,101,226,128,139,20,3,78,
	101,115,116,101,100,71,114,101,97,116,101,114,71,114,101,97,116,101,114,226,137,171,14,3,
	78,101,115,116,101,100,76,101,115,115,76,101,115,115,226,137,170,7,1,78,101,119,76,105,
	110,101,10,3,4,78,102,114,240,157,148,145,7,3,78,111,66,114,101,97,107,226,129,160,
	16,2,78,111,110,66,114,101,97,107,105,110,103,83,112,97,99,101,194,160,4,3,78,111,
	112,102,226,132,149,3,3,78,111,116,226,171,172,12,3,78,111,116,67,111,110,103,114,117,
	101,110,116,226,137,162,9,3,78,111,116,67,117,112,67,97,112,226,137,173,20,3,78,111,
	116,68,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,226,136,166,10,3,78,
	111,116,69,108,101,109,101,110,116,226,136,137,8,3,78,111,116,69,113,117,97,108,226,137,
	160,13,5,78,111,116,69,113,117,97,108,84,105,108,100,101,226,137,130,204,184,9,3,78,
	111,116,69,120,105,115,116,115,226,136,132,10,3,78,111,116,71,114,101,97,116,101,114,226,
	137,175,15,3,78,111,116,71,114,101,97,116,101,114,69,113,117,97,108,226,137,177,19,5,
	78,111,116,71,114,101,97,116,101,114,70,117,108,108,69,113,117,97,108,226,137,167,204,184,
	17,5,78,111,116,71,114,101,97,116,101,114,71,114,101,97,116,101,114,226,137,171,204,184,
	14,3,78,111,116,71,114,101,97,116,101,114,76,101,115,115,226,137,185,20,5,78,111,116,
	71,114,101,97,116,101,114,83,108,97,110,116,69,113,117,97,108,226,169,190,204,184,15,3,
	78,111,116,71,114,101,97,116,101,114,84,105,108,100,101,226,137,181,15,5,78,111,116,72,
	117,109,112,68,111,119,110,72,117,109,112,226,137,142,204,184,12,5,78,111,116,72,117,109,
	112,69,113,117,97,108,226,137,143,204,184,15,3,78,111,116,76,101,102,116,84,114,105,97,
	110,103,108,101,226,139,170,18,5,78,111,116,76,101,102,116,84,114,105,97,110,103,108,101,
	66,97,114,226,167,143,204,184,20,3,78,111,116,76,101,102,116,84,114,105,97,110,103,108,
	101,69,113,117,97,108,226,139,172,7,3,78,111,116,76,101,115,115,226,137,174,12,3,78,
	111,116,76,101,115,115,69,113,117,97,108,226,137,176,14,3,78,111,116,76,101,115,115,71,
	114,101,97,116,101,114,226,137,184,11,5,78,111,116,76,101,115,115,76,101,115,115,226,137,
	170,204,184,17,5,78,111,116,76,101,115,115,83,108,97,110,116,69,113,117,97,108,226,169,
	189,204,184,12,3,78,111,116,76,101,115,115,84,105,108,100,101,226,137,180,23,5,78,111,
	116,78,101,115,116,101,100,71,114,101,97,116,101,114,71,114,101,97,116,101,114,226,170,162,
	204,184,17,5,78,111,116,78,101,115,116,101,100,76,101,115,115,76,101,115,115,226,170,161,
	204,184,11,3,78,111,116,80,114,101,99,101,100,101,115,226,138,128,16,5,78,111,116,80,
	114,101,99,101,100,101,115,69,113,117,97,108,226,170,175,204,184,21,3,78,111,116,80,114,
	101,99,101,100,101,115,83,108,97,110,116,69,113,117,97,108,226,139,160,17,3,78,111,116,
	82,101,118,101,114,115,101,69,108,101,109,101,110,116,226,136,140,16,3,78,111,116,82,105,
	103,104,116,84,114,105,97,110,103,108,101,226,139,171,19,5,78,111,116,82,105,103,104,116,
	84,114,105,97,110,103,108,101,66,97,114,226,167,144,204,184,21,3,78,111,116,82,105,103,
	104,116,84,114,105,97,110,103,108,101,69,113,117,97,108,226,139,173,15,5,78,111,116,83,
	113,117,97,114,101,83,117,98,115,101,116,226,138,143,204,184,20,3,78,111,116,83,113,117,
	97,114,101,83,117,98,115,101,116,69,113,117,97,108,226,139,162,17,5,78,111,116,83,113,
	117,97,114,101,83,117,112,101,114,115,101,116,226,138,144,204,184,22,3,78,111,116,83,113,
	117,97,114,101,83,117,112,101,114,115,101,116,69,113,117,97,108,226,139,163,9,6,78,111,
	116,83,117,98,115,101,116,226,138,130,226,131,146,14,3,78,111,116,83,117,98,115,101,116,
	69,113,117,97,108,226,138,136,11,3,78,111,116,83,117,99,99,101,101,100,115,226,138,129,
	16,5,78,111,116,83,117,99,99,101,101,100,115,69,113,117,97,108,226,170,176,204,184,21,
	3,78,111,116,83,117,99,99,101,101,100,115,83,108,97,110,116,69,113,117,97,108,226,139,
	161,16,5,78,111,116,83,117,99,99,101,101,100,115,84,105,108,100,101,226,137,191,204,184,
	11,6,78,111,116,83,117,112,101,114,115,101,116,226,138,131,226,131,146,16,3,78,111,116,
	83,117,112,101,114,115,101,116,69,113,117,97,108,226,138,137,8,3,78,111,116,84,105,108,
	100,101,226,137,129,13,3,78,111,116,84,105,108,100,101,69,113,117,97,108,226,137,132,17,
	3,78,111,116,84,105,108,100,101,70,117,108,108,69,113,117,97,108,226,137,135,13,3,78,
	111,116,84,105,108,100,101,84,105,108,100,101,226,137,137,14,3,78,111,116,86,101,114,116,
	105,99,97,108,66,97,114,226,136,164,4,4,78,115,99,114,240,157,146,169,2,2,78,117,
	206,157,3,2,79,99,121,208,158,6,2,79,100,98,108,97,99,197,144,3,4,79,102,114,
	240,157,148,146,5,2,79,109,97,99,114,197,140,5,2,79,109,101,103,97,206,169,7,2,
	79,109,105,99,114,111,110,206,159,4,4,79,111,112,102,240,157,149,134,20,3,79,112,101,
	110,67,117,114,108,121,68,111,117,98,108,101,81,117,111,116,101,226,128,156,14,3,79,112,
	101,110,67,117,114,108,121,81,117,111,116,101,226,128,152,2,3,79,114,226,169,148,4,4,
	79,115,99,114,240,157,146,170,6,3,79,116,105,109,101,115,226,168,183,7,3,79,118,101,
	114,66,97,114,226,128,190,9,3,79,118,101,114,66,114,97,99,101,226,143,158,11,3,79,
	118,101,114,66,114,97,99,107,101,116,226,142,180,15,3,79,118,101,114,80,97,114,101,110,
	116,104,101,115,105,115,226,143,156,8,3,80,97,114,116,105,97,108,68,226,136,130,3,2,
	80,99,121,208,159,3,4,80,102,114,240,157,148,147,3,2,80,104,105,206,166,2,2,80,
	105,206,160,9,2,80,108,117,115,77,105,110,117,115,194,177,13,3,80,111,105,110,99,97,
	114,101,112,108,97,110,101,226,132,140,4,3,80,111,112,102,226,132,153,2,3,80,114,226,
	170,187,8,3,80,114,101,99,101,100,101,115,226,137,186,13,3,80,114,101,99,101,100,101,
	115,69,113,117,97,108,226,170,175,18,3,80,114,101,99,101,100,101,115,83,108,97,110,116,
	69,113,117,97,108,226,137,188,13,3,80,114,101,99,101,100,101,115,84,105,108,100,101,226,
	137,190,7,3,80,114,111,100,117,99,116,226,136,143,10,3,80,114,111,112,111,114,116,105,
	111,110,226,136,183,12,3,80,114,111,112,111,114,116,105,111,110,97,108,226,136,157,4,4,
	80,115,99,114,240,157,146,171,3,2,80,115,105,206,168,3,4,81,102,114,240,157,148,148,
	4,3,81,111,112,102,226,132,154,4,4,81,115,99,114,240,157,146,172,5,3,82,66,97,
	114,114,226,164,144,6,2,82,97,99,117,116,101,197,148,4,3,82,97,110,103,226,159,171,
	4,3,82,97,114,114,226,134,160,6,3,82,97,114,114,116,108,226,164,150,6,2,82,99,
	97,114,111,110,197,152,6,2,82,99,101,100,105,108,197,150,3,2,82,99,121,208,160,2,
	3,82,101,226,132,156,14,3,82,101,118,101,114,115,101,69,108,101,109,101,110,116,226,136,
	139,18,3,82,101,118,101,114,115,101,69,113,117,105,108,105,98,114,105,117,109,226,135,139,
	20,3,82,101,118,101,114,115,101,85,112,69,113,117,105,108,105,98,114,105,117,109,226,165,
	175,3,3,82,102,114,226,132,156,3,2,82,104,111,206,161,17,3,82,105,103,104,116,65,
	110,103,108,101,66,114,97,99,107,101,116,226,159,169,10,3,82,105,103,104,116,65,114,114,
	111,119,226,134,146,13,3,82,105,103,104,116,65,114,114,111,119,66,97,114,226,135,165,19,
	3,82,105,103,104,116,65,114,114,111,119,76,101,102,116,65,114,114,111,119,226,135,132,12,
	3,82,105,103,104,116,67,101,105,108,105,110,103,226,140,137,18,3,82,105,103,104,116,68,
	111,117,98,108,101,66,114,97,99,107,101,116,226,159,167,18,3,82,105,103,104,116,68,111,
	119,110,84,101,101,86,101,99,116,111,114,226,165,157,15,3,82,105,103,104,116,68,111,119,
	110,86,101,99,116,111,114,226,135,130,18,3,82,105,103,104,116,68,111,119,110,86,101,99,
	116,111,114,66,97,114,226,165,149,10,3,82,105,103,104,116,70,108,111,111,114,226,140,139,
	8,3,82,105,103,104,116,84,101,101,226,138,162,13,3,82,105,103,104,116,84,101,101,65,
	114,114,111,119,226,134,166,14,3,82,105,103,104,116,84,101,101,86,101,99,116,111,114,226,
	165,155,13,3,82,105,103,104,116,84,114,105,97,110,103,108,101,226,138,179,16,3,82,105,
	103,104,116,84,114,105,97,110,103,108,101,66,97,114,226,167,144,18,3,82,105,103,104,116,
	84,114,105,97,110,103,108,101,69,113,117,97,108,226,138,181,17,3,82,105,103,104,116,85,
	112,68,111,119,110,86,101,99,116,111,114,226,165,143,16,3,82,105,103,104,116,85,112,84,
	101,101,86,101,99,116,111,114,226,165,156,13,3,82,105,103,104,116,85,112,86,101,99,116,
	111,114,226,134,190,16,3,82,105,103,104,116,85,112,86,101,99,116,111,114,66,97,114,226,
	165,148,11,3,82,105,103,104,116,86,101,99,116,111,114,226,135,128,14,3,82,105,103,104,
	116,86,101,99,116,111,114,66,97,114,226,165,147,10,3,82,105,103,104,116,97,114,114,111,
	119,226,135,146,4,3,82,111,112,102,226,132,157,12,3,82,111,117,110,100,73,109,112,108,
	105,101,115,226,165,176,11,3,82,114,105,103,104,116,97,114,114,111,119,226,135,155,4,3,
	82,115,99,114,226,132,155,3,3,82,115,104,226,134,177,11,3,82,117,108,101,68,101,108,
	97,121,101,100,226,167,180,6,2,83,72,67,72,99,121,208,169,4,2,83,72,99,121,208,
	168,6,2,83,79,70,84,99,121,208,172,6,2,83,97,99,117,116,101,197,154,2,3,83,
	99,226,170,188,6,2,83,99,101,100,105,108,197,158,5,2,83,99,105,114,99,197,156,3,
	2,83,99,121,208,161,3,4,83,102,114,240,157,148,150,14,3,83,104,111,114,116,68,111,
	119,110,65,114,114,111,119,226,134,147,14,3,83,104,111,114,116,76,101,102,116,65,114,114,
	111,119,226,134,144,15,3,83,104,111,114,116,82,105,103,104,116,65,114,114,111,119,226,134,
	146,12,3,83,104,111,114,116,85,112,65,114,114,111,119,226,134,145,5,2,83,105,103,109,
	97,206,163,11,3,83,109,97,108,108,67,105,114,99,108,101,226,136,152,4,4,83,111,112,
	102,240,157,149,138,4,3,83,113,114,116,226,136,154,6,3,83,113,117,97,114,101,226,150,
	161,18,3,83,113,117,97,114,101,73,110,116,101,114,115,101,99,116,105,111,110,226,138,147,
	12,3,83,113,117,97,114,101,83,117,98,115,101,116,226,138,143,17,3,83,113,117,97,114,
	101,83,117,98,115,101,116,69,113,117,97,108,226,138,145,14,3,83,113,117,97,114,101,83,
	117,112,101,114,115,101,116,226,138,144,19,3,83,113,117,97,114,101,83,117,112,101,114,115,
	101,116,69,113,117,97,108,226,138,146,11,3,83,113,117,97,114,101,85,110,105,111,110,226,
	138,148,4,4,83,115,99,114,240,157,146,174,4,3,83,116,97,114,226,139,134,3,3,83,
	117,98,226,139,144,6,3,83,117,98,115,101,116,226,139,144,11,3,83,117,98,115,101,116,
	69,113,117,97,108,226,138,134,8,3,83,117,99,99,101,101,100,115,226,137,187,13,3,83,
	117,99,99,101,101,100,115,69,113,117,97,108,226,170,176,18,3,83,117,99,99,101,101,100,
	115,83,108,97,110,116,69,113,117,97,108,226,137,189,13,3,83,117,99,99,101,101,100,115,
	84,105,108,100,101,226,137,191,8,3,83,117,99,104,84,104,97,116,226,136,139,3,3,83,
	117,109,226,136,145,3,3,83,117,112,226,139,145,8,3,83,117,112,101,114,115,101,116,226,
	138,131,13,3,83,117,112,101,114,115,101,116,69,113,117,97,108,226,138,135,6,3,83,117,
	112,115,101,116,226,139,145,5,3,84,82,65,68,69,226,132,162,5,2,84,83,72,99,121,
	208,139,4,2,84,83,99,121,208,166,3,1,84,97,98,9,3,2,84,97,117,206,164,6,
	2,84,99,97,114,111,110,197,164,6,2,84,99,101,100,105,108,197,162,3,2,84,99,121,
	208,162,3,4,84,102,114,240,157,148,151,9,3,84,104,101,114,101,102,111,114,101,226,136,
	180,5,2,84,104,101,116,97,206,152,10,6,84,104,105,99,107,83,112,97,99,101,226,129,
	159,226,128,138,9,3,84,104,105,110,83,112,97,99,101,226,128,137,5,3,84,105,108,100,
	101,226,136,188,10,3,84,105,108,100,101,69,113,117,97,108,226,137,131,14,3,84,105,108,
	100,101,70,117,108,108,69,113,117,97,108,226,137,133,10,3,84,105,108,100,101,84,105,108,
	100,101,226,137,136,4,4,84,111,112,102,240,157,149,139,9,3,84,114,105,112,108,101,68,
	111,116,226,131,155,4,4,84,115,99,114,240,157,146,175,6,2,84,115,116,114,111,107,197,
	166,4,3,85,97,114,114,226,134,159,8,3,85,97,114,114,111,99,105,114,226,165,137,5,
	2,85,98,114,99,121,208,142,6,2,85,98,114,101,118,101,197,172,3,2,85,99,121,208,
	163,6,2,85,100,98,108,97,99,197,176,3,4,85,102,114,240,157,148,152,5,2,85,109,
	97,99,114,197,170,8,1,85,110,100,101,114,66,97,114,95,10,3,85,110,100,101,114,66,
	114,97,99,101,226,143,159,12,3,85,110,100,101,114,66,114,97,99,107,101,116,226,142,181,
	16,3,85,110,100,101,114,80,97,114,101,110,116,104,101,115,105,115,226,143,157,5,3,85,
	110,105,111,110,226,139,131,9,3,85,110,105,111,110,80,108,117,115,226,138,142,5,2,85,
	111,103,111,110,197,178,4,4,85,111,112,102,240,157,149,140,7,3,85,112,65,114,114,111,
	119,226,134,145,10,3,85,112,65,114,114,111,119,66,97,114,226,164,146,16,3,85,112,65,
	114,114,111,119,68,111,119,110,65,114,114,111,119,226,135,133,11,3,85,112,68,111,119,110,
	65,114,114,111,119,226,134,149,13,3,85,112,69,113,117,105,108,105,98,114,105,117,109,226,
	165,174,5,3,85,112,84,101,101,226,138,165,10,3,85,112,84,101,101,65,114,114,111,119,
	226,134,165,7,3,85,112,97,114,114,111,119,226,135,145,11,3,85,112,100,111,119,110,97,
	114,114,111,119,226,135,149,14,3,85,112,112,101,114,76,101,102,116,65,114,114,111,119,226,
	134,150,15,3,85,112,112,101,114,82,105,103,104,116,65,114,114,111,119,226,134,151,4,2,
	85,112,115,105,207,146,7,2,85,112,115,105,108,111,110,206,165,5,2,85,114,105,110,103,
	197,174,4,4,85,115,99,114,240,157,146,176,6,2,85,116,105,108,100,101,197,168,5,3,
	86,68,97,115,104,226,138,171,4,3,86,98,97,114,226,171,171,3,2,86,99,121,208,146,
	5,3,86,100,97,115,104,226,138,169,6,3,86,100,97,115,104,108,226,171,166,3,3,86,
	101,101,226,139,129,6,3,86,101,114,98,97,114,226,128,150,4,3,86,101,114,116,226,128,
	150,11,3,86,101,114,116,105,99,97,108,66,97,114,226,136,163,12,1,86,101,114,116,105,
	99,97,108,76,105,110,101,124,17,3,86,101,114,116,105,99,97,108,83,101,112,97,114,97,
	116,111,114,226,157,152,13,3,86,101,114,116,105,99,97,108,84,105,108,100,101,226,137,128,
	13,3,86,101,114,121,84,104,105,110,83,112,97,99,101,226,128,138,3,4,86,102,114,240,
	157,148,153,4,4,86,111,112,102,240,157,149,141,4,4,86,115,99,114,240,157,146,177,6,
	3,86,118,100,97,115,104,226,138,170,5,2,87,99,105,114,99,197,180,5,3,87,101,100,
	103,101,226,139,128,3,4,87,102,114,240,157,148,154,4,4,87,111,112,102,240,157,149,142,
	4,4,87,115,99,114,240,157,146,178,3,4,88,102,114,240,157,148,155,2,2,88,105,206,
	158,4,4,88,111,112,102,240,157,149,143,4,4,88,115,99,114,240,157,146,179,4,2,89,
	65,99,121,208,175,4,2,89,73,99,121,208,135,4,2,89,85,99,121,208,174,5,2,89,
	99,105,114,99,197,182,3,2,89,99,121,208,171,3,4,89,102,114,240,157,148,156,4,4,
	89,111,112,102,240,157,149,144,4,4,89,115,99,114,240,157,146,180,4,2,90,72,99,121,
	208,150,6,2,90,97,99,117,116,101,197,185,6,2,90,99,97,114,111,110,197,189,3,2,
	90,99,121,208,151,4,2,90,100,111,116,197,187,14,3,90,101,114,111,87,105,100,116,104,
	83,112,97,99,101,226,128,139,4,2,90,101,116,97,206,150,3,3,90,102,114,226,132,168,
	4,3,90,111,112,102,226,132,164,4,4,90,115,99,114,240,157,146,181,6,2,97,98,114,
	101,118,101,196,131,2,3,97,99,226,136,190,3,5,97,99,69,226,136,190,204,179,3,3,
	97,99,100,226,136,191,3,2,97,99,121,208,176,2,3,97,102,226,129,161,3,4,97,102,
	114,240,157,148,158,7,3,97,108,101,102,115,121,109,226,132,181,5,3,97,108,101,112,104,
	226,132,181,5,2,97,109,97,99,114,196,129,5,3,97,109,97,108,103,226,168,191,3,3,
	97,110,100,226,136,167,6,3,97,110,100,97,110,100,226,169,149,4,3,97,110,100,100,226,
	169,156,8,3,97,110,100,115,108,111,112,101,226,169,152,4,3,97,110,100,118,226,169,154,
	3,3,97,110,103,226,136,160,4,3,97,110,103,101,226,166,164,5,3,97,110,103,108,101,
	226,136,160,6,3,97,110,103,109,115,100,226,136,161,8,3,97,110,103,109,115,100,97,97,
	226,166,168,8,3,97,110,103,109,115,100,97,98,226,166,169,8,3,97,110,103,109,115,100,
	97,99,226,166,170,8,3,97,110,103,109,115,100,97,100,226,166,171,8,3,97,110,103,109,
	115,100,97,101,226,166,172,8,3,97,110,103,109,115,100,97,102,226,166,173,8,3,97,110,
	103,109,115,100,97,103,226,166,174,8,3,97,110,103,109,115,100,97,104,226,166,175,5,3,
	97,110,103,114,116,226,136,159,7,3,97,110,103,114,116,118,98,226,138,190,8,3,97,110,
	103,114,116,118,98,100,226,166,157,6,3,97,110,103,115,112,104,226,136,162,5,2,97,110,
	103,115,116,195,133,7,3,97,110,103,122,97,114,114,226,141,188,5,2,97,111,103,111,110,
	196,133,4,4,97,111,112,102,240,157,149,146,2,3,97,112,226,137,136,3,3,97,112,69,
	226,169,176,6,3,97,112,97,99,105,114,226,169,175,3,3,97,112,101,226,137,138,4,3,
	97,112,105,100,226,137,139,6,3,97,112,112,114,111,120,226,137,136,8,3,97,112,112,114,
	111,120,101,113,226,137,138,4,4,97,115,99,114,240,157,146,182,3,1,97,115,116,42,7,
	3,97,115,121,109,112,101,113,226,137,141,8,3,97,119,99,111,110,105,110,116,226,136,179,
	5,3,97,119,105,110,116,226,168,145,4,3,98,78,111,116,226,171,173,8,3,98,97,99,
	107,99,111,110,103,226,137,140,11,2,98,97,99,107,101,112,115,105,108,111,110,207,182,9,
	3,98,97,99,107,112,114,105,109,101,226,128,181,7,3,98,97,99,107,115,105,109,226,136,
	189,9,3,98,97,99,107,115,105,109,101,113,226,139,141,6,3,98,97,114,118,101,101,226,
	138,189,6,3,98,97,114,119,101,100,226,140,133,8,3,98,97,114,119,101,100,103,101,226,
	140,133,4,3,98,98,114,107,226,142,181,8,3,98,98,114,107,116,98,114,107,226,142,182,
	5,3,98,99,111,110,103,226,137,140,3,2,98,99,121,208,177,6,3,98,101,99,97,117,
	115,226,136,181,7,3,98,101,99,97,117,115,101,226,136,181,7,3,98,101,109,112,116,121,
	118,226,166,176,5,2,98,101,112,115,105,207,182,6,3,98,101,114,110,111,117,226,132,172,
	4,3,98,101,116,104,226,132,182,7,3,98,101,116,119,101,101,110,226,137,172,3,4,98,
	102,114,240,157,148,159,6,3,98,105,103,99,97,112,226,139,130,7,3,98,105,103,99,105,
	114,99,226,151,175,6,3,98,105,103,99,117,112,226,139,131,7,3,98,105,103,111,100,111,
	116,226,168,128,8,3,98,105,103,111,112,108,117,115,226,168,129,9,3,98,105,103,111,116,
	105,109,101,115,226,168,130,8,3,98,105,103,115,113,99,117,112,226,168,134,7,3,98,105,
	103,115,116,97,114,226,152,133,15,3,98,105,103,116,114,105,97,110,103,108,101,100,111,119,
	110,226,150,189,13,3,98,105,103,116,114,105,97,110,103,108,101,117,112,226,150,179,8,3,
	98,105,103,117,112,108,117,115,226,168,132,6,3,98,105,103,118,101,101,226,139,129,8,3,
	98,105,103,119,101,100,103,101,226,139,128,6,3,98,107,97,114,111,119,226,164,141,12,3,
	98,108,97,99,107,108,111,122,101,110,103,101,226,167,171,11,3,98,108,97,99,107,115,113,
	117,97,114,101,226,150,170,13,3,98,108,97,99,107,116,114,105,97,110,103,108,101,226,150,
	180,17,3,98,108,97,99,107,116,114,105,97,110,103,108,101,100,111,119,110,226,150,190,17,
	3,98,108,97,99,107,116,114,105,97,110,103,108,101,108,101,102,116,226,151,130,18,3,98,
	108,97,99,107,116,114,105,97,110,103,108,101,114,105,103,104,116,226,150,184,5,3,98,108,
	97,110,107,226,144,163,5,3,98,108,107,49,50,226,150,146,5,3,98,108,107,49,52,226,
	150,145,5,3,98,108,107,51,52,226,150,147,5,3,98,108,111,99,107,226,150,136,3,4,
	98,110,101,61,226,131,165,7,6,98,110,101,113,117,105,118,226,137,161,226,131,165,4,3,
	98,110,111,116,226,140,144,4,4,98,111,112,102,240,157,149,147,3,3,98,111,116,226,138,
	165,6,3,98,111,116,116,111,109,226,138,165,6,3,98,111,119,116,105,101,226,139,136,5,
	3,98,111,120,68,76,226,149,151,5,3,98,111,120,68,82,226,149,148,5,3,98,111,120,
	68,108,226,149,150,5,3,98,111,120,68,114,226,149,147,4,3,98,111,120,72,226,149,144,
	5,3,98,111,120,72,68,226,149,166,5,3,98,111,120,72,85,226,149,169,5,3,98,111,
	120,72,100,226,149,164,5,3,98,111,120,72,117,226,149,167,5,3,98,111,120,85,76,226,
	149,157,5,3,98,111,120,85,82,226,149,154,5,3,98,111,120,85,108,226,149,156,5,3,
	98,111,120,85,114,226,149,153,4,3,98,111,120,86,226,149,145,5,3,98,111,120,86,72,
	226,149,172,5,3,98,111,120,86,76,226,149,163,5,3,98,111,120,86,82,226,149,160,5,
	3,98,111,120,86,104,226,149,171,5,3,98,111,120,86,108,226,149,162,5,3,98,111,120,
	86,114,226,149,159,6,3,98,111,120,98,111,120,226,167,137,5,3,98,111,120,100,76,226,
	149,149,5,3,98,111,120,100,82,226,149,146,5,3,98,111,120,100,108,226,148,144,5,3,
	98,111,120,100,114,226,148,140,4,3,98,111,120,104,226,148,128,5,3,98,111,120,104,68,
	226,149,165,5,3,98,111,120,104,85,226,149,168,5,3,98,111,120,104,100,226,148,172,5,
	3,98,111,120,104,117,226,148,180,8,3,98,111,120,109,105,110,117,115,226,138,159,7,3,
	98,111,120,112,108,117,115,226,138,158,8,3,98,111,120,116,105,109,101,115,226,138,160,5,
	3,98,111,120,117,76,226,149,155,5,3,98,111,120,117,82,226,149,152,5,3,98,111,120,
	117,108,226,148,152,5,3,98,111,120,117,114,226,148,148,4,3,98,111,120,118,226,148,130,
	5,3,98,111,120,118,72,226,149,170,5,3,98,111,120,118,76,226,149,161,5,3,98,111,
	120,118,82,226,149,158,5,3,98,111,120,118,104,226,148,188,5,3,98,111,120,118,108,226,
	148,164,5,3,98,111,120,118,114,226,148,156,6,3,98,112,114,105,109,101,226,128,181,5,
	2,98,114,101,118,101,203,152,4,4,98,115,99,114,240,157,146,183,5,3,98,115,101,109,
	105,226,129,143,4,3,98,115,105,109,226,136,189,5,3,98,115,105,109,101,226,139,141,4,
	1,98,115,111,108,92,5,3,98,115,111,108,98,226,167,133,8,3,98,115,111,108,104,115,
	117,98,226,159,136,6,3,98,117,108,108,101,116,226,128,162,4,3,98,117,109,112,226,137,
	142,5,3,98,117,109,112,69,226,170,174,5,3,98,117,109,112,101,226,137,143,6,3,98,
	117,109,112,101,113,226,137,143,6,2,99,97,99,117,116,101,196,135,3,3,99,97,112,226,
	136,169,6,3,99,97,112,97,110,100,226,169,132,8,3,99,97,112,98,114,99,117,112,226,
	169,137,6,3,99,97,112,99,97,112,226,169,139,6,3,99,97,112,99,117,112,226,169,135,
	6,3,99,97,112,100,111,116,226,169,128,4,6,99,97,112,115,226,136,169,239,184,128,5,
	3,99,97,114,101,116,226,129,129,5,2,99,97,114,111,110,203,135,5,3,99,99,97,112,
	115,226,169,141,6,2,99,99,97,114,111,110,196,141,5,2,99,99,105,114,99,196,137,5,
	3,99,99,117,112,115,226,169,140,7,3,99,99,117,112,115,115,109,226,169,144,4,2,99,
	100,111,116,196,139,7,3,99,101,109,112,116,121,118,226,166,178,9,2,99,101,110,116,101,
	114,100,111,116,194,183,3,4,99,102,114,240,157,148,160,4,2,99,104,99,121,209,135,3,
	2,99,104,105,207,135,3,3,99,105,114,226,151,139,4,3,99,105,114,69,226,167,131,6,
	3,99,105,114,99,101,113,226,137,151,15,3,99,105,114,99,108,101,97,114,114,111,119,108,
	101,102,116,226,134,186,16,3,99,105,114,99,108,101,97,114,114,111,119,114,105,103,104,116,
	226,134,187,8,2,99,105,114,99,108,101,100,82,194,174,8,3,99,105,114,99,108,101,100,
	83,226,147,136,10,3,99,105,114,99,108,101,100,97,115,116,226,138,155,11,3,99,105,114,
	99,108,101,100,99,105,114,99,226,138,154,11,3,99,105,114,99,108,101,100,100,97,115,104,
	226,138,157,4,3,99,105,114,101,226,137,151,8,3,99,105,114,102,110,105,110,116,226,168,
	144,6,3,99,105,114,109,105,100,226,171,175,7,3,99,105,114,115,99,105,114,226,167,130,
	8,3,99,108,117,98,115,117,105,116,226,153,163,5,1,99,111,108,111,110,58,6,3,99,
	111,108,111,110,101,226,137,148,7,3,99,111,108,111,110,101,113,226,137,148,5,1,99,111,
	109,109,97,44,6,1,99,111,109,109,97,116,64,4,3,99,111,109,112,226,136,129,6,3,
	99,111,109,112,102,110,226,136,152,10,3,99,111,109,112,108,101,109,101,110,116,226,136,129,
	9,3,99,111,109,112,108,101,120,101,115,226,132,130,4,3,99,111,110,103,226,137,133,7,
	3,99,111,110,103,100,111,116,226,169,173,6,3,99,111,110,105,110,116,226,136,174,4,4,
	99,111,112,102,240,157,149,148,6,3,99,111,112,114,111,100,226,136,144,6,3,99,111,112,
	121,115,114,226,132,151,5,3,99,114,97,114,114,226,134,181,4,4,99,115,99,114,240,157,
	146,184,4,3,99,115,117,98,226,171,143,5,3,99,115,117,98,101,226,171,145,4,3,99,
	115,117,112,226,171,144,5,3,99,115,117,112,101,226,171,146,5,3,99,116,100,111,116,226,
	139,175,7,3,99,117,100,97,114,114,108,226,164,184,7,3,99,117,100,97,114,114,114,226,
	164,181,5,3,99,117,101,112,114,226,139,158,5,3,99,117,101,115,99,226,139,159,6,3,
	99,117,108,97,114,114,226,134,182,7,3,99,117,108,97,114,114,112,226,164,189,3,3,99,
	117,112,226,136,170,8,3,99,117,112,98,114,99,97,112,226,169,136,6,3,99,117,112,99,
	97,112,226,169,134,6,3,99,117,112,99,117,112,226,169,138,6,3,99,117,112,100,111,116,
	226,138,141,5,3,99,117,112,111,114,226,169,133,4,6,99,117,112,115,226,136,170,239,184,
	128,6,3,99,117,114,97,114,114,226,134,183,7,3,99,117,114,97,114,114,109,226,164,188,
	11,3,99,117,114,108,121,101,113,112,114,101,99,226,139,158,11,3,99,117,114,108,121,101,
	113,115,117,99,99,226,139,159,8,3,99,117,114,108,121,118,101,101,226,139,142,10,3,99,
	117,114,108,121,119,101,100,103,101,226,139,143,14,3,99,117,114,118,101,97,114,114,111,119,
	108,101,102,116,226,134,182,15,3,99,117,114,118,101,97,114,114,111,119,114,105,103,104,116,
	226,134,183,5,3,99,117,118,101,101,226,139,142,5,3,99,117,119,101,100,226,139,143,8,
	3,99,119,99,111,110,105,110,116,226,136,178,5,3,99,119,105,110,116,226,136,177,6,3,
	99,121,108,99,116,121,226,140,173,4,3,100,65,114,114,226,135,147,4,3,100,72,97,114,
	226,165,165,6,3,100,97,108,101,116,104,226,132,184,4,3,100,97,115,104,226,128,144,5,
	3,100,97,115,104,118,226,138,163,7,3,100,98,107,97,114,111,119,226,164,143,5,2,100,
	98,108,97,99,203,157,6,2,100,99,97,114,111,110,196,143,3,2,100,99,121,208,180,2,
	3,100,100,226,133,134,7,3,100,100,97,103,103,101,114,226,128,161,5,3,100,100,97,114,
	114,226,135,138,7,3,100,100,111,116,115,101,113,226,169,183,7,3,100,101,109,112,116,121,
	118,226,166,177,6,3,100,102,105,115,104,116,226,165,191,3,4,100,102,114,240,157,148,161,
	5,3,100,104,97,114,108,226,135,131,5,3,100,104,97,114,114,226,135,130,4,3,100,105,
	97,109,226,139,132,7,3,100,105,97,109,111,110,100,226,139,132,11,3,100,105,97,109,111,
	110,100,115,117,105,116,226,153,166,3,2,100,105,101,194,168,7,2,100,105,103,97,109,109,
	97,207,157,5,3,100,105,115,105,110,226,139,178,3,2,100,105,118,195,183,13,3,100,105,
	118,105,100,101,111,110,116,105,109,101,115,226,139,135,6,3,100,105,118,111,110,120,226,139,
	135,4,2,100,106,99,121,209,146,6,3,100,108,99,111,114,110,226,140,158,6,3,100,108,
	99,114,111,112,226,140,141,6,1,100,111,108,108,97,114,36,4,4,100,111,112,102,240,157,
	149,149,3,2,100,111,116,203,153,5,3,100,111,116,101,113,226,137,144,8,3,100,111,116,
	101,113,100,111,116,226,137,145,8,3,100,111,116,109,105,110,117,115,226,136,184,7,3,100,
	111,116,112,108,117,115,226,136,148,9,3,100,111,116,115,113,117,97,114,101,226,138,161,14,
	3,100,111,117,98,108,101,98,97,114,119,101,100,103,101,226,140,134,9,3,100,111,119,110,
	97,114,114,111,119,226,134,147,14,3,100,111,119,110,100,111,119,110,97,114,114,111,119,115,
	226,135,138,15,3,100,111,119,110,104,97,114,112,111,111,110,108,101,102,116,226,135,131,16,
	3,100,111,119,110,104,97,114,112,111,111,110,114,105,103,104,116,226,135,130,8,3,100,114,
	98,107,97,114,111,119,226,164,144,6,3,100,114,99,111,114,110,226,140,159,6,3,100,114,
	99,114,111,112,226,140,140,4,4,100,115,99,114,240,157,146,185,4,2,100,115,99,121,209,
	149,4,3,100,115,111,108,226,167,182,6,2,100,115,116,114,111,107,196,145,5,3,100,116,
	100,111,116,226,139,177,4,3,100,116,114,105,226,150,191,5,3,100,116,114,105,102,226,150,
	190,5,3,100,117,97,114,114,226,135,181,5,3,100,117,104,97,114,226,165,175,7,3,100,
	119,97,110,103,108,101,226,166,166,4,2,100,122,99,121,209,159,8,3,100,122,105,103,114,
	97,114,114,226,159,191,5,3,101,68,68,111,116,226,169,183,4,3,101,68,111,116,226,137,
	145,6,3,101,97,115,116,101,114,226,169,174,6,2,101,99,97,114,111,110,196,155,4,3,
	101,99,105,114,226,137,150,6,3,101,99,111,108,111,110,226,137,149,3,2,101,99,121,209,
	141,4,2,101,100,111,116,196,151,2,3,101,101,226,133,135,5,3,101,102,68,111,116,226,
	137,146,3,4,101,102,114,240,157,148,162,2,3,101,103,226,170,154,3,3,101,103,115,226,
	170,150,6,3,101,103,115,100,111,116,226,170,152,2,3,101,108,226,170,153,8,3,101,108,
	105,110,116,101,114,115,226,143,167,3,3,101,108,108,226,132,147,3,3,101,108,115,226,170,
	149,6,3,101,108,115,100,111,116,226,170,151,5,2,101,109,97,99,114,196,147,5,3,101,
	109,112,116,121,226,136,133,8,3,101,109,112,116,121,115,101,116,226,136,133,6,3,101,109,
	112,116,121,118,226,136,133,6,3,101,109,115,112,49,51,226,128,132,6,3,101,109,115,112,
	49,52,226,128,133,3,2,101,110,103,197,139,5,2,101,111,103,111,110,196,153,4,4,101,
	111,112,102,240,157,149,150,4,3,101,112,97,114,226,139,149,6,3,101,112,97,114,115,108,
	226,167,163,5,3,101,112,108,117,115,226,169,177,4,2,101,112,115,105,206,181,7,2,101,
	112,115,105,108,111,110,206,181,5,2,101,112,115,105,118,207,181,6,3,101,113,99,105,114,
	99,226,137,150,7,3,101,113,99,111,108,111,110,226,137,149,5,3,101,113,115,105,109,226,
	137,130,10,3,101,113,115,108,97,110,116,103,116,114,226,170,150,11,3,101,113,115,108,97,
	110,116,108,101,115,115,226,170,149,6,1,101,113,117,97,108,115,61,6,3,101,113,117,101,
	115,116,226,137,159,7,3,101,113,117,105,118,68,68,226,169,184,8,3,101,113,118,112,97,
	114,115,108,226,167,165,5,3,101,114,68,111,116,226,137,147,5,3,101,114,97,114,114,226,
	165,177,4,3,101,115,99,114,226,132,175,5,3,101,115,100,111,116,226,137,144,4,3,101,
	115,105,109,226,137,130,3,2,101,116,97,206,183,4,1,101,120,99,108,33,5,3,101,120,
	105,115,116,226,136,131,11,3,101,120,112,101,99,116,97,116,105,111,110,226,132,176,12,3,
	101,120,112,111,110,101,110,116,105,97,108,101,226,133,135,13,3,102,97,108,108,105,110,103,
	100,111,116,115,101,113,226,137,146,3,2,102,99,121,209,132,6,3,102,101,109,97,108,101,
	226,153,128,6,3,102,102,105,108,105,103,239,172,131,5,3,102,102,108,105,103,239,172,128,
	6,3,102,102,108,108,105,103,239,172,132,3,4,102,102,114,240,157,148,163,5,3,102,105,
	108,105,103,239,172,129,5,2,102,106,108,105,103,102,106,4,3,102,108,97,116,226,153,173,
	5,3,102,108,108,105,103,239,172,130,5,3,102,108,116,110,115,226,150,177,4,4,102,111,
	112,102,240,157,149,151,6,3,102,111,114,97,108,108,226,136,128,4,3,102,111,114,107,226,
	139,148,5,3,102,111,114,107,118,226,171,153,8,3,102,112,97,114,116,105,110,116,226,168,
	141,6,3,102,114,97,99,49,51,226,133,147,6,3,102,114,97,99,49,53,226,133,149,6,
	3,102,114,97,99,49,54,226,133,153,6,3,102,114,97,99,49,56,226,133,155,6,3,102,
	114,97,99,50,51,226,133,148,6,3,102,114,97,99,50,53,226,133,150,6,3,102,114,97,
	99,51,53,226,133,151,6,3,102,114,97,99,51,56,226,133,156,6,3,102,114,97,99,52,
	53,226,133,152,6,3,102,114,97,99,53,54,226,133,154,6,3,102,114,97,99,53,56,226,
	133,157,6,3,102,114,97,99,55,56,226,133,158,5,3,102,114,97,115,108,226,129,132,5,
	3,102,114,111,119,110,226,140,162,4,4,102,115,99,114,240,157,146,187,2,3,103,69,226,
	137,167,3,3,103,69,108,226,170,140,6,2,103,97,99,117,116,101,199,181,6,2,103,97,
	109,109,97,100,207,157,3,3,103,97,112,226,170,134,6,2,103,98,114,101,118,101,196,159,
	5,2,103,99,105,114,99,196,157,3,2,103,99,121,208,179,4,2,103,100,111,116,196,161,
	3,3,103,101,108,226,139,155,3,3,103,101,113,226,137,165,4,3,103,101,113,113,226,137,
	167,8,3,103,101,113,115,108,97,110,116,226,169,190,3,3,103,101,115,226,169,190,5,3,
	103,101,115,99,99,226,170,169,6,3,103,101,115,100,111,116,226,170,128,7,3,103,101,115,
	100,111,116,111,226,170,130,8,3,103,101,115,100,111,116,111,108,226,170,132,4,6,103,101,
	115,108,226,139,155,239,184,128,6,3,103,101,115,108,101,115,226,170,148,3,4,103,102,114,
	240,157,148,164,2,3,103,103,226,137,171,3,3,103,103,103,226,139,153,5,3,103,105,109,
	101,108,226,132,183,4,2,103,106,99,121,209,147,2,3,103,108,226,137,183,3,3,103,108,
	69,226,170,146,3,3,103,108,97,226,170,165,3,3,103,108,106,226,170,164,3,3,103,110,
	69,226,137,169,4,3,103,110,97,112,226,170,138,8,3,103,110,97,112,112,114,111,120,226,
	170,138,3,3,103,110,101,226,170,136,4,3,103,110,101,113,226,170,136,5,3,103,110,101,
	113,113,226,137,169,5,3,103,110,115,105,109,226,139,167,4,4,103,111,112,102,240,157,149,
	152,5,1,103,114,97,118,101,96,4,3,103,115,99,114,226,132,138,4,3,103,115,105,109,
	226,137,179,5,3,103,115,105,109,101,226,170,142,5,3,103,115,105,109,108,226,170,144,4,
	3,103,116,99,99,226,170,167,5,3,103,116,99,105,114,226,169,186,5,3,103,116,100,111,
	116,226,139,151,6,3,103,116,108,80,97,114,226,166,149,7,3,103,116,113,117,101,115,116,
	226,169,188,9,3,103,116,114,97,112,112,114,111,120,226,170,134,6,3,103,116,114,97,114,
	114,226,165,184,6,3,103,116,114,100,111,116,226,139,151,9,3,103,116,114,101,113,108,101,
	115,115,226,139,155,10,3,103,116,114,101,113,113,108,101,115,115,226,170,140,7,3,103,116,
	114,108,101,115,115,226,137,183,6,3,103,116,114,115,105,109,226,137,179,9,6,103,118,101,
	114,116,110,101,113,113,226,137,169,239,184,128,4,6,103,118,110,69,226,137,169,239,184,128,
	4,3,104,65,114,114,226,135,148,6,3,104,97,105,114,115,112,226,128,138,4,2,104,97,
	108,102,194,189,6,3,104,97,109,105,108,116,226,132,139,6,2,104,97,114,100,99,121,209,
	138,7,3,104,97,114,114,99,105,114,226,165,136,5,3,104,97,114,114,119,226,134,173,4,
	3,104,98,97,114,226,132,143,5,2,104,99,105,114,99,196,165,9,3,104,101,97,114,116,
	115,117,105,116,226,153,165,6,3,104,101,114,99,111,110,226,138,185,3,4,104,102,114,240,
	157,148,165,8,3,104,107,115,101,97,114,111,119,226,164,165,8,3,104,107,115,119,97,114,
	111,119,226,164,166,5,3,104,111,97,114,114,226,135,191,6,3,104,111,109,116,104,116,226,
	136,187,13,3,104,111,111,107,108,101,102,116,97,114,114,111,119,226,134,169,14,3,104,111,
	111,107,114,105,103,104,116,97,114,114,111,119,226,134,170,4,4,104,111,112,102,240,157,149,
	153,6,3,104,111,114,98,97,114,226,128,149,4,4,104,115,99,114,240,157,146,189,6,3,
	104,115,108,97,115,104,226,132,143,6,2,104,115,116,114,111,107,196,167,6,3,104,121,98,
	117,108,108,226,129,131,6,3,104,121,112,104,101,110,226,128,144,2,3,105,99,226,129,163,
	3,2,105,99,121,208,184,4,2,105,101,99,121,208,181,3,3,105,102,102,226,135,148,3,
	4,105,102,114,240,157,148,166,2,3,105,105,226,133,136,6,3,105,105,105,105,110,116,226,
	168,140,5,3,105,105,105,110,116,226,136,173,6,3,105,105,110,102,105,110,226,167,156,5,
	3,105,105,111,116,97,226,132,169,5,2,105,106,108,105,103,196,179,5,2,105,109,97,99,
	114,196,171,5,3,105,109,97,103,101,226,132,145,8,3,105,109,97,103,108,105,110,101,226,
	132,144,8,3,105,109,97,103,112,97,114,116,226,132,145,5,2,105,109,97,116,104,196,177,
	4,3,105,109,111,102,226,138,183,5,2,105,109,112,101,100,198,181,2,3,105,110,226,136,
	136,6,3,105,110,99,97,114,101,226,132,133,8,3,105,110,102,105,110,116,105,101,226,167,
	157,6,2,105,110,111,100,111,116,196,177,3,3,105,110,116,226,136,171,6,3,105,110,116,
	99,97,108,226,138,186,8,3,105,110,116,101,103,101,114,115,226,132,164,8,3,105,110,116,
	101,114,99,97,108,226,138,186,8,3,105,110,116,108,97,114,104,107,226,168,151,7,3,105,
	110,116,112,114,111,100,226,168,188,4,2,105,111,99,121,209,145,5,2,105,111,103,111,110,
	196,175,4,4,105,111,112,102,240,157,149,154,4,2,105,111,116,97,206,185,5,3,105,112,
	114,111,100,226,168,188,4,4,105,115,99,114,240,157,146,190,4,3,105,115,105,110,226,136,
	136,5,3,105,115,105,110,69,226,139,185,7,3,105,115,105,110,100,111,116,226,139,181,5,
	3,105,115,105,110,115,226,139,180,6,3,105,115,105,110,115,118,226,139,179,5,3,105,115,
	105,110,118,226,136,136,2,3,105,116,226,129,162,6,2,105,116,105,108,100,101,196,169,5,
	2,105,117,107,99,121,209,150,5,2,106,99,105,114,99,196,181,3,2,106,99,121,208,185,
	3,4,106,102,114,240,157,148,167,5,2,106,109,97,116,104,200,183,4,4,106,111,112,102,
	240,157,149,155,4,4,106,115,99,114,240,157,146,191,6,2,106,115,101,114,99,121,209,152,
	5,2,106,117,107,99,121,209,148,5,2,107,97,112,112,97,206,186,6,2,107,97,112,112,
	97,118,207,176,6,2,107,99,101,100,105,108,196,183,3,2,107,99,121,208,186,3,4,107,
	102,114,240,157,148,168,6,2,107,103,114,101,101,110,196,184,4,2,107,104,99,121,209,133,
	4,2,107,106,99,121,209,156,4,4,107,111,112,102,240,157,149,156,4,4,107,115,99,114,
	240,157,147,128,5,3,108,65,97,114,114,226,135,154,4,3,108,65,114,114,226,135,144,6,
	3,108,65,116,97,105,108,226,164,155,5,3,108,66,97,114,114,226,164,142,2,3,108,69,
	226,137,166,3,3,108,69,103,226,170,139,4,3,108,72,97,114,226,165,162,6,2,108,97,
	99,117,116,101,196,186,8,3,108,97,101,109,112,116,121,118,226,166,180,6,3,108,97,103,
	114,97,110,226,132,146,4,3,108,97,110,103,226,159,168,5,3,108,97,110,103,100,226,166,
	145,6,3,108,97,110,103,108,101,226,159,168,3,3,108,97,112,226,170,133,5,3,108,97,
	114,114,98,226,135,164,7,3,108,97,114,114,98,102,115,226,164,159,6,3,108,97,114,114,
	102,115,226,164,157,6,3,108,97,114,114,104,107,226,134,169,6,3,108,97,114,114,108,112,
	226,134,171,6,3,108,97,114,114,112,108,226,164,185,7,3,108,97,114,114,115,105,109,226,
	165,179,6,3,108,97,114,114,116,108,226,134,162,3,3,108,97,116,226,170,171,6,3,108,
	97,116,97,105,108,226,164,153,4,3,108,97,116,101,226,170,173,5,6,108,97,116,101,115,
	226,170,173,239,184,128,5,3,108,98,97,114,114,226,164,140,5,3,108,98,98,114,107,226,
	157,178,6,1,108,98,114,97,99,101,123,6,1,108,98,114,97,99,107,91,5,3,108,98,
	114,107,101,226,166,139,7,3,108,98,114,107,115,108,100,226,166,143,7,3,108,98,114,107,
	115,108,117,226,166,141,6,2,108,99,97,114,111,110,196,190,6,2,108,99,101,100,105,108,
	196,188,5,3,108,99,101,105,108,226,140,136,4,1,108,99,117,98,123,3,2,108,99,121,
	208,187,4,3,108,100,99,97,226,164,182,6,3,108,100,113,117,111,114,226,128,158,7,3,
	108,100,114,100,104,97,114,226,165,167,8,3,108,100,114,117,115,104,97,114,226,165,139,4,
	3,108,100,115,104,226,134,178,9,3,108,101,102,116,97,114,114,111,119,226,134,144,13,3,
	108,101,102,116,97,114,114,111,119,116,97,105,108,226,134,162,15,3,108,101,102,116,104,97,
	114,112,111,111,110,100,111,119,110,226,134,189,13,3,108,101,102,116,104,97,114,112,111,111,
	110,117,112,226,134,188,14,3,108,101,102,116,108,101,102,116,97,114,114,111,119,115,226,135,
	135,14,3,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,134,148,15,3,108,101,
	102,116,114,105,103,104,116,97,114,114,111,119,115,226,135,134,17,3,108,101,102,116,114,105,
	103,104,116,104,97,114,112,111,111,110,115,226,135,139,19,3,108,101,102,116,114,105,103,104,
	116,115,113,117,105,103,97,114,114,111,119,226,134,173,14,3,108,101,102,116,116,104,114,101,
	101,116,105,109,101,115,226,139,139,3,3,108,101,103,226,139,154,3,3,108,101,113,226,137,
	164,4,3,108,101,113,113,226,137,166,8,3,108,101,113,115,108,97,110,116,226,169,189,3,
	3,108,101,115,226,169,189,5,3,108,101,115,99,99,226,170,168,6,3,108,101,115,100,111,
	116,226,169,191,7,3,108,101,115,100,111,116,111,226,170,129,8,3,108,101,115,100,111,116,
	111,114,226,170,131,4,6,108,101,115,103,226,139,154,239,184,128,6,3,108,101,115,103,101,
	115,226,170,147,10,3,108,101,115,115,97,112,112,114,111,120,226,170,133,7,3,108,101,115,
	115,100,111,116,226,139,150,9,3,108,101,115,115,101,113,103,116,114,226,139,154,10,3,108,
	101,115,115,101,113,113,103,116,114,226,170,139,7,3,108,101,115,115,103,116,114,226,137,182,
	7,3,108,101,115,115,115,105,109,226,137,178,6,3,108,102,105,115,104,116,226,165,188,6,
	3,108,102,108,111,111,114,226,140,138,3,4,108,102,114,240,157,148,169,2,3,108,103,226,
	137,182,3,3,108,103,69,226,170,145,5,3,108,104,97,114,100,226,134,189,5,3,108,104,
	97,114,117,226,134,188,6,3,108,104,97,114,117,108,226,165,170,5,3,108,104,98,108,107,
	226,150,132,4,2,108,106,99,121,209,153,2,3,108,108,226,137,170,5,3,108,108,97,114,
	114,226,135,135,8,3,108,108,99,111,114,110,101,114,226,140,158,6,3,108,108,104,97,114,
	100,226,165,171,5,3,108,108,116,114,105,226,151,186,6,2,108,109,105,100,111,116,197,128,
	6,3,108,109,111,117,115,116,226,142,176,10,3,108,109,111,117,115,116,97,99,104,101,226,
	142,176,3,3,108,110,69,226,137,168,4,3,108,110,97,112,226,170,137,8,3,108,110,97,
	112,112,114,111,120,226,170,137,3,3,108,110,101,226,170,135,4,3,108,110,101,113,226,170,
	135,5,3,108,110,101,113,113,226,137,168,5,3,108,110,115,105,109,226,139,166,5,3,108,
	111,97,110,103,226,159,172,5,3,108,111,97,114,114,226,135,189,5,3,108,111,98,114,107,
	226,159,166,13,3,108,111,110,103,108,101,102,116,97,114,114,111,119,226,159,181,18,3,108,
	111,110,103,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,159,183,10,3,108,111,
	110,103,109,97,112,115,116,111,226,159,188,14,3,108,111,110,103,114,105,103,104,116,97,114,
	114,111,119,226,159,182,13,3,108,111,111,112,97,114,114,111,119,108,101,102,116,226,134,171,
	14,3,108,111,111,112,97,114,114,111,119,114,105,103,104,116,226,134,172,5,3,108,111,112,
	97,114,226,166,133,4,4,108,111,112,102,240,157,149,157,6,3,108,111,112,108,117,115,226,
	168,173,7,3,108,111,116,105,109,101,115,226,168,180,6,3,108,111,119,97,115,116,226,136,
	151,6,1,108,111,119,98,97,114,95,7,3,108,111,122,101,110,103,101,226,151,138,4,3,
	108,111,122,102,226,167,171,4,1,108,112,97,114,40,6,3,108,112,97,114,108,116,226,166,
	147,5,3,108,114,97,114,114,226,135,134,8,3,108,114,99,111,114,110,101,114,226,140,159,
	5,3,108,114,104,97,114,226,135,139,6,3,108,114,104,97,114,100,226,165,173,5,3,108,
	114,116,114,105,226,138,191,4,4,108,115,99,114,240,157,147,129,3,3,108,115,104,226,134,
	176,4,3,108,115,105,109,226,137,178,5,3,108,115,105,109,101,226,170,141,5,3,108,115,
	105,109,103,226,170,143,4,1,108,115,113,98,91,6,3,108,115,113,117,111,114,226,128,154,
	6,2,108,115,116,114,111,107,197,130,4,3,108,116,99,99,226,170,166,5,3,108,116,99,
	105,114,226,169,185,5,3,108,116,100,111,116,226,139,150,6,3,108,116,104,114,101,101,226,
	139,139,6,3,108,116,105,109,101,115,226,139,137,6,3,108,116,108,97,114,114,226,165,182,
	7,3,108,116,113,117,101,115,116,226,169,187,6,3,108,116,114,80,97,114,226,166,150,4,
	3,108,116,114,105,226,151,131,5,3,108,116,114,105,101,226,138,180,5,3,108,116,114,105,
	102,226,151,130,8,3,108,117,114,100,115,104,97,114,226,165,138,7,3,108,117,114,117,104,
	97,114,226,165,166,9,6,108,118,101,114,116,110,101,113,113,226,137,168,239,184,128,4,6,
	108,118,110,69,226,137,168,239,184,128,5,3,109,68,68,111,116,226,136,186,4,3,109,97,
	108,101,226,153,130,4,3,109,97,108,116,226,156,160,7,3,109,97,108,116,101,115,101,226,
	156,160,3,3,109,97,112,226,134,166,6,3,109,97,112,115,116,111,226,134,166,10,3,109,
	97,112,115,116,111,100,111,119,110,226,134,167,10,3,109,97,112,115,116,111,108,101,102,116,
	226,134,164,8,3,109,97,112,115,116,111,117,112,226,134,165,6,3,109,97,114,107,101,114,
	226,150,174,6,3,109,99,111,109,109,97,226,168,169,3,2,109,99,121,208,188,13,3,109,
	101,97,115,117,114,101,100,97,110,103,108,101,226,136,161,3,4,109,102,114,240,157,148,170,
	3,3,109,104,111,226,132,167,3,3,109,105,100,226,136,163,6,1,109,105,100,97,115,116,
	42,6,3,109,105,100,99,105,114,226,171,176,6,3,109,105,110,117,115,98,226,138,159,6,
	3,109,105,110,117,115,100,226,136,184,7,3,109,105,110,117,115,100,117,226,168,170,4,3,
	109,108,99,112,226,171,155,4,3,109,108,100,114,226,128,166,6,3,109,110,112,108,117,115,
	226,136,147,6,3,109,111,100,101,108,115,226,138,167,4,4,109,111,112,102,240,157,149,158,
	2,3,109,112,226,136,147,4,4,109,115,99,114,240,157,147,130,6,3,109,115,116,112,111,
	115,226,136,190,8,3,109,117,108,116,105,109,97,112,226,138,184,5,3,109,117,109,97,112,
	226,138,184,3,5,110,71,103,226,139,153,204,184,3,6,110,71,116,226,137,171,226,131,146,
	4,5,110,71,116,118,226,137,171,204,184,10,3,110,76,101,102,116,97,114,114,111,119,226,
	135,141,15,3,110,76,101,102,116,114,105,103,104,116,97,114,114,111,119,226,135,142,3,5,
	110,76,108,226,139,152,204,184,3,6,110,76,116,226,137,170,226,131,146,4,5,110,76,116,
	118,226,137,170,204,184,11,3,110,82,105,103,104,116,97,114,114,111,119,226,135,143,6,3,
	110,86,68,97,115,104,226,138,175,6,3,110,86,100,97,115,104,226,138,174,5,3,110,97,
	98,108,97,226,136,135,6,2,110,97,99,117,116,101,197,132,4,6,110,97,110,103,226,136,
	160,226,131,146,3,3,110,97,112,226,137,137,4,5,110,97,112,69,226,169,176,204,184,5,
	5,110,97,112,105,100,226,137,139,204,184,5,2,110,97,112,111,115,197,137,7,3,110,97,
	112,112,114,111,120,226,137,137,5,3,110,97,116,117,114,226,153,174,7,3,110,97,116,117,
	114,97,108,226,153,174,8,3,110,97,116,117,114,97,108,115,226,132,149,5,5,110,98,117,
	109,112,226,137,142,204,184,6,5,110,98,117,109,112,101,226,137,143,204,184,4,3,110,99,
	97,112,226,169,131,6,2,110,99,97,114,111,110,197,136,6,2,110,99,101,100,105,108,197,
	134,5,3,110,99,111,110,103,226,137,135,8,5,110,99,111,110,103,100,111,116,226,169,173,
	204,184,4,3,110,99,117,112,226,169,130,3,2,110,99,121,208,189,5,3,110,101,65,114,
	114,226,135,151,6,3,110,101,97,114,104,107,226,164,164,5,3,110,101,97,114,114,226,134,
	151,7,3,110,101,97,114,114,111,119,226,134,151,5,5,110,101,100,111,116,226,137,144,204,
	184,6,3,110,101,113,117,105,118,226,137,162,6,3,110,101,115,101,97,114,226,164,168,5,
	5,110,101,115,105,109,226,137,130,204,184,6,3,110,101,120,105,115,116,226,136,132,7,3,
	110,101,120,105,115,116,115,226,136,132,3,4,110,102,114,240,157,148,171,3,5,110,103,69,
	226,137,167,204,184,3,3,110,103,101,226,137,177,4,3,110,103,101,113,226,137,177,5,5,
	110,103,101,113,113,226,137,167,204,184,9,5,110,103,101,113,115,108,97,110,116,226,169,190,
	204,184,4,5,110,103,101,115,226,169,190,204,184,5,3,110,103,115,105,109,226,137,181,3,
	3,110,103,116,226,137,175,4,3,110,103,116,114,226,137,175,5,3,110,104,65,114,114,226,
	135,142,5,3,110,104,97,114,114,226,134,174,5,3,110,104,112,97,114,226,171,178,2,3,
	110,105,226,136,139,3,3,110,105,115,226,139,188,4,3,110,105,115,100,226,139,186,3,3,
	110,105,118,226,136,139,4,2,110,106,99,121,209,154,5,3,110,108,65,114,114,226,135,141,
	3,5,110,108,69,226,137,166,204,184,5,3,110,108,97,114,114,226,134,154,4,3,110,108,
	100,114,226,128,165,3,3,110,108,101,226,137,176,10,3,110,108,101,102,116,97,114,114,111,
	119,226,134,154,15,3,110,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,134,174,
	4,3,110,108,101,113,226,137,176,5,5,110,108,101,113,113,226,137,166,204,184,9,5,110,
	108,101,113,115,108,97,110,116,226,169,189,204,184,4,5,110,108,101,115,226,169,189,204,184,
	5,3,110,108,101,115,115,226,137,174,5,3,110,108,115,105,109,226,137,180,3,3,110,108,
	116,226,137,174,5,3,110,108,116,114,105,226,139,170,6,3,110,108,116,114,105,101,226,139,
	172,4,3,110,109,105,100,226,136,164,4,4,110,111,112,102,240,157,149,159,5,3,110,111,
	116,105,110,226,136,137,6,5,110,111,116,105,110,69,226,139,185,204,184,8,5,110,111,116,
	105,110,100,111,116,226,139,181,204,184,7,3,110,111,116,105,110,118,97,226,136,137,7,3,
	110,111,116,105,110,118,98,226,139,183,7,3,110,111,116,105,110,118,99,226,139,182,5,3,
	110,111,116,110,105,226,136,140,7,3,110,111,116,110,105,118,97,226,136,140,7,3,110,111,
	116,110,105,118,98,226,139,190,7,3,110,111,116,110,105,118,99,226,139,189,4,3,110,112,
	97,114,226,136,166,9,3,110,112,97,114,97,108,108,101,108,226,136,166,6,6,110,112,97,
	114,115,108,226,171,189,226,131,165,5,5,110,112,97,114,116,226,136,130,204,184,7,3,110,
	112,111,108,105,110,116,226,168,148,3,3,110,112,114,226,138,128,6,3,110,112,114,99,117,
	101,226,139,160,4,5,110,112,114,101,226,170,175,204,184,5,3,110,112,114,101,99,226,138,
	128,7,5,110,112,114,101,99,101,113,226,170,175,204,184,5,3,110,114,65,114,114,226,135,
	143,5,3,110,114,97,114,114,226,134,155,6,5,110,114,97,114,114,99,226,164,179,204,184,
	6,5,110,114,97,114,114,119,226,134,157,204,184,11,3,110,114,105,103,104,116,97,114,114,
	111,119,226,134,155,5,3,110,114,116,114,105,226,139,171,6,3,110,114,116,114,105,101,226,
	139,173,3,3,110,115,99,226,138,129,6,3,110,115,99,99,117,101,226,139,161,4,5,110,
	115,99,101,226,170,176,204,184,4,4,110,115,99,114,240,157,147,131,9,3,110,115,104,111,
	114,116,109,105,100,226,136,164,14,3,110,115,104,111,114,116,112,97,114,97,108,108,101,108,
	226,136,166,4,3,110,115,105,109,226,137,129,5,3,110,115,105,109,101,226,137,132,6,3,
	110,115,105,109,101,113,226,137,132,5,3,110,115,109,105,100,226,136,164,5,3,110,115,112,
	97,114,226,136,166,7,3,110,115,113,115,117,98,101,226,139,162,7,3,110,115,113,115,117,
	112,101,226,139,163,4,3,110,115,117,98,226,138,132,5,5,110,115,117,98,69,226,171,133,
	204,184,5,3,110,115,117,98,101,226,138,136,7,6,110,115,117,98,115,101,116,226,138,130,
	226,131,146,9,3,110,115,117,98,115,101,116,101,113,226,138,136,10,5,110,115,117,98,115,
	101,116,101,113,113,226,171,133,204,184,5,3,110,115,117,99,99,226,138,129,7,5,110,115,
	117,99,99,101,113,226,170,176,204,184,4,3,110,115,117,112,226,138,133,5,5,110,115,117,
	112,69,226,171,134,204,184,5,3,110,115,117,112,101,226,138,137,7,6,110,115,117,112,115,
	101,116,226,138,131,226,131,146,9,3,110,115,117,112,115,101,116,101,113,226,138,137,10,5,
	110,115,117,112,115,101,116,101,113,113,226,171,134,204,184,4,3,110,116,103,108,226,137,185,
	4,3,110,116,108,103,226,137,184,13,3,110,116,114,105,97,110,103,108,101,108,101,102,116,
	226,139,170,15,3,110,116,114,105,97,110,103,108,101,108,101,102,116,101,113,226,139,172,14,
	3,110,116,114,105,97,110,103,108,101,114,105,103,104,116,226,139,171,16,3,110,116,114,105,
	97,110,103,108,101,114,105,103,104,116,101,113,226,139,173,2,2,110,117,206,189,3,1,110,
	117,109,35,6,3,110,117,109,101,114,111,226,132,150,5,3,110,117,109,115,112,226,128,135,
	6,3,110,118,68,97,115,104,226,138,173,6,3,110,118,72,97,114,114,226,164,132,4,6,
	110,118,97,112,226,137,141,226,131,146,6,3,110,118,100,97,115,104,226,138,172,4,6,110,
	118,103,101,226,137,165,226,131,146,4,4,110,118,103,116,62,226,131,146,7,3,110,118,105,
	110,102,105,110,226,167,158,6,3,110,118,108,65,114,114,226,164,130,4,6,110,118,108,101,
	226,137,164,226,131,146,4,4,110,118,108,116,60,226,131,146,7,6,110,118,108,116,114,105,
	101,226,138,180,226,131,146,6,3,110,118,114,65,114,114,226,164,131,7,6,110,118,114,116,
	114,105,101,226,138,181,226,131,146,5,6,110,118,115,105,109,226,136,188,226,131,146,5,3,
	110,119,65,114,114,226,135,150,6,3,110,119,97,114,104,107,226,164,163,5,3,110,119,97,
	114,114,226,134,150,7,3,110,119,97,114,114,111,119,226,134,150,6,3,110,119,110,101,97,
	114,226,164,167,2,3,111,83,226,147,136,4,3,111,97,115,116,226,138,155,4,3,111,99,
	105,114,226,138,154,3,2,111,99,121,208,190,5,3,111,100,97,115,104,226,138,157,6,2,
	111,100,98,108,97,99,197,145,4,3,111,100,105,118,226,168,184,4,3,111,100,111,116,226,
	138,153,6,3,111,100,115,111,108,100,226,166,188,5,3,111,102,99,105,114,226,166,191,3,
	4,111,102,114,240,157,148,172,4,2,111,103,111,110,203,155,3,3,111,103,116,226,167,129,
	5,3,111,104,98,97,114,226,166,181,3,2,111,104,109,206,169,4,3,111,105,110,116,226,
	136,174,5,3,111,108,97,114,114,226,134,186,5,3,111,108,99,105,114,226,166,190,7,3,
	111,108,99,114,111,115,115,226,166,187,5,3,111,108,105,110,101,226,128,190,3,3,111,108,
	116,226,167,128,5,2,111,109,97,99,114,197,141,7,2,111,109,105,99,114,111,110,206,191,
	4,3,111,109,105,100,226,166,182,6,3,111,109,105,110,117,115,226,138,150,4,4,111,111,
	112,102,240,157,149,160,4,3,111,112,97,114,226,166,183,5,3,111,112,101,114,112,226,166,
	185,5,3,111,112,108,117,115,226,138,149,2,3,111,114,226,136,168,5,3,111,114,97,114,
	114,226,134,187,3,3,111,114,100,226,169,157,5,3,111,114,100,101,114,226,132,180,7,3,
	111,114,100,101,114,111,102,226,132,180,6,3,111,114,105,103,111,102,226,138,182,4,3,111,
	114,111,114,226,169,150,7,3,111,114,115,108,111,112,101,226,169,151,3,3,111,114,118,226,
	169,155,4,3,111,115,99,114,226,132,180,4,3,111,115,111,108,226,138,152,6,3,111,116,
	105,109,101,115,226,138,151,8,3,111,116,105,109,101,115,97,115,226,168,182,5,3,111,118,
	98,97,114,226,140,189,3,3,112,97,114,226,136,165,8,3,112,97,114,97,108,108,101,108,
	226,136,165,6,3,112,97,114,115,105,109,226,171,179,5,3,112,97,114,115,108,226,171,189,
	4,3,112,97,114,116,226,136,130,3,2,112,99,121,208,191,6,1,112,101,114,99,110,116,
	37,6,1,112,101,114,105,111,100,46,4,3,112,101,114,112,226,138,165,7,3,112,101,114,
	116,101,110,107,226,128,177,3,4,112,102,114,240,157,148,173,3,2,112,104,105,207,134,4,
	2,112,104,105,118,207,149,6,3,112,104,109,109,97,116,226,132,179,9,3,112,105,116,99,
	104,102,111,114,107,226,139,148,3,2,112,105,118,207,150,6,3,112,108,97,110,99,107,226,
	132,143,7,3,112,108,97,110,99,107,104,226,132,142,6,3,112,108,97,110,107,118,226,132,
	143,4,1,112,108,117,115,43,8,3,112,108,117,115,97,99,105,114,226,168,163,5,3,112,
	108,117,115,98,226,138,158,7,3,112,108,117,115,99,105,114,226,168,162,6,3,112,108,117,
	115,100,111,226,136,148,6,3,112,108,117,115,100,117,226,168,165,5,3,112,108,117,115,101,
	226,169,178,7,3,112,108,117,115,115,105,109,226,168,166,7,3,112,108,117,115,116,119,111,
	226,168,167,2,2,112,109,194,177,8,3,112,111,105,110,116,105,110,116,226,168,149,4,4,
	112,111,112,102,240,157,149,161,2,3,112,114,226,137,186,3,3,112,114,69,226,170,179,4,
	3,112,114,97,112,226,170,183,5,3,112,114,99,117,101,226,137,188,3,3,112,114,101,226,
	170,175,4,3,112,114,101,99,226,137,186,10,3,112,114,101,99,97,112,112,114,111,120,226,
	170,183,11,3,112,114,101,99,99,117,114,108,121,101,113,226,137,188,6,3,112,114,101,99,
	101,113,226,170,175,11,3,112,114,101,99,110,97,112,112,114,111,120,226,170,185,8,3,112,
	114,101,99,110,101,113,113,226,170,181,8,3,112,114,101,99,110,115,105,109,226,139,168,7,
	3,112,114,101,99,115,105,109,226,137,190,6,3,112,114,105,109,101,115,226,132,153,4,3,
	112,114,110,69,226,170,181,5,3,112,114,110,97,112,226,170,185,6,3,112,114,110,115,105,
	109,226,139,168,4,3,112,114,111,100,226,136,143,8,3,112,114,111,102,97,108,97,114,226,
	140,174,8,3,112,114,111,102,108,105,110,101,226,140,146,8,3,112,114,111,102,115,117,114,
	102,226,140,147,4,3,112,114,111,112,226,136,157,6,3,112,114,111,112,116,111,226,136,157,
	5,3,112,114,115,105,109,226,137,190,6,3,112,114,117,114,101,108,226,138,176,4,4,112,
	115,99,114,240,157,147,133,3,2,112,115,105,207,136,6,3,112,117,110,99,115,112,226,128,
	136,3,4,113,102,114,240,157,148,174,4,3,113,105,110,116,226,168,140,4,4,113,111,112,
	102,240,157,149,162,6,3,113,112,114,105,109,101,226,129,151,4,4,113,115,99,114,240,157,
	147,134,11,3,113,117,97,116,101,114,110,105,111,110,115,226,132,141,7,3,113,117,97,116,
	105,110,116,226,168,150,5,1,113,117,101,115,116,63,7,3,113,117,101,115,116,101,113,226,
	137,159,5,3,114,65,97,114,114,226,135,155,4,3,114,65,114,114,226,135,146,6,3,114,
	65,116,97,105,108,226,164,156,5,3,114,66,97,114,114,226,164,143,4,3,114,72,97,114,
	226,165,164,4,5,114,97,99,101,226,136,189,204,177,6,2,114,97,99,117,116,101,197,149,
	8,3,114,97,101,109,112,116,121,118,226,166,179,4,3,114,97,110,103,226,159,169,5,3,
	114,97,110,103,100,226,166,146,5,3,114,97,110,103,101,226,166,165,6,3,114,97,110,103,
	108,101,226,159,169,6,3,114,97,114,114,97,112,226,165,181,5,3,114,97,114,114,98,226,
	135,165,7,3,114,97,114,114,98,102,115,226,164,160,5,3,114,97,114,114,99,226,164,179,
	6,3,114,97,114,114,102,115,226,164,158,6,3,114,97,114,114,104,107,226,134,170,6,3,
	114,97,114,114,108,112,226,134,172,6,3,114,97,114,114,112,108,226,165,133,7,3,114,97,
	114,114,115,105,109,226,165,180,6,3,114,97,114,114,116,108,226,134,163,5,3,114,97,114,
	114,119,226,134,157,6,3,114,97,116,97,105,108,226,164,154,5,3,114,97,116,105,111,226,
	136,182,9,3,114,97,116,105,111,110,97,108,115,226,132,154,5,3,114,98,97,114,114,226,
	164,141,5,3,114,98,98,114,107,226,157,179,6,1,114,98,114,97,99,101,125,6,1,114,
	98,114,97,99,107,93,5,3,114,98,114,107,101,226,166,140,7,3,114,98,114,107,115,108,
	100,226,166,142,7,3,114,98,114,107,115,108,117,226,166,144,6,2,114,99,97,114,111,110,
	197,153,6,2,114,99,101,100,105,108,197,151,5,3,114,99,101,105,108,226,140,137,4,1,
	114,99,117,98,125,3,2,114,99,121,209,128,4,3,114,100,99,97,226,164,183,7,3,114,
	100,108,100,104,97,114,226,165,169,6,3,114,100,113,117,111,114,226,128,157,4,3,114,100,
	115,104,226,134,179,4,3,114,101,97,108,226,132,156,7,3,114,101,97,108,105,110,101,226,
	132,155,8,3,114,101,97,108,112,97,114,116,226,132,156,5,3,114,101,97,108,115,226,132,
	157,4,3,114,101,99,116,226,150,173,6,3,114,102,105,115,104,116,226,165,189,6,3,114,
	102,108,111,111,114,226,140,139,3,4,114,102,114,240,157,148,175,5,3,114,104,97,114,100,
	226,135,129,5,3,114,104,97,114,117,226,135,128,6,3,114,104,97,114,117,108,226,165,172,
	3,2,114,104,111,207,129,4,2,114,104,111,118,207,177,10,3,114,105,103,104,116,97,114,
	114,111,119,226,134,146,14,3,114,105,103,104,116,97,114,114,111,119,116,97,105,108,226,134,
	163,16,3,114,105,103,104,116,104,97,114,112,111,111,110,100,111,119,110,226,135,129,14,3,
	114,105,103,104,116,104,97,114,112,111,111,110,117,112,226,135,128,15,3,114,105,103,104,116,
	108,101,102,116,97,114,114,111,119,115,226,135,132,17,3,114,105,103,104,116,108,101,102,116,
	104,97,114,112,111,111,110,115,226,135,140,16,3,114,105,103,104,116,114,105,103,104,116,97,
	114,114,111,119,115,226,135,137,15,3,114,105,103,104,116,115,113,117,105,103,97,114,114,111,
	119,226,134,157,15,3,114,105,103,104,116,116,104,114,101,101,116,105,109,101,115,226,139,140,
	4,2,114,105,110,103,203,154,12,3,114,105,115,105,110,103,100,111,116,115,101,113,226,137,
	147,5,3,114,108,97,114,114,226,135,132,5,3,114,108,104,97,114,226,135,140,6,3,114,
	109,111,117,115,116,226,142,177,10,3,114,109,111,117,115,116,97,99,104,101,226,142,177,5,
	3,114,110,109,105,100,226,171,174,5,3,114,111,97,110,103,226,159,173,5,3,114,111,97,
	114,114,226,135,190,5,3,114,111,98,114,107,226,159,167,5,3,114,111,112,97,114,226,166,
	134,4,4,114,111,112,102,240,157,149,163,6,3,114,111,112,108,117,115,226,168,174,7,3,
	114,111,116,105,109,101,115,226,168,181,4,1,114,112,97,114,41,6,3,114,112,97,114,103,
	116,226,166,148,8,3,114,112,112,111,108,105,110,116,226,168,146,5,3,114,114,97,114,114,
	226,135,137,4,4,114,115,99,114,240,157,147,135,3,3,114,115,104,226,134,177,4,1,114,
	115,113,98,93,6,3,114,115,113,117,111,114,226,128,153,6,3,114,116,104,114,101,101,226,
	139,140,6,3,114,116,105,109,101,115,226,139,138,4,3,114,116,114,105,226,150,185,5,3,
	114,116,114,105,101,226,138,181,5,3,114,116,114,105,102,226,150,184,8,3,114,116,114,105,
	108,116,114,105,226,167,142,7,3,114,117,108,117,104,97,114,226,165,168,2,3,114,120,226,
	132,158,6,2,115,97,99,117,116,101,197,155,2,3,115,99,226,137,187,3,3,115,99,69,
	226,170,180,4,3,115,99,97,112,226,170,184,5,3,115,99,99,117,101,226,137,189,3,3,
	115,99,101,226,170,176,6,2,115,99,101,100,105,108,197,159,5,2,115,99,105,114,99,197,
	157,4,3,115,99,110,69,226,170,182,5,3,115,99,110,97,112,226,170,186,6,3,115,99,
	110,115,105,109,226,139,169,8,3,115,99,112,111,108,105,110,116,226,168,147,5,3,115,99,
	115,105,109,226,137,191,3,2,115,99,121,209,129,4,3,115,100,111,116,226,139,133,5,3,
	115,100,111,116,98,226,138,161,5,3,115,100,111,116,101,226,169,166,5,3,115,101,65,114,
	114,226,135,152,6,3,115,101,97,114,104,107,226,164,165,5,3,115,101,97,114,114,226,134,
	152,7,3,115,101,97,114,114,111,119,226,134,152,4,1,115,101,109,105,59,6,3,115,101,
	115,119,97,114,226,164,169,8,3,115,101,116,109,105,110,117,115,226,136,150,5,3,115,101,
	116,109,110,226,136,150,4,3,115,101,120,116,226,156,182,3,4,115,102,114,240,157,148,176,
	6,3,115,102,114,111,119,110,226,140,162,5,3,115,104,97,114,112,226,153,175,6,2,115,
	104,99,104,99,121,209,137,4,2,115,104,99,121,209,136,8,3,115,104,111,114,116,109,105,
	100,226,136,163,13,3,115,104,111,114,116,112,97,114,97,108,108,101,108,226,136,165,6,2,
	115,105,103,109,97,102,207,130,6,2,115,105,103,109,97,118,207,130,3,3,115,105,109,226,
	136,188,6,3,115,105,109,100,111,116,226,169,170,4,3,115,105,109,101,226,137,131,5,3,
	115,105,109,101,113,226,137,131,4,3,115,105,109,103,226,170,158,5,3,115,105,109,103,69,
	226,170,160,4,3,115,105,109,108,226,170,157,5,3,115,105,109,108,69,226,170,159,5,3,
	115,105,109,110,101,226,137,134,7,3,115,105,109,112,108,117,115,226,168,164,7,3,115,105,
	109,114,97,114,114,226,165,178,5,3,115,108,97,114,114,226,134,144,13,3,115,109,97,108,
	108,115,101,116,109,105,110,117,115,226,136,150,6,3,115,109,97,115,104,112,226,168,179,8,
	3,115,109,101,112,97,114,115,108,226,167,164,4,3,115,109,105,100,226,136,163,5,3,115,
	109,105,108,101,226,140,163,3,3,115,109,116,226,170,170,4,3,115,109,116,101,226,170,172,
	5,6,115,109,116,101,115,226,170,172,239,184,128,6,2,115,111,102,116,99,121,209,140,3,
	1,115,111,108,47,4,3,115,111,108,98,226,167,132,6,3,115,111,108,98,97,114,226,140,
	191,4,4,115,111,112,102,240,157,149,164,9,3,115,112,97,100,101,115,117,105,116,226,153,
	160,4,3,115,112,97,114,226,136,165,5,3,115,113,99,97,112,226,138,147,6,6,115,113,
	99,97,112,115,226,138,147,239,184,128,5,3,115,113,99,117,112,226,138,148,6,6,115,113,
	99,117,112,115,226,138,148,239,184,128,5,3,115,113,115,117,98,226,138,143,6,3,115,113,
	115,117,98,101,226,138,145,8,3,115,113,115,117,98,115,101,116,226,138,143,10,3,115,113,
	115,117,98,115,101,116,101,113,226,138,145,5,3,115,113,115,117,112,226,138,144,6,3,115,
	113,115,117,112,101,226,138,146,8,3,115,113,115,117,112,115,101,116,226,138,144,10,3,115,
	113,115,117,112,115,101,116,101,113,226,138,146,3,3,115,113,117,226,150,161,6,3,115,113,
	117,97,114,101,226,150,161,6,3,115,113,117,97,114,102,226,150,170,4,3,115,113,117,102,
	226,150,170,5,3,115,114,97,114,114,226,134,146,4,4,115,115,99,114,240,157,147,136,6,
	3,115,115,101,116,109,110,226,136,150,6,3,115,115,109,105,108,101,226,140,163,6,3,115,
	115,116,97,114,102,226,139,134,15,2,115,116,114,97,105,103,104,116,101,112,115,105,108,111,
	110,207,181,11,2,115,116,114,97,105,103,104,116,112,104,105,207,149,5,2,115,116,114,110,
	115,194,175,3,3,115,117,98,226,138,130,4,3,115,117,98,69,226,171,133,6,3,115,117,
	98,100,111,116,226,170,189,4,3,115,117,98,101,226,138,134,7,3,115,117,98,101,100,111,
	116,226,171,131,7,3,115,117,98,109,117,108,116,226,171,129,5,3,115,117,98,110,69,226,
	171,139,5,3,115,117,98,110,101,226,138,138,7,3,115,117,98,112,108,117,115,226,170,191,
	7,3,115,117,98,114,97,114,114,226,165,185,6,3,115,117,98,115,101,116,226,138,130,8,
	3,115,117,98,115,101,116,101,113,226,138,134,9,3,115,117,98,115,101,116,101,113,113,226,
	171,133,9,3,115,117,98,115,101,116,110,101,113,226,138,138,10,3,115,117,98,115,101,116,
	110,101,113,113,226,171,139,6,3,115,117,98,115,105,109,226,171,135,6,3,115,117,98,115,
	117,98,226,171,149,6,3,115,117,98,115,117,112,226,171,147,4,3,115,117,99,99,226,137,
	187,10,3,115,117,99,99,97,112,112,114,111,120,226,170,184,11,3,115,117,99,99,99,117,
	114,108,121,101,113,226,137,189,6,3,115,117,99,99,101,113,226,170,176,11,3,115,117,99,
	99,110,97,112,112,114,111,120,226,170,186,8,3,115,117,99,99,110,101,113,113,226,170,182,
	8,3,115,117,99,99,110,115,105,109,226,139,169,7,3,115,117,99,99,115,105,109,226,137,
	191,4,3,115,117,110,103,226,153,170,3,3,115,117,112,226,138,131,4,3,115,117,112,69,
	226,171,134,6,3,115,117,112,100,111,116,226,170,190,7,3,115,117,112,100,115,117,98,226,
	171,152,4,3,115,117,112,101,226,138,135,7,3,115,117,112,101,100,111,116,226,171,132,7,
	3,115,117,112,104,115,111,108,226,159,137,7,3,115,117,112,104,115,117,98,226,171,151,7,
	3,115,117,112,108,97,114,114,226,165,187,7,3,115,117,112,109,117,108,116,226,171,130,5,
	3,115,117,112,110,69,226,171,140,5,3,115,117,112,110,101,226,138,139,7,3,115,117,112,
	112,108,117,115,226,171,128,6,3,115,117,112,115,101,116,226,138,131,8,3,115,117,112,115,
	101,116,101,113,226,138,135,9,3,115,117,112,115,101,116,101,113,113,226,171,134,9,3,115,
	117,112,115,101,116,110,101,113,226,138,139,10,3,115,117,112,115,101,116,110,101,113,113,226,
	171,140,6,3,115,117,112,115,105,109,226,171,136,6,3,115,117,112,115,117,98,226,171,148,
	6,3,115,117,112,115,117,112,226,171,150,5,3,115,119,65,114,114,226,135,153,6,3,115,
	119,97,114,104,107,226,164,166,5,3,115,119,97,114,114,226,134,153,7,3,115,119,97,114,
	114,111,119,226,134,153,6,3,115,119,110,119,97,114,226,164,170,6,3,116,97,114,103,101,
	116,226,140,150,3,2,116,97,117,207,132,4,3,116,98,114,107,226,142,180,6,2,116,99,
	97,114,111,110,197,165,6,2,116,99,101,100,105,108,197,163,3,2,116,99,121,209,130,4,
	3,116,100,111,116,226,131,155,6,3,116,101,108,114,101,99,226,140,149,3,4,116,102,114,
	240,157,148,177,6,3,116,104,101,114,101,52,226,136,180,9,3,116,104,101,114,101,102,111,
	114,101,226,136,180,8,2,116,104,101,116,97,115,121,109,207,145,6,2,116,104,101,116,97,
	118,207,145,11,3,116,104,105,99,107,97,112,112,114,111,120,226,137,136,8,3,116,104,105,
	99,107,115,105,109,226,136,188,5,3,116,104,107,97,112,226,137,136,6,3,116,104,107,115,
	105,109,226,136,188,6,3,116,105,109,101,115,98,226,138,160,8,3,116,105,109,101,115,98,
	97,114,226,168,177,6,3,116,105,109,101,115,100,226,168,176,4,3,116,105,110,116,226,136,
	173,4,3,116,111,101,97,226,164,168,3,3,116,111,112,226,138,164,6,3,116,111,112,98,
	111,116,226,140,182,6,3,116,111,112,99,105,114,226,171,177,4,4,116,111,112,102,240,157,
	149,165,7,3,116,111,112,102,111,114,107,226,171,154,4,3,116,111,115,97,226,164,169,6,
	3,116,112,114,105,109,101,226,128,180,8,3,116,114,105,97,110,103,108,101,226,150,181,12,
	3,116,114,105,97,110,103,108,101,100,111,119,110,226,150,191,12,3,116,114,105,97,110,103,
	108,101,108,101,102,116,226,151,131,14,3,116,114,105,97,110,103,108,101,108,101,102,116,101,
	113,226,138,180,9,3,116,114,105,97,110,103,108,101,113,226,137,156,13,3,116,114,105,97,
	110,103,108,101,114,105,103,104,116,226,150,185,15,3,116,114,105,97,110,103,108,101,114,105,
	103,104,116,101,113,226,138,181,6,3,116,114,105,100,111,116,226,151,172,4,3,116,114,105,
	101,226,137,156,8,3,116,114,105,109,105,110,117,115,226,168,186,7,3,116,114,105,112,108,
	117,115,226,168,185,5,3,116,114,105,115,98,226,167,141,7,3,116,114,105,116,105,109,101,
	226,168,187,8,3,116,114,112,101,122,105,117,109,226,143,162,4,4,116,115,99,114,240,157,
	147,137,4,2,116,115,99,121,209,134,5,2,116,115,104,99,121,209,155,6,2,116,115,116,
	114,111,107,197,167,5,3,116,119,105,120,116,226,137,172,16,3,116,119,111,104,101,97,100,
	108,101,102,116,97,114,114,111,119,226,134,158,17,3,116,119,111,104,101,97,100,114,105,103,
	104,116,97,114,114,111,119,226,134,160,4,3,117,65,114,114,226,135,145,4,3,117,72,97,
	114,226,165,163,5,2,117,98,114,99,121,209,158,6,2,117,98,114,101,118,101,197,173,3,
	2,117,99,121,209,131,5,3,117,100,97,114,114,226,135,133,6,2,117,100,98,108,97,99,
	197,177,5,3,117,100,104,97,114,226,165,174,6,3,117,102,105,115,104,116,226,165,190,3,
	4,117,102,114,240,157,148,178,5,3,117,104,97,114,108,226,134,191,5,3,117,104,97,114,
	114,226,134,190,5,3,117,104,98,108,107,226,150,128,6,3,117,108,99,111,114,110,226,140,
	156,8,3,117,108,99,111,114,110,101,114,226,140,156,6,3,117,108,99,114,111,112,226,140,
	143,5,3,117,108,116,114,105,226,151,184,5,2,117,109,97,99,114,197,171,5,2,117,111,
	103,111,110,197,179,4,4,117,111,112,102,240,157,149,166,7,3,117,112,97,114,114,111,119,
	226,134,145,11,3,117,112,100,111,119,110,97,114,114,111,119,226,134,149,13,3,117,112,104,
	97,114,112,111,111,110,108,101,102,116,226,134,191,14,3,117,112,104,97,114,112,111,111,110,
	114,105,103,104,116,226,134,190,5,3,117,112,108,117,115,226,138,142,4,2,117,112,115,105,
	207,133,5,2,117,112,115,105,104,207,146,7,2,117,112,115,105,108,111,110,207,133,10,3,
	117,112,117,112,97,114,114,111,119,115,226,135,136,6,3,117,114,99,111,114,110,226,140,157,
	8,3,117,114,99,111,114,110,101,114,226,140,157,6,3,117,114,99,114,111,112,226,140,142,
	5,2,117,114,105,110,103,197,175,5,3,117,114,116,114,105,226,151,185,4,4,117,115,99,
	114,240,157,147,138,5,3,117,116,100,111,116,226,139,176,6,2,117,116,105,108,100,101,197,
	169,4,3,117,116,114,105,226,150,181,5,3,117,116,114,105,102,226,150,180,5,3,117,117,
	97,114,114,226,135,136,7,3,117,119,97,110,103,108,101,226,166,167,4,3,118,65,114,114,
	226,135,149,4,3,118,66,97,114,226,171,168,5,3,118,66,97,114,118,226,171,169,5,3,
	118,68,97,115,104,226,138,168,6,3,118,97,110,103,114,116,226,166,156,10,2,118,97,114,
	101,112,115,105,108,111,110,207,181,8,2,118,97,114,107,97,112,112,97,207,176,10,3,118,
	97,114,110,111,116,104,105,110,103,226,136,133,6,2,118,97,114,112,104,105,207,149,5,2,
	118,97,114,112,105,207,150,9,3,118,97,114,112,114,111,112,116,111,226,136,157,4,3,118,
	97,114,114,226,134,149,6,2,118,97,114,114,104,111,207,177,8,2,118,97,114,115,105,103,
	109,97,207,130,12,6,118,97,114,115,117,98,115,101,116,110,101,113,226,138,138,239,184,128,
	13,6,118,97,114,115,117,98,115,101,116,110,101,113,113,226,171,139,239,184,128,12,6,118,
	97,114,115,117,112,115,101,116,110,101,113,226,138,139,239,184,128,13,6,118,97,114,115,117,
	112,115,101,116,110,101,113,113,226,171,140,239,184,128,8,2,118,97,114,116,104,101,116,97,
	207,145,15,3,118,97,114,116,114,105,97,110,103,108,101,108,101,102,116,226,138,178,16,3,
	118,97,114,116,114,105,97,110,103,108,101,114,105,103,104,116,226,138,179,3,2,118,99,121,
	208,178,5,3,118,100,97,115,104,226,138,162,3,3,118,101,101,226,136,168,6,3,118,101,
	101,98,97,114,226,138,187,5,3,118,101,101,101,113,226,137,154,6,3,118,101,108,108,105,
	112,226,139,174,6,1,118,101,114,98,97,114,124,4,1,118,101,114,116,124,3,4,118,102,
	114,240,157,148,179,5,3,118,108,116,114,105,226,138,178,5,6,118,110,115,117,98,226,138,
	130,226,131,146,5,6,118,110,115,117,112,226,138,131,226,131,146,4,4,118,111,112,102,240,
	157,149,167,5,3,118,112,114,111,112,226,136,157,5,3,118,114,116,114,105,226,138,179,4,
	4,118,115,99,114,240,157,147,139,6,6,118,115,117,98,110,69,226,171,139,239,184,128,6,
	6,118,115,117,98,110,101,226,138,138,239,184,128,6,6,118,115,117,112,110,69,226,171,140,
	239,184,128,6,6,118,115,117,112,110,101,226,138,139,239,184,128,7,3,118,122,105,103,122,
	97,103,226,166,154,5,2,119,99,105,114,99,197,181,6,3,119,101,100,98,97,114,226,169,
	159,5,3,119,101,100,103,101,226,136,167,6,3,119,101,100,103,101,113,226,137,153,6,3,
	119,101,105,101,114,112,226,132,152,3,4,119,102,114,240,157,148,180,4,4,119,111,112,102,
	240,157,149,168,2,3,119,112,226,132,152,2,3,119,114,226,137,128,6,3,119,114,101,97,
	116,104,226,137,128,4,4,119,115,99,114,240,157,147,140,4,3,120,99,97,112,226,139,130,
	5,3,120,99,105,114,99,226,151,175,4,3,120,99,117,112,226,139,131,5,3,120,100,116,
	114,105,226,150,189,3,4,120,102,114,240,157,148,181,5,3,120,104,65,114,114,226,159,186,
	5,3,120,104,97,114,114,226,159,183,2,2,120,105,206,190,5,3,120,108,65,114,114,226,
	159,184,5,3,120,108,97,114,114,226,159,181,4,3,120,109,97,112,226,159,188,4,3,120,
	110,105,115,226,139,187,5,3,120,111,100,111,116,226,168,128,4,4,120,111,112,102,240,157,
	149,169,6,3,120,111,112,108,117,115,226,168,129,6,3,120,111,116,105,109,101,226,168,130,
	5,3,120,114,65,114,114,226,159,185,5,3,120,114,97,114,114,226,159,182,4,4,120,115,
	99,114,240,157,147,141,6,3,120,115,113,99,117,112,226,168,134,6,3,120,117,112,108,117,
	115,226,168,132,5,3,120,117,116,114,105,226,150,179,4,3,120,118,101,101,226,139,129,6,
	3,120,119,101,100,103,101,226,139,128,4,2,121,97,99,121,209,143,5,2,121,99,105,114,
	99,197,183,3,2,121,99,121,209,139,3,4,121,102,114,240,157,148,182,4,2,121,105,99,
	121,209,151,4,4,121,111,112,102,240,157,149,170,4,4,121,115,99,114,240,157,147,142,4,
	2,121,117,99,121,209,142,6,2,122,97,99,117,116,101,197,186,6,2,122,99,97,114,111,
	110,197,190,3,2,122,99,121,208,183,4,2,122,100,111,116,197,188,6,3,122,101,101,116,
	114,102,226,132,168,4,2,122,101,116,97,206,182,3,4,122,102,114,240,157,148,183,4,2,
	122,104,99,121,208,182,7,3,122,105,103,114,97,114,114,226,135,157,4,4,122,111,112,102,
	240,157,149,171,4,4,122,115,99,114,240,157,147,143,
};

// The value's UTF-8 bytes in the low bytes and its length in the top byte.
typedef struct { u64 key, val; } Entry;
typedef struct { u8 name[32]; u64 val; u32 len; u32 pad; } Long;

static u8 input[INPUT_CAP + PAD] __attribute__((aligned(16)));
static u8 output[OUTPUT_CAP + PAD] __attribute__((aligned(16)));
static Entry fast[(1 << FAST_BITS) + FAST_TAIL];
static Entry leg[(1 << LEG_BITS) + LEG_TAIL];
static Long longs[LONG_COUNT] __attribute__((aligned(16)));
static u16 long_slots[1 << LONG_BITS];
// Longest legacy name starting with these two bytes (hashed), or 0.
static u8 leg_max[4096];
static u8 hexv[256];
static u32 pos[WINDOW + 16];
static u32 ready;

// Windows-1252 remapping for references to 0x80-0x9F.
static const u16 c1[32] = {
	0x20AC, 0x81, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
	0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x8D, 0x017D, 0x8F,
	0x90, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
	0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x9D, 0x017E, 0x0178,
};
static const u32 utf8_marks[5] = {0, 0, 0x80C0, 0x8080E0, 0x808080F0};
// Byte j of the 32 loaded at `len_mask + 32 - n` is 0xFF when j < n.
static const u8 len_mask[64] __attribute__((aligned(16))) = {
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
};

#define ONES 0x0101010101010101ull
#define HIGH 0x8080808080808080ull
#define LIKELY(x) __builtin_expect(!!(x), 1)
#define UNLIKELY(x) __builtin_expect(!!(x), 0)

static inline u64 ld64(const u8 *p) { u64 x; __builtin_memcpy(&x, p, 8); return x; }
static inline void st64(u8 *p, u64 x) { __builtin_memcpy(p, &x, 8); }
static inline void st32(u8 *p, u32 x) { __builtin_memcpy(p, &x, 4); }
static inline v128_t ld(const u8 *p) { return wasm_v128_load(p); }
static inline void st(u8 *p, v128_t v) { wasm_v128_store(p, v); }
static inline u32 amps(v128_t v) { return wasm_i8x16_bitmask(wasm_i8x16_eq(v, wasm_i8x16_splat(&#39;&&#39;))); }
static inline u32 leg_slot(u64 w) { return (((u32)w & 0xFFFF) * 0x9E3779B1u) >> 20; }
static inline u64 rotl(u64 x, u32 r) { return x << r | x >> (64 - r); }
static inline u32 long_hash(u64 head, u64 tail, u32 n) {
	return (u32)((((head ^ rotl(tail, 29)) + n) * LONG_MUL) >> (64 - LONG_BITS));
}

__attribute__((noinline)) static void init(void) {
	for (u32 k = 0; k < (1 << FAST_BITS) + FAST_TAIL; k++) fast[k].key = EMPTY;
	for (u32 k = 0; k < (1 << LEG_BITS) + LEG_TAIL; k++) leg[k].key = EMPTY;
	for (u32 k = 0; k < 256; k++) hexv[k] = 16;
	for (u32 k = 0; k < 10; k++) hexv[&#39;0&#39; + k] = k;
	for (u32 k = 0; k < 6; k++) hexv[&#39;a&#39; + k] = hexv[&#39;A&#39; + k] = 10 + k;
	const u8 *p = entity_blob;
	u32 nl = 0;
	for (u32 r = 0; r < ENTITY_COUNT; r++) {
		u32 n = p[0] & 0x7F, legacy = p[0] >> 7, vn = p[1];
		const u8 *name = p + 2, *value = name + n;
		u64 val = (u64)vn << 56;
		for (u32 k = 0; k < vn; k++) val |= (u64)value[k] << (8 * k);
		if (n <= 7) {
			u64 key = (u64)&#39;;&#39; << (8 * n);
			for (u32 k = 0; k < n; k++) key |= (u64)name[k] << (8 * k);
			Entry *e = &fast[(key * FAST_MUL) >> (64 - FAST_BITS)];
			while (e->key != EMPTY) e++;
			e->key = key;
			e->val = val;
			if (legacy) {
				key = (key ^ (u64)&#39;;&#39; << (8 * n)) | (u64)n << 56;
				e = &leg[(key * LEG_MUL) >> (64 - LEG_BITS)];
				while (e->key != EMPTY) e++;
				e->key = key;
				e->val = val;
				u32 s = leg_slot(key);  // only the first two bytes matter
				if (leg_max[s] < n) leg_max[s] = n;
			}
		} else {
			Long *l = &longs[nl++];
			for (u32 k = 0; k < n; k++) l->name[k] = name[k];
			l->val = val;
			l->len = n;
			u32 h = long_hash(ld64(l->name), ld64(l->name + n - 8), n);
			while (long_slots[h]) h = (h + 1) & ((1 << LONG_BITS) - 1);
			long_slots[h] = nl;
		}
		p = value + vn;
	}
	ready = 1;
}

__attribute__((export_name("input_ptr"))) u32 input_ptr(void) { return (u32)(uintptr_t)input; }
__attribute__((export_name("input_utf8_cap"))) u32 input_utf8_cap(void) { return INPUT_CAP; }
__attribute__((export_name("output_ptr"))) u32 output_ptr(void) { return (u32)(uintptr_t)output; }
__attribute__((export_name("output_utf8_cap"))) u32 output_utf8_cap(void) { return OUTPUT_CAP; }

__attribute__((export_name("render"))) u64 render(u32 n) {
	if (UNLIKELY(!ready)) init();
	u32 size = n < INPUT_CAP ? n : INPUT_CAP;
	const u8 *src = input;
	u8 *dst = output;
	const v128_t zero = wasm_i8x16_splat(0);
	st(input + size, zero);
	st(input + size + 16, zero);
	st(input + size + 32, zero);
	st(input + size + 48, zero);

	// Stage 1 lists the position of every `&` in a window; stage 2 copies the text between
	// references and decodes each one. Knowing the next position before the current
	// reference is decoded keeps the references independent of each other.
	u32 e = 0, o = 0, base = 0;
	while (base < size) {
		u32 lim = size - base > WINDOW ? base + WINDOW : size;
		u32 *out = pos;
		do {
			const v128_t amp = wasm_i8x16_splat(&#39;&&#39;);
			v128_t ea = wasm_i8x16_eq(ld(src + base), amp), eb = wasm_i8x16_eq(ld(src + base + 16), amp);
			v128_t ec = wasm_i8x16_eq(ld(src + base + 32), amp), ed = wasm_i8x16_eq(ld(src + base + 48), amp);
			{
				u64 mm = (u64)wasm_i8x16_bitmask(ea) | (u64)wasm_i8x16_bitmask(eb) << 16 |
					(u64)wasm_i8x16_bitmask(ec) << 32 | (u64)wasm_i8x16_bitmask(ed) << 48;
				u32 cnt = __builtin_popcountll(mm);
				// Entries past cnt are garbage and are overwritten or ignored.
				out[0] = base + __builtin_ctzll(mm); mm &= mm - 1;
				out[1] = base + __builtin_ctzll(mm); mm &= mm - 1;
				out[2] = base + __builtin_ctzll(mm); mm &= mm - 1;
				out[3] = base + __builtin_ctzll(mm); mm &= mm - 1;
				if (UNLIKELY(cnt > 4)) {
					out[4] = base + __builtin_ctzll(mm); mm &= mm - 1;
					out[5] = base + __builtin_ctzll(mm); mm &= mm - 1;
					out[6] = base + __builtin_ctzll(mm); mm &= mm - 1;
					out[7] = base + __builtin_ctzll(mm); mm &= mm - 1;
					for (u32 k = 8; UNLIKELY(mm); k++) {
						out[k] = base + __builtin_ctzll(mm);
						mm &= mm - 1;
					}
				}
				out += cnt;
			}
			base += 64;
		} while (base < lim);

		for (const u32 *q = pos; q < out; q++) {
			u32 i = *q;
			// Copy the text since the last reference; src[i] is `&` and i < size.
			{
				u32 len = i - e;
				st(dst + o, ld(src + e));
				st(dst + o + 16, ld(src + e + 16));
				if (len > 32) {
					u32 j = 32;
					do {
						st(dst + o + j, ld(src + e + j));
						j += 16;
					} while (j < len);
				}
				o += len;
			}
			u64 w = ld64(src + i + 1);
			if ((u8)w == &#39;#&#39;) {
				// Decimal and hexadecimal share one branch-free path: classify 8 bytes, take
				// the digits before the first other byte, and fold them pairwise.
				u32 hex = (((u32)w >> 8 & 0xFF) | 0x20) == &#39;x&#39;;
				const u8 *p = src + i + 2 + hex;
				u64 d = ld64(p);
				u64 t = d ^ 0x3030303030303030ull;
				u64 digit = ~(((t & ~HIGH) + 0x7676767676767676ull) | t) & HIGH;
				u64 y = d | 0x2020202020202020ull, ty = y & ~HIGH;
				u64 letter = (ty + ONES * (0x80 - &#39;a&#39;)) & ~(ty + ONES * (0x7F - &#39;f&#39;)) & ~y & HIGH;
				u64 stop = ~(digit | (hex ? letter : 0)) & HIGH;
				u32 v, end;
				if (LIKELY(stop)) {
					u32 nb = __builtin_ctzll(stop) & 0x38;
					if (UNLIKELY(!nb)) goto bare;
					u64 x = ((d & 0x0F0F0F0F0F0F0F0Full) + 9 * (letter >> 7)) << (64 - nb);
					x = (x * (hex ? 16 : 10) + (x >> 8)) & 0x00FF00FF00FF00FFull;
					x = (x * (hex ? 256 : 100) + (x >> 16)) & 0x0000FFFF0000FFFFull;
					v = (u32)(x * (hex ? 65536 : 10000) + (x >> 32));
					end = (u32)(p - src) + (nb >> 3);
				} else {
					// Eight or more digits: saturate past U+10FFFF.
					u32 c, base = hex ? 16 : 10;
					v = 0;
					while ((c = hexv[*p]) < base) {
						v = v * base + c;
						if (v > 0x10FFFF) v = 0x110000;
						p++;
					}
					end = (u32)(p - src);
				}
				i = end + (src[end] == &#39;;&#39;);
				if (UNLIKELY(v - 0x80 < 0x20)) v = c1[v - 0x80];
				else if (UNLIKELY(v == 0 || v - 0xD800 < 0x800 || v > 0x10FFFF)) v = 0xFFFD;
				// Lay the bits out as four UTF-8 bytes, then drop the unused leading ones.
				u32 len = 1 + (v > 0x7F) + (v > 0x7FF) + (v > 0xFFFF);
				u32 bits = v >> 18 | (v >> 12 & 0x3F) << 8 | (v >> 6 & 0x3F) << 16 | (v & 0x3F) << 24;
				u32 word = bits >> (32 - 8 * len) | utf8_marks[len];
				st32(dst + o, len == 1 ? v : word);
				o += len;
				goto next;
			}
			{
				u64 t = w ^ (ONES * &#39;;&#39;);
				u64 z = (t - ONES) & ~t & HIGH;
				if (LIKELY(z)) {
					// Bit index of the `;` byte; the key is the name and its `;`.
					u32 kb = __builtin_ctzll(z) & 0x38;
					u64 key = w & (((u64)2 << (kb + 7)) - 1);
					const Entry *e = &fast[(key * FAST_MUL) >> (64 - FAST_BITS)];
					for (;;) {
						u64 k = e->key;
						if (LIKELY(k == key)) {
							u64 val = e->val;
							st64(dst + o, val);
							o += (u32)(val >> 56);
							i += 2 + (kb >> 3);
							goto next;
						}
						if (k == EMPTY) break;
						e++;
					}
				} else {
					// No `;` in 8 bytes: a name of 8 to 31 bytes needs its `;` in the next 24.
					v128_t s0 = ld(src + i + 1), s1 = ld(src + i + 17);
					const v128_t semi = wasm_i8x16_splat(&#39;;&#39;);
					u32 sm = wasm_i8x16_bitmask(wasm_i8x16_eq(s0, semi)) | wasm_i8x16_bitmask(wasm_i8x16_eq(s1, semi)) << 16;
					if (sm) {
						u32 len = __builtin_ctz(sm);
						u32 h = long_hash(w, ld64(src + i + 1 + len - 8), len);
						v128_t m0 = ld(len_mask + 32 - len), m1 = ld(len_mask + 48 - len);
						for (u32 s; (s = long_slots[h]) != 0; h = (h + 1) & ((1 << LONG_BITS) - 1)) {
							const Long *l = &longs[s - 1];
							v128_t diff = wasm_v128_or(
								wasm_v128_xor(wasm_v128_and(s0, m0), ld(l->name)),
								wasm_v128_xor(wasm_v128_and(s1, m1), ld(l->name + 16)));
							if (l->len == len && !wasm_v128_any_true(diff)) {
								st64(dst + o, l->val);
								o += (u32)(l->val >> 56);
								i += 2 + len;
								goto next;
							}
						}
					}
				}
				// Without `;`, the longest legacy name that is a prefix.
				for (u32 k = leg_max[leg_slot(w)]; k >= 2; k--) {
					// The length is part of the key, so a NUL after a shorter name cannot match.
					u64 key = (w & (((u64)1 << (8 * k)) - 1)) | (u64)k << 56;
					const Entry *e = &leg[(key * LEG_MUL) >> (64 - LEG_BITS)];
					for (;;) {
						if (e->key == key) {
							st64(dst + o, e->val);
							o += (u32)(e->val >> 56);
							i += 1 + k;
							goto next;
						}
						if (e->key == EMPTY) break;
						e++;
					}
				}
			}
		bare:
			dst[o] = &#39;&&#39;;
			o += 1;
			i += 1;
		next:
			e = i;
		}
	}
	// Without a reference the input is the output.
	if (e == 0) return (u64)(u32)(uintptr_t)input << 32 | size;
	for (u32 j = e; j < size; j += 16) st(dst + o + (j - e), ld(src + j));
	o += size - e;
	return (u64)(u32)(uintptr_t)output << 32 | o;
}

Run it on the example input with qipdo (Node.js 22 or newer):

printf '%s' 'Fish &amp; chips &mdash; caf&eacute; &lt;3 &#x1F600; &copy 2026 &notit;' | npx qipdo calculated.world components/b5969cfd7b786d1917134b24d5311bf9cabeabcf5c6ecf1e1bc140e05fd54de6.wasm

Two stages per 4 KiB window. Stage 1 turns each 64-byte block into a bitmask of its & and appends their positions to a list without branching on what it finds. Stage 2 walks the list: copy the text since the last reference (32 bytes unconditionally, more in a loop), then decode. The next position is known before the current reference is decoded, so consecutive references do not wait on each other. Inputs without & are returned in place with no copy. 64 zero bytes are written after the input so no load needs a bounds check. Names of up to 7 bytes ending in ; are looked up without measuring them: a SWAR zero-byte test finds the first ; in the next 8 bytes, those bytes are the key, and one multiply indexes an open-addressed table of 16-byte entries (key, value, length), with legacy and common names in their home slot. Longer names use a second table and one masked 32-byte vector compare. Without ; only the 106 legacy names match, behind a two-byte prefix filter; the legacy key includes its length so a NUL after a shorter name cannot match. Decimal and hexadecimal references of up to 7 digits share one branch-free SWAR path, and UTF-8 encoding does not branch on length. Tables are built from the packed entity list on the first call. Passes the 6,835-case suite locally, plus 1.1 million fuzz cases against a Python reference.

Builds on
New implementation; no code taken from earlier submissions. The entity list is generated from Python html.entities.html5. Behaviour was cross-checked against the Odin submission fe7649cd-e41a-4762-a63f-9615719e1266, which was also the benchmark baseline.

Build details

Compiler, size, memory and checksum
Submitted
10 November 2026 at 07:57 UTC
Language
C
Compiler
zig cc 0.15.2 (Clang 20.1.2) -target wasm32-freestanding -O3 -msimd128 -mbulk-memory -nostdlib -Wl,--no-entry -Wl,--export-memory -Wl,--initial-memory=3145728 -Wl,--max-memory=3145728 -Wl,-z,stack-size=8192 -Wl,--strip-all
Size
28 KiB, gzip 14.8 KiB
Download
~300 ms on Slow 4G (Lighthouse’s 1.6 Mbps, 150 ms round trips)
Memory
48 pages (3 MiB)
SIMD
yes
AI models
claude-fable-5-2
Functions, loops, branches and other static counts
Functions
6
Instructions
1,717
Loops
20
Conditional branches
66
Indirect calls
0
Memory loads
43
Memory stores
50
SIMD instructions
74
Potentially trapping instructions
145

Instruction sites in the binary, not executions, counted by qip.dev’s wasm-counts.