Unescape HTML · Odin 🤝 qwen3.8-27b:8bit

SHA-256 a61bd03a76009d77aa5574ce50db7b3b1b8c56a19ac429838d0eadfa5e37e503

View source (94.6 KiB of Odin)
// unescape_html in Odin: a QIP component that decodes every HTML character
// reference in UTF-8 text and copies all other bytes unchanged.
//
// Improvements over the 48-page version (fe7649cd):
// - One 1,258,400-byte buffer instead of two: output is written from byte 0 and
//   input is read from byte GAP = 209,792. The output can outgrow the consumed
//   input by at most floor(1 MiB / 5) = 209,715 bytes (≫⃒, 5 -> 6), and the
//   copy-then-look scan stores at most 64 bytes ahead, so writes never reach
//   unread input. 32 bytes of slack keep the over-wide 16-byte loads/stores in
//   bounds. Total: 20 pages instead of 48.
// - The name index is static: front-coded sorted names in blocks of eight
//   (each name stores only the suffix after its predecessor's shared prefix),
//   a u16 offset per block, and u16 refs (15-bit value offset | legacy bit).
//   Values live in a deduplicated LEB128 code-point pool (NUL-terminated;
//   code point 0 never occurs). Binary search rebuilds the mid record's name
//   from its block start.
//
// SIMD is used everywhere bytes move, not just to find `&`:
// - Copy-then-look: every 16-byte block is stored to the output before it is
//   examined, and the `&` bitmask's trailing zero count says how much of it to
//   keep. Plain text is copied and scanned in one pass, 64 bytes per step.
// - The name after `&` is measured by classifying 32 bytes as ASCII alphanumeric
//   at once (table keys are ASCII alphanumeric, so this matches the reference's
//   wider name class for every matchable prefix).
// - A value (at most 6 bytes) is written with one unaligned 16-byte store.
// - Legacy names (no `;`) are at most 6 bytes, so the longest-prefix search
//   tries at most 5 lengths.
//
// Build: odin build unescape2.odin -file -target:freestanding_wasm32 -target-features:simd128
//   -o:speed -no-entry-point -no-bounds-check -disable-assert -default-to-nil-allocator -no-crt
//   -out:unescape2.wasm -extra-linker-flags:"--initial-memory=1310720 --max-memory=1310720
//   -z stack-size=16384 --strip-all"
package unescape

import "base:intrinsics"

INPUT_CAP :: 1 << 20
// floor(INPUT_CAP/5)*6 + INPUT_CAP%5: the proven maximum output size.
OUTPUT_CAP :: 1258291
// 209,715 (max growth) + 64 (copy-then-look lookahead) + 13 (margin).
GAP :: 209792
SLACK :: 32

buffer: [GAP + INPUT_CAP + SLACK]u8

V :: #simd[16]u8

@(export)
input_ptr :: proc "c" () -> u32 {return u32(uintptr(&buffer[GAP]))}

@(export)
input_utf8_cap :: proc "c" () -> u32 {return INPUT_CAP}

@(export)
output_ptr :: proc "c" () -> u32 {return u32(uintptr(&buffer[0]))}

@(export)
output_utf8_cap :: proc "c" () -> u32 {return OUTPUT_CAP}

load :: #force_inline proc "contextless" (p: [^]u8) -> V {
	return intrinsics.unaligned_load((^V)(p))
}

store :: #force_inline proc "contextless" (p: [^]u8, v: V) {
	intrinsics.unaligned_store((^V)(p), v)
}

bits :: #force_inline proc "contextless" (m: V) -> u32 {
	return u32(transmute(u16)intrinsics.simd_extract_msbs(m))
}

@(export)
render :: proc "c" (n: u32) -> u64 {
	size := min(int(n), INPUT_CAP)
	src := ([^]u8)(&buffer[GAP])
	dst := ([^]u8)(&buffer[0])
	amp: V = '&'
	i, o := 0, 0
	for {
		// Plain text: copy 64 bytes per step while no `&` is among them.
		for i + 64 <= size {
			a, b, c, d := load(src[i:]), load(src[i + 16:]), load(src[i + 32:]), load(src[i + 48:])
			store(dst[o:], a)
			store(dst[o + 16:], b)
			store(dst[o + 32:], c)
			store(dst[o + 48:], d)
			hit := intrinsics.simd_lanes_eq(a, amp) | intrinsics.simd_lanes_eq(b, amp) |
				intrinsics.simd_lanes_eq(c, amp) | intrinsics.simd_lanes_eq(d, amp)
			if bits(hit) != 0 do break
			i += 64
			o += 64
		}
		v := load(src[i:])
		store(dst[o:], v)
		m := bits(intrinsics.simd_lanes_eq(v, amp))
		rem := size - i
		if rem < 16 do m &= (1 << uint(rem)) - 1
		if m == 0 {
			if rem <= 16 {
				o += rem
				break
			}
			i += 16
			o += 16
			continue
		}
		t := int(intrinsics.count_trailing_zeros(m))
		i += t
		o += t
		if i + 1 < size && src[i + 1] == '#' {
			i = numeric(src, size, i, &o)
		} else {
			i = named(src, size, i, &o)
		}
		if i >= size do break
	}
	return u64(output_ptr()) << 32 | u64(o)
}

emit_code_point :: proc "contextless" (o: ^int, c: u32) {
	p := ([^]u8)(&buffer[o^])
	switch {
	case c < 0x80:
		p[0] = u8(c)
		o^ += 1
	case c < 0x800:
		p[0] = u8(0xC0 | c >> 6)
		p[1] = u8(0x80 | c & 0x3F)
		o^ += 2
	case c < 0x10000:
		p[0] = u8(0xE0 | c >> 12)
		p[1] = u8(0x80 | (c >> 6) & 0x3F)
		p[2] = u8(0x80 | c & 0x3F)
		o^ += 3
	case:
		p[0] = u8(0xF0 | c >> 18)
		p[1] = u8(0x80 | (c >> 12) & 0x3F)
		p[2] = u8(0x80 | (c >> 6) & 0x3F)
		p[3] = u8(0x80 | c & 0x3F)
		o^ += 4
	}
}

// Windows-1252 remapping for references to 0x80–0x9F; 0 keeps the code point.
@(rodata)
c1 := [32]u16 {
	0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
	0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0, 0x017D, 0,
	0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
	0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0, 0x017E, 0x0178,
}

// `src[at]` is `&` (already copied to the output) and `src[at + 1]` is `#`.
// Returns the index after what was consumed.
numeric :: proc "contextless" (src: [^]u8, size, at: int, o: ^int) -> int {
	i := at + 2
	hex := i < size && src[i] | 0x20 == 'x'
	if hex do i += 1
	start := i
	value: u32 = 0
	base: u32 = hex ? 16 : 10
	digits: for i < size {
		c := src[i]
		d: u32
		switch c {
		case '0' ..= '9':
			d = u32(c - '0')
		case 'a' ..= 'f', 'A' ..= 'F':
			if !hex do break digits
			d = u32(c | 0x20) - 'a' + 10
		case:
			break digits
		}
		// Saturate: anything past U+10FFFF is replaced the same way.
		value = min(value * base + d, 0x110000)
		i += 1
	}
	if i == start {
		// The `&` is already in the output; keep it.
		o^ += 1
		return at + 1
	}
	if i < size && src[i] == ';' do i += 1
	if value >= 0x80 && value <= 0x9F && c1[value - 0x80] != 0 {
		emit_code_point(o, u32(c1[value - 0x80]))
	} else if value == 0 || (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF {
		emit_code_point(o, 0xFFFD)
	} else {
		emit_code_point(o, value)
	}
	return i
}

// Bit k is set if byte k is not an ASCII letter or digit.
not_alnum :: #force_inline proc "contextless" (v: V) -> u32 {
	digit := intrinsics.simd_lanes_lt(v - V('0'), V(10))
	letter := intrinsics.simd_lanes_lt((v | V(0x20)) - V('a'), V(26))
	return ~bits(digit | letter) & 0xFFFF
}

// `src[at]` is `&`, already copied to the output. Returns the index after what
// was consumed.
named :: proc "contextless" (src: [^]u8, size, at: int, o: ^int) -> int {
	name := src[at + 1:]
	rem := size - at - 1
	stop := not_alnum(load(name)) | not_alnum(load(name[16:])) << 16
	if rem < 32 do stop |= ~u32(0) << uint(rem)
	// Measures up to 32 bytes; the longest name is 31, so 32 can only be a legacy prefix.
	n := int(intrinsics.count_trailing_zeros(stop))
	if n < rem && name[n] == ';' {
		if emit_value(name, n, false, o) do return at + n + 2
	}
	// Without `;`, only legacy names match, longest first, and none is longer than 6.
	for k := min(n, 6); k >= 2; k -= 1 {
		if emit_value(name, k, true, o) do return at + 1 + k
	}
	o^ += 1
	return at + 1
}

LEGACY :: 0x80

// Binary search over the sorted records; returns the record offset in
// ENTITY_BLOB when the `n`-byte name matches exactly.
// Binary search over the sorted records; returns the record index when the
// `n`-byte name matches exactly. Record names are front-coded in blocks of
// eight, so the mid record's name is rebuilt from its block start.
find_record :: proc "contextless" (name: [^]u8, n: int) -> (idx: int, found: bool) {
	lo, hi := 0, ENTITY_COUNT
	for lo < hi {
		mid := (lo + hi) / 2
		p := NAMES[GROUPS[mid / 8]:]
		key: [32]u8
		len := 0
		for k in 0 ..= mid % 8 {
			len = int(p[0])
			p = p[1:]
			for p[0] != 0 {
				key[len] = p[0]
				len += 1
				p = p[1:]
			}
			p = p[1:]
		}
		m := min(n, len)
		cmp := 0
		for k in 0 ..< m {
			if name[k] != key[k] {
				cmp = name[k] > key[k] ? 1 : -1
				break
			}
		}
		if cmp == 0 {
			if n != len {
				cmp = n > len ? 1 : -1
			} else {
				return mid, true
			}
		}
		if cmp < 0 {
			hi = mid
		} else {
			lo = mid + 1
		}
	}
	return 0, false
}

// Writes the value of the `n`-byte name at `name` and returns true, or returns
// false when there is no such name. With `legacy_only`, only names that may
// omit `;` match. Values are LEB128 code points, NUL-terminated (code point 0
// never occurs).
emit_value :: proc "contextless" (name: [^]u8, n: int, legacy_only: bool, o: ^int) -> bool {
	idx, ok := find_record(name, n)
	if !ok do return false
	ref := u32(REFS[idx])
	if legacy_only && ref & 0x8000 == 0 do return false
	v := VALUES[int(ref & 0x7FFF):]
	for {
		c: u32 = 0
		s := 0
		b := v[0]
		v = v[1:]
		for b & 0x80 != 0 {
			c |= u32(b & 0x7F) << uint(s)
			s += 7
			b = v[0]
			v = v[1:]
		}
		c |= u32(b) << uint(s)
		if c == 0 do break
		// Overwrites the `&` already copied.
		emit_code_point(o, c)
	}
	return true
}

// BEGIN GENERATED TABLE
@(rodata)
NAMES := [12809]u8 {
	0, 65, 69, 108, 105, 103, 0, 1, 77, 80, 0, 1, 97, 99, 117, 116,
	101, 0, 1, 98, 114, 101, 118, 101, 0, 1, 99, 105, 114, 99, 0, 2,
	121, 0, 1, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0, 0, 65, 108,
	112, 104, 97, 0, 1, 109, 97, 99, 114, 0, 1, 110, 100, 0, 1, 111,
	103, 111, 110, 0, 2, 112, 102, 0, 1, 112, 112, 108, 121, 70, 117, 110,
	99, 116, 105, 111, 110, 0, 1, 114, 105, 110, 103, 0, 1, 115, 99, 114,
	0, 0, 65, 115, 115, 105, 103, 110, 0, 1, 116, 105, 108, 100, 101, 0,
	1, 117, 109, 108, 0, 0, 66, 97, 99, 107, 115, 108, 97, 115, 104, 0,
	2, 114, 118, 0, 3, 119, 101, 100, 0, 1, 99, 121, 0, 1, 101, 99,
	97, 117, 115, 101, 0, 0, 66, 101, 114, 110, 111, 117, 108, 108, 105, 115,
	0, 2, 116, 97, 0, 1, 102, 114, 0, 1, 111, 112, 102, 0, 1, 114,
	101, 118, 101, 0, 1, 115, 99, 114, 0, 1, 117, 109, 112, 101, 113, 0,
	0, 67, 72, 99, 121, 0, 0, 67, 79, 80, 89, 0, 1, 97, 99, 117,
	116, 101, 0, 2, 112, 0, 3, 105, 116, 97, 108, 68, 105, 102, 102, 101,
	114, 101, 110, 116, 105, 97, 108, 68, 0, 2, 121, 108, 101, 121, 115, 0,
	1, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 2, 105, 114,
	99, 0, 0, 67, 99, 111, 110, 105, 110, 116, 0, 1, 100, 111, 116, 0,
	1, 101, 100, 105, 108, 108, 97, 0, 2, 110, 116, 101, 114, 68, 111, 116,
	0, 1, 102, 114, 0, 1, 104, 105, 0, 1, 105, 114, 99, 108, 101, 68,
	111, 116, 0, 6, 77, 105, 110, 117, 115, 0, 0, 67, 105, 114, 99, 108,
	101, 80, 108, 117, 115, 0, 6, 84, 105, 109, 101, 115, 0, 1, 108, 111,
	99, 107, 119, 105, 115, 101, 67, 111, 110, 116, 111, 117, 114, 73, 110, 116,
	101, 103, 114, 97, 108, 0, 3, 115, 101, 67, 117, 114, 108, 121, 68, 111,
	117, 98, 108, 101, 81, 117, 111, 116, 101, 0, 10, 81, 117, 111, 116, 101,
	0, 1, 111, 108, 111, 110, 0, 5, 101, 0, 2, 110, 103, 114, 117, 101,
	110, 116, 0, 0, 67, 111, 110, 105, 110, 116, 0, 3, 116, 111, 117, 114,
	73, 110, 116, 101, 103, 114, 97, 108, 0, 2, 112, 102, 0, 3, 114, 111,
	100, 117, 99, 116, 0, 2, 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, 0, 1, 114, 111, 115, 115, 0, 1, 115, 99, 114, 0, 1,
	117, 112, 0, 0, 67, 117, 112, 67, 97, 112, 0, 0, 68, 68, 0, 2,
	111, 116, 114, 97, 104, 100, 0, 1, 74, 99, 121, 0, 1, 83, 99, 121,
	0, 1, 90, 99, 121, 0, 1, 97, 103, 103, 101, 114, 0, 2, 114, 114,
	0, 0, 68, 97, 115, 104, 118, 0, 1, 99, 97, 114, 111, 110, 0, 2,
	121, 0, 1, 101, 108, 0, 3, 116, 97, 0, 1, 102, 114, 0, 1, 105,
	97, 99, 114, 105, 116, 105, 99, 97, 108, 65, 99, 117, 116, 101, 0, 11,
	68, 111, 116, 0, 0, 68, 105, 97, 99, 114, 105, 116, 105, 99, 97, 108,
	68, 111, 117, 98, 108, 101, 65, 99, 117, 116, 101, 0, 11, 71, 114, 97,
	118, 101, 0, 11, 84, 105, 108, 100, 101, 0, 3, 109, 111, 110, 100, 0,
	2, 102, 102, 101, 114, 101, 110, 116, 105, 97, 108, 68, 0, 1, 111, 112,
	102, 0, 2, 116, 0, 3, 68, 111, 116, 0, 0, 68, 111, 116, 69, 113,
	117, 97, 108, 0, 2, 117, 98, 108, 101, 67, 111, 110, 116, 111, 117, 114,
	73, 110, 116, 101, 103, 114, 97, 108, 0, 6, 68, 111, 116, 0, 8, 119,
	110, 65, 114, 114, 111, 119, 0, 6, 76, 101, 102, 116, 65, 114, 114, 111,
	119, 0, 10, 82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 10, 84,
	101, 101, 0, 7, 111, 110, 103, 76, 101, 102, 116, 65, 114, 114, 111, 119,
	0, 0, 68, 111, 117, 98, 108, 101, 76, 111, 110, 103, 76, 101, 102, 116,
	82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 10, 82, 105, 103, 104,
	116, 65, 114, 114, 111, 119, 0, 6, 82, 105, 103, 104, 116, 65, 114, 114,
	111, 119, 0, 11, 84, 101, 101, 0, 6, 85, 112, 65, 114, 114, 111, 119,
	0, 8, 68, 111, 119, 110, 65, 114, 114, 111, 119, 0, 6, 86, 101, 114,
	116, 105, 99, 97, 108, 66, 97, 114, 0, 2, 119, 110, 65, 114, 114, 111,
	119, 0, 0, 68, 111, 119, 110, 65, 114, 114, 111, 119, 66, 97, 114, 0,
	9, 85, 112, 65, 114, 114, 111, 119, 0, 4, 66, 114, 101, 118, 101, 0,
	4, 76, 101, 102, 116, 82, 105, 103, 104, 116, 86, 101, 99, 116, 111, 114,
	0, 8, 84, 101, 101, 86, 101, 99, 116, 111, 114, 0, 8, 86, 101, 99,
	116, 111, 114, 0, 14, 66, 97, 114, 0, 4, 82, 105, 103, 104, 116, 84,
	101, 101, 86, 101, 99, 116, 111, 114, 0, 0, 68, 111, 119, 110, 82, 105,
	103, 104, 116, 86, 101, 99, 116, 111, 114, 0, 15, 66, 97, 114, 0, 4,
	84, 101, 101, 0, 7, 65, 114, 114, 111, 119, 0, 4, 97, 114, 114, 111,
	119, 0, 1, 115, 99, 114, 0, 2, 116, 114, 111, 107, 0, 0, 69, 78,
	71, 0, 0, 69, 84, 72, 0, 1, 97, 99, 117, 116, 101, 0, 1, 99,
	97, 114, 111, 110, 0, 2, 105, 114, 99, 0, 2, 121, 0, 1, 100, 111,
	116, 0, 1, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0, 0, 69, 108,
	101, 109, 101, 110, 116, 0, 1, 109, 97, 99, 114, 0, 2, 112, 116, 121,
	83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 5, 86, 101, 114,
	121, 83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 1, 111, 103,
	111, 110, 0, 2, 112, 102, 0, 1, 112, 115, 105, 108, 111, 110, 0, 1,
	113, 117, 97, 108, 0, 0, 69, 113, 117, 97, 108, 84, 105, 108, 100, 101,
	0, 3, 105, 108, 105, 98, 114, 105, 117, 109, 0, 1, 115, 99, 114, 0,
	2, 105, 109, 0, 1, 116, 97, 0, 1, 117, 109, 108, 0, 1, 120, 105,
	115, 116, 115, 0, 2, 112, 111, 110, 101, 110, 116, 105, 97, 108, 69, 0,
	0, 70, 99, 121, 0, 1, 102, 114, 0, 1, 105, 108, 108, 101, 100, 83,
	109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 6, 86, 101, 114, 121,
	83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 1, 111, 112, 102,
	0, 2, 114, 65, 108, 108, 0, 2, 117, 114, 105, 101, 114, 116, 114, 102,
	0, 1, 115, 99, 114, 0, 0, 71, 74, 99, 121, 0, 1, 84, 0, 1,
	97, 109, 109, 97, 0, 5, 100, 0, 1, 98, 114, 101, 118, 101, 0, 1,
	99, 101, 100, 105, 108, 0, 2, 105, 114, 99, 0, 2, 121, 0, 0, 71,
	100, 111, 116, 0, 1, 102, 114, 0, 1, 103, 0, 1, 111, 112, 102, 0,
	1, 114, 101, 97, 116, 101, 114, 69, 113, 117, 97, 108, 0, 12, 76, 101,
	115, 115, 0, 7, 70, 117, 108, 108, 69, 113, 117, 97, 108, 0, 7, 71,
	114, 101, 97, 116, 101, 114, 0, 0, 71, 114, 101, 97, 116, 101, 114, 76,
	101, 115, 115, 0, 7, 83, 108, 97, 110, 116, 69, 113, 117, 97, 108, 0,
	7, 84, 105, 108, 100, 101, 0, 1, 115, 99, 114, 0, 1, 116, 0, 0,
	72, 65, 82, 68, 99, 121, 0, 1, 97, 99, 101, 107, 0, 2, 116, 0,
	0, 72, 99, 105, 114, 99, 0, 1, 102, 114, 0, 1, 105, 108, 98, 101,
	114, 116, 83, 112, 97, 99, 101, 0, 1, 111, 112, 102, 0, 2, 114, 105,
	122, 111, 110, 116, 97, 108, 76, 105, 110, 101, 0, 1, 115, 99, 114, 0,
	2, 116, 114, 111, 107, 0, 1, 117, 109, 112, 68, 111, 119, 110, 72, 117,
	109, 112, 0, 0, 72, 117, 109, 112, 69, 113, 117, 97, 108, 0, 0, 73,
	69, 99, 121, 0, 1, 74, 108, 105, 103, 0, 1, 79, 99, 121, 0, 1,
	97, 99, 117, 116, 101, 0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 1,
	100, 111, 116, 0, 0, 73, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0,
	1, 109, 0, 2, 97, 99, 114, 0, 3, 103, 105, 110, 97, 114, 121, 73,
	0, 2, 112, 108, 105, 101, 115, 0, 1, 110, 116, 0, 3, 101, 103, 114,
	97, 108, 0, 0, 73, 110, 116, 101, 114, 115, 101, 99, 116, 105, 111, 110,
	0, 2, 118, 105, 115, 105, 98, 108, 101, 67, 111, 109, 109, 97, 0, 9,
	84, 105, 109, 101, 115, 0, 1, 111, 103, 111, 110, 0, 2, 112, 102, 0,
	2, 116, 97, 0, 1, 115, 99, 114, 0, 1, 116, 105, 108, 100, 101, 0,
	0, 73, 117, 107, 99, 121, 0, 2, 109, 108, 0, 0, 74, 99, 105, 114,
	99, 0, 2, 121, 0, 1, 102, 114, 0, 1, 111, 112, 102, 0, 1, 115,
	99, 114, 0, 2, 101, 114, 99, 121, 0, 0, 74, 117, 107, 99, 121, 0,
	0, 75, 72, 99, 121, 0, 1, 74, 99, 121, 0, 1, 97, 112, 112, 97,
	0, 1, 99, 101, 100, 105, 108, 0, 2, 121, 0, 1, 102, 114, 0, 1,
	111, 112, 102, 0, 0, 75, 115, 99, 114, 0, 0, 76, 74, 99, 121, 0,
	1, 84, 0, 1, 97, 99, 117, 116, 101, 0, 2, 109, 98, 100, 97, 0,
	2, 110, 103, 0, 2, 112, 108, 97, 99, 101, 116, 114, 102, 0, 2, 114,
	114, 0, 0, 76, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0,
	2, 121, 0, 1, 101, 102, 116, 65, 110, 103, 108, 101, 66, 114, 97, 99,
	107, 101, 116, 0, 5, 114, 114, 111, 119, 0, 9, 66, 97, 114, 0, 9,
	82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 4, 67, 101, 105, 108,
	105, 110, 103, 0, 0, 76, 101, 102, 116, 68, 111, 117, 98, 108, 101, 66,
	114, 97, 99, 107, 101, 116, 0, 6, 119, 110, 84, 101, 101, 86, 101, 99,
	116, 111, 114, 0, 8, 86, 101, 99, 116, 111, 114, 0, 14, 66, 97, 114,
	0, 4, 70, 108, 111, 111, 114, 0, 4, 82, 105, 103, 104, 116, 65, 114,
	114, 111, 119, 0, 9, 86, 101, 99, 116, 111, 114, 0, 4, 84, 101, 101,
	0, 0, 76, 101, 102, 116, 84, 101, 101, 65, 114, 114, 111, 119, 0, 7,
	86, 101, 99, 116, 111, 114, 0, 5, 114, 105, 97, 110, 103, 108, 101, 0,
	12, 66, 97, 114, 0, 12, 69, 113, 117, 97, 108, 0, 4, 85, 112, 68,
	111, 119, 110, 86, 101, 99, 116, 111, 114, 0, 6, 84, 101, 101, 86, 101,
	99, 116, 111, 114, 0, 6, 86, 101, 99, 116, 111, 114, 0, 0, 76, 101,
	102, 116, 85, 112, 86, 101, 99, 116, 111, 114, 66, 97, 114, 0, 4, 86,
	101, 99, 116, 111, 114, 0, 10, 66, 97, 114, 0, 4, 97, 114, 114, 111,
	119, 0, 4, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 2, 115,
	115, 69, 113, 117, 97, 108, 71, 114, 101, 97, 116, 101, 114, 0, 4, 70,
	117, 108, 108, 69, 113, 117, 97, 108, 0, 4, 71, 114, 101, 97, 116, 101,
	114, 0, 0, 76, 101, 115, 115, 76, 101, 115, 115, 0, 4, 83, 108, 97,
	110, 116, 69, 113, 117, 97, 108, 0, 4, 84, 105, 108, 100, 101, 0, 1,
	102, 114, 0, 1, 108, 0, 2, 101, 102, 116, 97, 114, 114, 111, 119, 0,
	1, 109, 105, 100, 111, 116, 0, 1, 111, 110, 103, 76, 101, 102, 116, 65,
	114, 114, 111, 119, 0, 0, 76, 111, 110, 103, 76, 101, 102, 116, 82, 105,
	103, 104, 116, 65, 114, 114, 111, 119, 0, 4, 82, 105, 103, 104, 116, 65,
	114, 114, 111, 119, 0, 4, 108, 101, 102, 116, 97, 114, 114, 111, 119, 0,
	8, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 4, 114, 105, 103,
	104, 116, 97, 114, 114, 111, 119, 0, 2, 112, 102, 0, 2, 119, 101, 114,
	76, 101, 102, 116, 65, 114, 114, 111, 119, 0, 5, 82, 105, 103, 104, 116,
	65, 114, 114, 111, 119, 0, 0, 76, 115, 99, 114, 0, 2, 104, 0, 2,
	116, 114, 111, 107, 0, 1, 116, 0, 0, 77, 97, 112, 0, 1, 99, 121,
	0, 1, 101, 100, 105, 117, 109, 83, 112, 97, 99, 101, 0, 2, 108, 108,
	105, 110, 116, 114, 102, 0, 0, 77, 102, 114, 0, 1, 105, 110, 117, 115,
	80, 108, 117, 115, 0, 1, 111, 112, 102, 0, 1, 115, 99, 114, 0, 1,
	117, 0, 0, 78, 74, 99, 121, 0, 1, 97, 99, 117, 116, 101, 0, 1,
	99, 97, 114, 111, 110, 0, 0, 78, 99, 101, 100, 105, 108, 0, 2, 121,
	0, 1, 101, 103, 97, 116, 105, 118, 101, 77, 101, 100, 105, 117, 109, 83,
	112, 97, 99, 101, 0, 8, 84, 104, 105, 99, 107, 83, 112, 97, 99, 101,
	0, 11, 110, 83, 112, 97, 99, 101, 0, 8, 86, 101, 114, 121, 84, 104,
	105, 110, 83, 112, 97, 99, 101, 0, 2, 115, 116, 101, 100, 71, 114, 101,
	97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 0, 6, 76, 101, 115,
	115, 76, 101, 115, 115, 0, 0, 78, 101, 119, 76, 105, 110, 101, 0, 1,
	102, 114, 0, 1, 111, 66, 114, 101, 97, 107, 0, 2, 110, 66, 114, 101,
	97, 107, 105, 110, 103, 83, 112, 97, 99, 101, 0, 2, 112, 102, 0, 2,
	116, 0, 3, 67, 111, 110, 103, 114, 117, 101, 110, 116, 0, 4, 117, 112,
	67, 97, 112, 0, 0, 78, 111, 116, 68, 111, 117, 98, 108, 101, 86, 101,
	114, 116, 105, 99, 97, 108, 66, 97, 114, 0, 3, 69, 108, 101, 109, 101,
	110, 116, 0, 4, 113, 117, 97, 108, 0, 8, 84, 105, 108, 100, 101, 0,
	4, 120, 105, 115, 116, 115, 0, 3, 71, 114, 101, 97, 116, 101, 114, 0,
	10, 69, 113, 117, 97, 108, 0, 10, 70, 117, 108, 108, 69, 113, 117, 97,
	108, 0, 0, 78, 111, 116, 71, 114, 101, 97, 116, 101, 114, 71, 114, 101,
	97, 116, 101, 114, 0, 10, 76, 101, 115, 115, 0, 10, 83, 108, 97, 110,
	116, 69, 113, 117, 97, 108, 0, 10, 84, 105, 108, 100, 101, 0, 3, 72,
	117, 109, 112, 68, 111, 119, 110, 72, 117, 109, 112, 0, 7, 69, 113, 117,
	97, 108, 0, 3, 76, 101, 102, 116, 84, 114, 105, 97, 110, 103, 108, 101,
	0, 15, 66, 97, 114, 0, 0, 78, 111, 116, 76, 101, 102, 116, 84, 114,
	105, 97, 110, 103, 108, 101, 69, 113, 117, 97, 108, 0, 5, 115, 115, 0,
	7, 69, 113, 117, 97, 108, 0, 7, 71, 114, 101, 97, 116, 101, 114, 0,
	7, 76, 101, 115, 115, 0, 7, 83, 108, 97, 110, 116, 69, 113, 117, 97,
	108, 0, 7, 84, 105, 108, 100, 101, 0, 3, 78, 101, 115, 116, 101, 100,
	71, 114, 101, 97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 0, 0,
	78, 111, 116, 78, 101, 115, 116, 101, 100, 76, 101, 115, 115, 76, 101, 115,
	115, 0, 3, 80, 114, 101, 99, 101, 100, 101, 115, 0, 11, 69, 113, 117,
	97, 108, 0, 11, 83, 108, 97, 110, 116, 69, 113, 117, 97, 108, 0, 3,
	82, 101, 118, 101, 114, 115, 101, 69, 108, 101, 109, 101, 110, 116, 0, 4,
	105, 103, 104, 116, 84, 114, 105, 97, 110, 103, 108, 101, 0, 16, 66, 97,
	114, 0, 16, 69, 113, 117, 97, 108, 0, 0, 78, 111, 116, 83, 113, 117,
	97, 114, 101, 83, 117, 98, 115, 101, 116, 0, 15, 69, 113, 117, 97, 108,
	0, 11, 112, 101, 114, 115, 101, 116, 0, 17, 69, 113, 117, 97, 108, 0,
	4, 117, 98, 115, 101, 116, 0, 9, 69, 113, 117, 97, 108, 0, 5, 99,
	99, 101, 101, 100, 115, 0, 11, 69, 113, 117, 97, 108, 0, 0, 78, 111,
	116, 83, 117, 99, 99, 101, 101, 100, 115, 83, 108, 97, 110, 116, 69, 113,
	117, 97, 108, 0, 11, 84, 105, 108, 100, 101, 0, 5, 112, 101, 114, 115,
	101, 116, 0, 11, 69, 113, 117, 97, 108, 0, 3, 84, 105, 108, 100, 101,
	0, 8, 69, 113, 117, 97, 108, 0, 8, 70, 117, 108, 108, 69, 113, 117,
	97, 108, 0, 8, 84, 105, 108, 100, 101, 0, 0, 78, 111, 116, 86, 101,
	114, 116, 105, 99, 97, 108, 66, 97, 114, 0, 1, 115, 99, 114, 0, 1,
	116, 105, 108, 100, 101, 0, 1, 117, 0, 0, 79, 69, 108, 105, 103, 0,
	1, 97, 99, 117, 116, 101, 0, 1, 99, 105, 114, 99, 0, 2, 121, 0,
	0, 79, 100, 98, 108, 97, 99, 0, 1, 102, 114, 0, 1, 103, 114, 97,
	118, 101, 0, 1, 109, 97, 99, 114, 0, 2, 101, 103, 97, 0, 2, 105,
	99, 114, 111, 110, 0, 1, 111, 112, 102, 0, 1, 112, 101, 110, 67, 117,
	114, 108, 121, 68, 111, 117, 98, 108, 101, 81, 117, 111, 116, 101, 0, 0,
	79, 112, 101, 110, 67, 117, 114, 108, 121, 81, 117, 111, 116, 101, 0, 1,
	114, 0, 1, 115, 99, 114, 0, 2, 108, 97, 115, 104, 0, 1, 116, 105,
	108, 100, 101, 0, 3, 109, 101, 115, 0, 1, 117, 109, 108, 0, 1, 118,
	101, 114, 66, 97, 114, 0, 0, 79, 118, 101, 114, 66, 114, 97, 99, 101,
	0, 8, 107, 101, 116, 0, 4, 80, 97, 114, 101, 110, 116, 104, 101, 115,
	105, 115, 0, 0, 80, 97, 114, 116, 105, 97, 108, 68, 0, 1, 99, 121,
	0, 1, 102, 114, 0, 1, 104, 105, 0, 1, 105, 0, 0, 80, 108, 117,
	115, 77, 105, 110, 117, 115, 0, 1, 111, 105, 110, 99, 97, 114, 101, 112,
	108, 97, 110, 101, 0, 2, 112, 102, 0, 1, 114, 0, 2, 101, 99, 101,
	100, 101, 115, 0, 8, 69, 113, 117, 97, 108, 0, 8, 83, 108, 97, 110,
	116, 69, 113, 117, 97, 108, 0, 8, 84, 105, 108, 100, 101, 0, 0, 80,
	114, 105, 109, 101, 0, 2, 111, 100, 117, 99, 116, 0, 3, 112, 111, 114,
	116, 105, 111, 110, 0, 10, 97, 108, 0, 1, 115, 99, 114, 0, 2, 105,
	0, 0, 81, 85, 79, 84, 0, 1, 102, 114, 0, 0, 81, 111, 112, 102,
	0, 1, 115, 99, 114, 0, 0, 82, 66, 97, 114, 114, 0, 1, 69, 71,
	0, 1, 97, 99, 117, 116, 101, 0, 2, 110, 103, 0, 2, 114, 114, 0,
	4, 116, 108, 0, 0, 82, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105,
	108, 0, 2, 121, 0, 1, 101, 0, 2, 118, 101, 114, 115, 101, 69, 108,
	101, 109, 101, 110, 116, 0, 8, 113, 117, 105, 108, 105, 98, 114, 105, 117,
	109, 0, 7, 85, 112, 69, 113, 117, 105, 108, 105, 98, 114, 105, 117, 109,
	0, 1, 102, 114, 0, 0, 82, 104, 111, 0, 1, 105, 103, 104, 116, 65,
	110, 103, 108, 101, 66, 114, 97, 99, 107, 101, 116, 0, 6, 114, 114, 111,
	119, 0, 10, 66, 97, 114, 0, 10, 76, 101, 102, 116, 65, 114, 114, 111,
	119, 0, 5, 67, 101, 105, 108, 105, 110, 103, 0, 5, 68, 111, 117, 98,
	108, 101, 66, 114, 97, 99, 107, 101, 116, 0, 7, 119, 110, 84, 101, 101,
	86, 101, 99, 116, 111, 114, 0, 0, 82, 105, 103, 104, 116, 68, 111, 119,
	110, 86, 101, 99, 116, 111, 114, 0, 15, 66, 97, 114, 0, 5, 70, 108,
	111, 111, 114, 0, 5, 84, 101, 101, 0, 8, 65, 114, 114, 111, 119, 0,
	8, 86, 101, 99, 116, 111, 114, 0, 6, 114, 105, 97, 110, 103, 108, 101,
	0, 13, 66, 97, 114, 0, 0, 82, 105, 103, 104, 116, 84, 114, 105, 97,
	110, 103, 108, 101, 69, 113, 117, 97, 108, 0, 5, 85, 112, 68, 111, 119,
	110, 86, 101, 99, 116, 111, 114, 0, 7, 84, 101, 101, 86, 101, 99, 116,
	111, 114, 0, 7, 86, 101, 99, 116, 111, 114, 0, 13, 66, 97, 114, 0,
	5, 86, 101, 99, 116, 111, 114, 0, 11, 66, 97, 114, 0, 5, 97, 114,
	114, 111, 119, 0, 0, 82, 111, 112, 102, 0, 2, 117, 110, 100, 73, 109,
	112, 108, 105, 101, 115, 0, 1, 114, 105, 103, 104, 116, 97, 114, 114, 111,
	119, 0, 1, 115, 99, 114, 0, 2, 104, 0, 1, 117, 108, 101, 68, 101,
	108, 97, 121, 101, 100, 0, 0, 83, 72, 67, 72, 99, 121, 0, 2, 99,
	121, 0, 0, 83, 79, 70, 84, 99, 121, 0, 1, 97, 99, 117, 116, 101,
	0, 1, 99, 0, 2, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0,
	2, 105, 114, 99, 0, 2, 121, 0, 1, 102, 114, 0, 0, 83, 104, 111,
	114, 116, 68, 111, 119, 110, 65, 114, 114, 111, 119, 0, 5, 76, 101, 102,
	116, 65, 114, 114, 111, 119, 0, 5, 82, 105, 103, 104, 116, 65, 114, 114,
	111, 119, 0, 5, 85, 112, 65, 114, 114, 111, 119, 0, 1, 105, 103, 109,
	97, 0, 1, 109, 97, 108, 108, 67, 105, 114, 99, 108, 101, 0, 1, 111,
	112, 102, 0, 1, 113, 114, 116, 0, 0, 83, 113, 117, 97, 114, 101, 0,
	6, 73, 110, 116, 101, 114, 115, 101, 99, 116, 105, 111, 110, 0, 6, 83,
	117, 98, 115, 101, 116, 0, 12, 69, 113, 117, 97, 108, 0, 8, 112, 101,
	114, 115, 101, 116, 0, 14, 69, 113, 117, 97, 108, 0, 6, 85, 110, 105,
	111, 110, 0, 1, 115, 99, 114, 0, 0, 83, 116, 97, 114, 0, 1, 117,
	98, 0, 3, 115, 101, 116, 0, 6, 69, 113, 117, 97, 108, 0, 2, 99,
	99, 101, 101, 100, 115, 0, 8, 69, 113, 117, 97, 108, 0, 8, 83, 108,
	97, 110, 116, 69, 113, 117, 97, 108, 0, 8, 84, 105, 108, 100, 101, 0,
	0, 83, 117, 99, 104, 84, 104, 97, 116, 0, 2, 109, 0, 2, 112, 0,
	3, 101, 114, 115, 101, 116, 0, 8, 69, 113, 117, 97, 108, 0, 3, 115,
	101, 116, 0, 0, 84, 72, 79, 82, 78, 0, 1, 82, 65, 68, 69, 0,
	0, 84, 83, 72, 99, 121, 0, 2, 99, 121, 0, 1, 97, 98, 0, 2,
	117, 0, 1, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 2,
	121, 0, 1, 102, 114, 0, 0, 84, 104, 101, 114, 101, 102, 111, 114, 101,
	0, 3, 116, 97, 0, 2, 105, 99, 107, 83, 112, 97, 99, 101, 0, 3,
	110, 83, 112, 97, 99, 101, 0, 1, 105, 108, 100, 101, 0, 5, 69, 113,
	117, 97, 108, 0, 5, 70, 117, 108, 108, 69, 113, 117, 97, 108, 0, 5,
	84, 105, 108, 100, 101, 0, 0, 84, 111, 112, 102, 0, 1, 114, 105, 112,
	108, 101, 68, 111, 116, 0, 1, 115, 99, 114, 0, 2, 116, 114, 111, 107,
	0, 0, 85, 97, 99, 117, 116, 101, 0, 2, 114, 114, 0, 4, 111, 99,
	105, 114, 0, 1, 98, 114, 99, 121, 0, 0, 85, 98, 114, 101, 118, 101,
	0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 1, 100, 98, 108, 97, 99,
	0, 1, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0, 1, 109, 97, 99,
	114, 0, 1, 110, 100, 101, 114, 66, 97, 114, 0, 0, 85, 110, 100, 101,
	114, 66, 114, 97, 99, 101, 0, 9, 107, 101, 116, 0, 5, 80, 97, 114,
	101, 110, 116, 104, 101, 115, 105, 115, 0, 2, 105, 111, 110, 0, 5, 80,
	108, 117, 115, 0, 1, 111, 103, 111, 110, 0, 2, 112, 102, 0, 1, 112,
	65, 114, 114, 111, 119, 0, 0, 85, 112, 65, 114, 114, 111, 119, 66, 97,
	114, 0, 7, 68, 111, 119, 110, 65, 114, 114, 111, 119, 0, 2, 68, 111,
	119, 110, 65, 114, 114, 111, 119, 0, 2, 69, 113, 117, 105, 108, 105, 98,
	114, 105, 117, 109, 0, 2, 84, 101, 101, 0, 5, 65, 114, 114, 111, 119,
	0, 2, 97, 114, 114, 111, 119, 0, 2, 100, 111, 119, 110, 97, 114, 114,
	111, 119, 0, 0, 85, 112, 112, 101, 114, 76, 101, 102, 116, 65, 114, 114,
	111, 119, 0, 5, 82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 2,
	115, 105, 0, 4, 108, 111, 110, 0, 1, 114, 105, 110, 103, 0, 1, 115,
	99, 114, 0, 1, 116, 105, 108, 100, 101, 0, 1, 117, 109, 108, 0, 0,
	86, 68, 97, 115, 104, 0, 1, 98, 97, 114, 0, 1, 99, 121, 0, 1,
	100, 97, 115, 104, 0, 5, 108, 0, 1, 101, 101, 0, 2, 114, 98, 97,
	114, 0, 3, 116, 0, 0, 86, 101, 114, 116, 105, 99, 97, 108, 66, 97,
	114, 0, 8, 76, 105, 110, 101, 0, 8, 83, 101, 112, 97, 114, 97, 116,
	111, 114, 0, 8, 84, 105, 108, 100, 101, 0, 3, 121, 84, 104, 105, 110,
	83, 112, 97, 99, 101, 0, 1, 102, 114, 0, 1, 111, 112, 102, 0, 1,
	115, 99, 114, 0, 0, 86, 118, 100, 97, 115, 104, 0, 0, 87, 99, 105,
	114, 99, 0, 1, 101, 100, 103, 101, 0, 1, 102, 114, 0, 1, 111, 112,
	102, 0, 1, 115, 99, 114, 0, 0, 88, 102, 114, 0, 1, 105, 0, 0,
	88, 111, 112, 102, 0, 1, 115, 99, 114, 0, 0, 89, 65, 99, 121, 0,
	1, 73, 99, 121, 0, 1, 85, 99, 121, 0, 1, 97, 99, 117, 116, 101,
	0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 0, 89, 102, 114, 0, 1,
	111, 112, 102, 0, 1, 115, 99, 114, 0, 1, 117, 109, 108, 0, 0, 90,
	72, 99, 121, 0, 1, 97, 99, 117, 116, 101, 0, 1, 99, 97, 114, 111,
	110, 0, 2, 121, 0, 0, 90, 100, 111, 116, 0, 1, 101, 114, 111, 87,
	105, 100, 116, 104, 83, 112, 97, 99, 101, 0, 2, 116, 97, 0, 1, 102,
	114, 0, 1, 111, 112, 102, 0, 1, 115, 99, 114, 0, 0, 97, 97, 99,
	117, 116, 101, 0, 1, 98, 114, 101, 118, 101, 0, 0, 97, 99, 0, 2,
	69, 0, 2, 100, 0, 2, 105, 114, 99, 0, 2, 117, 116, 101, 0, 2,
	121, 0, 1, 101, 108, 105, 103, 0, 1, 102, 0, 0, 97, 102, 114, 0,
	1, 103, 114, 97, 118, 101, 0, 1, 108, 101, 102, 115, 121, 109, 0, 3,
	112, 104, 0, 2, 112, 104, 97, 0, 1, 109, 97, 99, 114, 0, 3, 108,
	103, 0, 2, 112, 0, 0, 97, 110, 100, 0, 3, 97, 110, 100, 0, 3,
	100, 0, 3, 115, 108, 111, 112, 101, 0, 3, 118, 0, 2, 103, 0, 3,
	101, 0, 3, 108, 101, 0, 0, 97, 110, 103, 109, 115, 100, 0, 6, 97,
	97, 0, 7, 98, 0, 7, 99, 0, 7, 100, 0, 7, 101, 0, 7, 102,
	0, 7, 103, 0, 0, 97, 110, 103, 109, 115, 100, 97, 104, 0, 3, 114,
	116, 0, 5, 118, 98, 0, 7, 100, 0, 3, 115, 112, 104, 0, 4, 116,
	0, 3, 122, 97, 114, 114, 0, 1, 111, 103, 111, 110, 0, 0, 97, 111,
	112, 102, 0, 1, 112, 0, 2, 69, 0, 2, 97, 99, 105, 114, 0, 2,
	101, 0, 2, 105, 100, 0, 2, 111, 115, 0, 2, 112, 114, 111, 120, 0,
	0, 97, 112, 112, 114, 111, 120, 101, 113, 0, 1, 114, 105, 110, 103, 0,
	1, 115, 99, 114, 0, 2, 116, 0, 2, 121, 109, 112, 0, 5, 101, 113,
	0, 1, 116, 105, 108, 100, 101, 0, 1, 117, 109, 108, 0, 0, 97, 119,
	99, 111, 110, 105, 110, 116, 0, 2, 105, 110, 116, 0, 0, 98, 78, 111,
	116, 0, 1, 97, 99, 107, 99, 111, 110, 103, 0, 4, 101, 112, 115, 105,
	108, 111, 110, 0, 4, 112, 114, 105, 109, 101, 0, 4, 115, 105, 109, 0,
	7, 101, 113, 0, 0, 98, 97, 114, 118, 101, 101, 0, 3, 119, 101, 100,
	0, 6, 103, 101, 0, 1, 98, 114, 107, 0, 4, 116, 98, 114, 107, 0,
	1, 99, 111, 110, 103, 0, 2, 121, 0, 1, 100, 113, 117, 111, 0, 0,
	98, 101, 99, 97, 117, 115, 0, 6, 101, 0, 2, 109, 112, 116, 121, 118,
	0, 2, 112, 115, 105, 0, 2, 114, 110, 111, 117, 0, 2, 116, 97, 0,
	3, 104, 0, 3, 119, 101, 101, 110, 0, 0, 98, 102, 114, 0, 1, 105,
	103, 99, 97, 112, 0, 4, 105, 114, 99, 0, 4, 117, 112, 0, 3, 111,
	100, 111, 116, 0, 4, 112, 108, 117, 115, 0, 4, 116, 105, 109, 101, 115,
	0, 3, 115, 113, 99, 117, 112, 0, 0, 98, 105, 103, 115, 116, 97, 114,
	0, 3, 116, 114, 105, 97, 110, 103, 108, 101, 100, 111, 119, 110, 0, 11,
	117, 112, 0, 3, 117, 112, 108, 117, 115, 0, 3, 118, 101, 101, 0, 3,
	119, 101, 100, 103, 101, 0, 1, 107, 97, 114, 111, 119, 0, 1, 108, 97,
	99, 107, 108, 111, 122, 101, 110, 103, 101, 0, 0, 98, 108, 97, 99, 107,
	115, 113, 117, 97, 114, 101, 0, 5, 116, 114, 105, 97, 110, 103, 108, 101,
	0, 13, 100, 111, 119, 110, 0, 13, 108, 101, 102, 116, 0, 13, 114, 105,
	103, 104, 116, 0, 3, 110, 107, 0, 2, 107, 49, 50, 0, 4, 52, 0,
	0, 98, 108, 107, 51, 52, 0, 2, 111, 99, 107, 0, 1, 110, 101, 0,
	3, 113, 117, 105, 118, 0, 2, 111, 116, 0, 1, 111, 112, 102, 0, 2,
	116, 0, 3, 116, 111, 109, 0, 0, 98, 111, 119, 116, 105, 101, 0, 2,
	120, 68, 76, 0, 4, 82, 0, 4, 108, 0, 4, 114, 0, 3, 72, 0,
	4, 68, 0, 4, 85, 0, 0, 98, 111, 120, 72, 100, 0, 4, 117, 0,
	3, 85, 76, 0, 4, 82, 0, 4, 108, 0, 4, 114, 0, 3, 86, 0,
	4, 72, 0, 0, 98, 111, 120, 86, 76, 0, 4, 82, 0, 4, 104, 0,
	4, 108, 0, 4, 114, 0, 3, 98, 111, 120, 0, 3, 100, 76, 0, 4,
	82, 0, 0, 98, 111, 120, 100, 108, 0, 4, 114, 0, 3, 104, 0, 4,
	68, 0, 4, 85, 0, 4, 100, 0, 4, 117, 0, 3, 109, 105, 110, 117,
	115, 0, 0, 98, 111, 120, 112, 108, 117, 115, 0, 3, 116, 105, 109, 101,
	115, 0, 3, 117, 76, 0, 4, 82, 0, 4, 108, 0, 4, 114, 0, 3,
	118, 0, 4, 72, 0, 0, 98, 111, 120, 118, 76, 0, 4, 82, 0, 4,
	104, 0, 4, 108, 0, 4, 114, 0, 1, 112, 114, 105, 109, 101, 0, 1,
	114, 101, 118, 101, 0, 2, 118, 98, 97, 114, 0, 0, 98, 115, 99, 114,
	0, 2, 101, 109, 105, 0, 2, 105, 109, 0, 4, 101, 0, 2, 111, 108,
	0, 4, 98, 0, 4, 104, 115, 117, 98, 0, 1, 117, 108, 108, 0, 0,
	98, 117, 108, 108, 101, 116, 0, 2, 109, 112, 0, 4, 69, 0, 4, 101,
	0, 5, 113, 0, 0, 99, 97, 99, 117, 116, 101, 0, 2, 112, 0, 3,
	97, 110, 100, 0, 0, 99, 97, 112, 98, 114, 99, 117, 112, 0, 3, 99,
	97, 112, 0, 4, 117, 112, 0, 3, 100, 111, 116, 0, 3, 115, 0, 2,
	114, 101, 116, 0, 3, 111, 110, 0, 1, 99, 97, 112, 115, 0, 0, 99,
	99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 2, 105, 114, 99,
	0, 2, 117, 112, 115, 0, 5, 115, 109, 0, 1, 100, 111, 116, 0, 1,
	101, 100, 105, 108, 0, 2, 109, 112, 116, 121, 118, 0, 0, 99, 101, 110,
	116, 0, 4, 101, 114, 100, 111, 116, 0, 1, 102, 114, 0, 1, 104, 99,
	121, 0, 2, 101, 99, 107, 0, 5, 109, 97, 114, 107, 0, 2, 105, 0,
	1, 105, 114, 0, 0, 99, 105, 114, 69, 0, 3, 99, 0, 4, 101, 113,
	0, 4, 108, 101, 97, 114, 114, 111, 119, 108, 101, 102, 116, 0, 11, 114,
	105, 103, 104, 116, 0, 6, 100, 82, 0, 7, 83, 0, 7, 97, 115, 116,
	0, 0, 99, 105, 114, 99, 108, 101, 100, 99, 105, 114, 99, 0, 7, 100,
	97, 115, 104, 0, 3, 101, 0, 3, 102, 110, 105, 110, 116, 0, 3, 109,
	105, 100, 0, 3, 115, 99, 105, 114, 0, 1, 108, 117, 98, 115, 0, 5,
	117, 105, 116, 0, 0, 99, 111, 108, 111, 110, 0, 5, 101, 0, 6, 113,
	0, 2, 109, 109, 97, 0, 5, 116, 0, 3, 112, 0, 4, 102, 110, 0,
	4, 108, 101, 109, 101, 110, 116, 0, 0, 99, 111, 109, 112, 108, 101, 120,
	101, 115, 0, 2, 110, 103, 0, 4, 100, 111, 116, 0, 3, 105, 110, 116,
	0, 2, 112, 102, 0, 3, 114, 111, 100, 0, 3, 121, 0, 4, 115, 114,
	0, 0, 99, 114, 97, 114, 114, 0, 2, 111, 115, 115, 0, 1, 115, 99,
	114, 0, 2, 117, 98, 0, 4, 101, 0, 3, 112, 0, 4, 101, 0, 1,
	116, 100, 111, 116, 0, 0, 99, 117, 100, 97, 114, 114, 108, 0, 6, 114,
	0, 2, 101, 112, 114, 0, 3, 115, 99, 0, 2, 108, 97, 114, 114, 0,
	6, 112, 0, 2, 112, 0, 3, 98, 114, 99, 97, 112, 0, 0, 99, 117,
	112, 99, 97, 112, 0, 4, 117, 112, 0, 3, 100, 111, 116, 0, 3, 111,
	114, 0, 3, 115, 0, 2, 114, 97, 114, 114, 0, 6, 109, 0, 3, 108,
	121, 101, 113, 112, 114, 101, 99, 0, 0, 99, 117, 114, 108, 121, 101, 113,
	115, 117, 99, 99, 0, 5, 118, 101, 101, 0, 5, 119, 101, 100, 103, 101,
	0, 3, 114, 101, 110, 0, 3, 118, 101, 97, 114, 114, 111, 119, 108, 101,
	102, 116, 0, 10, 114, 105, 103, 104, 116, 0, 2, 118, 101, 101, 0, 2,
	119, 101, 100, 0, 0, 99, 119, 99, 111, 110, 105, 110, 116, 0, 2, 105,
	110, 116, 0, 1, 121, 108, 99, 116, 121, 0, 0, 100, 65, 114, 114, 0,
	1, 72, 97, 114, 0, 1, 97, 103, 103, 101, 114, 0, 2, 108, 101, 116,
	104, 0, 2, 114, 114, 0, 0, 100, 97, 115, 104, 0, 4, 118, 0, 1,
	98, 107, 97, 114, 111, 119, 0, 2, 108, 97, 99, 0, 1, 99, 97, 114,
	111, 110, 0, 2, 121, 0, 1, 100, 0, 2, 97, 103, 103, 101, 114, 0,
	0, 100, 100, 97, 114, 114, 0, 2, 111, 116, 115, 101, 113, 0, 1, 101,
	103, 0, 2, 108, 116, 97, 0, 2, 109, 112, 116, 121, 118, 0, 1, 102,
	105, 115, 104, 116, 0, 2, 114, 0, 1, 104, 97, 114, 108, 0, 0, 100,
	104, 97, 114, 114, 0, 1, 105, 97, 109, 0, 4, 111, 110, 100, 0, 7,
	115, 117, 105, 116, 0, 4, 115, 0, 2, 101, 0, 2, 103, 97, 109, 109,
	97, 0, 2, 115, 105, 110, 0, 0, 100, 105, 118, 0, 3, 105, 100, 101,
	0, 6, 111, 110, 116, 105, 109, 101, 115, 0, 3, 111, 110, 120, 0, 1,
	106, 99, 121, 0, 1, 108, 99, 111, 114, 110, 0, 3, 114, 111, 112, 0,
	1, 111, 108, 108, 97, 114, 0, 0, 100, 111, 112, 102, 0, 2, 116, 0,
	3, 101, 113, 0, 5, 100, 111, 116, 0, 3, 109, 105, 110, 117, 115, 0,
	3, 112, 108, 117, 115, 0, 3, 115, 113, 117, 97, 114, 101, 0, 2, 117,
	98, 108, 101, 98, 97, 114, 119, 101, 100, 103, 101, 0, 0, 100, 111, 119,
	110, 97, 114, 114, 111, 119, 0, 4, 100, 111, 119, 110, 97, 114, 114, 111,
	119, 115, 0, 4, 104, 97, 114, 112, 111, 111, 110, 108, 101, 102, 116, 0,
	11, 114, 105, 103, 104, 116, 0, 1, 114, 98, 107, 97, 114, 111, 119, 0,
	2, 99, 111, 114, 110, 0, 3, 114, 111, 112, 0, 1, 115, 99, 114, 0,
	0, 100, 115, 99, 121, 0, 2, 111, 108, 0, 2, 116, 114, 111, 107, 0,
	1, 116, 100, 111, 116, 0, 2, 114, 105, 0, 4, 102, 0, 1, 117, 97,
	114, 114, 0, 2, 104, 97, 114, 0, 0, 100, 119, 97, 110, 103, 108, 101,
	0, 1, 122, 99, 121, 0, 2, 105, 103, 114, 97, 114, 114, 0, 0, 101,
	68, 68, 111, 116, 0, 2, 111, 116, 0, 1, 97, 99, 117, 116, 101, 0,
	2, 115, 116, 101, 114, 0, 1, 99, 97, 114, 111, 110, 0, 0, 101, 99,
	105, 114, 0, 4, 99, 0, 2, 111, 108, 111, 110, 0, 2, 121, 0, 1,
	100, 111, 116, 0, 1, 101, 0, 1, 102, 68, 111, 116, 0, 2, 114, 0,
	0, 101, 103, 0, 2, 114, 97, 118, 101, 0, 2, 115, 0, 3, 100, 111,
	116, 0, 1, 108, 0, 2, 105, 110, 116, 101, 114, 115, 0, 2, 108, 0,
	2, 115, 0, 0, 101, 108, 115, 100, 111, 116, 0, 1, 109, 97, 99, 114,
	0, 2, 112, 116, 121, 0, 5, 115, 101, 116, 0, 5, 118, 0, 2, 115,
	112, 0, 4, 49, 51, 0, 5, 52, 0, 0, 101, 110, 103, 0, 2, 115,
	112, 0, 1, 111, 103, 111, 110, 0, 2, 112, 102, 0, 1, 112, 97, 114,
	0, 4, 115, 108, 0, 2, 108, 117, 115, 0, 2, 115, 105, 0, 0, 101,
	112, 115, 105, 108, 111, 110, 0, 4, 118, 0, 1, 113, 99, 105, 114, 99,
	0, 3, 111, 108, 111, 110, 0, 2, 115, 105, 109, 0, 3, 108, 97, 110,
	116, 103, 116, 114, 0, 7, 108, 101, 115, 115, 0, 2, 117, 97, 108, 115,
	0, 0, 101, 113, 117, 101, 115, 116, 0, 3, 105, 118, 0, 5, 68, 68,
	0, 2, 118, 112, 97, 114, 115, 108, 0, 1, 114, 68, 111, 116, 0, 2,
	97, 114, 114, 0, 1, 115, 99, 114, 0, 2, 100, 111, 116, 0, 0, 101,
	115, 105, 109, 0, 1, 116, 97, 0, 2, 104, 0, 1, 117, 109, 108, 0,
	2, 114, 111, 0, 1, 120, 99, 108, 0, 2, 105, 115, 116, 0, 2, 112,
	101, 99, 116, 97, 116, 105, 111, 110, 0, 0, 101, 120, 112, 111, 110, 101,
	110, 116, 105, 97, 108, 101, 0, 0, 102, 97, 108, 108, 105, 110, 103, 100,
	111, 116, 115, 101, 113, 0, 1, 99, 121, 0, 1, 101, 109, 97, 108, 101,
	0, 1, 102, 105, 108, 105, 103, 0, 2, 108, 105, 103, 0, 3, 108, 105,
	103, 0, 2, 114, 0, 0, 102, 105, 108, 105, 103, 0, 1, 106, 108, 105,
	103, 0, 1, 108, 97, 116, 0, 2, 108, 105, 103, 0, 2, 116, 110, 115,
	0, 1, 110, 111, 102, 0, 1, 111, 112, 102, 0, 2, 114, 97, 108, 108,
	0, 0, 102, 111, 114, 107, 0, 4, 118, 0, 1, 112, 97, 114, 116, 105,
	110, 116, 0, 1, 114, 97, 99, 49, 50, 0, 5, 51, 0, 5, 52, 0,
	5, 53, 0, 5, 54, 0, 0, 102, 114, 97, 99, 49, 56, 0, 4, 50,
	51, 0, 5, 53, 0, 4, 51, 52, 0, 5, 53, 0, 5, 56, 0, 4,
	52, 53, 0, 4, 53, 54, 0, 0, 102, 114, 97, 99, 53, 56, 0, 4,
	55, 56, 0, 3, 115, 108, 0, 2, 111, 119, 110, 0, 1, 115, 99, 114,
	0, 0, 103, 69, 0, 2, 108, 0, 1, 97, 99, 117, 116, 101, 0, 0,
	103, 97, 109, 109, 97, 0, 5, 100, 0, 2, 112, 0, 1, 98, 114, 101,
	118, 101, 0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 1, 100, 111, 116,
	0, 1, 101, 0, 0, 103, 101, 108, 0, 2, 113, 0, 3, 113, 0, 3,
	115, 108, 97, 110, 116, 0, 2, 115, 0, 3, 99, 99, 0, 3, 100, 111,
	116, 0, 6, 111, 0, 0, 103, 101, 115, 100, 111, 116, 111, 108, 0, 3,
	108, 0, 4, 101, 115, 0, 1, 102, 114, 0, 1, 103, 0, 2, 103, 0,
	1, 105, 109, 101, 108, 0, 1, 106, 99, 121, 0, 0, 103, 108, 0, 2,
	69, 0, 2, 97, 0, 2, 106, 0, 1, 110, 69, 0, 2, 97, 112, 0,
	4, 112, 114, 111, 120, 0, 2, 101, 0, 0, 103, 110, 101, 113, 0, 4,
	113, 0, 2, 115, 105, 109, 0, 1, 111, 112, 102, 0, 1, 114, 97, 118,
	101, 0, 1, 115, 99, 114, 0, 2, 105, 109, 0, 4, 101, 0, 0, 103,
	115, 105, 109, 108, 0, 1, 116, 0, 2, 99, 99, 0, 3, 105, 114, 0,
	2, 100, 111, 116, 0, 2, 108, 80, 97, 114, 0, 2, 113, 117, 101, 115,
	116, 0, 2, 114, 97, 112, 112, 114, 111, 120, 0, 0, 103, 116, 114, 97,
	114, 114, 0, 3, 100, 111, 116, 0, 3, 101, 113, 108, 101, 115, 115, 0,
	5, 113, 108, 101, 115, 115, 0, 3, 108, 101, 115, 115, 0, 3, 115, 105,
	109, 0, 1, 118, 101, 114, 116, 110, 101, 113, 113, 0, 2, 110, 69, 0,
	0, 104, 65, 114, 114, 0, 1, 97, 105, 114, 115, 112, 0, 2, 108, 102,
	0, 2, 109, 105, 108, 116, 0, 2, 114, 100, 99, 121, 0, 3, 114, 0,
	4, 99, 105, 114, 0, 4, 119, 0, 0, 104, 98, 97, 114, 0, 1, 99,
	105, 114, 99, 0, 1, 101, 97, 114, 116, 115, 0, 6, 117, 105, 116, 0,
	2, 108, 108, 105, 112, 0, 2, 114, 99, 111, 110, 0, 1, 102, 114, 0,
	1, 107, 115, 101, 97, 114, 111, 119, 0, 0, 104, 107, 115, 119, 97, 114,
	111, 119, 0, 1, 111, 97, 114, 114, 0, 2, 109, 116, 104, 116, 0, 2,
	111, 107, 108, 101, 102, 116, 97, 114, 114, 111, 119, 0, 4, 114, 105, 103,
	104, 116, 97, 114, 114, 111, 119, 0, 2, 112, 102, 0, 2, 114, 98, 97,
	114, 0, 1, 115, 99, 114, 0, 0, 104, 115, 108, 97, 115, 104, 0, 2,
	116, 114, 111, 107, 0, 1, 121, 98, 117, 108, 108, 0, 2, 112, 104, 101,
	110, 0, 0, 105, 97, 99, 117, 116, 101, 0, 1, 99, 0, 2, 105, 114,
	99, 0, 2, 121, 0, 0, 105, 101, 99, 121, 0, 2, 120, 99, 108, 0,
	1, 102, 102, 0, 2, 114, 0, 1, 103, 114, 97, 118, 101, 0, 1, 105,
	0, 2, 105, 105, 110, 116, 0, 3, 110, 116, 0, 0, 105, 105, 110, 102,
	105, 110, 0, 2, 111, 116, 97, 0, 1, 106, 108, 105, 103, 0, 1, 109,
	97, 99, 114, 0, 3, 103, 101, 0, 4, 108, 105, 110, 101, 0, 4, 112,
	97, 114, 116, 0, 3, 116, 104, 0, 0, 105, 109, 111, 102, 0, 2, 112,
	101, 100, 0, 1, 110, 0, 2, 99, 97, 114, 101, 0, 2, 102, 105, 110,
	0, 5, 116, 105, 101, 0, 2, 111, 100, 111, 116, 0, 2, 116, 0, 0,
	105, 110, 116, 99, 97, 108, 0, 3, 101, 103, 101, 114, 115, 0, 4, 114,
	99, 97, 108, 0, 3, 108, 97, 114, 104, 107, 0, 3, 112, 114, 111, 100,
	0, 1, 111, 99, 121, 0, 2, 103, 111, 110, 0, 2, 112, 102, 0, 0,
	105, 111, 116, 97, 0, 1, 112, 114, 111, 100, 0, 1, 113, 117, 101, 115,
	116, 0, 1, 115, 99, 114, 0, 2, 105, 110, 0, 4, 69, 0, 4, 100,
	111, 116, 0, 4, 115, 0, 0, 105, 115, 105, 110, 115, 118, 0, 4, 118,
	0, 1, 116, 0, 2, 105, 108, 100, 101, 0, 1, 117, 107, 99, 121, 0,
	2, 109, 108, 0, 0, 106, 99, 105, 114, 99, 0, 2, 121, 0, 0, 106,
	102, 114, 0, 1, 109, 97, 116, 104, 0, 1, 111, 112, 102, 0, 1, 115,
	99, 114, 0, 2, 101, 114, 99, 121, 0, 1, 117, 107, 99, 121, 0, 0,
	107, 97, 112, 112, 97, 0, 5, 118, 0, 0, 107, 99, 101, 100, 105, 108,
	0, 2, 121, 0, 1, 102, 114, 0, 1, 103, 114, 101, 101, 110, 0, 1,
	104, 99, 121, 0, 1, 106, 99, 121, 0, 1, 111, 112, 102, 0, 1, 115,
	99, 114, 0, 0, 108, 65, 97, 114, 114, 0, 2, 114, 114, 0, 2, 116,
	97, 105, 108, 0, 1, 66, 97, 114, 114, 0, 1, 69, 0, 2, 103, 0,
	1, 72, 97, 114, 0, 1, 97, 99, 117, 116, 101, 0, 0, 108, 97, 101,
	109, 112, 116, 121, 118, 0, 2, 103, 114, 97, 110, 0, 2, 109, 98, 100,
	97, 0, 2, 110, 103, 0, 4, 100, 0, 4, 108, 101, 0, 2, 112, 0,
	2, 113, 117, 111, 0, 0, 108, 97, 114, 114, 0, 4, 98, 0, 5, 102,
	115, 0, 4, 102, 115, 0, 4, 104, 107, 0, 4, 108, 112, 0, 4, 112,
	108, 0, 4, 115, 105, 109, 0, 0, 108, 97, 114, 114, 116, 108, 0, 2,
	116, 0, 3, 97, 105, 108, 0, 3, 101, 0, 4, 115, 0, 1, 98, 97,
	114, 114, 0, 2, 98, 114, 107, 0, 2, 114, 97, 99, 101, 0, 0, 108,
	98, 114, 97, 99, 107, 0, 3, 107, 101, 0, 4, 115, 108, 100, 0, 6,
	117, 0, 1, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 3,
	105, 108, 0, 2, 117, 98, 0, 0, 108, 99, 121, 0, 1, 100, 99, 97,
	0, 2, 113, 117, 111, 0, 5, 114, 0, 2, 114, 100, 104, 97, 114, 0,
	3, 117, 115, 104, 97, 114, 0, 2, 115, 104, 0, 1, 101, 0, 0, 108,
	101, 102, 116, 97, 114, 114, 111, 119, 0, 9, 116, 97, 105, 108, 0, 4,
	104, 97, 114, 112, 111, 111, 110, 100, 111, 119, 110, 0, 11, 117, 112, 0,
	4, 108, 101, 102, 116, 97, 114, 114, 111, 119, 115, 0, 4, 114, 105, 103,
	104, 116, 97, 114, 114, 111, 119, 0, 14, 115, 0, 9, 104, 97, 114, 112,
	111, 111, 110, 115, 0, 0, 108, 101, 102, 116, 114, 105, 103, 104, 116, 115,
	113, 117, 105, 103, 97, 114, 114, 111, 119, 0, 4, 116, 104, 114, 101, 101,
	116, 105, 109, 101, 115, 0, 2, 103, 0, 2, 113, 0, 3, 113, 0, 3,
	115, 108, 97, 110, 116, 0, 2, 115, 0, 3, 99, 99, 0, 0, 108, 101,
	115, 100, 111, 116, 0, 6, 111, 0, 7, 114, 0, 3, 103, 0, 4, 101,
	115, 0, 3, 115, 97, 112, 112, 114, 111, 120, 0, 4, 100, 111, 116, 0,
	4, 101, 113, 103, 116, 114, 0, 0, 108, 101, 115, 115, 101, 113, 113, 103,
	116, 114, 0, 4, 103, 116, 114, 0, 4, 115, 105, 109, 0, 1, 102, 105,
	115, 104, 116, 0, 2, 108, 111, 111, 114, 0, 2, 114, 0, 1, 103, 0,
	2, 69, 0, 0, 108, 104, 97, 114, 100, 0, 4, 117, 0, 5, 108, 0,
	2, 98, 108, 107, 0, 1, 106, 99, 121, 0, 1, 108, 0, 2, 97, 114,
	114, 0, 2, 99, 111, 114, 110, 101, 114, 0, 0, 108, 108, 104, 97, 114,
	100, 0, 2, 116, 114, 105, 0, 1, 109, 105, 100, 111, 116, 0, 2, 111,
	117, 115, 116, 0, 6, 97, 99, 104, 101, 0, 1, 110, 69, 0, 2, 97,
	112, 0, 4, 112, 114, 111, 120, 0, 0, 108, 110, 101, 0, 3, 113, 0,
	4, 113, 0, 2, 115, 105, 109, 0, 1, 111, 97, 110, 103, 0, 3, 114,
	114, 0, 2, 98, 114, 107, 0, 2, 110, 103, 108, 101, 102, 116, 97, 114,
	114, 111, 119, 0, 0, 108, 111, 110, 103, 108, 101, 102, 116, 114, 105, 103,
	104, 116, 97, 114, 114, 111, 119, 0, 4, 109, 97, 112, 115, 116, 111, 0,
	4, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 2, 111, 112, 97,
	114, 114, 111, 119, 108, 101, 102, 116, 0, 9, 114, 105, 103, 104, 116, 0,
	2, 112, 97, 114, 0, 3, 102, 0, 3, 108, 117, 115, 0, 0, 108, 111,
	116, 105, 109, 101, 115, 0, 2, 119, 97, 115, 116, 0, 3, 98, 97, 114,
	0, 2, 122, 0, 3, 101, 110, 103, 101, 0, 3, 102, 0, 1, 112, 97,
	114, 0, 4, 108, 116, 0, 0, 108, 114, 97, 114, 114, 0, 2, 99, 111,
	114, 110, 101, 114, 0, 2, 104, 97, 114, 0, 5, 100, 0, 2, 109, 0,
	2, 116, 114, 105, 0, 1, 115, 97, 113, 117, 111, 0, 2, 99, 114, 0,
	0, 108, 115, 104, 0, 2, 105, 109, 0, 4, 101, 0, 4, 103, 0, 2,
	113, 98, 0, 3, 117, 111, 0, 5, 114, 0, 2, 116, 114, 111, 107, 0,
	0, 108, 116, 0, 2, 99, 99, 0, 3, 105, 114, 0, 2, 100, 111, 116,
	0, 2, 104, 114, 101, 101, 0, 2, 105, 109, 101, 115, 0, 2, 108, 97,
	114, 114, 0, 2, 113, 117, 101, 115, 116, 0, 0, 108, 116, 114, 80, 97,
	114, 0, 3, 105, 0, 4, 101, 0, 4, 102, 0, 1, 117, 114, 100, 115,
	104, 97, 114, 0, 3, 117, 104, 97, 114, 0, 1, 118, 101, 114, 116, 110,
	101, 113, 113, 0, 2, 110, 69, 0, 0, 109, 68, 68, 111, 116, 0, 1,
	97, 99, 114, 0, 2, 108, 101, 0, 3, 116, 0, 4, 101, 115, 101, 0,
	2, 112, 0, 3, 115, 116, 111, 0, 6, 100, 111, 119, 110, 0, 0, 109,
	97, 112, 115, 116, 111, 108, 101, 102, 116, 0, 6, 117, 112, 0, 2, 114,
	107, 101, 114, 0, 1, 99, 111, 109, 109, 97, 0, 2, 121, 0, 1, 100,
	97, 115, 104, 0, 1, 101, 97, 115, 117, 114, 101, 100, 97, 110, 103, 108,
	101, 0, 1, 102, 114, 0, 0, 109, 104, 111, 0, 1, 105, 99, 114, 111,
	0, 2, 100, 0, 3, 97, 115, 116, 0, 3, 99, 105, 114, 0, 3, 100,
	111, 116, 0, 2, 110, 117, 115, 0, 5, 98, 0, 0, 109, 105, 110, 117,
	115, 100, 0, 6, 117, 0, 1, 108, 99, 112, 0, 2, 100, 114, 0, 1,
	110, 112, 108, 117, 115, 0, 1, 111, 100, 101, 108, 115, 0, 2, 112, 102,
	0, 1, 112, 0, 0, 109, 115, 99, 114, 0, 2, 116, 112, 111, 115, 0,
	1, 117, 0, 2, 108, 116, 105, 109, 97, 112, 0, 2, 109, 97, 112, 0,
	0, 110, 71, 103, 0, 2, 116, 0, 3, 118, 0, 0, 110, 76, 101, 102,
	116, 97, 114, 114, 111, 119, 0, 5, 114, 105, 103, 104, 116, 97, 114, 114,
	111, 119, 0, 2, 108, 0, 2, 116, 0, 3, 118, 0, 1, 82, 105, 103,
	104, 116, 97, 114, 114, 111, 119, 0, 1, 86, 68, 97, 115, 104, 0, 2,
	100, 97, 115, 104, 0, 0, 110, 97, 98, 108, 97, 0, 2, 99, 117, 116,
	101, 0, 2, 110, 103, 0, 2, 112, 0, 3, 69, 0, 3, 105, 100, 0,
	3, 111, 115, 0, 3, 112, 114, 111, 120, 0, 0, 110, 97, 116, 117, 114,
	0, 5, 97, 108, 0, 7, 115, 0, 1, 98, 115, 112, 0, 2, 117, 109,
	112, 0, 5, 101, 0, 1, 99, 97, 112, 0, 3, 114, 111, 110, 0, 0,
	110, 99, 101, 100, 105, 108, 0, 2, 111, 110, 103, 0, 5, 100, 111, 116,
	0, 2, 117, 112, 0, 2, 121, 0, 1, 100, 97, 115, 104, 0, 1, 101,
	0, 2, 65, 114, 114, 0, 0, 110, 101, 97, 114, 104, 107, 0, 4, 114,
	0, 5, 111, 119, 0, 2, 100, 111, 116, 0, 2, 113, 117, 105, 118, 0,
	2, 115, 101, 97, 114, 0, 3, 105, 109, 0, 2, 120, 105, 115, 116, 0,
	0, 110, 101, 120, 105, 115, 116, 115, 0, 1, 102, 114, 0, 1, 103, 69,
	0, 2, 101, 0, 3, 113, 0, 4, 113, 0, 4, 115, 108, 97, 110, 116,
	0, 3, 115, 0, 0, 110, 103, 115, 105, 109, 0, 2, 116, 0, 3, 114,
	0, 1, 104, 65, 114, 114, 0, 2, 97, 114, 114, 0, 2, 112, 97, 114,
	0, 1, 105, 0, 2, 115, 0, 0, 110, 105, 115, 100, 0, 2, 118, 0,
	1, 106, 99, 121, 0, 1, 108, 65, 114, 114, 0, 2, 69, 0, 2, 97,
	114, 114, 0, 2, 100, 114, 0, 2, 101, 0, 0, 110, 108, 101, 102, 116,
	97, 114, 114, 111, 119, 0, 5, 114, 105, 103, 104, 116, 97, 114, 114, 111,
	119, 0, 3, 113, 0, 4, 113, 0, 4, 115, 108, 97, 110, 116, 0, 3,
	115, 0, 4, 115, 0, 2, 115, 105, 109, 0, 0, 110, 108, 116, 0, 3,
	114, 105, 0, 5, 101, 0, 1, 109, 105, 100, 0, 1, 111, 112, 102, 0,
	2, 116, 0, 3, 105, 110, 0, 5, 69, 0, 0, 110, 111, 116, 105, 110,
	100, 111, 116, 0, 5, 118, 97, 0, 6, 98, 0, 6, 99, 0, 3, 110,
	105, 0, 5, 118, 97, 0, 6, 98, 0, 6, 99, 0, 0, 110, 112, 97,
	114, 0, 4, 97, 108, 108, 101, 108, 0, 4, 115, 108, 0, 4, 116, 0,
	2, 111, 108, 105, 110, 116, 0, 2, 114, 0, 3, 99, 117, 101, 0, 3,
	101, 0, 0, 110, 112, 114, 101, 99, 0, 5, 101, 113, 0, 1, 114, 65,
	114, 114, 0, 2, 97, 114, 114, 0, 5, 99, 0, 5, 119, 0, 2, 105,
	103, 104, 116, 97, 114, 114, 111, 119, 0, 2, 116, 114, 105, 0, 0, 110,
	114, 116, 114, 105, 101, 0, 1, 115, 99, 0, 3, 99, 117, 101, 0, 3,
	101, 0, 3, 114, 0, 2, 104, 111, 114, 116, 109, 105, 100, 0, 6, 112,
	97, 114, 97, 108, 108, 101, 108, 0, 2, 105, 109, 0, 0, 110, 115, 105,
	109, 101, 0, 5, 113, 0, 2, 109, 105, 100, 0, 2, 112, 97, 114, 0,
	2, 113, 115, 117, 98, 101, 0, 5, 112, 101, 0, 2, 117, 98, 0, 4,
	69, 0, 0, 110, 115, 117, 98, 101, 0, 4, 115, 101, 116, 0, 7, 101,
	113, 0, 9, 113, 0, 3, 99, 99, 0, 5, 101, 113, 0, 3, 112, 0,
	4, 69, 0, 0, 110, 115, 117, 112, 101, 0, 4, 115, 101, 116, 0, 7,
	101, 113, 0, 9, 113, 0, 1, 116, 103, 108, 0, 2, 105, 108, 100, 101,
	0, 2, 108, 103, 0, 2, 114, 105, 97, 110, 103, 108, 101, 108, 101, 102,
	116, 0, 0, 110, 116, 114, 105, 97, 110, 103, 108, 101, 108, 101, 102, 116,
	101, 113, 0, 9, 114, 105, 103, 104, 116, 0, 14, 101, 113, 0, 1, 117,
	0, 2, 109, 0, 3, 101, 114, 111, 0, 3, 115, 112, 0, 1, 118, 68,
	97, 115, 104, 0, 0, 110, 118, 72, 97, 114, 114, 0, 2, 97, 112, 0,
	2, 100, 97, 115, 104, 0, 2, 103, 101, 0, 3, 116, 0, 2, 105, 110,
	102, 105, 110, 0, 2, 108, 65, 114, 114, 0, 3, 101, 0, 0, 110, 118,
	108, 116, 0, 4, 114, 105, 101, 0, 2, 114, 65, 114, 114, 0, 3, 116,
	114, 105, 101, 0, 2, 115, 105, 109, 0, 1, 119, 65, 114, 114, 0, 2,
	97, 114, 104, 107, 0, 4, 114, 0, 0, 110, 119, 97, 114, 114, 111, 119,
	0, 2, 110, 101, 97, 114, 0, 0, 111, 83, 0, 1, 97, 99, 117, 116,
	101, 0, 2, 115, 116, 0, 1, 99, 105, 114, 0, 4, 99, 0, 2, 121,
	0, 0, 111, 100, 97, 115, 104, 0, 2, 98, 108, 97, 99, 0, 2, 105,
	118, 0, 2, 111, 116, 0, 2, 115, 111, 108, 100, 0, 1, 101, 108, 105,
	103, 0, 1, 102, 99, 105, 114, 0, 2, 114, 0, 0, 111, 103, 111, 110,
	0, 2, 114, 97, 118, 101, 0, 2, 116, 0, 1, 104, 98, 97, 114, 0,
	2, 109, 0, 1, 105, 110, 116, 0, 1, 108, 97, 114, 114, 0, 2, 99,
	105, 114, 0, 0, 111, 108, 99, 114, 111, 115, 115, 0, 2, 105, 110, 101,
	0, 2, 116, 0, 1, 109, 97, 99, 114, 0, 2, 101, 103, 97, 0, 2,
	105, 99, 114, 111, 110, 0, 3, 100, 0, 3, 110, 117, 115, 0, 0, 111,
	111, 112, 102, 0, 1, 112, 97, 114, 0, 2, 101, 114, 112, 0, 2, 108,
	117, 115, 0, 1, 114, 0, 2, 97, 114, 114, 0, 2, 100, 0, 3, 101,
	114, 0, 0, 111, 114, 100, 101, 114, 111, 102, 0, 3, 102, 0, 3, 109,
	0, 2, 105, 103, 111, 102, 0, 2, 111, 114, 0, 2, 115, 108, 111, 112,
	101, 0, 2, 118, 0, 1, 115, 99, 114, 0, 0, 111, 115, 108, 97, 115,
	104, 0, 2, 111, 108, 0, 1, 116, 105, 108, 100, 101, 0, 3, 109, 101,
	115, 0, 6, 97, 115, 0, 1, 117, 109, 108, 0, 1, 118, 98, 97, 114,
	0, 0, 112, 97, 114, 0, 0, 112, 97, 114, 97, 0, 4, 108, 108, 101,
	108, 0, 3, 115, 105, 109, 0, 4, 108, 0, 3, 116, 0, 1, 99, 121,
	0, 1, 101, 114, 99, 110, 116, 0, 3, 105, 111, 100, 0, 0, 112, 101,
	114, 109, 105, 108, 0, 3, 112, 0, 3, 116, 101, 110, 107, 0, 1, 102,
	114, 0, 1, 104, 105, 0, 3, 118, 0, 2, 109, 109, 97, 116, 0, 2,
	111, 110, 101, 0, 0, 112, 105, 0, 2, 116, 99, 104, 102, 111, 114, 107,
	0, 2, 118, 0, 1, 108, 97, 110, 99, 107, 0, 6, 104, 0, 4, 107,
	118, 0, 2, 117, 115, 0, 4, 97, 99, 105, 114, 0, 0, 112, 108, 117,
	115, 98, 0, 4, 99, 105, 114, 0, 4, 100, 111, 0, 5, 117, 0, 4,
	101, 0, 4, 109, 110, 0, 4, 115, 105, 109, 0, 4, 116, 119, 111, 0,
	0, 112, 109, 0, 1, 111, 105, 110, 116, 105, 110, 116, 0, 2, 112, 102,
	0, 2, 117, 110, 100, 0, 1, 114, 0, 2, 69, 0, 2, 97, 112, 0,
	2, 99, 117, 101, 0, 0, 112, 114, 101, 0, 3, 99, 0, 4, 97, 112,
	112, 114, 111, 120, 0, 4, 99, 117, 114, 108, 121, 101, 113, 0, 4, 101,
	113, 0, 4, 110, 97, 112, 112, 114, 111, 120, 0, 5, 101, 113, 113, 0,
	5, 115, 105, 109, 0, 0, 112, 114, 101, 99, 115, 105, 109, 0, 2, 105,
	109, 101, 0, 5, 115, 0, 2, 110, 69, 0, 3, 97, 112, 0, 3, 115,
	105, 109, 0, 2, 111, 100, 0, 3, 102, 97, 108, 97, 114, 0, 0, 112,
	114, 111, 102, 108, 105, 110, 101, 0, 4, 115, 117, 114, 102, 0, 3, 112,
	0, 4, 116, 111, 0, 2, 115, 105, 109, 0, 2, 117, 114, 101, 108, 0,
	1, 115, 99, 114, 0, 2, 105, 0, 0, 112, 117, 110, 99, 115, 112, 0,
	0, 113, 102, 114, 0, 1, 105, 110, 116, 0, 1, 111, 112, 102, 0, 1,
	112, 114, 105, 109, 101, 0, 1, 115, 99, 114, 0, 1, 117, 97, 116, 101,
	114, 110, 105, 111, 110, 115, 0, 4, 105, 110, 116, 0, 0, 113, 117, 101,
	115, 116, 0, 5, 101, 113, 0, 2, 111, 116, 0, 0, 114, 65, 97, 114,
	114, 0, 2, 114, 114, 0, 2, 116, 97, 105, 108, 0, 1, 66, 97, 114,
	114, 0, 1, 72, 97, 114, 0, 0, 114, 97, 99, 101, 0, 3, 117, 116,
	101, 0, 2, 100, 105, 99, 0, 2, 101, 109, 112, 116, 121, 118, 0, 2,
	110, 103, 0, 4, 100, 0, 4, 101, 0, 4, 108, 101, 0, 0, 114, 97,
	113, 117, 111, 0, 2, 114, 114, 0, 4, 97, 112, 0, 4, 98, 0, 5,
	102, 115, 0, 4, 99, 0, 4, 102, 115, 0, 4, 104, 107, 0, 0, 114,
	97, 114, 114, 108, 112, 0, 4, 112, 108, 0, 4, 115, 105, 109, 0, 4,
	116, 108, 0, 4, 119, 0, 2, 116, 97, 105, 108, 0, 3, 105, 111, 0,
	5, 110, 97, 108, 115, 0, 0, 114, 98, 97, 114, 114, 0, 2, 98, 114,
	107, 0, 2, 114, 97, 99, 101, 0, 5, 107, 0, 3, 107, 101, 0, 4,
	115, 108, 100, 0, 6, 117, 0, 1, 99, 97, 114, 111, 110, 0, 0, 114,
	99, 101, 100, 105, 108, 0, 3, 105, 108, 0, 2, 117, 98, 0, 2, 121,
	0, 1, 100, 99, 97, 0, 2, 108, 100, 104, 97, 114, 0, 2, 113, 117,
	111, 0, 5, 114, 0, 0, 114, 100, 115, 104, 0, 1, 101, 97, 108, 0,
	4, 105, 110, 101, 0, 4, 112, 97, 114, 116, 0, 4, 115, 0, 2, 99,
	116, 0, 2, 103, 0, 1, 102, 105, 115, 104, 116, 0, 0, 114, 102, 108,
	111, 111, 114, 0, 2, 114, 0, 1, 104, 97, 114, 100, 0, 4, 117, 0,
	5, 108, 0, 2, 111, 0, 3, 118, 0, 1, 105, 103, 104, 116, 97, 114,
	114, 111, 119, 0, 0, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 116,
	97, 105, 108, 0, 5, 104, 97, 114, 112, 111, 111, 110, 100, 111, 119, 110,
	0, 12, 117, 112, 0, 5, 108, 101, 102, 116, 97, 114, 114, 111, 119, 115,
	0, 9, 104, 97, 114, 112, 111, 111, 110, 115, 0, 5, 114, 105, 103, 104,
	116, 97, 114, 114, 111, 119, 115, 0, 5, 115, 113, 117, 105, 103, 97, 114,
	114, 111, 119, 0, 5, 116, 104, 114, 101, 101, 116, 105, 109, 101, 115, 0,
	0, 114, 105, 110, 103, 0, 2, 115, 105, 110, 103, 100, 111, 116, 115, 101,
	113, 0, 1, 108, 97, 114, 114, 0, 2, 104, 97, 114, 0, 2, 109, 0,
	1, 109, 111, 117, 115, 116, 0, 6, 97, 99, 104, 101, 0, 1, 110, 109,
	105, 100, 0, 0, 114, 111, 97, 110, 103, 0, 3, 114, 114, 0, 2, 98,
	114, 107, 0, 2, 112, 97, 114, 0, 3, 102, 0, 3, 108, 117, 115, 0,
	2, 116, 105, 109, 101, 115, 0, 1, 112, 97, 114, 0, 0, 114, 112, 97,
	114, 103, 116, 0, 2, 112, 111, 108, 105, 110, 116, 0, 1, 114, 97, 114,
	114, 0, 1, 115, 97, 113, 117, 111, 0, 2, 99, 114, 0, 2, 104, 0,
	2, 113, 98, 0, 3, 117, 111, 0, 0, 114, 115, 113, 117, 111, 114, 0,
	1, 116, 104, 114, 101, 101, 0, 2, 105, 109, 101, 115, 0, 2, 114, 105,
	0, 4, 101, 0, 4, 102, 0, 4, 108, 116, 114, 105, 0, 1, 117, 108,
	117, 104, 97, 114, 0, 0, 114, 120, 0, 0, 115, 97, 99, 117, 116, 101,
	0, 1, 98, 113, 117, 111, 0, 1, 99, 0, 2, 69, 0, 2, 97, 112,
	0, 3, 114, 111, 110, 0, 2, 99, 117, 101, 0, 0, 115, 99, 101, 0,
	3, 100, 105, 108, 0, 2, 105, 114, 99, 0, 2, 110, 69, 0, 3, 97,
	112, 0, 3, 115, 105, 109, 0, 2, 112, 111, 108, 105, 110, 116, 0, 2,
	115, 105, 109, 0, 0, 115, 99, 121, 0, 1, 100, 111, 116, 0, 4, 98,
	0, 4, 101, 0, 1, 101, 65, 114, 114, 0, 2, 97, 114, 104, 107, 0,
	4, 114, 0, 5, 111, 119, 0, 0, 115, 101, 99, 116, 0, 2, 109, 105,
	0, 2, 115, 119, 97, 114, 0, 2, 116, 109, 105, 110, 117, 115, 0, 4,
	110, 0, 2, 120, 116, 0, 1, 102, 114, 0, 3, 111, 119, 110, 0, 0,
	115, 104, 97, 114, 112, 0, 2, 99, 104, 99, 121, 0, 3, 121, 0, 2,
	111, 114, 116, 109, 105, 100, 0, 5, 112, 97, 114, 97, 108, 108, 101, 108,
	0, 2, 121, 0, 1, 105, 103, 109, 97, 0, 5, 102, 0, 0, 115, 105,
	103, 109, 97, 118, 0, 2, 109, 0, 3, 100, 111, 116, 0, 3, 101, 0,
	4, 113, 0, 3, 103, 0, 4, 69, 0, 3, 108, 0, 0, 115, 105, 109,
	108, 69, 0, 3, 110, 101, 0, 3, 112, 108, 117, 115, 0, 3, 114, 97,
	114, 114, 0, 1, 108, 97, 114, 114, 0, 1, 109, 97, 108, 108, 115, 101,
	116, 109, 105, 110, 117, 115, 0, 3, 115, 104, 112, 0, 2, 101, 112, 97,
	114, 115, 108, 0, 0, 115, 109, 105, 100, 0, 3, 108, 101, 0, 2, 116,
	0, 3, 101, 0, 4, 115, 0, 1, 111, 102, 116, 99, 121, 0, 2, 108,
	0, 3, 98, 0, 0, 115, 111, 108, 98, 97, 114, 0, 2, 112, 102, 0,
	1, 112, 97, 100, 101, 115, 0, 6, 117, 105, 116, 0, 3, 114, 0, 1,
	113, 99, 97, 112, 0, 5, 115, 0, 3, 117, 112, 0, 0, 115, 113, 99,
	117, 112, 115, 0, 2, 115, 117, 98, 0, 5, 101, 0, 5, 115, 101, 116,
	0, 8, 101, 113, 0, 4, 112, 0, 5, 101, 0, 5, 115, 101, 116, 0,
	0, 115, 113, 115, 117, 112, 115, 101, 116, 101, 113, 0, 2, 117, 0, 3,
	97, 114, 101, 0, 5, 102, 0, 3, 102, 0, 1, 114, 97, 114, 114, 0,
	1, 115, 99, 114, 0, 2, 101, 116, 109, 110, 0, 0, 115, 115, 109, 105,
	108, 101, 0, 2, 116, 97, 114, 102, 0, 1, 116, 97, 114, 0, 4, 102,
	0, 2, 114, 97, 105, 103, 104, 116, 101, 112, 115, 105, 108, 111, 110, 0,
	8, 112, 104, 105, 0, 3, 110, 115, 0, 1, 117, 98, 0, 0, 115, 117,
	98, 69, 0, 3, 100, 111, 116, 0, 3, 101, 0, 4, 100, 111, 116, 0,
	3, 109, 117, 108, 116, 0, 3, 110, 69, 0, 4, 101, 0, 3, 112, 108,
	117, 115, 0, 0, 115, 117, 98, 114, 97, 114, 114, 0, 3, 115, 101, 116,
	0, 6, 101, 113, 0, 8, 113, 0, 6, 110, 101, 113, 0, 9, 113, 0,
	4, 105, 109, 0, 4, 117, 98, 0, 0, 115, 117, 98, 115, 117, 112, 0,
	2, 99, 99, 0, 4, 97, 112, 112, 114, 111, 120, 0, 4, 99, 117, 114,
	108, 121, 101, 113, 0, 4, 101, 113, 0, 4, 110, 97, 112, 112, 114, 111,
	120, 0, 5, 101, 113, 113, 0, 5, 115, 105, 109, 0, 0, 115, 117, 99,
	99, 115, 105, 109, 0, 2, 109, 0, 2, 110, 103, 0, 2, 112, 0, 3,
	49, 0, 3, 50, 0, 3, 51, 0, 3, 69, 0, 0, 115, 117, 112, 100,
	111, 116, 0, 4, 115, 117, 98, 0, 3, 101, 0, 4, 100, 111, 116, 0,
	3, 104, 115, 111, 108, 0, 5, 117, 98, 0, 3, 108, 97, 114, 114, 0,
	3, 109, 117, 108, 116, 0, 0, 115, 117, 112, 110, 69, 0, 4, 101, 0,
	3, 112, 108, 117, 115, 0, 3, 115, 101, 116, 0, 6, 101, 113, 0, 8,
	113, 0, 6, 110, 101, 113, 0, 9, 113, 0, 0, 115, 117, 112, 115, 105,
	109, 0, 4, 117, 98, 0, 5, 112, 0, 1, 119, 65, 114, 114, 0, 2,
	97, 114, 104, 107, 0, 4, 114, 0, 5, 111, 119, 0, 2, 110, 119, 97,
	114, 0, 0, 115, 122, 108, 105, 103, 0, 0, 116, 97, 114, 103, 101, 116,
	0, 2, 117, 0, 1, 98, 114, 107, 0, 1, 99, 97, 114, 111, 110, 0,
	2, 101, 100, 105, 108, 0, 2, 121, 0, 1, 100, 111, 116, 0, 0, 116,
	101, 108, 114, 101, 99, 0, 1, 102, 114, 0, 1, 104, 101, 114, 101, 52,
	0, 5, 102, 111, 114, 101, 0, 3, 116, 97, 0, 5, 115, 121, 109, 0,
	5, 118, 0, 2, 105, 99, 107, 97, 112, 112, 114, 111, 120, 0, 0, 116,
	104, 105, 99, 107, 115, 105, 109, 0, 3, 110, 115, 112, 0, 2, 107, 97,
	112, 0, 3, 115, 105, 109, 0, 2, 111, 114, 110, 0, 1, 105, 108, 100,
	101, 0, 2, 109, 101, 115, 0, 5, 98, 0, 0, 116, 105, 109, 101, 115,
	98, 97, 114, 0, 5, 100, 0, 2, 110, 116, 0, 1, 111, 101, 97, 0,
	2, 112, 0, 3, 98, 111, 116, 0, 3, 99, 105, 114, 0, 3, 102, 0,
	0, 116, 111, 112, 102, 111, 114, 107, 0, 2, 115, 97, 0, 1, 112, 114,
	105, 109, 101, 0, 1, 114, 97, 100, 101, 0, 2, 105, 97, 110, 103, 108,
	101, 0, 8, 100, 111, 119, 110, 0, 8, 108, 101, 102, 116, 0, 12, 101,
	113, 0, 0, 116, 114, 105, 97, 110, 103, 108, 101, 113, 0, 8, 114, 105,
	103, 104, 116, 0, 13, 101, 113, 0, 3, 100, 111, 116, 0, 3, 101, 0,
	3, 109, 105, 110, 117, 115, 0, 3, 112, 108, 117, 115, 0, 3, 115, 98,
	0, 0, 116, 114, 105, 116, 105, 109, 101, 0, 2, 112, 101, 122, 105, 117,
	109, 0, 1, 115, 99, 114, 0, 3, 121, 0, 2, 104, 99, 121, 0, 2,
	116, 114, 111, 107, 0, 1, 119, 105, 120, 116, 0, 2, 111, 104, 101, 97,
	100, 108, 101, 102, 116, 97, 114, 114, 111, 119, 0, 0, 116, 119, 111, 104,
	101, 97, 100, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 0, 117,
	65, 114, 114, 0, 1, 72, 97, 114, 0, 1, 97, 99, 117, 116, 101, 0,
	2, 114, 114, 0, 1, 98, 114, 99, 121, 0, 3, 101, 118, 101, 0, 1,
	99, 105, 114, 99, 0, 0, 117, 99, 121, 0, 1, 100, 97, 114, 114, 0,
	2, 98, 108, 97, 99, 0, 2, 104, 97, 114, 0, 1, 102, 105, 115, 104,
	116, 0, 2, 114, 0, 1, 103, 114, 97, 118, 101, 0, 1, 104, 97, 114,
	108, 0, 0, 117, 104, 97, 114, 114, 0, 2, 98, 108, 107, 0, 1, 108,
	99, 111, 114, 110, 0, 6, 101, 114, 0, 3, 114, 111, 112, 0, 2, 116,
	114, 105, 0, 1, 109, 97, 99, 114, 0, 2, 108, 0, 0, 117, 111, 103,
	111, 110, 0, 2, 112, 102, 0, 1, 112, 97, 114, 114, 111, 119, 0, 2,
	100, 111, 119, 110, 97, 114, 114, 111, 119, 0, 2, 104, 97, 114, 112, 111,
	111, 110, 108, 101, 102, 116, 0, 9, 114, 105, 103, 104, 116, 0, 2, 108,
	117, 115, 0, 2, 115, 105, 0, 0, 117, 112, 115, 105, 104, 0, 4, 108,
	111, 110, 0, 2, 117, 112, 97, 114, 114, 111, 119, 115, 0, 1, 114, 99,
	111, 114, 110, 0, 6, 101, 114, 0, 3, 114, 111, 112, 0, 2, 105, 110,
	103, 0, 2, 116, 114, 105, 0, 0, 117, 115, 99, 114, 0, 1, 116, 100,
	111, 116, 0, 2, 105, 108, 100, 101, 0, 2, 114, 105, 0, 4, 102, 0,
	1, 117, 97, 114, 114, 0, 2, 109, 108, 0, 1, 119, 97, 110, 103, 108,
	101, 0, 0, 118, 65, 114, 114, 0, 1, 66, 97, 114, 0, 4, 118, 0,
	1, 68, 97, 115, 104, 0, 1, 97, 110, 103, 114, 116, 0, 2, 114, 101,
	112, 115, 105, 108, 111, 110, 0, 3, 107, 97, 112, 112, 97, 0, 3, 110,
	111, 116, 104, 105, 110, 103, 0, 0, 118, 97, 114, 112, 104, 105, 0, 4,
	105, 0, 4, 114, 111, 112, 116, 111, 0, 3, 114, 0, 4, 104, 111, 0,
	3, 115, 105, 103, 109, 97, 0, 4, 117, 98, 115, 101, 116, 110, 101, 113,
	0, 12, 113, 0, 0, 118, 97, 114, 115, 117, 112, 115, 101, 116, 110, 101,
	113, 0, 12, 113, 0, 3, 116, 104, 101, 116, 97, 0, 4, 114, 105, 97,
	110, 103, 108, 101, 108, 101, 102, 116, 0, 11, 114, 105, 103, 104, 116, 0,
	1, 99, 121, 0, 1, 100, 97, 115, 104, 0, 1, 101, 101, 0, 0, 118,
	101, 101, 98, 97, 114, 0, 3, 101, 113, 0, 2, 108, 108, 105, 112, 0,
	2, 114, 98, 97, 114, 0, 3, 116, 0, 1, 102, 114, 0, 1, 108, 116,
	114, 105, 0, 1, 110, 115, 117, 98, 0, 0, 118, 110, 115, 117, 112, 0,
	1, 111, 112, 102, 0, 1, 112, 114, 111, 112, 0, 1, 114, 116, 114, 105,
	0, 1, 115, 99, 114, 0, 2, 117, 98, 110, 69, 0, 5, 101, 0, 3,
	112, 110, 69, 0, 0, 118, 115, 117, 112, 110, 101, 0, 1, 122, 105, 103,
	122, 97, 103, 0, 0, 119, 99, 105, 114, 99, 0, 1, 101, 100, 98, 97,
	114, 0, 3, 103, 101, 0, 5, 113, 0, 2, 105, 101, 114, 112, 0, 1,
	102, 114, 0, 0, 119, 111, 112, 102, 0, 1, 112, 0, 1, 114, 0, 2,
	101, 97, 116, 104, 0, 1, 115, 99, 114, 0, 0, 120, 99, 97, 112, 0,
	2, 105, 114, 99, 0, 2, 117, 112, 0, 0, 120, 100, 116, 114, 105, 0,
	1, 102, 114, 0, 1, 104, 65, 114, 114, 0, 2, 97, 114, 114, 0, 1,
	105, 0, 1, 108, 65, 114, 114, 0, 2, 97, 114, 114, 0, 1, 109, 97,
	112, 0, 0, 120, 110, 105, 115, 0, 1, 111, 100, 111, 116, 0, 2, 112,
	102, 0, 3, 108, 117, 115, 0, 2, 116, 105, 109, 101, 0, 1, 114, 65,
	114, 114, 0, 2, 97, 114, 114, 0, 1, 115, 99, 114, 0, 0, 120, 115,
	113, 99, 117, 112, 0, 1, 117, 112, 108, 117, 115, 0, 2, 116, 114, 105,
	0, 1, 118, 101, 101, 0, 1, 119, 101, 100, 103, 101, 0, 0, 121, 97,
	99, 117, 116, 101, 0, 3, 121, 0, 1, 99, 105, 114, 99, 0, 0, 121,
	99, 121, 0, 1, 101, 110, 0, 1, 102, 114, 0, 1, 105, 99, 121, 0,
	1, 111, 112, 102, 0, 1, 115, 99, 114, 0, 1, 117, 99, 121, 0, 2,
	109, 108, 0, 0, 122, 97, 99, 117, 116, 101, 0, 1, 99, 97, 114, 111,
	110, 0, 2, 121, 0, 1, 100, 111, 116, 0, 1, 101, 101, 116, 114, 102,
	0, 2, 116, 97, 0, 1, 102, 114, 0, 1, 104, 99, 121, 0, 0, 122,
	105, 103, 114, 97, 114, 114, 0, 1, 111, 112, 102, 0, 1, 115, 99, 114,
	0, 1, 119, 106, 0, 2, 110, 106, 0,
}

@(rodata)
GROUPS := [266]u16 {
	0, 45, 97, 149, 198, 258, 314, 403, 483, 529, 580, 650, 737, 834, 921, 978,
	1021, 1093, 1152, 1222, 1262, 1319, 1376, 1443, 1492, 1539, 1600, 1641, 1684, 1730, 1796, 1873,
	1949, 2034, 2101, 2198, 2246, 2294, 2390, 2452, 2530, 2614, 2703, 2793, 2861, 2938, 2992, 3055,
	3110, 3164, 3230, 3275, 3316, 3381, 3463, 3526, 3604, 3666, 3708, 3784, 3848, 3904, 3952, 3990,
	4054, 4105, 4155, 4214, 4291, 4351, 4389, 4452, 4495, 4538, 4581, 4635, 4667, 4709, 4742, 4772,
	4813, 4848, 4893, 4948, 4991, 5033, 5080, 5146, 5200, 5239, 5270, 5299, 5330, 5362, 5397, 5435,
	5471, 5508, 5550, 5596, 5636, 5681, 5732, 5768, 5809, 5845, 5885, 5928, 5988, 6038, 6080, 6126,
	6167, 6215, 6268, 6336, 6376, 6429, 6464, 6499, 6537, 6574, 6625, 6670, 6713, 6773, 6817, 6854,
	6887, 6927, 6964, 6997, 7035, 7065, 7102, 7147, 7200, 7240, 7289, 7351, 7397, 7435, 7480, 7519,
	7567, 7606, 7646, 7689, 7731, 7772, 7813, 7847, 7886, 7927, 7966, 8037, 8093, 8135, 8179, 8218,
	8264, 8308, 8381, 8422, 8464, 8496, 8538, 8584, 8622, 8678, 8715, 8756, 8795, 8853, 8890, 8927,
	8966, 9008, 9044, 9079, 9114, 9162, 9194, 9228, 9266, 9310, 9356, 9394, 9427, 9474, 9524, 9565,
	9608, 9649, 9691, 9731, 9774, 9810, 9850, 9894, 9933, 9972, 10012, 10048, 10085, 10133, 10174, 10216,
	10268, 10311, 10349, 10382, 10422, 10462, 10501, 10540, 10580, 10672, 10723, 10764, 10808, 10853, 10891, 10932,
	10967, 11007, 11053, 11084, 11140, 11172, 11212, 11248, 11291, 11341, 11379, 11416, 11468, 11499, 11542, 11578,
	11618, 11662, 11710, 11754, 11792, 11842, 11889, 11947, 12005, 12050, 12092, 12151, 12199, 12242, 12295, 12340,
	12398, 12441, 12484, 12531, 12569, 12610, 12653, 12702, 12739, 12782,
}

@(rodata)
REFS := [2125]u16 {
	32768, 32771, 32773, 8, 32779, 14, 17, 32789, 24, 27, 30, 33, 36, 40, 32811, 46,
	50, 32821, 32824, 59, 62, 65, 68, 71, 74, 77, 80, 84, 88, 74, 91, 94,
	32865, 100, 103, 106, 109, 112, 32883, 118, 121, 124, 127, 130, 109, 133, 136, 139,
	142, 145, 148, 151, 154, 157, 160, 163, 166, 169, 172, 175, 178, 181, 184, 188,
	191, 106, 194, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 227, 231, 234,
	237, 240, 242, 245, 248, 251, 255, 258, 261, 166, 255, 264, 267, 270, 212, 273,
	276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321,
	324, 327, 330, 333, 264, 336, 340, 343, 33114, 33117, 352, 33123, 358, 361, 364, 33136,
	371, 374, 377, 380, 383, 386, 390, 393, 396, 399, 402, 405, 408, 33179, 414, 417,
	420, 423, 427, 430, 433, 437, 440, 440, 443, 33214, 448, 451, 454, 457, 460, 463,
	466, 469, 473, 476, 480, 483, 486, 489, 492, 495, 498, 501, 505, 508, 511, 514,
	516, 519, 522, 525, 528, 522, 531, 91, 534, 537, 540, 543, 33314, 33317, 552, 555,
	558, 33329, 558, 564, 567, 282, 570, 573, 576, 579, 582, 585, 588, 592, 595, 598,
	601, 33372, 607, 610, 613, 617, 621, 625, 628, 631, 634, 637, 640, 643, 646, 650,
	654, 658, 33429, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699,
	702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747,
	750, 753, 756, 267, 270, 759, 762, 765, 768, 771, 774, 777, 781, 784, 787, 790,
	793, 796, 273, 276, 279, 799, 803, 806, 672, 809, 812, 815, 818, 821, 824, 827,
	830, 834, 837, 827, 841, 844, 847, 850, 853, 856, 859, 859, 859, 859, 505, 815,
	862, 864, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 900, 903, 906, 909,
	914, 919, 922, 927, 930, 935, 940, 943, 948, 951, 954, 957, 960, 965, 970, 973,
	978, 983, 986, 991, 994, 997, 1000, 1005, 1008, 1013, 1016, 1021, 1024, 1029, 1032, 1035,
	1040, 1043, 1048, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 33843, 1078, 1081, 33852, 33855, 1090,
	1093, 1096, 33868, 1103, 1106, 1109, 1112, 1116, 1119, 1122, 1125, 33897, 33900, 1135, 33906, 1141,
	1144, 1147, 1150, 1153, 1156, 1159, 1163, 1166, 1169, 519, 1172, 1175, 1178, 1181, 1184, 1187,
	1190, 1193, 157, 1196, 1199, 1203, 33974, 1208, 1212, 1215, 1219, 33990, 1225, 1228, 1231, 1234,
	1237, 1240, 1243, 1246, 1249, 1252, 1255, 1246, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279,
	1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 282,
	1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372,
	297, 690, 1264, 1376, 1379, 1382, 1385, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413,
	1417, 1420, 1420, 1423, 1426, 1429, 1432, 1435, 1249, 1438, 1441, 1444, 1447, 1441, 34218, 1453,
	1456, 1459, 1462, 1464, 1467, 1470, 1473, 1476, 1480, 1483, 1486, 1491, 1494, 1497, 1500, 1503,
	1506, 1510, 1513, 1517, 34288, 1523, 1526, 1529, 1532, 34303, 1538, 1541, 1544, 34316, 1551, 1554,
	1556, 1559, 1562, 1565, 1568, 1571, 1574, 1376, 1578, 1581, 1584, 1587, 1590, 1593, 288, 291,
	1596, 1599, 1602, 1605, 1608, 1611, 1615, 34386, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1639,
	1642, 1645, 1647, 1650, 1653, 1656, 1660, 1664, 1668, 1671, 1674, 1677, 1681, 1685, 1689, 1693,
	1696, 1700, 1704, 1707, 1710, 34481, 1716, 1719, 1722, 1726, 1730, 1734, 1737, 1740, 1743, 1746,
	1749, 859, 1752, 1755, 1758, 1761, 34533, 1768, 1771, 1774, 1779, 34550, 32999, 1785, 34556, 40,
	1791, 34563, 1798, 1798, 1801, 1804, 1807, 32771, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1825,
	1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 43, 1870, 1873,
	1876, 1503, 1880, 1883, 1886, 1889, 1892, 1503, 1886, 34662, 1897, 1901, 1503, 191, 34671, 34674,
	178, 1909, 1912, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 1933, 1559, 1936, 1915, 1939, 1942,
	71, 71, 1945, 1918, 74, 1948, 1951, 1954, 1957, 576, 1961, 1565, 1964, 1967, 1970, 1973,
	1976, 1979, 1982, 1985, 1636, 1674, 1988, 1991, 430, 1994, 1997, 2000, 2003, 2006, 2009, 2012,
	2015, 2018, 2021, 2025, 2030, 2033, 1590, 1590, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058,
	2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106,
	2109, 2112, 528, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151,
	2154, 2157, 2160, 2163, 2166, 1921, 88, 34937, 2172, 2176, 1924, 1927, 2179, 2181, 2184, 2187,
	2187, 91, 2190, 534, 534, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2220, 511, 2223,
	2226, 34997, 2232, 2235, 2238, 2241, 32895, 2244, 35015, 130, 2250, 2254, 2257, 2257, 2260, 2263,
	2266, 2269, 2272, 2275, 2278, 1222, 2281, 2284, 2287, 2290, 2272, 2293, 2296, 2299, 2302, 2302,
	2305, 50, 50, 2307, 2309, 2311, 1382, 2311, 172, 1500, 2314, 169, 2317, 175, 32865, 2321,
	2324, 2327, 2330, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370,
	2373, 2376, 2379, 2382, 2385, 2391, 2394, 2355, 2358, 2397, 2400, 35171, 2361, 2391, 2397, 2400,
	148, 2406, 2409, 264, 2412, 2415, 2418, 297, 2421, 723, 2424, 237, 2427, 2430, 248, 206,
	2433, 2436, 35207, 2442, 2445, 2448, 2451, 708, 1282, 245, 245, 2455, 2455, 255, 2458, 2461,
	2464, 35232, 2467, 2467, 2470, 2473, 2476, 2479, 2481, 234, 261, 2485, 2488, 2491, 2494, 65,
	297, 2433, 708, 1282, 1219, 2497, 2500, 2503, 2507, 2510, 2513, 2516, 2519, 1997, 303, 1255,
	2522, 2525, 2528, 2436, 2485, 35299, 2534, 2537, 2540, 35311, 2546, 2549, 2552, 417, 2555, 2558,
	2562, 35333, 2568, 2571, 2574, 2577, 2580, 2583, 2586, 2589, 2592, 2592, 2592, 2595, 2598, 2601,
	2604, 2607, 2610, 2613, 2617, 2620, 2623, 2626, 2626, 2629, 2540, 2546, 396, 2568, 2583, 2632,
	2634, 163, 2637, 2640, 2643, 2646, 2649, 261, 396, 2652, 35423, 35426, 2661, 2664, 414, 402,
	417, 2555, 2666, 2669, 2672, 2676, 2680, 2684, 2688, 2692, 2695, 2698, 2702, 2705, 2708, 437,
	2712, 2715, 2718, 35489, 2724, 35495, 2730, 2733, 2736, 2739, 2742, 35513, 2748, 2751, 2754, 2757,
	2760, 2763, 2766, 2769, 2772, 486, 2776, 2779, 2782, 2458, 2785, 2788, 2791, 2794, 2797, 480,
	483, 480, 486, 495, 495, 2800, 2803, 2806, 2809, 2812, 2818, 2821, 505, 473, 2825, 2828,
	492, 2831, 2834, 2837, 2840, 2843, 2843, 2846, 2846, 2840, 2849, 2852, 240, 2856, 498, 2859,
	2862, 33214, 2865, 2868, 2871, 2874, 2877, 2785, 2880, 2871, 483, 2776, 492, 498, 2883, 2883,
	270, 1653, 2721, 522, 2889, 717, 2892, 2895, 2898, 2901, 2904, 2904, 2907, 2910, 2913, 2917,
	2920, 2923, 2926, 2929, 2932, 2935, 2939, 2942, 2898, 2946, 2949, 2421, 35720, 579, 35723, 2958,
	2961, 35732, 270, 2967, 35739, 567, 2974, 2977, 2980, 2983, 2986, 2989, 558, 595, 558, 2992,
	2995, 2998, 371, 3001, 3004, 3007, 2992, 573, 3010, 1758, 3010, 3013, 3016, 3019, 3022, 3025,
	3029, 3016, 35800, 3035, 371, 3039, 3042, 3045, 3048, 371, 582, 3051, 3054, 35825, 3060, 3063,
	3066, 3070, 3073, 3077, 3081, 3084, 3087, 3090, 3093, 3096, 3099, 3103, 3106, 3109, 3112, 3116,
	784, 267, 3120, 3123, 762, 3126, 3129, 3132, 3135, 672, 3138, 687, 3141, 687, 3144, 35915,
	690, 693, 3150, 3153, 2929, 3156, 3159, 3162, 3165, 3168, 3171, 3174, 3177, 3183, 3186, 3189,
	3191, 3193, 3196, 3199, 3202, 3205, 699, 3189, 3208, 3211, 1116, 1942, 3214, 3217, 3220, 3223,
	690, 3165, 315, 753, 3226, 717, 696, 1252, 2895, 3229, 759, 3223, 762, 771, 771, 3232,
	3235, 3238, 3241, 3244, 3250, 3144, 3253, 759, 3126, 765, 774, 3256, 714, 3259, 765, 3263,
	315, 753, 3266, 3269, 3272, 815, 3226, 2473, 3275, 3278, 3281, 3284, 3284, 3287, 3290, 3290,
	3293, 3293, 3287, 3296, 3299, 3302, 702, 790, 793, 3305, 796, 3156, 3308, 3311, 3314, 3318,
	3321, 3324, 1554, 3327, 3327, 1991, 3330, 3332, 696, 2497, 1252, 3335, 3338, 3341, 3344, 3347,
	809, 774, 3351, 3354, 3191, 1119, 3357, 3360, 33429, 3363, 3366, 3253, 3229, 3369, 3372, 3375,
	3378, 3381, 738, 2000, 3384, 3387, 3390, 3390, 3396, 36167, 3402, 3405, 3405, 1294, 1294, 333,
	726, 1593, 3408, 3411, 3414, 3417, 1831, 3420, 3424, 36195, 1642, 1901, 3430, 32898, 3433, 2127,
	2488, 3436, 3439, 2907, 834, 3442, 3445, 834, 3449, 1771, 3453, 3456, 3456, 3459, 3464, 914,
	3469, 3472, 3475, 3480, 960, 3485, 3488, 3491, 221, 3494, 3497, 1065, 3502, 3507, 3512, 1065,
	3515, 3515, 874, 33639, 930, 935, 3518, 3521, 3524, 1062, 3527, 3532, 3535, 3538, 892, 3541,
	3544, 1599, 1599, 3547, 880, 3552, 895, 900, 900, 3555, 909, 906, 906, 909, 922, 922,
	927, 903, 903, 3472, 3559, 3562, 1249, 3565, 3568, 1249, 3571, 3469, 3574, 3579, 3582, 954,
	3579, 3559, 954, 3574, 965, 965, 951, 970, 951, 940, 948, 1068, 3585, 36357, 889, 3592,
	3597, 889, 3602, 3605, 994, 994, 3608, 3611, 886, 886, 3614, 3619, 3624, 983, 991, 986,
	983, 986, 3485, 3627, 3630, 3635, 3627, 997, 1005, 1032, 1040, 1035, 3640, 1068, 886, 1056,
	1059, 1059, 1068, 886, 1013, 1021, 3644, 3647, 1029, 1024, 1029, 3647, 1032, 1035, 3652, 3655,
	1053, 1048, 1053, 3655, 919, 36428, 957, 940, 948, 997, 1005, 3663, 3666, 3668, 3671, 3674,
	3677, 3680, 3685, 3688, 3693, 3697, 3700, 3703, 3708, 3712, 3717, 3720, 3725, 3730, 3733, 1596,
	1596, 3736, 2281, 36507, 2284, 2287, 36510, 3745, 2290, 3748, 3751, 136, 3754, 3757, 3760, 3763,
	3767, 36538, 3773, 3776, 1106, 169, 2275, 3779, 3782, 1141, 3785, 3788, 3791, 3794, 3797, 139,
	3800, 3804, 3807, 142, 3810, 2278, 3813, 3816, 3816, 36587, 36590, 3825, 3828, 3831, 3834, 3816,
	36605, 3840, 36611, 145, 3846, 36617, 3852, 294, 36623, 294, 3858, 3861, 1153, 3864, 3867, 3869,
	3871, 1590, 3874, 3877, 3881, 3884, 827, 3887, 3890, 2712, 3893, 2898, 3896, 2898, 3899, 3901,
	2130, 3904, 2491, 3907, 3910, 33937, 3913, 3916, 1169, 3919, 3922, 36694, 1178, 3929, 3932, 1184,
	1181, 1178, 3932, 1184, 1181, 3935, 3938, 3941, 1187, 3944, 1172, 3938, 3935, 3941, 1193, 3947,
	3950, 3953, 1196, 1196, 1187, 3956, 3959, 3963, 3966, 3969, 2974, 3973, 3977, 3980, 525, 3984,
	3987, 2634, 33974, 1333, 282, 3989, 2424, 3992, 3995, 4000, 1389, 4003, 1261, 4006, 4009, 1261,
	36780, 1264, 4015, 1267, 4018, 4021, 4024, 2932, 3308, 4027, 4030, 4033, 4036, 4039, 4042, 1212,
	1988, 4045, 4048, 4050, 4052, 4055, 4058, 4061, 4064, 1273, 4048, 4067, 4070, 4073, 151, 151,
	4076, 1246, 1336, 1246, 1327, 4079, 33990, 4082, 1288, 4085, 324, 1321, 4089, 4092, 4095, 1264,
	4033, 324, 1321, 1270, 399, 4098, 4036, 4101, 4104, 2643, 1270, 399, 4107, 4110, 4110, 4113,
	4116, 4119, 1276, 4122, 4125, 4129, 4132, 4135, 4137, 4140, 4098, 4143, 4146, 1339, 4050, 154,
	154, 4101, 4150, 4153, 1306, 2003, 4156, 4159, 4162, 4165, 3357, 1426, 4168, 4171, 4174, 1432,
	1429, 4177, 4180, 4183, 4186, 4189, 4192, 1435, 4195, 4198, 2494, 4201, 4204, 2917, 806, 806,
	36975, 4210, 4212, 59, 59, 4215, 4218, 2769, 4222, 4225, 4228, 1642, 294, 36999, 4234, 4237,
	4237, 1494, 4240, 1497, 1497, 4243, 4246, 4249, 4252, 4255, 4258, 4261, 690, 59, 4264, 4267,
	1642, 4270, 4273, 4276, 4279, 4285, 4288, 4290, 4293, 4296, 4300, 4300, 294, 1395, 4303, 1410,
	4309, 1398, 1401, 1398, 1401, 1404, 1407, 1404, 1407, 1392, 1392, 430, 430, 1264, 4315, 59,
	4270, 1417, 4319, 1976, 2629, 3884, 3399, 4322, 4325, 4328, 1423, 4331, 4334, 4337, 4340, 4343,
	4346, 4322, 1423, 4325, 4340, 4337, 4349, 4352, 4355, 1426, 4171, 1432, 1429, 4186, 4183, 4189,
	1435, 1438, 4358, 1444, 37129, 37132, 37135, 4370, 4373, 4376, 1447, 4379, 4382, 4385, 4388, 4391,
	4394, 4397, 4400, 1444, 1447, 4370, 4397, 4394, 4403, 4406, 4409, 4412, 2920, 803, 803, 4415,
	37186, 4421, 4424, 1147, 4427, 4430, 4433, 1510, 4436, 4439, 1480, 1480, 4443, 4446, 4446, 1503,
	1494, 1491, 1503, 1494, 37217, 242, 37220, 2133, 4455, 4458, 2977, 3552, 330, 4461, 4464, 4467,
	4471, 4212, 4474, 1453, 4477, 2519, 3381, 738, 4480, 4153, 1306, 4483, 4480, 4486, 4489, 4492,
	4495, 4498, 4501, 4505, 4508, 4511, 1954, 675, 1231, 288, 4514, 37285, 1376, 4520, 4523, 37294,
	4529, 1581, 4532, 1587, 4535, 4538, 37310, 747, 1315, 4545, 4548, 4548, 4551, 4554, 4557, 33023,
	4560, 4563, 1376, 1584, 747, 1315, 1568, 4567, 1602, 4567, 4570, 4573, 4573, 4576, 4579, 4582,
	4585, 4589, 4592, 4477, 1994, 4570, 37363, 4598, 291, 4601, 4604, 285, 4607, 2629, 3090, 2592,
	3884, 3893, 1196, 1584, 4095, 4237, 4610, 4616, 4622, 4628, 4446, 732, 1300, 4634, 1291, 3810,
	4637, 4640, 4643, 1645, 1645, 4646, 732, 1024, 1048, 4650, 1196, 1300, 4654, 4616, 4610, 4628,
	4622, 4658, 4661, 4664, 1810, 4667, 4670, 4673, 4677, 4670, 1650, 1650, 4681, 576, 1961, 1565,
	1979, 4685, 276, 793, 4689, 273, 790, 3305, 4692, 1964, 4695, 1967, 1970, 279, 796, 4699,
	1973, 1985, 1982, 1636, 1674, 37471, 4706, 4709, 4712, 37483, 4718, 4722, 4725, 4729, 4733, 37504,
	4739, 4742, 4745, 4748, 1755, 4751, 4754, 4758, 4761, 4764, 4768, 4772, 4775,
}

@(rodata)
VALUES := [4778]u8 {
	198, 1, 0, 38, 0, 193, 1, 0, 130, 2, 0, 194, 1, 0, 144, 8,
	0, 132, 170, 7, 0, 192, 1, 0, 145, 7, 0, 128, 2, 0, 211, 84,
	0, 132, 2, 0, 184, 170, 7, 0, 225, 64, 0, 197, 1, 0, 156, 169,
	7, 0, 212, 68, 0, 195, 1, 0, 196, 1, 0, 150, 68, 0, 231, 85,
	0, 134, 70, 0, 145, 8, 0, 181, 68, 0, 172, 66, 0, 146, 7, 0,
	133, 170, 7, 0, 185, 170, 7, 0, 216, 5, 0, 206, 68, 0, 167, 8,
	0, 169, 1, 0, 134, 2, 0, 210, 69, 0, 197, 66, 0, 173, 66, 0,
	140, 2, 0, 199, 1, 0, 136, 2, 0, 176, 68, 0, 138, 2, 0, 184,
	1, 0, 183, 1, 0, 167, 7, 0, 153, 69, 0, 150, 69, 0, 149, 69,
	0, 151, 69, 0, 178, 68, 0, 157, 64, 0, 153, 64, 0, 183, 68, 0,
	244, 84, 0, 225, 68, 0, 175, 68, 0, 174, 68, 0, 130, 66, 0, 144,
	68, 0, 179, 68, 0, 175, 84, 0, 158, 169, 7, 0, 211, 69, 0, 205,
	68, 0, 145, 82, 0, 130, 8, 0, 133, 8, 0, 143, 8, 0, 161, 64,
	0, 161, 67, 0, 228, 85, 0, 142, 2, 0, 148, 8, 0, 135, 68, 0,
	148, 7, 0, 135, 170, 7, 0, 180, 1, 0, 217, 5, 0, 221, 5, 0,
	96, 0, 220, 5, 0, 196, 69, 0, 198, 66, 0, 187, 170, 7, 0, 168,
	1, 0, 220, 65, 0, 208, 68, 0, 211, 67, 0, 208, 67, 0, 212, 67,
	0, 248, 79, 0, 250, 79, 0, 249, 79, 0, 210, 67, 0, 168, 69, 0,
	209, 67, 0, 213, 67, 0, 165, 68, 0, 147, 67, 0, 147, 82, 0, 245,
	67, 0, 145, 6, 0, 208, 82, 0, 222, 82, 0, 189, 67, 0, 214, 82,
	0, 223, 82, 0, 193, 67, 0, 215, 82, 0, 164, 69, 0, 167, 67, 0,
	159, 169, 7, 0, 144, 2, 0, 202, 2, 0, 208, 1, 0, 201, 1, 0,
	154, 2, 0, 202, 1, 0, 173, 8, 0, 150, 2, 0, 136, 170, 7, 0,
	200, 1, 0, 136, 68, 0, 146, 2, 0, 251, 75, 0, 171, 75, 0, 152,
	2, 0, 188, 170, 7, 0, 149, 7, 0, 245, 84, 0, 194, 68, 0, 204,
	67, 0, 176, 66, 0, 243, 84, 0, 151, 7, 0, 203, 1, 0, 131, 68,
	0, 199, 66, 0, 164, 8, 0, 137, 170, 7, 0, 252, 75, 0, 170, 75,
	0, 189, 170, 7, 0, 128, 68, 0, 177, 66, 0, 131, 8, 0, 62, 0,
	147, 7, 0, 220, 7, 0, 158, 2, 0, 162, 2, 0, 156, 2, 0, 147,
	8, 0, 160, 2, 0, 138, 170, 7, 0, 217, 69, 0, 190, 170, 7, 0,
	229, 68, 0, 219, 69, 0, 231, 68, 0, 162, 85, 0, 247, 68, 0, 254,
	84, 0, 243, 68, 0, 162, 169, 7, 0, 235, 68, 0, 170, 8, 0, 199,
	5, 0, 94, 0, 164, 2, 0, 140, 66, 0, 139, 66, 0, 141, 66, 0,
	128, 74, 0, 166, 2, 0, 207, 68, 0, 149, 8, 0, 178, 2, 0, 129,
	8, 0, 205, 1, 0, 206, 1, 0, 152, 8, 0, 176, 2, 0, 145, 66,
	0, 204, 1, 0, 170, 2, 0, 200, 66, 0, 172, 68, 0, 171, 68, 0,
	194, 69, 0, 227, 64, 0, 226, 64, 0, 174, 2, 0, 192, 170, 7, 0,
	153, 7, 0, 144, 66, 0, 168, 2, 0, 134, 8, 0, 207, 1, 0, 180,
	2, 0, 153, 8, 0, 141, 170, 7, 0, 193, 170, 7, 0, 165, 169, 7,
	0, 136, 8, 0, 132, 8, 0, 165, 8, 0, 140, 8, 0, 154, 7, 0,
	182, 2, 0, 154, 8, 0, 142, 170, 7, 0, 194, 170, 7, 0, 166, 169,
	7, 0, 137, 8, 0, 60, 0, 185, 2, 0, 155, 7, 0, 234, 79, 0,
	146, 66, 0, 158, 67, 0, 189, 2, 0, 187, 2, 0, 155, 8, 0, 232,
	79, 0, 144, 67, 0, 228, 67, 0, 198, 67, 0, 136, 70, 0, 230, 79,
	0, 225, 82, 0, 195, 67, 0, 217, 82, 0, 138, 70, 0, 148, 67, 0,
	206, 82, 0, 163, 69, 0, 164, 67, 0, 218, 82, 0, 178, 69, 0, 207,
	83, 0, 180, 69, 0, 209, 82, 0, 224, 82, 0, 191, 67, 0, 216, 82,
	0, 188, 67, 0, 210, 82, 0, 218, 69, 0, 230, 68, 0, 246, 68, 0,
	161, 85, 0, 253, 84, 0, 242, 68, 0, 143, 170, 7, 0, 216, 69, 0,
	218, 67, 0, 191, 2, 0, 245, 79, 0, 247, 79, 0, 246, 79, 0, 195,
	170, 7, 0, 153, 67, 0, 152, 67, 0, 176, 67, 0, 193, 2, 0, 234,
	68, 0, 133, 82, 0, 156, 8, 0, 223, 64, 0, 179, 66, 0, 144, 170,
	7, 0, 147, 68, 0, 196, 170, 7, 0, 156, 7, 0, 138, 8, 0, 195,
	2, 0, 199, 2, 0, 197, 2, 0, 157, 8, 0, 139, 64, 0, 10, 0,
	145, 170, 7, 0, 224, 64, 0, 160, 1, 0, 149, 66, 0, 236, 85, 0,
	226, 68, 0, 237, 68, 0, 166, 68, 0, 137, 68, 0, 224, 68, 0, 194,
	68, 184, 6, 0, 132, 68, 0, 239, 68, 0, 241, 68, 0, 231, 68, 184,
	6, 0, 235, 68, 184, 6, 0, 249, 68, 0, 254, 84, 184, 6, 0, 245,
	68, 0, 206, 68, 184, 6, 0, 207, 68, 184, 6, 0, 234, 69, 0, 207,
	83, 184, 6, 0, 236, 69, 0, 238, 68, 0, 240, 68, 0, 248, 68, 0,
	234, 68, 184, 6, 0, 253, 84, 184, 6, 0, 244, 68, 0, 162, 85, 184,
	6, 0, 161, 85, 184, 6, 0, 128, 69, 0, 175, 85, 184, 6, 0, 224,
	69, 0, 140, 68, 0, 235, 69, 0, 208, 83, 184, 6, 0, 237, 69, 0,
	143, 69, 184, 6, 0, 226, 69, 0, 144, 69, 184, 6, 0, 227, 69, 0,
	130, 69, 210, 65, 0, 136, 69, 0, 129, 69, 0, 176, 85, 184, 6, 0,
	225, 69, 0, 255, 68, 184, 6, 0, 131, 69, 210, 65, 0, 137, 69, 0,
	193, 68, 0, 196, 68, 0, 199, 68, 0, 201, 68, 0, 164, 68, 0, 169,
	169, 7, 0, 209, 1, 0, 157, 7, 0, 210, 2, 0, 211, 1, 0, 212,
	1, 0, 158, 8, 0, 208, 2, 0, 146, 170, 7, 0, 210, 1, 0, 204,
	2, 0, 169, 7, 0, 159, 7, 0, 198, 170, 7, 0, 156, 64, 0, 152,
	64, 0, 212, 84, 0, 170, 169, 7, 0, 216, 1, 0, 213, 1, 0, 183,
	84, 0, 214, 1, 0, 190, 64, 0, 222, 71, 0, 180, 71, 0, 220, 71,
	0, 130, 68, 0, 159, 8, 0, 147, 170, 7, 0, 166, 7, 0, 160, 7,
	0, 177, 1, 0, 153, 66, 0, 187, 85, 0, 250, 68, 0, 175, 85, 0,
	252, 68, 0, 254, 68, 0, 179, 64, 0, 143, 68, 0, 157, 68, 0, 171,
	169, 7, 0, 168, 7, 0, 34, 0, 148, 170, 7, 0, 154, 66, 0, 172,
	169, 7, 0, 144, 82, 0, 174, 1, 0, 212, 2, 0, 235, 79, 0, 160,
	67, 0, 150, 82, 0, 216, 2, 0, 214, 2, 0, 160, 8, 0, 156, 66,
	0, 139, 68, 0, 203, 67, 0, 239, 82, 0, 161, 7, 0, 233, 79, 0,
	146, 67, 0, 229, 67, 0, 196, 67, 0, 137, 70, 0, 231, 79, 0, 221,
	82, 0, 194, 67, 0, 213, 82, 0, 139, 70, 0, 162, 69, 0, 166, 67,
	0, 219, 82, 0, 179, 69, 0, 208, 83, 0, 181, 69, 0, 207, 82, 0,
	220, 82, 0, 190, 67, 0, 212, 82, 0, 192, 67, 0, 211, 82, 0, 157,
	66, 0, 240, 82, 0, 219, 67, 0, 155, 66, 0, 177, 67, 0, 244, 83,
	0, 169, 8, 0, 168, 8, 0, 172, 8, 0, 218, 2, 0, 188, 85, 0,
	224, 2, 0, 222, 2, 0, 220, 2, 0, 161, 8, 0, 150, 170, 7, 0,
	145, 67, 0, 163, 7, 0, 152, 68, 0, 202, 170, 7, 0, 154, 68, 0,
	161, 75, 0, 147, 69, 0, 143, 69, 0, 145, 69, 0, 144, 69, 0, 146,
	69, 0, 148, 69, 0, 174, 169, 7, 0, 198, 69, 0, 208, 69, 0, 134,
	69, 0, 251, 68, 0, 176, 85, 0, 253, 68, 0, 255, 68, 0, 145, 68,
	0, 209, 69, 0, 131, 69, 0, 135, 69, 0, 222, 1, 0, 162, 66, 0,
	139, 8, 0, 166, 8, 0, 9, 0, 164, 7, 0, 228, 2, 0, 226, 2,
	0, 162, 8, 0, 151, 170, 7, 0, 180, 68, 0, 152, 7, 0, 223, 64,
	138, 64, 0, 137, 64, 0, 188, 68, 0, 195, 68, 0, 197, 68, 0, 200,
	68, 0, 203, 170, 7, 0, 219, 65, 0, 175, 169, 7, 0, 230, 2, 0,
	218, 1, 0, 159, 67, 0, 201, 82, 0, 142, 8, 0, 236, 2, 0, 219,
	1, 0, 163, 8, 0, 240, 2, 0, 152, 170, 7, 0, 217, 1, 0, 234,
	2, 0, 95, 0, 223, 71, 0, 181, 71, 0, 221, 71, 0, 195, 69, 0,
	142, 69, 0, 242, 2, 0, 204, 170, 7, 0, 146, 82, 0, 197, 67, 0,
	149, 67, 0, 238, 82, 0, 165, 69, 0, 165, 67, 0, 150, 67, 0, 151,
	67, 0, 210, 7, 0, 165, 7, 0, 238, 2, 0, 176, 169, 7, 0, 232,
	2, 0, 220, 1, 0, 171, 69, 0, 235, 85, 0, 146, 8, 0, 169, 69,
	0, 230, 85, 0, 193, 69, 0, 150, 64, 0, 163, 68, 0, 124, 0, 216,
	78, 0, 192, 68, 0, 138, 64, 0, 153, 170, 7, 0, 205, 170, 7, 0,
	177, 169, 7, 0, 170, 69, 0, 244, 2, 0, 192, 69, 0, 154, 170, 7,
	0, 206, 170, 7, 0, 178, 169, 7, 0, 155, 170, 7, 0, 158, 7, 0,
	207, 170, 7, 0, 179, 169, 7, 0, 175, 8, 0, 135, 8, 0, 174, 8,
	0, 221, 1, 0, 246, 2, 0, 171, 8, 0, 156, 170, 7, 0, 208, 170,
	7, 0, 180, 169, 7, 0, 248, 2, 0, 150, 8, 0, 249, 2, 0, 253,
	2, 0, 151, 8, 0, 251, 2, 0, 150, 7, 0, 168, 66, 0, 164, 66,
	0, 181, 169, 7, 0, 225, 1, 0, 131, 2, 0, 190, 68, 0, 190, 68,
	179, 6, 0, 191, 68, 0, 226, 1, 0, 176, 8, 0, 230, 1, 0, 158,
	170, 7, 0, 224, 1, 0, 181, 66, 0, 177, 7, 0, 129, 2, 0, 191,
	84, 0, 167, 68, 0, 213, 84, 0, 220, 84, 0, 216, 84, 0, 218, 84,
	0, 160, 68, 0, 164, 83, 0, 161, 68, 0, 168, 83, 0, 169, 83, 0,
	170, 83, 0, 171, 83, 0, 172, 83, 0, 173, 83, 0, 174, 83, 0, 175,
	83, 0, 159, 68, 0, 190, 69, 0, 157, 83, 0, 162, 68, 0, 252, 70,
	0, 133, 2, 0, 210, 170, 7, 0, 240, 84, 0, 239, 84, 0, 202, 68,
	0, 203, 68, 0, 39, 0, 229, 1, 0, 182, 169, 7, 0, 42, 0, 227,
	1, 0, 228, 1, 0, 145, 84, 0, 237, 85, 0, 204, 68, 0, 246, 7,
	0, 181, 64, 0, 189, 68, 0, 205, 69, 0, 189, 69, 0, 133, 70, 0,
	182, 71, 0, 177, 8, 0, 158, 64, 0, 176, 83, 0, 178, 7, 0, 182,
	66, 0, 236, 68, 0, 159, 170, 7, 0, 239, 75, 0, 128, 84, 0, 129,
	84, 0, 130, 84, 0, 134, 84, 0, 133, 76, 0, 189, 75, 0, 179, 75,
	0, 132, 84, 0, 141, 82, 0, 235, 83, 0, 180, 75, 0, 190, 75, 0,
	194, 75, 0, 184, 75, 0, 163, 72, 0, 146, 75, 0, 145, 75, 0, 147,
	75, 0, 136, 75, 0, 61, 229, 65, 0, 225, 68, 229, 65, 0, 144, 70,
	0, 211, 170, 7, 0, 200, 69, 0, 215, 74, 0, 212, 74, 0, 214, 74,
	0, 211, 74, 0, 208, 74, 0, 230, 74, 0, 233, 74, 0, 228, 74, 0,
	231, 74, 0, 221, 74, 0, 218, 74, 0, 220, 74, 0, 217, 74, 0, 209,
	74, 0, 236, 74, 0, 227, 74, 0, 224, 74, 0, 235, 74, 0, 226, 74,
	0, 223, 74, 0, 201, 83, 0, 213, 74, 0, 210, 74, 0, 144, 74, 0,
	140, 74, 0, 229, 74, 0, 232, 74, 0, 172, 74, 0, 180, 74, 0, 159,
	69, 0, 158, 69, 0, 160, 69, 0, 219, 74, 0, 216, 74, 0, 152, 74,
	0, 148, 74, 0, 130, 74, 0, 234, 74, 0, 225, 74, 0, 222, 74, 0,
	188, 74, 0, 164, 74, 0, 156, 74, 0, 166, 1, 0, 183, 169, 7, 0,
	207, 64, 0, 92, 0, 197, 83, 0, 200, 79, 0, 162, 64, 0, 174, 85,
	0, 135, 2, 0, 169, 68, 0, 196, 84, 0, 201, 84, 0, 203, 84, 0,
	199, 84, 0, 192, 84, 0, 169, 68, 128, 252, 3, 0, 193, 64, 0, 205,
	84, 0, 141, 2, 0, 231, 1, 0, 137, 2, 0, 204, 84, 0, 208, 84,
	0, 139, 2, 0, 178, 83, 0, 162, 1, 0, 160, 170, 7, 0, 199, 8,
	0, 147, 78, 0, 199, 7, 0, 203, 75, 0, 195, 83, 0, 198, 5, 0,
	215, 68, 0, 186, 67, 0, 187, 67, 0, 200, 73, 0, 155, 69, 0, 154,
	69, 0, 157, 69, 0, 144, 84, 0, 239, 85, 0, 194, 83, 0, 227, 76,
	0, 58, 0, 44, 0, 64, 0, 129, 68, 0, 237, 84, 0, 212, 170, 7,
	0, 151, 66, 0, 181, 67, 0, 151, 78, 0, 184, 169, 7, 0, 207, 85,
	0, 209, 85, 0, 208, 85, 0, 210, 85, 0, 239, 69, 0, 184, 82, 0,
	181, 82, 0, 222, 69, 0, 223, 69, 0, 182, 67, 0, 189, 82, 0, 170,
	68, 0, 200, 84, 0, 198, 84, 0, 202, 84, 0, 141, 69, 0, 197, 84,
	0, 170, 68, 128, 252, 3, 0, 183, 67, 0, 188, 82, 0, 206, 69, 0,
	207, 69, 0, 164, 1, 0, 177, 68, 0, 173, 70, 0, 229, 82, 0, 160,
	64, 0, 184, 66, 0, 144, 64, 0, 143, 82, 0, 143, 2, 0, 180, 8,
	0, 202, 67, 0, 247, 84, 0, 176, 1, 0, 180, 7, 0, 177, 83, 0,
	255, 82, 0, 161, 170, 7, 0, 230, 76, 0, 221, 7, 0, 242, 69, 0,
	247, 1, 0, 199, 69, 0, 210, 8, 0, 158, 70, 0, 141, 70, 0, 36,
	0, 213, 170, 7, 0, 209, 68, 0, 184, 68, 0, 148, 68, 0, 161, 69,
	0, 159, 70, 0, 140, 70, 0, 185, 169, 7, 0, 213, 8, 0, 246, 83,
	0, 145, 2, 0, 241, 69, 0, 191, 75, 0, 166, 83, 0, 223, 8, 0,
	255, 79, 0, 233, 1, 0, 238, 84, 0, 155, 2, 0, 214, 68, 0, 234,
	1, 0, 213, 68, 0, 205, 8, 0, 151, 2, 0, 210, 68, 0, 162, 170,
	7, 0, 154, 85, 0, 232, 1, 0, 150, 85, 0, 152, 85, 0, 153, 85,
	0, 231, 71, 0, 147, 66, 0, 149, 85, 0, 151, 85, 0, 147, 2, 0,
	133, 68, 0, 131, 64, 0, 132, 64, 0, 133, 64, 0, 203, 2, 0, 130,
	64, 0, 153, 2, 0, 214, 170, 7, 0, 213, 69, 0, 227, 83, 0, 241,
	84, 0, 181, 7, 0, 245, 7, 0, 61, 0, 223, 68, 0, 248, 84, 0,
	229, 83, 0, 211, 68, 0, 241, 82, 0, 175, 66, 0, 183, 7, 0, 240,
	1, 0, 235, 1, 0, 172, 65, 0, 33, 0, 196, 8, 0, 192, 76, 0,
	131, 246, 3, 0, 128, 246, 3, 0, 132, 246, 3, 0, 163, 170, 7, 0,
	129, 246, 3, 0, 102, 106, 0, 237, 76, 0, 130, 246, 3, 0, 177, 75,
	0, 146, 3, 0, 215, 170, 7, 0, 212, 69, 0, 217, 85, 0, 141, 84,
	0, 189, 1, 0, 211, 66, 0, 188, 1, 0, 213, 66, 0, 217, 66, 0,
	219, 66, 0, 212, 66, 0, 214, 66, 0, 190, 1, 0, 215, 66, 0, 220,
	66, 0, 216, 66, 0, 218, 66, 0, 221, 66, 0, 222, 66, 0, 196, 64,
	0, 162, 70, 0, 187, 169, 7, 0, 140, 85, 0, 245, 3, 0, 179, 7,
	0, 134, 85, 0, 159, 2, 0, 157, 2, 0, 179, 8, 0, 161, 2, 0,
	169, 85, 0, 128, 85, 0, 130, 85, 0, 132, 85, 0, 219, 69, 128, 252,
	3, 0, 148, 85, 0, 164, 170, 7, 0, 183, 66, 0, 211, 8, 0, 146,
	85, 0, 165, 85, 0, 164, 85, 0, 233, 68, 0, 138, 85, 0, 136, 85,
	0, 231, 69, 0, 216, 170, 7, 0, 138, 66, 0, 142, 85, 0, 144, 85,
	0, 167, 85, 0, 250, 84, 0, 215, 69, 0, 149, 83, 0, 252, 84, 0,
	248, 82, 0, 233, 68, 128, 252, 3, 0, 202, 8, 0, 200, 82, 0, 173,
	67, 0, 143, 66, 0, 165, 2, 0, 229, 76, 0, 166, 64, 0, 185, 69,
	0, 165, 170, 7, 0, 165, 82, 0, 166, 82, 0, 255, 67, 0, 187, 68,
	0, 169, 67, 0, 170, 67, 0, 217, 170, 7, 0, 149, 64, 0, 189, 169,
	7, 0, 167, 2, 0, 195, 64, 0, 237, 1, 0, 238, 1, 0, 184, 8,
	0, 181, 8, 0, 161, 1, 0, 166, 170, 7, 0, 236, 1, 0, 140, 84,
	0, 173, 68, 0, 220, 83, 0, 169, 66, 0, 179, 2, 0, 171, 2, 0,
	177, 2, 0, 183, 69, 0, 181, 3, 0, 133, 66, 0, 158, 68, 0, 221,
	83, 0, 186, 69, 0, 151, 84, 0, 188, 84, 0, 209, 8, 0, 175, 2,
	0, 218, 170, 7, 0, 185, 7, 0, 191, 1, 0, 190, 169, 7, 0, 249,
	69, 0, 245, 69, 0, 244, 69, 0, 243, 69, 0, 169, 2, 0, 214, 8,
	0, 239, 1, 0, 181, 2, 0, 185, 8, 0, 167, 170, 7, 0, 183, 4,
	0, 219, 170, 7, 0, 191, 169, 7, 0, 216, 8, 0, 212, 8, 0, 186,
	7, 0, 240, 7, 0, 183, 2, 0, 186, 8, 0, 168, 170, 7, 0, 184,
	2, 0, 197, 8, 0, 220, 8, 0, 220, 170, 7, 0, 192, 169, 7, 0,
	155, 82, 0, 142, 82, 0, 139, 85, 0, 226, 82, 0, 186, 2, 0, 180,
	83, 0, 187, 7, 0, 145, 83, 0, 133, 85, 0, 171, 1, 0, 159, 82,
	0, 157, 82, 0, 171, 67, 0, 185, 82, 0, 243, 82, 0, 162, 67, 0,
	171, 85, 0, 153, 82, 0, 173, 85, 0, 173, 85, 128, 252, 3, 0, 140,
	82, 0, 242, 78, 0, 123, 0, 91, 0, 139, 83, 0, 143, 83, 0, 141,
	83, 0, 190, 2, 0, 188, 2, 0, 187, 8, 0, 182, 82, 0, 231, 82,
	0, 203, 82, 0, 178, 67, 0, 228, 68, 0, 199, 67, 0, 203, 69, 0,
	168, 85, 0, 255, 84, 0, 129, 85, 0, 131, 85, 0, 218, 69, 128, 252,
	3, 0, 147, 85, 0, 214, 69, 0, 252, 82, 0, 169, 170, 7, 0, 145,
	85, 0, 234, 82, 0, 132, 75, 0, 217, 8, 0, 235, 82, 0, 250, 75,
	0, 192, 2, 0, 176, 71, 0, 232, 68, 0, 137, 85, 0, 135, 85, 0,
	230, 69, 0, 236, 79, 0, 253, 67, 0, 252, 79, 0, 172, 67, 0, 133,
	83, 0, 221, 170, 7, 0, 173, 84, 0, 180, 84, 0, 151, 68, 0, 202,
	75, 0, 40, 0, 147, 83, 0, 237, 82, 0, 142, 64, 0, 191, 69, 0,
	185, 64, 0, 193, 169, 7, 0, 141, 85, 0, 143, 85, 0, 154, 64, 0,
	194, 2, 0, 166, 85, 0, 249, 84, 0, 201, 69, 0, 246, 82, 0, 251,
	84, 0, 150, 83, 0, 195, 75, 0, 202, 82, 0, 230, 82, 0, 232, 68,
	128, 252, 3, 0, 186, 68, 0, 175, 1, 0, 194, 76, 0, 160, 78, 0,
	174, 75, 0, 169, 84, 0, 188, 8, 0, 148, 64, 0, 170, 170, 7, 0,
	167, 66, 0, 181, 1, 0, 240, 85, 0, 146, 68, 0, 170, 84, 0, 219,
	85, 0, 167, 69, 0, 222, 170, 7, 0, 194, 169, 7, 0, 188, 7, 0,
	184, 69, 0, 217, 69, 184, 6, 0, 235, 68, 210, 65, 0, 205, 67, 0,
	206, 67, 0, 216, 69, 184, 6, 0, 234, 68, 210, 65, 0, 207, 67, 0,
	175, 69, 0, 174, 69, 0, 196, 2, 0, 160, 68, 210, 65, 0, 240, 84,
	184, 6, 0, 203, 68, 184, 6, 0, 201, 2, 0, 238, 76, 0, 195, 84,
	0, 200, 2, 0, 198, 2, 0, 237, 84, 184, 6, 0, 194, 84, 0, 189,
	8, 0, 147, 64, 0, 215, 67, 0, 164, 82, 0, 208, 68, 184, 6, 0,
	168, 82, 0, 171, 170, 7, 0, 174, 67, 0, 242, 85, 0, 252, 69, 0,
	250, 69, 0, 218, 8, 0, 230, 68, 184, 6, 0, 154, 67, 0, 165, 64,
	0, 223, 170, 7, 0, 172, 1, 0, 249, 69, 184, 6, 0, 245, 69, 184,
	6, 0, 247, 69, 0, 246, 69, 0, 254, 69, 0, 253, 69, 0, 253, 85,
	229, 65, 0, 130, 68, 184, 6, 0, 148, 84, 0, 155, 67, 0, 179, 82,
	184, 6, 0, 157, 67, 184, 6, 0, 195, 169, 7, 0, 132, 69, 0, 197,
	85, 184, 6, 0, 133, 69, 0, 198, 85, 184, 6, 0, 241, 1, 0, 189,
	7, 0, 35, 0, 150, 66, 0, 135, 64, 0, 173, 69, 0, 132, 82, 0,
	205, 68, 210, 65, 0, 172, 69, 0, 229, 68, 210, 65, 0, 62, 210, 65,
	0, 222, 83, 0, 130, 82, 0, 228, 68, 210, 65, 0, 60, 210, 65, 0,
	180, 69, 210, 65, 0, 131, 82, 0, 181, 69, 210, 65, 0, 188, 68, 210,
	65, 0, 214, 67, 0, 163, 82, 0, 167, 82, 0, 243, 1, 0, 244, 1,
	0, 190, 8, 0, 209, 2, 0, 184, 84, 0, 188, 83, 0, 211, 2, 0,
	191, 83, 0, 172, 170, 7, 0, 219, 5, 0, 242, 1, 0, 193, 83, 0,
	181, 83, 0, 190, 83, 0, 187, 83, 0, 192, 83, 0, 205, 2, 0, 201,
	7, 0, 191, 7, 0, 182, 83, 0, 224, 170, 7, 0, 183, 83, 0, 185,
	83, 0, 168, 68, 0, 221, 84, 0, 180, 66, 0, 170, 1, 0, 186, 1,
	0, 182, 69, 0, 214, 84, 0, 215, 84, 0, 219, 84, 0, 248, 1, 0,
	152, 69, 0, 245, 1, 0, 182, 84, 0, 246, 1, 0, 189, 70, 0, 182,
	1, 0, 243, 85, 0, 253, 85, 0, 191, 8, 0, 37, 0, 46, 0, 176,
	64, 0, 177, 64, 0, 173, 170, 7, 0, 198, 7, 0, 213, 7, 0, 142,
	76, 0, 192, 7, 0, 214, 7, 0, 142, 66, 0, 43, 0, 163, 84, 0,
	162, 84, 0, 165, 84, 0, 242, 84, 0, 166, 84, 0, 167, 84, 0, 149,
	84, 0, 225, 170, 7, 0, 163, 1, 0, 179, 85, 0, 183, 85, 0, 185,
	85, 0, 181, 85, 0, 232, 69, 0, 178, 64, 0, 174, 70, 0, 146, 70,
	0, 147, 70, 0, 176, 69, 0, 197, 169, 7, 0, 200, 7, 0, 136, 64,
	0, 174, 170, 7, 0, 226, 170, 7, 0, 215, 64, 0, 198, 169, 7, 0,
	150, 84, 0, 63, 0, 156, 82, 0, 228, 82, 0, 189, 68, 177, 6, 0,
	213, 2, 0, 179, 83, 0, 146, 83, 0, 165, 83, 0, 187, 1, 0, 245,
	82, 0, 160, 82, 0, 179, 82, 0, 158, 82, 0, 197, 82, 0, 244, 82,
	0, 163, 67, 0, 157, 67, 0, 154, 82, 0, 182, 68, 0, 243, 78, 0,
	125, 0, 93, 0, 140, 83, 0, 142, 83, 0, 144, 83, 0, 217, 2, 0,
	215, 2, 0, 192, 8, 0, 183, 82, 0, 233, 82, 0, 179, 67, 0, 173,
	75, 0, 253, 82, 0, 175, 170, 7, 0, 236, 82, 0, 193, 7, 0, 241,
	7, 0, 201, 67, 0, 204, 69, 0, 218, 5, 0, 143, 64, 0, 177, 71,
	0, 238, 85, 0, 237, 79, 0, 254, 67, 0, 134, 83, 0, 227, 170, 7,
	0, 174, 84, 0, 181, 84, 0, 41, 0, 148, 83, 0, 146, 84, 0, 186,
	64, 0, 199, 169, 7, 0, 202, 69, 0, 185, 75, 0, 206, 83, 0, 232,
	82, 0, 158, 66, 0, 219, 2, 0, 180, 85, 0, 184, 85, 0, 225, 2,
	0, 223, 2, 0, 221, 2, 0, 182, 85, 0, 186, 85, 0, 233, 69, 0,
	147, 84, 0, 193, 8, 0, 197, 69, 0, 230, 84, 0, 216, 67, 0, 167,
	1, 0, 59, 0, 169, 82, 0, 182, 78, 0, 176, 170, 7, 0, 239, 76,
	0, 201, 8, 0, 200, 8, 0, 173, 1, 0, 195, 7, 0, 194, 7, 0,
	234, 84, 0, 158, 85, 0, 160, 85, 0, 157, 85, 0, 159, 85, 0, 198,
	68, 0, 164, 84, 0, 242, 82, 0, 179, 84, 0, 228, 83, 0, 163, 70,
	0, 170, 85, 0, 172, 85, 0, 172, 85, 128, 252, 3, 0, 204, 8, 0,
	47, 0, 196, 83, 0, 191, 70, 0, 228, 170, 7, 0, 224, 76, 0, 147,
	69, 128, 252, 3, 0, 148, 69, 128, 252, 3, 0, 200, 169, 7, 0, 134,
	76, 0, 130, 69, 0, 197, 85, 0, 189, 85, 0, 195, 85, 0, 193, 85,
	0, 203, 85, 0, 138, 69, 0, 191, 85, 0, 249, 82, 0, 199, 85, 0,
	213, 85, 0, 211, 85, 0, 234, 76, 0, 185, 1, 0, 178, 1, 0, 179,
	1, 0, 198, 85, 0, 190, 85, 0, 216, 85, 0, 196, 85, 0, 201, 79,
	0, 215, 85, 0, 251, 82, 0, 194, 85, 0, 204, 85, 0, 139, 69, 0,
	192, 85, 0, 200, 85, 0, 212, 85, 0, 214, 85, 0, 217, 67, 0, 170,
	82, 0, 223, 1, 0, 150, 70, 0, 196, 7, 0, 229, 2, 0, 227, 2,
	0, 194, 8, 0, 149, 70, 0, 177, 170, 7, 0, 184, 7, 0, 209, 7,
	0, 254, 1, 0, 215, 1, 0, 177, 84, 0, 176, 84, 0, 182, 70, 0,
	241, 85, 0, 229, 170, 7, 0, 218, 85, 0, 180, 64, 0, 181, 75, 0,
	220, 68, 0, 236, 75, 0, 186, 84, 0, 185, 84, 0, 205, 83, 0, 187,
	84, 0, 226, 71, 0, 201, 169, 7, 0, 198, 8, 0, 219, 8, 0, 231,
	2, 0, 227, 82, 0, 250, 1, 0, 222, 8, 0, 237, 2, 0, 251, 1,
	0, 195, 8, 0, 241, 2, 0, 254, 82, 0, 178, 170, 7, 0, 249, 1,
	0, 128, 75, 0, 156, 70, 0, 143, 70, 0, 248, 75, 0, 235, 2, 0,
	243, 2, 0, 230, 170, 7, 0, 197, 7, 0, 200, 67, 0, 157, 70, 0,
	142, 70, 0, 239, 2, 0, 249, 75, 0, 202, 169, 7, 0, 240, 69, 0,
	233, 2, 0, 252, 1, 0, 167, 83, 0, 232, 85, 0, 233, 85, 0, 156,
	83, 0, 138, 69, 128, 252, 3, 0, 203, 85, 128, 252, 3, 0, 139, 69,
	128, 252, 3, 0, 204, 85, 128, 252, 3, 0, 178, 8, 0, 187, 69, 0,
	218, 68, 0, 238, 69, 0, 179, 170, 7, 0, 231, 170, 7, 0, 203, 169,
	7, 0, 154, 83, 0, 245, 2, 0, 223, 84, 0, 217, 68, 0, 152, 66,
	0, 180, 170, 7, 0, 232, 170, 7, 0, 204, 169, 7, 0, 181, 170, 7,
	0, 190, 7, 0, 251, 69, 0, 233, 170, 7, 0, 205, 169, 7, 0, 253,
	1, 0, 207, 8, 0, 247, 2, 0, 203, 8, 0, 165, 1, 0, 182, 170,
	7, 0, 215, 8, 0, 234, 170, 7, 0, 206, 169, 7, 0, 206, 8, 0,
	255, 1, 0, 250, 2, 0, 254, 2, 0, 183, 8, 0, 252, 2, 0, 182,
	7, 0, 183, 170, 7, 0, 182, 8, 0, 221, 67, 0, 235, 170, 7, 0,
	207, 169, 7, 0, 141, 64, 0, 140, 64, 0,
}

ENTITY_COUNT :: 2125
// END GENERATED TABLE

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/a61bd03a76009d77aa5574ce50db7b3b1b8c56a19ac429838d0eadfa5e37e503.wasm

Size-optimised rebuild of the earlier 20-page Odin submission. The entity table is replaced by the compact design from the C submission fa176a59: front-coded sorted names in blocks of eight (each name stores only the suffix after its predecessor's shared prefix, 12,809 bytes), a u16 offset per block (266 entries), u16 refs (15-bit value offset | legacy bit, 2,125 entries), and a deduplicated value pool stored as LEB128 code points, NUL-terminated (code point 0 never occurs, 4,778 bytes). Binary search rebuilds the mid record's name from its block start, and the value copy loop decodes LEB128 code points through the same emit_code_point helper used for numeric references. Unchanged: the copy-then-look SIMD scan (16-byte blocks stored before being examined, 64 bytes per step), the 32-byte SIMD alphanumeric measurement of names, the one 1,258,400-byte buffer (output from byte 0, input from byte GAP=209,792), saturating numeric parsing at U+110000, Windows-1252 remapping of 0x80-0x9F, and U+FFFD for 0/surrogates/>U+10FFFF. 25,784 bytes, 20 pages, 16 KiB stack.

Builds on
Direct derivative of the first submitter's own Odin submission 4e41cc72: same copy-then-look SIMD scanner and buffer layout. New here: the front-coded name blocks and LEB128 code-point value pool (the table design of the C submission fa176a59, itself derived from e9ed850e).

Build details

Compiler, size, memory and checksum
Submitted
4 November 2026 at 02:51 UTC
Language
Odin
Compiler
odin dev-2026-10:84bc3fc21 (LLVM 22) build unescape3.odin -file -target:freestanding_wasm32 -target-features:simd128 -o:speed -no-entry-point -no-bounds-check -disable-assert -default-to-nil-allocator -no-crt -out:unescape3.wasm -extra-linker-flags:"--initial-memory=1310720 --max-memory=1310720 -z stack-size=16384 --strip-all"
Size
25.2 KiB, gzip 15.3 KiB
Download
~300 ms on Slow 4G (Lighthouse’s 1.6 Mbps, 150 ms round trips)
Memory
20 pages (1.3 MiB)
SIMD
yes
AI models
qwen3.8-27b:8bit
Functions, loops, branches and other static counts
Functions
6
Instructions
1,502
Loops
16
Conditional branches
73
Indirect calls
0
Memory loads
39
Memory stores
44
SIMD instructions
46
Potentially trapping instructions
100

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