diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c12f764..f62d01c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,6 +71,26 @@ jobs: - name: test run: | make test + linux-riscv64: + runs-on: ubuntu-latest + defaults: + run: + shell: alpine.sh {0} + steps: + - uses: actions/checkout@v3 + - uses: jirutka/setup-alpine@v1 + with: + arch: riscv64 + packages: "build-base make cmake" + - name: build + run: | + make + - name: stats + run: | + make stats + - name: test + run: | + make test linux-s390x: runs-on: ubuntu-latest defaults: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a930262..547a443 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,6 +6,62 @@ on: - "v*.*.*" jobs: + linux-aarch64: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + - uses: jirutka/setup-alpine@v1 + with: + arch: aarch64 + packages: "build-base make cmake" + - name: build + shell: alpine.sh {0} + run: | + mkdir build + cd build + cmake -DBUILD_STATIC_QJS_EXE=ON .. + cd .. + cmake --build build --target qjs_exe -j$(getconf _NPROCESSORS_ONLN) + cmake --build build --target qjsc -j$(getconf _NPROCESSORS_ONLN) + mv build/qjs build/qjs-linux-aarch64 + mv build/qjsc build/qjsc-linux-aarch64 + - name: check + shell: alpine.sh {0} + run: | + file build/*-linux-aarch64 + - name: upload + uses: actions/upload-artifact@v3 + with: + name: qjs + path: build/*-linux-aarch64 + linux-riscv64: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + - uses: jirutka/setup-alpine@v1 + with: + arch: riscv64 + packages: "build-base make cmake" + - name: build + shell: alpine.sh {0} + run: | + mkdir build + cd build + cmake -DBUILD_STATIC_QJS_EXE=ON .. + cd .. + cmake --build build --target qjs_exe -j$(getconf _NPROCESSORS_ONLN) + cmake --build build --target qjsc -j$(getconf _NPROCESSORS_ONLN) + mv build/qjs build/qjs-linux-riscv64 + mv build/qjsc build/qjsc-linux-riscv64 + - name: check + shell: alpine.sh {0} + run: | + file build/*-linux-riscv64 + - name: upload + uses: actions/upload-artifact@v3 + with: + name: qjs + path: build/*-linux-riscv64 linux-x86: runs-on: ubuntu-20.04 steps: @@ -28,7 +84,7 @@ jobs: - name: check shell: alpine.sh {0} run: | - file build/qjs-linux-x86 build/qjsc-linux-x86 + file build/*-linux-x86 - name: upload uses: actions/upload-artifact@v3 with: @@ -57,7 +113,7 @@ jobs: - name: check shell: alpine.sh {0} run: | - file build/qjs-linux-x86_64 build/qjsc-linux-x86_64 + file build/*-linux-x86_64 - name: upload uses: actions/upload-artifact@v3 with: @@ -169,7 +225,7 @@ jobs: path: build/qjs-wasi.wasm upload-to-release: - needs: [linux-x86, linux-x86_64, macos, windows-x86, windows-x86_64, wasi] + needs: [linux-aarch64, linux-riscv64, linux-x86, linux-x86_64, macos, windows-x86, windows-x86_64, wasi] runs-on: ubuntu-20.04 steps: - name: get assets diff --git a/cutils.c b/cutils.c index 4973455..56982df 100644 --- a/cutils.c +++ b/cutils.c @@ -213,58 +213,85 @@ void dbuf_free(DynBuf *s) memset(s, 0, sizeof(*s)); } -/*--- Unicode / UTF-8 utility functions --*/ +/*--- UTF-8 utility functions --*/ -/* Note: at most 31 bits are encoded. At most UTF8_CHAR_LEN_MAX bytes - are output. */ -int unicode_to_utf8(uint8_t *buf, unsigned int c) +/* Note: only encode valid codepoints (0x0000..0x10FFFF). + At most UTF8_CHAR_LEN_MAX bytes are output. */ + +/* Compute the number of bytes of the UTF-8 encoding for a codepoint + `c` is a code-point. + Returns the number of bytes. If a codepoint is beyond 0x10FFFF the + return value is 3 as the codepoint would be encoded as 0xFFFD. + */ +size_t utf8_encode_len(uint32_t c) { - uint8_t *q = buf; - - if (c < 0x80) { - *q++ = c; - } else { - if (c < 0x800) { - *q++ = (c >> 6) | 0xc0; - } else { - if (c < 0x10000) { - *q++ = (c >> 12) | 0xe0; - } else { - if (c < 0x00200000) { - *q++ = (c >> 18) | 0xf0; - } else { - if (c < 0x04000000) { - *q++ = (c >> 24) | 0xf8; - } else if (c < 0x80000000) { - *q++ = (c >> 30) | 0xfc; - *q++ = ((c >> 24) & 0x3f) | 0x80; - } else { - return 0; - } - *q++ = ((c >> 18) & 0x3f) | 0x80; - } - *q++ = ((c >> 12) & 0x3f) | 0x80; - } - *q++ = ((c >> 6) & 0x3f) | 0x80; - } - *q++ = (c & 0x3f) | 0x80; - } - return q - buf; + if (c < 0x80) + return 1; + if (c < 0x800) + return 2; + if (c < 0x10000) + return 3; + if (c < 0x110000) + return 4; + return 3; } -static const unsigned int utf8_min_code[5] = { - 0x80, 0x800, 0x10000, 0x00200000, 0x04000000, -}; - -static const unsigned char utf8_first_code_mask[5] = { - 0x1f, 0xf, 0x7, 0x3, 0x1, -}; - -/* return -1 if error. *pp is not updated in this case. max_len must - be >= 1. The maximum length for a UTF8 byte sequence is 6 bytes. */ -int unicode_from_utf8(const uint8_t *p, int max_len, const uint8_t **pp) +/* Encode a codepoint in UTF-8 + `buf` points to an array of at least `UTF8_CHAR_LEN_MAX` bytes + `c` is a code-point. + Returns the number of bytes. If a codepoint is beyond 0x10FFFF the + return value is 3 and the codepoint is encoded as 0xFFFD. + No null byte is stored after the encoded bytes. + Return value is in range 1..4 + */ +size_t utf8_encode(uint8_t *buf, uint32_t c) { - int l, c, b, i; + if (c < 0x80) { + buf[0] = c; + return 1; + } + if (c < 0x800) { + buf[0] = (c >> 6) | 0xC0; + buf[1] = (c & 0x3F) | 0x80; + return 2; + } + if (c < 0x10000) { + buf[0] = (c >> 12) | 0xE0; + buf[1] = ((c >> 6) & 0x3F) | 0x80; + buf[2] = (c & 0x3F) | 0x80; + return 3; + } + if (c < 0x110000) { + buf[0] = (c >> 18) | 0xF0; + buf[1] = ((c >> 12) & 0x3F) | 0x80; + buf[2] = ((c >> 6) & 0x3F) | 0x80; + buf[3] = (c & 0x3F) | 0x80; + return 4; + } + buf[0] = (0xFFFD >> 12) | 0xE0; + buf[1] = ((0xFFFD >> 6) & 0x3F) | 0x80; + buf[2] = (0xFFFD & 0x3F) | 0x80; + return 3; +} + +/* Decode a single code point from a UTF-8 encoded array of bytes + `p` is a valid pointer to an array of bytes + `pp` is a valid pointer to a `const uint8_t *` to store a pointer + to the byte following the current sequence. + Return the code point at `p`, in the range `0..0x10FFFF` + Return 0xFFFD on error. Only a single byte is consumed in this case + The maximum length for a UTF-8 byte sequence is 4 bytes. + This implements the algorithm specified in whatwg.org, except it accepts + UTF-8 encoded surrogates as JavaScript allows them in strings. + The source string is assumed to have at least UTF8_CHAR_LEN_MAX bytes + or be null terminated. + If `p[0]` is '\0', the return value is `0` and the byte is consumed. + cf: https://encoding.spec.whatwg.org/#utf-8-encoder + */ +uint32_t utf8_decode(const uint8_t *p, const uint8_t **pp) +{ + uint32_t c; + uint8_t lower, upper; c = *p++; if (c < 0x80) { @@ -272,49 +299,283 @@ int unicode_from_utf8(const uint8_t *p, int max_len, const uint8_t **pp) return c; } switch(c) { - case 0xc0: case 0xc1: case 0xc2: case 0xc3: - case 0xc4: case 0xc5: case 0xc6: case 0xc7: - case 0xc8: case 0xc9: case 0xca: case 0xcb: - case 0xcc: case 0xcd: case 0xce: case 0xcf: - case 0xd0: case 0xd1: case 0xd2: case 0xd3: - case 0xd4: case 0xd5: case 0xd6: case 0xd7: - case 0xd8: case 0xd9: case 0xda: case 0xdb: - case 0xdc: case 0xdd: case 0xde: case 0xdf: - l = 1; + case 0xC2: case 0xC3: + case 0xC4: case 0xC5: case 0xC6: case 0xC7: + case 0xC8: case 0xC9: case 0xCA: case 0xCB: + case 0xCC: case 0xCD: case 0xCE: case 0xCF: + case 0xD0: case 0xD1: case 0xD2: case 0xD3: + case 0xD4: case 0xD5: case 0xD6: case 0xD7: + case 0xD8: case 0xD9: case 0xDA: case 0xDB: + case 0xDC: case 0xDD: case 0xDE: case 0xDF: + if (*p >= 0x80 && *p <= 0xBF) { + *pp = p + 1; + return ((c - 0xC0) << 6) + (*p - 0x80); + } + // otherwise encoding error break; - case 0xe0: case 0xe1: case 0xe2: case 0xe3: - case 0xe4: case 0xe5: case 0xe6: case 0xe7: - case 0xe8: case 0xe9: case 0xea: case 0xeb: - case 0xec: case 0xed: case 0xee: case 0xef: - l = 2; + case 0xE0: + lower = 0xA0; /* reject invalid encoding */ + goto need2; + case 0xE1: case 0xE2: case 0xE3: + case 0xE4: case 0xE5: case 0xE6: case 0xE7: + case 0xE8: case 0xE9: case 0xEA: case 0xEB: + case 0xEC: case 0xED: case 0xEE: case 0xEF: + lower = 0x80; + need2: + if (*p >= lower && *p <= 0xBF && p[1] >= 0x80 && p[1] <= 0xBF) { + *pp = p + 2; + return ((c - 0xE0) << 12) + ((*p - 0x80) << 6) + (p[1] - 0x80); + } + // otherwise encoding error break; - case 0xf0: case 0xf1: case 0xf2: case 0xf3: - case 0xf4: case 0xf5: case 0xf6: case 0xf7: - l = 3; - break; - case 0xf8: case 0xf9: case 0xfa: case 0xfb: - l = 4; - break; - case 0xfc: case 0xfd: - l = 5; + case 0xF0: + lower = 0x90; /* reject invalid encoding */ + upper = 0xBF; + goto need3; + case 0xF4: + lower = 0x80; + upper = 0x8F; /* reject values above 0x10FFFF */ + goto need3; + case 0xF1: case 0xF2: case 0xF3: + lower = 0x80; + upper = 0xBF; + need3: + if (*p >= lower && *p <= upper && p[1] >= 0x80 && p[1] <= 0xBF + && p[2] >= 0x80 && p[2] <= 0xBF) { + *pp = p + 3; + return ((c - 0xF0) << 18) + ((*p - 0x80) << 12) + + ((p[1] - 0x80) << 6) + (p[2] - 0x80); + } + // otherwise encoding error break; default: - return -1; + // invalid lead byte + break; } - /* check that we have enough characters */ - if (l > (max_len - 1)) - return -1; - c &= utf8_first_code_mask[l - 1]; - for(i = 0; i < l; i++) { - b = *p++; - if (b < 0x80 || b >= 0xc0) - return -1; - c = (c << 6) | (b & 0x3f); - } - if (c < utf8_min_code[l - 1]) - return -1; *pp = p; - return c; + return 0xFFFD; +} + +uint32_t utf8_decode_len(const uint8_t *p, size_t max_len, const uint8_t **pp) { + switch (max_len) { + case 0: + *pp = p; + return 0xFFFD; + case 1: + if (*p < 0x80) + goto good; + break; + case 2: + if (*p < 0xE0) + goto good; + break; + case 3: + if (*p < 0xF0) + goto good; + break; + default: + good: + return utf8_decode(p, pp); + } + *pp = p + 1; + return 0xFFFD; +} + +/* Scan a UTF-8 encoded buffer for content type + `buf` is a valid pointer to a UTF-8 encoded string + `len` is the number of bytes to scan + `plen` points to a `size_t` variable to receive the number of units + Return value is a mask of bits. + - `UTF8_PLAIN_ASCII`: return value for 7-bit ASCII plain text + - `UTF8_NON_ASCII`: bit for non ASCII code points (8-bit or more) + - `UTF8_HAS_16BIT`: bit for 16-bit code points + - `UTF8_HAS_NON_BMP1`: bit for non-BMP1 code points, needs UTF-16 surrogate pairs + - `UTF8_HAS_ERRORS`: bit for encoding errors + */ +int utf8_scan(const char *buf, size_t buf_len, size_t *plen) +{ + const uint8_t *p, *p_end, *p_next; + size_t i, len; + int kind; + uint8_t cbits; + + kind = UTF8_PLAIN_ASCII; + cbits = 0; + len = buf_len; + // TODO: handle more than 1 byte at a time + for (i = 0; i < buf_len; i++) + cbits |= buf[i]; + if (cbits >= 0x80) { + p = (const uint8_t *)buf; + p_end = p + buf_len; + kind = UTF8_NON_ASCII; + len = 0; + while (p < p_end) { + len++; + if (*p++ >= 0x80) { + /* parse UTF-8 sequence, check for encoding error */ + uint32_t c = utf8_decode_len(p - 1, p_end - (p - 1), &p_next); + if (p_next == p) + kind |= UTF8_HAS_ERRORS; + p = p_next; + if (c > 0xFF) { + kind |= UTF8_HAS_16BIT; + if (c > 0xFFFF) { + len++; + kind |= UTF8_HAS_NON_BMP1; + } + } + } + } + } + *plen = len; + return kind; +} + +/* Decode a string encoded in UTF-8 into an array of bytes + `src` points to the source string. It is assumed to be correctly encoded + and only contains code points below 0x800 + `src_len` is the length of the source string + `dest` points to the destination array, it can be null if `dest_len` is `0` + `dest_len` is the length of the destination array. A null + terminator is stored at the end of the array unless `dest_len` is `0`. + */ +size_t utf8_decode_buf8(uint8_t *dest, size_t dest_len, const char *src, size_t src_len) +{ + const uint8_t *p, *p_end; + size_t i; + + p = (const uint8_t *)src; + p_end = p + src_len; + for (i = 0; p < p_end; i++) { + uint32_t c = *p++; + if (c >= 0xC0) + c = (c << 6) + *p++ - ((0xC0 << 6) + 0x80); + if (i < dest_len) + dest[i] = c; + } + if (i < dest_len) + dest[i] = '\0'; + else if (dest_len > 0) + dest[dest_len - 1] = '\0'; + return i; +} + +/* Decode a string encoded in UTF-8 into an array of 16-bit words + `src` points to the source string. It is assumed to be correctly encoded. + `src_len` is the length of the source string + `dest` points to the destination array, it can be null if `dest_len` is `0` + `dest_len` is the length of the destination array. No null terminator is + stored at the end of the array. + */ +size_t utf8_decode_buf16(uint16_t *dest, size_t dest_len, const char *src, size_t src_len) +{ + const uint8_t *p, *p_end; + size_t i; + + p = (const uint8_t *)src; + p_end = p + src_len; + for (i = 0; p < p_end; i++) { + uint32_t c = *p++; + if (c >= 0x80) { + /* parse utf-8 sequence */ + c = utf8_decode_len(p - 1, p_end - (p - 1), &p); + /* encoding errors are converted as 0xFFFD and use a single byte */ + if (c > 0xFFFF) { + if (i < dest_len) + dest[i] = get_hi_surrogate(c); + i++; + c = get_lo_surrogate(c); + } + } + if (i < dest_len) + dest[i] = c; + } + return i; +} + +/* Encode a buffer of 8-bit bytes as a UTF-8 encoded string + `src` points to the source buffer. + `src_len` is the length of the source buffer + `dest` points to the destination array, it can be null if `dest_len` is `0` + `dest_len` is the length in bytes of the destination array. A null + terminator is stored at the end of the array unless `dest_len` is `0`. + */ +size_t utf8_encode_buf8(char *dest, size_t dest_len, const uint8_t *src, size_t src_len) +{ + size_t i, j; + uint32_t c; + + for (i = j = 0; i < src_len; i++) { + c = src[i]; + if (c < 0x80) { + if (j + 1 >= dest_len) + goto overflow; + dest[j++] = c; + } else { + if (j + 2 >= dest_len) + goto overflow; + dest[j++] = (c >> 6) | 0xC0; + dest[j++] = (c & 0x3F) | 0x80; + } + } + if (j < dest_len) + dest[j] = '\0'; + return j; + +overflow: + if (j < dest_len) + dest[j] = '\0'; + while (i < src_len) + j += 1 + (src[i++] >= 0x80); + return j; +} + +/* Encode a buffer of 16-bit code points as a UTF-8 encoded string + `src` points to the source buffer. + `src_len` is the length of the source buffer + `dest` points to the destination array, it can be null if `dest_len` is `0` + `dest_len` is the length in bytes of the destination array. A null + terminator is stored at the end of the array unless `dest_len` is `0`. + */ +size_t utf8_encode_buf16(char *dest, size_t dest_len, const uint16_t *src, size_t src_len) +{ + size_t i, j; + uint32_t c; + + for (i = j = 0; i < src_len;) { + c = src[i++]; + if (c < 0x80) { + if (j + 1 >= dest_len) + goto overflow; + dest[j++] = c; + } else { + if (is_hi_surrogate(c) && i < src_len && is_lo_surrogate(src[i])) + c = from_surrogate(c, src[i++]); + if (j + utf8_encode_len(c) >= dest_len) + goto overflow; + j += utf8_encode((uint8_t *)dest + j, c); + } + } + if (j < dest_len) + dest[j] = '\0'; + return j; + +overflow: + i -= 1 + (c > 0xFFFF); + if (j < dest_len) + dest[j] = '\0'; + while (i < src_len) { + c = src[i++]; + if (c < 0x80) { + j++; + } else { + if (is_hi_surrogate(c) && i < src_len && is_lo_surrogate(src[i])) + c = from_surrogate(c, src[i++]); + j += utf8_encode_len(c); + } + } + return j; } /*--- integer to string conversions --*/ @@ -329,6 +590,9 @@ int unicode_from_utf8(const uint8_t *p, int max_len, const uint8_t **pp) /* 2 <= base <= 36 */ char const digits36[36] = "0123456789abcdefghijklmnopqrstuvwxyz"; +#define USE_SPECIAL_RADIX_10 1 // special case base 10 radix conversions +#define USE_SINGLE_CASE_FAST 1 // special case single digit numbers + /* using u32toa_shift variant */ #define gen_digit(buf, c) if (is_be()) \ @@ -367,11 +631,13 @@ size_t u07toa_shift(char dest[minimum_length(8)], uint32_t n, size_t len) size_t u32toa(char buf[minimum_length(11)], uint32_t n) { +#ifdef USE_SINGLE_CASE_FAST /* 10% */ if (n < 10) { buf[0] = (char)('0' + n); buf[1] = '\0'; return 1; } +#endif #define TEN_POW_7 10000000 if (n >= TEN_POW_7) { uint32_t quo = n / TEN_POW_7; @@ -433,6 +699,8 @@ static uint8_t const radix_shift[64] = { size_t u32toa_radix(char buf[minimum_length(33)], uint32_t n, unsigned base) { + int shift; + #ifdef USE_SPECIAL_RADIX_10 if (likely(base == 10)) return u32toa(buf, n); @@ -442,13 +710,13 @@ size_t u32toa_radix(char buf[minimum_length(33)], uint32_t n, unsigned base) buf[1] = '\0'; return 1; } - int shift = radix_shift[base & 63]; + shift = radix_shift[base & 63]; if (shift) { uint32_t mask = (1 << shift) - 1; size_t len = (32 - clz32(n) + shift - 1) / shift; size_t last = n & mask; - n /= base; char *end = buf + len; + n >>= shift; *end-- = '\0'; *end-- = digits36[last]; while (n >= base) { @@ -482,11 +750,13 @@ size_t u32toa_radix(char buf[minimum_length(33)], uint32_t n, unsigned base) size_t u64toa_radix(char buf[minimum_length(65)], uint64_t n, unsigned base) { + int shift; + #ifdef USE_SPECIAL_RADIX_10 if (likely(base == 10)) return u64toa(buf, n); #endif - int shift = radix_shift[base & 63]; + shift = radix_shift[base & 63]; if (shift) { if (n < base) { buf[0] = digits36[n]; @@ -496,8 +766,8 @@ size_t u64toa_radix(char buf[minimum_length(65)], uint64_t n, unsigned base) uint64_t mask = (1 << shift) - 1; size_t len = (64 - clz64(n) + shift - 1) / shift; size_t last = n & mask; - n /= base; char *end = buf + len; + n >>= shift; *end-- = '\0'; *end-- = digits36[last]; while (n >= base) { @@ -531,6 +801,15 @@ size_t u64toa_radix(char buf[minimum_length(65)], uint64_t n, unsigned base) } } +size_t i32toa_radix(char buf[minimum_length(34)], int32_t n, unsigned int base) +{ + if (likely(n >= 0)) + return u32toa_radix(buf, n, base); + + buf[0] = '-'; + return 1 + u32toa_radix(buf + 1, -(uint32_t)n, base); +} + size_t i64toa_radix(char buf[minimum_length(66)], int64_t n, unsigned int base) { if (likely(n >= 0)) @@ -540,6 +819,11 @@ size_t i64toa_radix(char buf[minimum_length(66)], int64_t n, unsigned int base) return 1 + u64toa_radix(buf + 1, -(uint64_t)n, base); } +#undef gen_digit +#undef TEN_POW_7 +#undef USE_SPECIAL_RADIX_10 +#undef USE_SINGLE_CASE_FAST + /*---- sorting with opaque argument ----*/ typedef void (*exchange_f)(void *a, void *b, size_t size); diff --git a/cutils.h b/cutils.h index 79a25de..a5da60d 100644 --- a/cutils.h +++ b/cutils.h @@ -387,10 +387,26 @@ static inline void dbuf_set_error(DynBuf *s) s->error = TRUE; } -#define UTF8_CHAR_LEN_MAX 6 +/*---- UTF-8 and UTF-16 handling ----*/ -int unicode_to_utf8(uint8_t *buf, unsigned int c); -int unicode_from_utf8(const uint8_t *p, int max_len, const uint8_t **pp); +#define UTF8_CHAR_LEN_MAX 4 + +enum { + UTF8_PLAIN_ASCII = 0, // 7-bit ASCII plain text + UTF8_NON_ASCII = 1, // has non ASCII code points (8-bit or more) + UTF8_HAS_16BIT = 2, // has 16-bit code points + UTF8_HAS_NON_BMP1 = 4, // has non-BMP1 code points, needs UTF-16 surrogate pairs + UTF8_HAS_ERRORS = 8, // has encoding errors +}; +int utf8_scan(const char *buf, size_t len, size_t *plen); +size_t utf8_encode_len(uint32_t c); +size_t utf8_encode(uint8_t *buf, uint32_t c); +uint32_t utf8_decode_len(const uint8_t *p, size_t max_len, const uint8_t **pp); +uint32_t utf8_decode(const uint8_t *p, const uint8_t **pp); +size_t utf8_decode_buf8(uint8_t *dest, size_t dest_len, const char *src, size_t src_len); +size_t utf8_decode_buf16(uint16_t *dest, size_t dest_len, const char *src, size_t src_len); +size_t utf8_encode_buf8(char *dest, size_t dest_len, const uint8_t *src, size_t src_len); +size_t utf8_encode_buf16(char *dest, size_t dest_len, const uint16_t *src, size_t src_len); static inline BOOL is_surrogate(uint32_t c) { @@ -448,6 +464,7 @@ size_t i32toa(char buf[minimum_length(12)], int32_t n); size_t u64toa(char buf[minimum_length(21)], uint64_t n); size_t i64toa(char buf[minimum_length(22)], int64_t n); size_t u32toa_radix(char buf[minimum_length(33)], uint32_t n, unsigned int base); +size_t i32toa_radix(char buf[minimum_length(34)], int32_t n, unsigned base); size_t u64toa_radix(char buf[minimum_length(65)], uint64_t n, unsigned int base); size_t i64toa_radix(char buf[minimum_length(66)], int64_t n, unsigned int base); diff --git a/doc/quickjs.texi b/doc/quickjs.texi index 8d8fdd7..dab92bf 100644 --- a/doc/quickjs.texi +++ b/doc/quickjs.texi @@ -330,6 +330,11 @@ optional properties: @item backtrace_barrier Boolean (default = false). If true, error backtraces do not list the stack frames below the evalScript. + @item async + Boolean (default = false). If true, @code{await} is accepted in the + script and a promise is returned. The promise is resolved with an + object whose @code{value} property holds the value returned by the + script. @end table @item loadScript(filename) @@ -717,6 +722,12 @@ write_fd]} or null in case of error. @item sleep(delay_ms) Sleep during @code{delay_ms} milliseconds. +@item sleepAsync(delay_ms) +Asynchronouse sleep during @code{delay_ms} milliseconds. Returns a promise. Example: +@example +await os.sleepAsync(500); +@end example + @item setTimeout(func, delay) Call the function @code{func} after @code{delay} ms. Return a handle to the timer. diff --git a/gen/hello_module.c b/gen/hello_module.c index b1ce18b..be72121 100644 --- a/gen/hello_module.c +++ b/gen/hello_module.c @@ -2,53 +2,53 @@ #include "quickjs-libc.h" -const uint32_t qjsc_fib_module_size = 310; +const uint32_t qjsc_fib_module_size = 311; -const uint8_t qjsc_fib_module[310] = { +const uint8_t qjsc_fib_module[311] = { 0x0c, 0x03, 0x2c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x62, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x6a, 0x73, 0x06, 0x66, 0x69, 0x62, 0x02, 0x6e, 0x0d, 0xb2, 0x03, 0x00, 0x01, 0x00, 0x00, 0xb4, 0x03, - 0x00, 0x00, 0x0c, 0x20, 0xfa, 0x01, 0x9e, 0x01, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x09, 0x00, - 0xb4, 0x03, 0x00, 0x01, 0x0c, 0x43, 0xfa, 0x01, - 0xb4, 0x03, 0x01, 0x00, 0x01, 0x04, 0x01, 0x00, - 0x1a, 0x01, 0xb6, 0x03, 0x00, 0x01, 0x00, 0xb4, - 0x03, 0x00, 0x00, 0xd0, 0xb3, 0xa7, 0xe9, 0x03, - 0xb3, 0x28, 0xd0, 0xb4, 0xac, 0xe9, 0x03, 0xb4, - 0x28, 0xdc, 0xd0, 0xb4, 0x9e, 0xee, 0xdc, 0xd0, - 0xb5, 0x9e, 0xee, 0x9d, 0x28, 0xb2, 0x03, 0x02, - 0x08, 0x20, 0x04, 0x00, 0x07, 0x06, 0x07, 0x06, - 0x12, 0x09, 0x08, 0x07, 0x07, 0x10, 0x07, 0x06, - 0x07, 0x06, 0x12, 0x13, 0x08, 0x07, 0x08, 0x16, - 0x0c, 0x0c, 0x07, 0x04, 0x0c, 0x0a, 0x0c, 0x0c, - 0x07, 0x04, 0x8d, 0x01, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x62, - 0x28, 0x6e, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x20, - 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, + 0x00, 0x00, 0x00, 0x0c, 0x20, 0xfa, 0x01, 0x9e, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x09, + 0x00, 0xb4, 0x03, 0x00, 0x01, 0x0c, 0x43, 0xfa, + 0x01, 0xb4, 0x03, 0x01, 0x00, 0x01, 0x04, 0x01, + 0x00, 0x1a, 0x01, 0xb6, 0x03, 0x00, 0x01, 0x00, + 0xb4, 0x03, 0x00, 0x00, 0xd0, 0xb3, 0xa7, 0xe9, + 0x03, 0xb3, 0x28, 0xd0, 0xb4, 0xac, 0xe9, 0x03, + 0xb4, 0x28, 0xdc, 0xd0, 0xb4, 0x9e, 0xee, 0xdc, + 0xd0, 0xb5, 0x9e, 0xee, 0x9d, 0x28, 0xb2, 0x03, + 0x02, 0x08, 0x20, 0x04, 0x00, 0x07, 0x06, 0x07, + 0x06, 0x12, 0x09, 0x08, 0x07, 0x07, 0x10, 0x07, + 0x06, 0x07, 0x06, 0x12, 0x13, 0x08, 0x07, 0x08, + 0x16, 0x0c, 0x0c, 0x07, 0x04, 0x0c, 0x0a, 0x0c, + 0x0c, 0x07, 0x04, 0x8d, 0x01, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, + 0x62, 0x28, 0x6e, 0x29, 0x0a, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, + 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, + 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x20, + 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0x0a, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x20, 0x3d, - 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, - 0x69, 0x62, 0x28, 0x6e, 0x20, 0x2d, 0x20, 0x31, - 0x29, 0x20, 0x2b, 0x20, 0x66, 0x69, 0x62, 0x28, - 0x6e, 0x20, 0x2d, 0x20, 0x32, 0x29, 0x3b, 0x0a, - 0x7d, 0x08, 0xe9, 0x05, 0xbe, 0x00, 0xe0, 0x29, - 0x06, 0x2e, 0xb2, 0x03, 0x01, 0x01, 0x06, 0x01, - 0x01, 0x00, 0x07, 0x14, 0x02, 0x00, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, + 0x66, 0x69, 0x62, 0x28, 0x6e, 0x20, 0x2d, 0x20, + 0x31, 0x29, 0x20, 0x2b, 0x20, 0x66, 0x69, 0x62, + 0x28, 0x6e, 0x20, 0x2d, 0x20, 0x32, 0x29, 0x3b, + 0x0a, 0x7d, 0x08, 0xe9, 0x05, 0xbe, 0x00, 0xe0, + 0x29, 0x06, 0x2e, 0xb2, 0x03, 0x01, 0x01, 0x06, + 0x01, 0x01, 0x00, 0x07, 0x14, 0x02, 0x00, }; -const uint32_t qjsc_hello_module_size = 177; +const uint32_t qjsc_hello_module_size = 178; -const uint8_t qjsc_hello_module[177] = { +const uint8_t qjsc_hello_module[178] = { 0x0c, 0x07, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, @@ -60,18 +60,18 @@ const uint8_t qjsc_hello_module[177] = { 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x10, 0x66, 0x69, 0x62, 0x28, 0x31, 0x30, 0x29, 0x3d, 0x0d, 0xb2, 0x03, 0x01, 0xb4, 0x03, 0x00, 0x00, - 0x01, 0x00, 0xb6, 0x03, 0x00, 0x0c, 0x20, 0xfa, - 0x01, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x05, 0x01, - 0x00, 0x32, 0x00, 0xb6, 0x03, 0x00, 0x0c, 0x08, - 0xe9, 0x02, 0x29, 0x38, 0xdc, 0x00, 0x00, 0x00, - 0x42, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, - 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0x38, 0xdc, - 0x00, 0x00, 0x00, 0x42, 0xdd, 0x00, 0x00, 0x00, - 0x04, 0xdf, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, - 0xbb, 0x0a, 0xee, 0x24, 0x02, 0x00, 0x0e, 0x06, - 0x2e, 0xb2, 0x03, 0x01, 0x01, 0x0a, 0x01, 0x01, - 0x00, 0x04, 0x0a, 0x02, 0x62, 0x00, 0x4d, 0x30, - 0x00, + 0x01, 0x00, 0xb6, 0x03, 0x00, 0x00, 0x0c, 0x20, + 0xfa, 0x01, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x05, + 0x01, 0x00, 0x32, 0x00, 0xb6, 0x03, 0x00, 0x0c, + 0x08, 0xe9, 0x02, 0x29, 0x38, 0xdc, 0x00, 0x00, + 0x00, 0x42, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0x38, + 0xdc, 0x00, 0x00, 0x00, 0x42, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x65, 0x00, + 0x00, 0xbb, 0x0a, 0xee, 0x24, 0x02, 0x00, 0x0e, + 0x06, 0x2e, 0xb2, 0x03, 0x01, 0x01, 0x0a, 0x01, + 0x01, 0x00, 0x04, 0x0a, 0x02, 0x62, 0x00, 0x4d, + 0x30, 0x00, }; static JSContext *JS_NewCustomContext(JSRuntime *rt) diff --git a/gen/repl.c b/gen/repl.c index 5b01bc4..2757a66 100644 --- a/gen/repl.c +++ b/gen/repl.c @@ -2,10 +2,10 @@ #include -const uint32_t qjsc_repl_size = 22474; +const uint32_t qjsc_repl_size = 22701; -const uint8_t qjsc_repl[22474] = { - 0x0c, 0x8c, 0x04, 0x0e, 0x72, 0x65, 0x70, 0x6c, +const uint8_t qjsc_repl[22701] = { + 0x0c, 0x91, 0x04, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x2e, 0x6a, 0x73, 0x06, 0x73, 0x74, 0x64, 0x04, 0x6f, 0x73, 0x02, 0x67, 0x10, 0x69, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x0a, 0x69, 0x73, @@ -30,7 +30,9 @@ const uint8_t qjsc_repl[22474] = { 0x0c, 0x70, 0x73, 0x74, 0x61, 0x74, 0x65, 0x0c, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x08, 0x70, 0x6c, 0x65, 0x6e, 0x06, 0x70, 0x73, 0x31, 0x06, - 0x70, 0x73, 0x32, 0x12, 0x65, 0x76, 0x61, 0x6c, + 0x70, 0x73, 0x32, 0x1e, 0x65, 0x76, 0x61, 0x6c, + 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x12, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x0a, 0x6d, 0x65, 0x78, 0x70, 0x72, 0x0a, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x06, 0x63, 0x6d, 0x64, 0x14, 0x63, 0x75, @@ -165,16 +167,23 @@ const uint8_t qjsc_repl[22474] = { 0x70, 0x08, 0x6c, 0x6f, 0x61, 0x64, 0x08, 0x65, 0x78, 0x69, 0x74, 0x0e, 0x74, 0x6f, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x14, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x1c, 0x65, - 0x76, 0x61, 0x6c, 0x5f, 0x61, 0x6e, 0x64, 0x5f, - 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x63, 0x6d, - 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x24, - 0x63, 0x6d, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x64, - 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x26, 0x72, 0x65, 0x61, 0x64, 0x6c, - 0x69, 0x6e, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x14, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x63, 0x6d, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x12, 0x63, + 0x6d, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x24, 0x63, 0x6d, 0x64, 0x5f, 0x72, 0x65, 0x61, + 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x26, 0x72, 0x65, 0x61, 0x64, + 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x68, 0x61, 0x6e, + 0x64, 0x6c, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x14, + 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x63, + 0x6d, 0x64, 0x28, 0x65, 0x76, 0x61, 0x6c, 0x5f, + 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6e, + 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, + 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x65, 0x76, + 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, + 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x1c, 0x68, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x65, 0x6e, 0x64, 0x16, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x5f, 0x6a, 0x73, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x66, 0x69, 0x6c, @@ -256,2564 +265,2583 @@ const uint8_t qjsc_repl[22474] = { 0x65, 0x69, 0x6c, 0x0c, 0x70, 0x61, 0x64, 0x45, 0x6e, 0x64, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x0c, 0x64, 0x65, 0x66, 0x73, 0x74, 0x72, 0x04, - 0x63, 0x62, 0x02, 0x20, 0x0a, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x04, 0x63, 0x31, 0x1a, 0x66, 0x72, - 0x6f, 0x6d, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x02, 0x1b, 0x02, 0x5b, 0x02, - 0x4f, 0x02, 0x3b, 0x08, 0x6b, 0x65, 0x79, 0x73, - 0x06, 0x66, 0x75, 0x6e, 0x0a, 0x72, 0x61, 0x64, - 0x69, 0x78, 0x04, 0x2d, 0x30, 0x02, 0x2d, 0x04, - 0x30, 0x78, 0x06, 0x76, 0x61, 0x6c, 0x12, 0x6d, - 0x61, 0x78, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, - 0x14, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x73, 0x0e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x16, 0x62, 0x72, 0x65, 0x61, - 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x1c, - 0x6d, 0x61, 0x78, 0x41, 0x72, 0x72, 0x61, 0x79, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x1e, 0x6d, - 0x61, 0x78, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x1e, 0x6d, - 0x61, 0x78, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x08, 0x72, - 0x65, 0x66, 0x73, 0x0c, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x12, 0x71, 0x75, 0x6f, - 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x14, 0x70, - 0x75, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x61, 0x67, - 0x12, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x72, - 0x65, 0x63, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x73, 0x74, 0x72, 0x1e, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x72, 0x6f, - 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x72, 0x65, - 0x74, 0x74, 0x79, 0x10, 0x69, 0x73, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x16, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x63, 0x62, 0x02, 0x20, 0x0e, 0x74, 0x6f, 0x46, + 0x69, 0x78, 0x65, 0x64, 0x04, 0x63, 0x31, 0x1a, + 0x66, 0x72, 0x6f, 0x6d, 0x43, 0x6f, 0x64, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x02, 0x1b, 0x02, + 0x5b, 0x02, 0x4f, 0x02, 0x3b, 0x08, 0x6b, 0x65, + 0x79, 0x73, 0x06, 0x66, 0x75, 0x6e, 0x0a, 0x72, + 0x61, 0x64, 0x69, 0x78, 0x04, 0x2d, 0x30, 0x02, + 0x2d, 0x04, 0x30, 0x78, 0x06, 0x76, 0x61, 0x6c, + 0x12, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x65, 0x70, + 0x74, 0x68, 0x14, 0x75, 0x73, 0x65, 0x5f, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x0e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x16, 0x62, 0x72, + 0x65, 0x61, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x1c, 0x6d, 0x61, 0x78, 0x41, 0x72, 0x72, + 0x61, 0x79, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x1e, 0x6d, 0x61, 0x78, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x1e, 0x6d, 0x61, 0x78, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x08, 0x72, 0x65, 0x66, 0x73, 0x0c, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x0c, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x14, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x71, + 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, + 0x14, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x61, 0x70, 0x70, 0x65, + 0x6e, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x74, + 0x61, 0x67, 0x12, 0x70, 0x72, 0x69, 0x6e, 0x74, + 0x5f, 0x72, 0x65, 0x63, 0x14, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x1e, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x1a, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, + 0x72, 0x65, 0x74, 0x74, 0x79, 0x10, 0x69, 0x73, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x16, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x1a, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x5f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x1a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x1a, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x1a, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, - 0x6e, 0x74, 0x06, 0x6f, 0x70, 0x74, 0x06, 0x64, - 0x65, 0x66, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x73, 0x12, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x69, 0x66, 0x79, 0x14, 0x72, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, 0x6c, 0x6c, - 0x04, 0x5c, 0x22, 0x02, 0x6f, 0x08, 0x63, 0x61, - 0x6c, 0x6c, 0x04, 0x6e, 0x30, 0x02, 0x6b, 0x06, - 0x6b, 0x65, 0x79, 0x08, 0x74, 0x79, 0x70, 0x65, - 0x0e, 0x69, 0x73, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x0e, 0x6e, 0x6f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x0c, 0x6e, 0x6f, 0x6b, 0x65, 0x79, 0x73, 0x0a, - 0x62, 0x72, 0x61, 0x63, 0x65, 0x06, 0x73, 0x65, - 0x70, 0x12, 0x6f, 0x62, 0x6a, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x06, 0x74, 0x61, 0x67, 0x08, - 0x63, 0x6f, 0x6e, 0x73, 0x08, 0x64, 0x65, 0x73, - 0x63, 0x0c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x06, 0x2e, 0x2e, 0x2e, 0x16, 0x5b, 0x43, 0x69, - 0x72, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x2a, - 0x0a, 0x44, 0x61, 0x74, 0x65, 0x20, 0x16, 0x74, - 0x6f, 0x47, 0x4d, 0x54, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x04, 0x3a, 0x20, 0x0e, 0x69, 0x73, - 0x41, 0x72, 0x72, 0x61, 0x79, 0x06, 0x29, 0x20, - 0x5b, 0x16, 0x5b, 0x46, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x2c, 0x5b, 0x46, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x28, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, - 0x75, 0x73, 0x29, 0x5d, 0x04, 0x20, 0x5b, 0x06, - 0x5d, 0x20, 0x7b, 0x26, 0x3a, 0x20, 0x6e, 0x75, - 0x6c, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x74, 0x79, 0x70, 0x65, 0x5d, 0x20, 0x7b, 0x04, - 0x20, 0x7b, 0x02, 0x7b, 0x02, 0x7d, 0x02, 0x3c, - 0x1a, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x3e, 0x0e, 0x3c, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x3e, 0x08, 0x2e, - 0x2e, 0x2e, 0x20, 0x16, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x02, - 0x3a, 0x0c, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, - 0x0c, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x06, 0x70, 0x6f, 0x70, 0x0c, 0x3c, 0x72, 0x65, - 0x66, 0x20, 0x2a, 0x04, 0x3e, 0x20, 0x0a, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x10, 0x70, 0x72, 0x6f, - 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x63, 0x68, - 0x75, 0x6e, 0x6b, 0x0c, 0x72, 0x65, 0x67, 0x65, - 0x78, 0x70, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x02, 0x2c, 0x0a, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x08, 0x64, 0x61, - 0x74, 0x65, 0x06, 0x4e, 0x61, 0x4e, 0x0e, 0x6b, - 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x02, 0x77, - 0x0a, 0x77, 0x69, 0x64, 0x74, 0x68, 0x0c, 0x73, - 0x65, 0x70, 0x6c, 0x65, 0x6e, 0x08, 0x6c, 0x61, - 0x73, 0x74, 0x04, 0x2c, 0x20, 0x0c, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x0c, 0x69, 0x6e, 0x64, - 0x65, 0x6e, 0x74, 0x16, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x0a, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x08, 0x63, 0x6f, - 0x6c, 0x73, 0x10, 0x63, 0x6f, 0x6c, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x10, 0x65, 0x6e, 0x64, 0x73, - 0x57, 0x69, 0x74, 0x68, 0x14, 0x73, 0x68, 0x6f, - 0x77, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x0a, - 0x64, 0x65, 0x70, 0x74, 0x68, 0x0e, 0x69, 0x6e, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x0e, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x61, 0x6c, 0x02, 0x70, 0x02, - 0x3f, 0x08, 0x74, 0x72, 0x69, 0x6d, 0x26, 0x55, - 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x3a, 0x20, 0x06, 0x73, 0x65, 0x6c, 0x32, 0x2e, - 0x68, 0x65, 0x6c, 0x70, 0x20, 0x20, 0x20, 0x20, - 0x70, 0x72, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x0a, - 0x10, 0x2e, 0x78, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x36, 0x68, 0x65, 0x78, 0x61, 0x64, 0x65, - 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x20, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x0a, 0x10, 0x2e, 0x64, - 0x65, 0x63, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, - 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x0a, 0x10, 0x2e, - 0x74, 0x69, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x2c, - 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x74, - 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x0a, 0x10, 0x2e, - 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x3c, - 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x73, - 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x6d, 0x6f, - 0x64, 0x65, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x48, 0x2e, - 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x20, 0x20, - 0x73, 0x65, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, - 0x20, 0x28, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x3a, 0x20, 0x04, 0x29, 0x0a, 0x10, 0x2e, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x20, 0x42, - 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x20, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x0a, 0x10, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x20, 0x20, 0x2c, 0x74, 0x6f, 0x67, 0x67, 0x6c, - 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x65, - 0x64, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x0a, 0x10, 0x2e, 0x64, 0x61, 0x72, 0x6b, 0x20, - 0x20, 0x20, 0x08, 0x64, 0x61, 0x72, 0x6b, 0x30, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x64, - 0x61, 0x72, 0x6b, 0x20, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x0a, - 0x10, 0x2e, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x20, 0x0a, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x32, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x20, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, - 0x0a, 0x38, 0x2e, 0x63, 0x6c, 0x65, 0x61, 0x72, - 0x20, 0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x0a, 0x4c, 0x2e, - 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x20, 0x20, 0x20, - 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, - 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x1c, 0x2e, 0x71, - 0x75, 0x69, 0x74, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x78, 0x69, 0x74, 0x0a, 0x02, 0x65, 0x16, 0x6c, - 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x4f, 0x66, 0x06, 0x2e, 0x6a, 0x73, 0x14, 0x6c, - 0x6f, 0x61, 0x64, 0x53, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x1c, 0x31, 0x20, 0x74, 0x72, 0x75, 0x65, - 0x20, 0x79, 0x65, 0x73, 0x20, 0x59, 0x65, 0x73, - 0x0c, 0x1b, 0x5b, 0x48, 0x1b, 0x5b, 0x4a, 0x08, - 0x65, 0x78, 0x70, 0x72, 0x0c, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x06, 0x6e, 0x6f, 0x77, 0x0a, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x6e, 0x74, 0x06, 0x6f, 0x70, 0x74, + 0x06, 0x64, 0x65, 0x66, 0x10, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x14, + 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, + 0x6c, 0x6c, 0x04, 0x5c, 0x22, 0x02, 0x6f, 0x08, + 0x63, 0x61, 0x6c, 0x6c, 0x04, 0x6e, 0x30, 0x02, + 0x6b, 0x06, 0x6b, 0x65, 0x79, 0x08, 0x74, 0x79, + 0x70, 0x65, 0x0e, 0x69, 0x73, 0x61, 0x72, 0x72, + 0x61, 0x79, 0x0e, 0x6e, 0x6f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x0c, 0x6e, 0x6f, 0x6b, 0x65, 0x79, + 0x73, 0x0a, 0x62, 0x72, 0x61, 0x63, 0x65, 0x06, + 0x73, 0x65, 0x70, 0x12, 0x6f, 0x62, 0x6a, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x06, 0x74, 0x61, + 0x67, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x08, 0x64, + 0x65, 0x73, 0x63, 0x0c, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x06, 0x2e, 0x2e, 0x2e, 0x16, 0x5b, + 0x43, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x72, + 0x20, 0x2a, 0x0a, 0x44, 0x61, 0x74, 0x65, 0x20, + 0x16, 0x74, 0x6f, 0x47, 0x4d, 0x54, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x04, 0x3a, 0x20, 0x0e, + 0x69, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x06, + 0x29, 0x20, 0x5b, 0x16, 0x5b, 0x46, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x2c, + 0x5b, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x28, 0x61, 0x6e, 0x6f, 0x6e, 0x79, + 0x6d, 0x6f, 0x75, 0x73, 0x29, 0x5d, 0x04, 0x20, + 0x5b, 0x06, 0x5d, 0x20, 0x7b, 0x26, 0x3a, 0x20, + 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x5d, 0x20, + 0x7b, 0x04, 0x20, 0x7b, 0x02, 0x7b, 0x02, 0x7d, + 0x02, 0x3c, 0x1a, 0x20, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x3e, + 0x0e, 0x3c, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x3e, + 0x08, 0x2e, 0x2e, 0x2e, 0x20, 0x16, 0x20, 0x6d, + 0x6f, 0x72, 0x65, 0x20, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x02, 0x3a, 0x0c, 0x47, 0x65, 0x74, 0x74, + 0x65, 0x72, 0x0c, 0x53, 0x65, 0x74, 0x74, 0x65, + 0x72, 0x20, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x06, 0x70, 0x6f, 0x70, 0x0c, 0x3c, + 0x72, 0x65, 0x66, 0x20, 0x2a, 0x04, 0x3e, 0x20, + 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x10, 0x70, + 0x72, 0x6f, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x0a, + 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x0c, 0x72, 0x65, + 0x67, 0x65, 0x78, 0x70, 0x14, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x02, + 0x2c, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x08, + 0x64, 0x61, 0x74, 0x65, 0x06, 0x4e, 0x61, 0x4e, + 0x0e, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, + 0x02, 0x77, 0x0a, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x0c, 0x73, 0x65, 0x70, 0x6c, 0x65, 0x6e, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x04, 0x2c, 0x20, 0x0c, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x0c, 0x69, + 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x16, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x5f, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x08, + 0x63, 0x6f, 0x6c, 0x73, 0x10, 0x63, 0x6f, 0x6c, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x10, 0x65, 0x6e, + 0x64, 0x73, 0x57, 0x69, 0x74, 0x68, 0x14, 0x73, + 0x68, 0x6f, 0x77, 0x48, 0x69, 0x64, 0x64, 0x65, + 0x6e, 0x0a, 0x64, 0x65, 0x70, 0x74, 0x68, 0x0e, + 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x0e, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x02, + 0x70, 0x02, 0x3f, 0x08, 0x74, 0x72, 0x69, 0x6d, + 0x26, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, + 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x3a, 0x20, 0x06, 0x73, 0x65, 0x6c, + 0x32, 0x2e, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x20, + 0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x65, 0x6c, + 0x70, 0x0a, 0x10, 0x2e, 0x78, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x36, 0x68, 0x65, 0x78, 0x61, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x20, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x0a, 0x10, + 0x2e, 0x64, 0x65, 0x63, 0x20, 0x20, 0x20, 0x20, + 0x2e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x0a, + 0x10, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x20, + 0x20, 0x2c, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, + 0x20, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x20, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x0a, + 0x10, 0x2e, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x20, 0x3c, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, + 0x20, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, + 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x65, 0x76, 0x61, + 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, + 0x48, 0x2e, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, + 0x20, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x70, + 0x74, 0x68, 0x20, 0x28, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x04, 0x29, 0x0a, + 0x10, 0x2e, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, + 0x20, 0x42, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, + 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x20, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x0a, 0x10, 0x2e, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x20, 0x20, 0x2c, 0x74, 0x6f, 0x67, + 0x67, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x0a, 0x10, 0x2e, 0x64, 0x61, 0x72, + 0x6b, 0x20, 0x20, 0x20, 0x08, 0x64, 0x61, 0x72, + 0x6b, 0x30, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x20, 0x64, 0x61, 0x72, 0x6b, 0x20, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d, + 0x65, 0x0a, 0x10, 0x2e, 0x6c, 0x69, 0x67, 0x68, + 0x74, 0x20, 0x20, 0x0a, 0x6c, 0x69, 0x67, 0x68, + 0x74, 0x32, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, + 0x6d, 0x65, 0x0a, 0x38, 0x2e, 0x63, 0x6c, 0x65, + 0x61, 0x72, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x65, + 0x61, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x0a, + 0x4c, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x20, + 0x20, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, + 0x64, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, + 0x61, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x1c, + 0x2e, 0x71, 0x75, 0x69, 0x74, 0x20, 0x20, 0x20, + 0x20, 0x65, 0x78, 0x69, 0x74, 0x0a, 0x02, 0x65, + 0x16, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x4f, 0x66, 0x06, 0x2e, 0x6a, 0x73, + 0x14, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x1c, 0x31, 0x20, 0x74, 0x72, + 0x75, 0x65, 0x20, 0x79, 0x65, 0x73, 0x20, 0x59, + 0x65, 0x73, 0x0c, 0x1b, 0x5b, 0x48, 0x1b, 0x5b, + 0x4a, 0x46, 0x51, 0x75, 0x69, 0x63, 0x6b, 0x4a, + 0x53, 0x2d, 0x6e, 0x67, 0x20, 0x2d, 0x20, 0x54, + 0x79, 0x70, 0x65, 0x20, 0x22, 0x2e, 0x68, 0x65, + 0x6c, 0x70, 0x22, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x08, 0x20, 0x20, + 0x20, 0x20, 0x08, 0x65, 0x78, 0x70, 0x72, 0x10, + 0x69, 0x73, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, + 0x0c, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2a, 0x22, 0x75, 0x73, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x22, 0x3b, 0x20, 0x76, 0x6f, 0x69, 0x64, - 0x20, 0x30, 0x3b, 0x14, 0x65, 0x76, 0x61, 0x6c, - 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x62, - 0x61, 0x63, 0x6b, 0x74, 0x72, 0x61, 0x63, 0x65, - 0x5f, 0x62, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, - 0x06, 0x6c, 0x6f, 0x67, 0x0e, 0x54, 0x68, 0x72, - 0x6f, 0x77, 0x3a, 0x20, 0x46, 0x51, 0x75, 0x69, - 0x63, 0x6b, 0x4a, 0x53, 0x2d, 0x6e, 0x67, 0x20, - 0x2d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x22, - 0x2e, 0x68, 0x65, 0x6c, 0x70, 0x22, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x0a, - 0x08, 0x20, 0x20, 0x20, 0x20, 0x04, 0x67, 0x63, - 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x0e, 0x70, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x63, - 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, - 0x14, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x14, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x70, - 0x6f, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x26, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x24, 0x70, 0x61, 0x72, - 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x16, 0x70, 0x61, 0x72, - 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, - 0x18, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x16, 0x6a, 0x73, - 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, - 0x73, 0x16, 0x6a, 0x73, 0x5f, 0x6e, 0x6f, 0x5f, - 0x72, 0x65, 0x67, 0x65, 0x78, 0x10, 0x6a, 0x73, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x70, - 0x61, 0x72, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, - 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, - 0x74, 0x0a, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x04, - 0x69, 0x31, 0x02, 0x7c, 0x14, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x04, - 0x74, 0x6f, 0x6a, 0x62, 0x72, 0x65, 0x61, 0x6b, - 0x7c, 0x63, 0x61, 0x73, 0x65, 0x7c, 0x63, 0x61, - 0x74, 0x63, 0x68, 0x7c, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x65, 0x7c, 0x64, 0x65, 0x62, - 0x75, 0x67, 0x67, 0x65, 0x72, 0x7c, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x7c, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x7c, 0x64, 0x6f, 0x7c, - 0x5e, 0x65, 0x6c, 0x73, 0x65, 0x7c, 0x66, 0x69, - 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x7c, 0x66, 0x6f, - 0x72, 0x7c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x7c, 0x69, 0x66, 0x7c, 0x69, 0x6e, - 0x7c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x6f, 0x66, 0x7c, 0x6e, 0x65, 0x77, 0x7c, - 0x5e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x7c, - 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x7c, 0x74, - 0x68, 0x69, 0x73, 0x7c, 0x74, 0x68, 0x72, 0x6f, - 0x77, 0x7c, 0x74, 0x72, 0x79, 0x7c, 0x74, 0x79, - 0x70, 0x65, 0x6f, 0x66, 0x7c, 0x77, 0x68, 0x69, - 0x6c, 0x65, 0x7c, 0x77, 0x69, 0x74, 0x68, 0x7c, - 0x5a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x7c, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x7c, 0x65, 0x6e, 0x75, - 0x6d, 0x7c, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x7c, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x7c, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x73, 0x7c, - 0x73, 0x75, 0x70, 0x65, 0x72, 0x7c, 0x66, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x7c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x7c, 0x6c, 0x65, 0x74, 0x7c, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x7c, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x7c, - 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x7c, 0x28, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x7c, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, - 0x7c, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x7c, 0x4e, - 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x7c, 0x6e, 0x75, 0x6c, 0x6c, 0x7c, 0x74, - 0x72, 0x75, 0x65, 0x7c, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x7c, 0x49, 0x6e, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x79, 0x7c, 0x4e, 0x61, 0x4e, 0x7c, 0x1e, - 0x65, 0x76, 0x61, 0x6c, 0x7c, 0x61, 0x72, 0x67, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x7c, 0x0c, - 0x61, 0x77, 0x61, 0x69, 0x74, 0x7c, 0x7a, 0x7c, - 0x74, 0x68, 0x69, 0x73, 0x7c, 0x73, 0x75, 0x70, - 0x65, 0x72, 0x7c, 0x75, 0x6e, 0x64, 0x65, 0x66, + 0x20, 0x30, 0x3b, 0x06, 0x6e, 0x6f, 0x77, 0x14, + 0x65, 0x76, 0x61, 0x6c, 0x53, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x22, 0x62, 0x61, 0x63, 0x6b, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x5f, 0x62, 0x61, 0x72, + 0x72, 0x69, 0x65, 0x72, 0x06, 0x6c, 0x6f, 0x67, + 0x0e, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x3a, 0x20, + 0x04, 0x67, 0x63, 0x0a, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, + 0x79, 0x12, 0x63, 0x61, 0x6e, 0x5f, 0x72, 0x65, + 0x67, 0x65, 0x78, 0x14, 0x70, 0x75, 0x73, 0x68, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x14, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x70, 0x6f, 0x70, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x26, 0x70, 0x61, 0x72, 0x73, + 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x24, + 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x6c, 0x69, + 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x70, 0x61, 0x72, 0x73, 0x65, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x16, + 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, + 0x67, 0x65, 0x78, 0x18, 0x70, 0x61, 0x72, 0x73, + 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x16, 0x6a, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x77, + 0x6f, 0x72, 0x64, 0x73, 0x16, 0x6a, 0x73, 0x5f, + 0x6e, 0x6f, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, + 0x10, 0x6a, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x12, 0x73, 0x65, 0x74, 0x5f, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x0e, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x64, 0x65, 0x6c, + 0x69, 0x6d, 0x04, 0x69, 0x31, 0x02, 0x7c, 0x14, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x04, 0x74, 0x6f, 0x6a, 0x62, 0x72, + 0x65, 0x61, 0x6b, 0x7c, 0x63, 0x61, 0x73, 0x65, + 0x7c, 0x63, 0x61, 0x74, 0x63, 0x68, 0x7c, 0x63, + 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x7c, + 0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x65, 0x72, + 0x7c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x7c, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x7c, + 0x64, 0x6f, 0x7c, 0x5e, 0x65, 0x6c, 0x73, 0x65, + 0x7c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, + 0x7c, 0x66, 0x6f, 0x72, 0x7c, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7c, 0x69, 0x66, + 0x7c, 0x69, 0x6e, 0x7c, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x6f, 0x66, 0x7c, 0x6e, + 0x65, 0x77, 0x7c, 0x5e, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x7c, 0x73, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x7c, 0x74, 0x68, 0x69, 0x73, 0x7c, 0x74, + 0x68, 0x72, 0x6f, 0x77, 0x7c, 0x74, 0x72, 0x79, + 0x7c, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x7c, + 0x77, 0x68, 0x69, 0x6c, 0x65, 0x7c, 0x77, 0x69, + 0x74, 0x68, 0x7c, 0x5a, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x7c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x7c, + 0x65, 0x6e, 0x75, 0x6d, 0x7c, 0x69, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x7c, 0x65, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x7c, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x64, 0x73, 0x7c, 0x73, 0x75, 0x70, 0x65, 0x72, + 0x7c, 0x66, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x7c, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x7c, 0x6c, + 0x65, 0x74, 0x7c, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x7c, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x7c, 0x70, 0x72, 0x6f, 0x74, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x7c, 0x28, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x7c, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x63, 0x7c, 0x79, 0x69, 0x65, 0x6c, + 0x64, 0x7c, 0x4e, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x7c, 0x6e, 0x75, 0x6c, 0x6c, 0x7c, 0x74, 0x72, 0x75, 0x65, 0x7c, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7c, 0x49, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x7c, 0x4e, 0x61, - 0x4e, 0x7c, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x7c, 0x14, 0x7c, 0x76, 0x6f, - 0x69, 0x64, 0x7c, 0x76, 0x61, 0x72, 0x7c, 0x02, - 0x09, 0x02, 0x0d, 0x02, 0x2b, 0x0c, 0x67, 0x65, - 0x74, 0x65, 0x6e, 0x76, 0x08, 0x48, 0x4f, 0x4d, - 0x45, 0x16, 0x55, 0x53, 0x45, 0x52, 0x50, 0x52, - 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x02, 0x66, 0x08, - 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x2e, 0x71, 0x6a, - 0x73, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x0a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x10, - 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, - 0x12, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x46, 0x47, - 0x42, 0x47, 0x08, 0x1b, 0x5b, 0x30, 0x6d, 0x0a, - 0x1b, 0x5b, 0x33, 0x30, 0x6d, 0x0a, 0x62, 0x6c, - 0x61, 0x63, 0x6b, 0x0a, 0x1b, 0x5b, 0x33, 0x31, - 0x6d, 0x06, 0x72, 0x65, 0x64, 0x0a, 0x1b, 0x5b, - 0x33, 0x32, 0x6d, 0x0a, 0x67, 0x72, 0x65, 0x65, - 0x6e, 0x0a, 0x1b, 0x5b, 0x33, 0x33, 0x6d, 0x0c, - 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x0a, 0x1b, - 0x5b, 0x33, 0x34, 0x6d, 0x08, 0x62, 0x6c, 0x75, - 0x65, 0x0a, 0x1b, 0x5b, 0x33, 0x35, 0x6d, 0x0e, - 0x6d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x61, 0x0a, - 0x1b, 0x5b, 0x33, 0x36, 0x6d, 0x08, 0x63, 0x79, - 0x61, 0x6e, 0x0a, 0x1b, 0x5b, 0x33, 0x37, 0x6d, - 0x0a, 0x77, 0x68, 0x69, 0x74, 0x65, 0x0e, 0x1b, - 0x5b, 0x33, 0x30, 0x3b, 0x31, 0x6d, 0x08, 0x67, - 0x72, 0x61, 0x79, 0x08, 0x67, 0x72, 0x65, 0x79, - 0x0e, 0x1b, 0x5b, 0x33, 0x31, 0x3b, 0x31, 0x6d, - 0x14, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, - 0x72, 0x65, 0x64, 0x0e, 0x1b, 0x5b, 0x33, 0x32, - 0x3b, 0x31, 0x6d, 0x18, 0x62, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x5f, 0x67, 0x72, 0x65, 0x65, 0x6e, - 0x0e, 0x1b, 0x5b, 0x33, 0x33, 0x3b, 0x31, 0x6d, - 0x1a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, - 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x0e, 0x1b, - 0x5b, 0x33, 0x34, 0x3b, 0x31, 0x6d, 0x16, 0x62, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x62, 0x6c, - 0x75, 0x65, 0x0e, 0x1b, 0x5b, 0x33, 0x35, 0x3b, - 0x31, 0x6d, 0x1c, 0x62, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x6d, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x61, 0x0e, 0x1b, 0x5b, 0x33, 0x36, 0x3b, 0x31, + 0x4e, 0x7c, 0x1e, 0x65, 0x76, 0x61, 0x6c, 0x7c, + 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x7c, 0x0c, 0x61, 0x77, 0x61, 0x69, 0x74, + 0x7c, 0x7a, 0x7c, 0x74, 0x68, 0x69, 0x73, 0x7c, + 0x73, 0x75, 0x70, 0x65, 0x72, 0x7c, 0x75, 0x6e, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x7c, + 0x6e, 0x75, 0x6c, 0x6c, 0x7c, 0x74, 0x72, 0x75, + 0x65, 0x7c, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7c, + 0x49, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x7c, 0x4e, 0x61, 0x4e, 0x7c, 0x61, 0x72, 0x67, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x7c, 0x14, + 0x7c, 0x76, 0x6f, 0x69, 0x64, 0x7c, 0x76, 0x61, + 0x72, 0x7c, 0x02, 0x09, 0x02, 0x0d, 0x02, 0x2b, + 0x0c, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x08, + 0x48, 0x4f, 0x4d, 0x45, 0x16, 0x55, 0x53, 0x45, + 0x52, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, + 0x02, 0x66, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x18, + 0x2e, 0x71, 0x6a, 0x73, 0x5f, 0x68, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x0a, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x10, 0x6c, 0x6f, 0x61, 0x64, 0x46, + 0x69, 0x6c, 0x65, 0x12, 0x43, 0x4f, 0x4c, 0x4f, + 0x52, 0x46, 0x47, 0x42, 0x47, 0x08, 0x1b, 0x5b, + 0x30, 0x6d, 0x0a, 0x1b, 0x5b, 0x33, 0x30, 0x6d, + 0x0a, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x0a, 0x1b, + 0x5b, 0x33, 0x31, 0x6d, 0x06, 0x72, 0x65, 0x64, + 0x0a, 0x1b, 0x5b, 0x33, 0x32, 0x6d, 0x0a, 0x67, + 0x72, 0x65, 0x65, 0x6e, 0x0a, 0x1b, 0x5b, 0x33, + 0x33, 0x6d, 0x0c, 0x79, 0x65, 0x6c, 0x6c, 0x6f, + 0x77, 0x0a, 0x1b, 0x5b, 0x33, 0x34, 0x6d, 0x08, + 0x62, 0x6c, 0x75, 0x65, 0x0a, 0x1b, 0x5b, 0x33, + 0x35, 0x6d, 0x0e, 0x6d, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x61, 0x0a, 0x1b, 0x5b, 0x33, 0x36, 0x6d, + 0x08, 0x63, 0x79, 0x61, 0x6e, 0x0a, 0x1b, 0x5b, + 0x33, 0x37, 0x6d, 0x0a, 0x77, 0x68, 0x69, 0x74, + 0x65, 0x0e, 0x1b, 0x5b, 0x33, 0x30, 0x3b, 0x31, + 0x6d, 0x08, 0x67, 0x72, 0x61, 0x79, 0x08, 0x67, + 0x72, 0x65, 0x79, 0x0e, 0x1b, 0x5b, 0x33, 0x31, + 0x3b, 0x31, 0x6d, 0x14, 0x62, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x5f, 0x72, 0x65, 0x64, 0x0e, 0x1b, + 0x5b, 0x33, 0x32, 0x3b, 0x31, 0x6d, 0x18, 0x62, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, + 0x65, 0x65, 0x6e, 0x0e, 0x1b, 0x5b, 0x33, 0x33, + 0x3b, 0x31, 0x6d, 0x1a, 0x62, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x5f, 0x79, 0x65, 0x6c, 0x6c, 0x6f, + 0x77, 0x0e, 0x1b, 0x5b, 0x33, 0x34, 0x3b, 0x31, 0x6d, 0x16, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x5f, 0x63, 0x79, 0x61, 0x6e, 0x0e, 0x1b, 0x5b, - 0x33, 0x37, 0x3b, 0x31, 0x6d, 0x18, 0x62, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x5f, 0x77, 0x68, 0x69, - 0x74, 0x65, 0x0c, 0x71, 0x6a, 0x73, 0x20, 0x3e, - 0x20, 0x0c, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x20, - 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, - 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08, - 0x02, 0x0b, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x11, - 0x02, 0x12, 0x02, 0x13, 0x02, 0x14, 0x02, 0x18, - 0x02, 0x19, 0x06, 0x1b, 0x4f, 0x41, 0x06, 0x1b, - 0x4f, 0x42, 0x06, 0x1b, 0x4f, 0x43, 0x06, 0x1b, - 0x4f, 0x44, 0x06, 0x1b, 0x4f, 0x46, 0x06, 0x1b, - 0x4f, 0x48, 0x0c, 0x1b, 0x5b, 0x31, 0x3b, 0x35, - 0x43, 0x0c, 0x1b, 0x5b, 0x31, 0x3b, 0x35, 0x44, - 0x08, 0x1b, 0x5b, 0x31, 0x7e, 0x08, 0x1b, 0x5b, - 0x33, 0x7e, 0x08, 0x1b, 0x5b, 0x34, 0x7e, 0x08, - 0x1b, 0x5b, 0x35, 0x7e, 0x08, 0x1b, 0x5b, 0x36, - 0x7e, 0x06, 0x1b, 0x5b, 0x41, 0x06, 0x1b, 0x5b, - 0x42, 0x06, 0x1b, 0x5b, 0x43, 0x06, 0x1b, 0x5b, - 0x44, 0x06, 0x1b, 0x5b, 0x46, 0x06, 0x1b, 0x5b, - 0x48, 0x04, 0x1b, 0x7f, 0x04, 0x1b, 0x62, 0x04, - 0x1b, 0x64, 0x04, 0x1b, 0x66, 0x04, 0x1b, 0x6b, - 0x04, 0x1b, 0x6c, 0x04, 0x1b, 0x74, 0x04, 0x1b, - 0x75, 0x02, 0x7f, 0x02, 0x78, 0x06, 0x64, 0x65, - 0x63, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x0c, 0x73, - 0x74, 0x72, 0x69, 0x63, 0x74, 0x0c, 0x68, 0x69, - 0x64, 0x64, 0x65, 0x6e, 0x0a, 0x63, 0x6c, 0x65, - 0x61, 0x72, 0x08, 0x71, 0x75, 0x69, 0x74, 0x0d, - 0xb2, 0x03, 0x02, 0xb4, 0x03, 0xb6, 0x03, 0x00, - 0x00, 0x02, 0x00, 0xf8, 0x01, 0x00, 0x01, 0xf8, - 0x01, 0x01, 0x0c, 0x20, 0x02, 0x01, 0x9e, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x0f, 0x00, - 0xb4, 0x03, 0x00, 0x0d, 0xb6, 0x03, 0x01, 0x0d, - 0x0c, 0x43, 0x02, 0x01, 0x00, 0x01, 0x85, 0x01, - 0x01, 0x04, 0x02, 0x58, 0xdc, 0x0c, 0x86, 0x01, - 0xb8, 0x03, 0x00, 0x01, 0x40, 0xa0, 0x02, 0x00, - 0x00, 0x40, 0xa8, 0x02, 0x00, 0x01, 0x40, 0xa6, - 0x02, 0x00, 0x02, 0x40, 0xaa, 0x02, 0x00, 0x03, - 0x40, 0xda, 0x02, 0x00, 0x04, 0x40, 0xc6, 0x02, - 0x00, 0x05, 0x40, 0xa2, 0x02, 0x00, 0x06, 0x40, - 0xb4, 0x02, 0x00, 0x07, 0x40, 0xbc, 0x02, 0x00, - 0x08, 0x40, 0xa4, 0x02, 0x00, 0x09, 0x40, 0xac, - 0x02, 0x00, 0x0a, 0x00, 0xb0, 0x02, 0x00, 0x0b, - 0x40, 0xb2, 0x02, 0x00, 0x0c, 0x40, 0xba, 0x03, - 0x00, 0x0d, 0x40, 0xbc, 0x03, 0x00, 0x0e, 0x40, - 0xbe, 0x03, 0x00, 0x0f, 0x40, 0xc0, 0x03, 0x00, - 0x10, 0x40, 0xc2, 0x03, 0x00, 0x11, 0x40, 0xc4, - 0x03, 0x00, 0x12, 0x40, 0xc6, 0x03, 0x00, 0x13, - 0x40, 0xc8, 0x03, 0x00, 0x14, 0x40, 0xca, 0x03, - 0x00, 0x15, 0x40, 0xcc, 0x03, 0x00, 0x16, 0x40, - 0xce, 0x03, 0x00, 0x17, 0x40, 0xd0, 0x03, 0x00, - 0x18, 0x40, 0xd2, 0x03, 0x00, 0x19, 0x40, 0xd4, - 0x03, 0x00, 0x1a, 0x40, 0xd6, 0x03, 0x00, 0x1b, - 0x40, 0xd8, 0x03, 0x00, 0x1c, 0x40, 0xda, 0x03, - 0x00, 0x1d, 0x40, 0xdc, 0x03, 0x00, 0x1e, 0x40, - 0xde, 0x03, 0x00, 0x1f, 0x40, 0xe0, 0x03, 0x00, - 0x20, 0x40, 0xe2, 0x03, 0x00, 0x21, 0x40, 0xe4, - 0x03, 0x00, 0x22, 0x40, 0xe6, 0x03, 0x00, 0x23, - 0x40, 0xe8, 0x03, 0x00, 0x24, 0x40, 0xea, 0x03, - 0x00, 0x25, 0x40, 0xec, 0x03, 0x00, 0x26, 0x40, - 0xee, 0x03, 0x00, 0x27, 0x40, 0xf0, 0x03, 0x00, - 0x28, 0x40, 0xf2, 0x03, 0x00, 0x29, 0x40, 0xf4, - 0x03, 0x00, 0x2a, 0x40, 0xf6, 0x03, 0x00, 0x2b, - 0x40, 0xf8, 0x03, 0x00, 0x2c, 0x40, 0xfa, 0x03, - 0x00, 0x2d, 0x40, 0xfc, 0x03, 0x00, 0x2e, 0x40, - 0xfe, 0x03, 0x00, 0x2f, 0x40, 0x80, 0x04, 0x00, - 0x30, 0x40, 0x82, 0x04, 0x00, 0x31, 0x40, 0x84, - 0x04, 0x00, 0x32, 0x40, 0x86, 0x04, 0x00, 0x33, - 0x00, 0x88, 0x04, 0x00, 0x34, 0x40, 0x8a, 0x04, - 0x00, 0x35, 0x40, 0x8c, 0x04, 0x00, 0x36, 0x40, - 0x8e, 0x04, 0x00, 0x37, 0x40, 0x90, 0x04, 0x00, - 0x38, 0x40, 0x92, 0x04, 0x00, 0x39, 0x40, 0x94, - 0x04, 0x00, 0x3a, 0x40, 0x96, 0x04, 0x00, 0x3b, - 0x40, 0x98, 0x04, 0x00, 0x3c, 0x40, 0x9a, 0x04, - 0x00, 0x3d, 0x40, 0x9c, 0x04, 0x00, 0x3e, 0x40, - 0x9e, 0x04, 0x00, 0x3f, 0x40, 0xa0, 0x04, 0x00, - 0x40, 0x40, 0xa2, 0x04, 0x00, 0x41, 0x40, 0xa4, - 0x04, 0x00, 0x42, 0x00, 0xa6, 0x04, 0x00, 0x43, - 0x00, 0xa8, 0x04, 0x00, 0x44, 0x40, 0xaa, 0x04, - 0x00, 0x45, 0x00, 0xac, 0x04, 0x00, 0x46, 0x00, - 0xae, 0x04, 0x00, 0x47, 0x00, 0xb0, 0x04, 0x00, - 0x48, 0x00, 0xb2, 0x04, 0x00, 0x49, 0x40, 0xb4, - 0x04, 0x00, 0x4a, 0x40, 0xb6, 0x04, 0x00, 0x4b, - 0x00, 0xb8, 0x04, 0x00, 0x4c, 0x00, 0xba, 0x04, - 0x00, 0x4d, 0x00, 0xbc, 0x04, 0x00, 0x4e, 0x40, - 0xbe, 0x04, 0x00, 0x4f, 0x00, 0xc0, 0x04, 0x00, - 0x50, 0x00, 0xc2, 0x04, 0x00, 0x51, 0x40, 0xc4, - 0x04, 0x00, 0x52, 0x00, 0xc6, 0x04, 0x00, 0x53, - 0x00, 0xc8, 0x04, 0x00, 0x54, 0x40, 0xca, 0x04, - 0x00, 0x55, 0x00, 0xcc, 0x04, 0x00, 0x56, 0x00, - 0xce, 0x04, 0x00, 0x57, 0x00, 0xd0, 0x04, 0x00, - 0x58, 0x00, 0xd2, 0x04, 0x00, 0x59, 0x00, 0xd4, - 0x04, 0x00, 0x5a, 0x00, 0xd6, 0x04, 0x00, 0x5b, - 0x00, 0xd8, 0x04, 0x00, 0x5c, 0x40, 0xda, 0x04, - 0x00, 0x5d, 0x00, 0xdc, 0x04, 0x00, 0x5e, 0x00, - 0xde, 0x04, 0x00, 0x5f, 0x00, 0xe0, 0x04, 0x00, - 0x60, 0x00, 0xe2, 0x04, 0x00, 0x61, 0x00, 0xe4, - 0x04, 0x00, 0x62, 0x40, 0xe6, 0x04, 0x00, 0x63, - 0x00, 0xe8, 0x04, 0x00, 0x64, 0x40, 0xea, 0x04, - 0x00, 0x65, 0x40, 0xec, 0x04, 0x00, 0x66, 0x40, - 0xee, 0x04, 0x00, 0x67, 0x40, 0xf0, 0x04, 0x00, - 0x68, 0x40, 0xf2, 0x04, 0x00, 0x69, 0x40, 0xf4, - 0x04, 0x00, 0x6a, 0x40, 0xf6, 0x04, 0x00, 0x6b, - 0x40, 0xf8, 0x04, 0x00, 0x6c, 0x40, 0xfa, 0x04, - 0x00, 0x6d, 0x40, 0xfc, 0x04, 0x00, 0x6e, 0x40, - 0xfe, 0x04, 0x00, 0x6f, 0x40, 0x80, 0x05, 0x00, - 0x70, 0x40, 0x82, 0x05, 0x00, 0x71, 0x40, 0x84, - 0x05, 0x00, 0x72, 0x40, 0x86, 0x05, 0x00, 0x73, - 0x40, 0x88, 0x05, 0x00, 0x74, 0x40, 0x8a, 0x05, - 0x00, 0x75, 0x40, 0x8c, 0x05, 0x00, 0x76, 0x40, - 0x8e, 0x05, 0x00, 0x77, 0x00, 0x90, 0x05, 0x00, - 0x78, 0x40, 0x92, 0x05, 0x00, 0x79, 0x40, 0x94, - 0x05, 0x00, 0x7a, 0x40, 0x96, 0x05, 0x00, 0x7b, - 0x40, 0x98, 0x05, 0x00, 0x7c, 0x00, 0x9a, 0x05, - 0x00, 0x7d, 0x40, 0x9c, 0x05, 0x00, 0x7e, 0x40, - 0x9e, 0x05, 0x00, 0x7f, 0x40, 0xa0, 0x05, 0x00, - 0x80, 0x01, 0x40, 0xa2, 0x05, 0x00, 0x81, 0x01, - 0x40, 0xa4, 0x05, 0x00, 0x82, 0x01, 0x40, 0xa6, - 0x05, 0x00, 0x83, 0x01, 0x00, 0xa8, 0x05, 0x00, - 0x84, 0x01, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xb6, - 0x03, 0x01, 0x0c, 0x0c, 0x43, 0x02, 0x01, 0x86, - 0x04, 0x00, 0x01, 0x00, 0x04, 0x08, 0x00, 0x89, - 0x01, 0x01, 0xaa, 0x05, 0x00, 0x00, 0x00, 0xfe, - 0x03, 0x2f, 0x01, 0xb4, 0x03, 0x00, 0x0c, 0x82, - 0x04, 0x31, 0x01, 0xb6, 0x03, 0x01, 0x0c, 0x88, - 0x04, 0x34, 0x01, 0x80, 0x04, 0x30, 0x01, 0xc6, - 0x02, 0x05, 0x01, 0x8a, 0x04, 0x35, 0x01, 0x65, - 0x01, 0x00, 0x41, 0x0d, 0x00, 0x00, 0x00, 0x42, - 0x56, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0xe0, - 0xbb, 0x50, 0xe2, 0x65, 0x03, 0x00, 0x42, 0x57, - 0x01, 0x00, 0x00, 0xdc, 0x24, 0x01, 0x00, 0xe9, - 0x35, 0x65, 0x03, 0x00, 0x41, 0x58, 0x01, 0x00, - 0x00, 0xe9, 0x14, 0x65, 0x03, 0x00, 0x42, 0x58, - 0x01, 0x00, 0x00, 0xdc, 0x24, 0x01, 0x00, 0xcc, - 0xe9, 0x05, 0xc4, 0xb3, 0x47, 0xe2, 0x65, 0x03, - 0x00, 0x41, 0x59, 0x01, 0x00, 0x00, 0xe9, 0x0e, - 0x65, 0x03, 0x00, 0x42, 0x59, 0x01, 0x00, 0x00, - 0xdc, 0x24, 0x01, 0x00, 0x0e, 0x65, 0x03, 0x00, - 0x42, 0x5a, 0x01, 0x00, 0x00, 0x65, 0x03, 0x00, - 0x41, 0x5b, 0x01, 0x00, 0x00, 0x5e, 0x04, 0x00, - 0x24, 0x02, 0x00, 0x0e, 0x5e, 0x06, 0x00, 0x11, - 0xbb, 0x40, 0x21, 0x01, 0x00, 0x5f, 0x05, 0x00, - 0x65, 0x03, 0x00, 0x42, 0x5c, 0x01, 0x00, 0x00, - 0xdc, 0x5e, 0x07, 0x00, 0x24, 0x02, 0x00, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0x88, 0x04, 0x00, 0x00, - 0x00, 0x02, 0x01, 0x00, 0x04, 0x00, 0x8c, 0x04, - 0x36, 0x01, 0xdc, 0xb6, 0xee, 0x29, 0x0c, 0x43, - 0x02, 0x01, 0x8a, 0x04, 0x00, 0x02, 0x00, 0x06, - 0x04, 0x00, 0x28, 0x02, 0xba, 0x05, 0x00, 0x00, - 0x00, 0xbc, 0x05, 0x00, 0x01, 0x00, 0xb6, 0x03, - 0x01, 0x0c, 0xfe, 0x03, 0x2f, 0x01, 0x80, 0x04, - 0x30, 0x01, 0x8c, 0x04, 0x36, 0x01, 0x65, 0x00, - 0x00, 0x42, 0x5f, 0x01, 0x00, 0x00, 0xdd, 0xde, - 0x41, 0x60, 0x01, 0x00, 0x00, 0xb3, 0xde, 0xe8, - 0x24, 0x04, 0x00, 0xc8, 0xb3, 0xc9, 0xc5, 0xc4, - 0xa6, 0xe9, 0x0b, 0xdf, 0xde, 0xc5, 0x47, 0xee, - 0x0e, 0x93, 0x01, 0xeb, 0xf2, 0x29, 0x0c, 0x43, - 0x02, 0x01, 0x8c, 0x04, 0x01, 0x00, 0x01, 0x04, - 0x04, 0x00, 0x5f, 0x01, 0xc2, 0x05, 0x00, 0x01, - 0x00, 0xc8, 0x03, 0x14, 0x01, 0xfe, 0x04, 0x6f, - 0x01, 0xfa, 0x03, 0x2d, 0x01, 0xfc, 0x03, 0x2e, - 0x01, 0xdc, 0x96, 0xe9, 0x06, 0xdd, 0xd0, 0xee, - 0x0e, 0x29, 0xde, 0xb3, 0xaf, 0xe9, 0x24, 0xd0, - 0xbc, 0x80, 0x00, 0xa9, 0xe9, 0x1d, 0xd0, 0xbc, - 0xc0, 0x00, 0xa6, 0xe9, 0x16, 0xdf, 0xb9, 0x9f, - 0xd0, 0xbb, 0x3f, 0xa2, 0xa4, 0xe3, 0xde, 0x8e, - 0xe6, 0xb3, 0xae, 0xe9, 0x33, 0xdd, 0xdf, 0xee, - 0x0e, 0x29, 0xd0, 0xbc, 0xc0, 0x00, 0xa9, 0xe9, - 0x21, 0xd0, 0xbc, 0xf8, 0x00, 0xa6, 0xe9, 0x1a, - 0xb4, 0xd0, 0xbc, 0xe0, 0x00, 0xa9, 0x9d, 0xd0, - 0xbc, 0xf0, 0x00, 0xa9, 0x9d, 0xe2, 0xd0, 0xb4, - 0xb9, 0xde, 0x9e, 0x9f, 0xb4, 0x9e, 0xa2, 0xe3, - 0x29, 0xb3, 0xe2, 0xdd, 0xd0, 0xee, 0x0e, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0x8e, 0x04, 0x01, 0x00, - 0x01, 0x02, 0x00, 0x00, 0x35, 0x01, 0xc2, 0x05, - 0x00, 0x01, 0x00, 0xd0, 0x97, 0x04, 0x47, 0x00, - 0x00, 0x00, 0xae, 0x11, 0xe9, 0x2a, 0x0e, 0xd0, - 0x04, 0x62, 0x01, 0x00, 0x00, 0xa9, 0x11, 0xe9, - 0x09, 0x0e, 0xd0, 0x04, 0x63, 0x01, 0x00, 0x00, - 0xa7, 0x11, 0xea, 0x14, 0x0e, 0xd0, 0x04, 0x64, - 0x01, 0x00, 0x00, 0xa9, 0x11, 0xe9, 0x09, 0x0e, - 0xd0, 0x04, 0x65, 0x01, 0x00, 0x00, 0xa7, 0x28, - 0x0c, 0x43, 0x02, 0x01, 0x90, 0x04, 0x01, 0x00, - 0x01, 0x02, 0x00, 0x02, 0x19, 0x01, 0xc2, 0x05, - 0x00, 0x01, 0x00, 0x07, 0x02, 0x30, 0x07, 0x02, - 0x39, 0xd0, 0x97, 0x04, 0x47, 0x00, 0x00, 0x00, - 0xae, 0x11, 0xe9, 0x0e, 0x0e, 0xd0, 0xbd, 0x00, - 0xa9, 0x11, 0xe9, 0x06, 0x0e, 0xd0, 0xbd, 0x01, - 0xa7, 0x28, 0x0c, 0x43, 0x02, 0x01, 0x92, 0x04, - 0x01, 0x00, 0x01, 0x02, 0x02, 0x00, 0x2d, 0x01, - 0xc2, 0x05, 0x00, 0x01, 0x00, 0x8e, 0x04, 0x37, - 0x01, 0x90, 0x04, 0x38, 0x01, 0xd0, 0x97, 0x04, - 0x47, 0x00, 0x00, 0x00, 0xae, 0x11, 0xe9, 0x22, - 0x0e, 0xdc, 0xd0, 0xee, 0x11, 0xea, 0x1b, 0x0e, - 0xdd, 0xd0, 0xee, 0x11, 0xea, 0x14, 0x0e, 0xd0, - 0x04, 0x66, 0x01, 0x00, 0x00, 0xac, 0x11, 0xea, - 0x09, 0x0e, 0xd0, 0x04, 0x67, 0x01, 0x00, 0x00, - 0xac, 0x28, 0x0c, 0x43, 0x02, 0x01, 0x94, 0x04, - 0x01, 0x04, 0x01, 0x03, 0x00, 0x00, 0x32, 0x05, - 0xd0, 0x05, 0x00, 0x01, 0x00, 0xd2, 0x05, 0x00, - 0x00, 0x00, 0xc2, 0x05, 0x00, 0x01, 0x00, 0xbc, - 0x05, 0x00, 0x02, 0x00, 0xd4, 0x05, 0x00, 0x03, - 0x00, 0xd0, 0xe8, 0xcb, 0xb3, 0xc8, 0xb3, 0xca, - 0xc6, 0xc7, 0xa6, 0xe9, 0x25, 0xd0, 0x42, 0x6b, - 0x01, 0x00, 0x00, 0xc6, 0x24, 0x01, 0x00, 0xcd, - 0x01, 0x00, 0xdc, 0x00, 0x00, 0xa6, 0x11, 0xea, - 0x09, 0x0e, 0xc5, 0x01, 0x00, 0xe0, 0x00, 0x00, - 0xa9, 0xe9, 0x03, 0x93, 0x00, 0x93, 0x02, 0xeb, - 0xd8, 0xc4, 0x28, 0x0c, 0x43, 0x02, 0x01, 0x96, - 0x04, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x29, - 0x02, 0xc2, 0x05, 0x00, 0x01, 0x00, 0xd8, 0x05, - 0x00, 0x00, 0x00, 0xd0, 0x97, 0x04, 0x47, 0x00, - 0x00, 0x00, 0xaf, 0xe9, 0x03, 0x09, 0x28, 0xd0, - 0x42, 0x6d, 0x01, 0x00, 0x00, 0xb3, 0x24, 0x01, - 0x00, 0xcc, 0x01, 0x00, 0xdc, 0x00, 0x00, 0xa9, - 0x11, 0xe9, 0x09, 0x0e, 0xc4, 0x01, 0x00, 0xe0, - 0x00, 0x00, 0xa6, 0x28, 0x0c, 0x43, 0x02, 0x01, - 0x98, 0x04, 0x02, 0x00, 0x02, 0x03, 0x00, 0x00, - 0x23, 0x02, 0xc8, 0x05, 0x00, 0x01, 0x00, 0xdc, - 0x05, 0x00, 0x01, 0x00, 0xd0, 0xd1, 0x9d, 0x11, - 0x04, 0x6f, 0x01, 0x00, 0x00, 0xae, 0xea, 0x13, - 0x11, 0x04, 0x70, 0x01, 0x00, 0x00, 0xae, 0xea, - 0x0a, 0x11, 0x04, 0x71, 0x01, 0x00, 0x00, 0xae, - 0xe9, 0x03, 0x0a, 0x28, 0x0e, 0x09, 0x28, 0x0c, - 0x43, 0x02, 0x01, 0x9a, 0x04, 0x03, 0x03, 0x03, - 0x06, 0x03, 0x00, 0x62, 0x06, 0xd0, 0x05, 0x00, - 0x01, 0x00, 0xe4, 0x05, 0x00, 0x01, 0x00, 0xe6, - 0x05, 0x00, 0x01, 0x00, 0xbc, 0x05, 0x00, 0x00, - 0x00, 0xe8, 0x05, 0x00, 0x01, 0x00, 0xea, 0x05, - 0x00, 0x02, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xc2, - 0x03, 0x11, 0x01, 0xc6, 0x03, 0x13, 0x01, 0xd1, - 0xc9, 0xc5, 0xd0, 0xe8, 0xa6, 0xe9, 0x5a, 0xd2, - 0xc5, 0xcc, 0x47, 0xca, 0xc5, 0x8f, 0xcd, 0xd0, - 0xe8, 0xa6, 0xe9, 0x08, 0xd2, 0xc5, 0x47, 0xc6, - 0xac, 0xea, 0xf2, 0x65, 0x00, 0x00, 0x42, 0x76, - 0x01, 0x00, 0x00, 0xdd, 0xde, 0xc6, 0x47, 0x11, - 0xea, 0x07, 0x0e, 0x04, 0x77, 0x01, 0x00, 0x00, - 0x47, 0x24, 0x01, 0x00, 0x0e, 0x65, 0x00, 0x00, - 0x42, 0x76, 0x01, 0x00, 0x00, 0xd0, 0x42, 0x78, - 0x01, 0x00, 0x00, 0xc3, 0x24, 0x02, 0x00, 0x24, - 0x01, 0x00, 0x0e, 0x65, 0x00, 0x00, 0x42, 0x76, - 0x01, 0x00, 0x00, 0xdd, 0x04, 0x77, 0x01, 0x00, - 0x00, 0x47, 0x24, 0x01, 0x00, 0x0e, 0xeb, 0xa2, - 0x29, 0x0c, 0x43, 0x02, 0x01, 0x9c, 0x04, 0x02, - 0x00, 0x02, 0x05, 0x01, 0x00, 0x1d, 0x02, 0xf2, - 0x05, 0x00, 0x01, 0x00, 0xf4, 0x05, 0x00, 0x01, - 0x00, 0xb4, 0x03, 0x00, 0x0c, 0x65, 0x00, 0x00, - 0x42, 0x76, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, - 0x00, 0x00, 0xd0, 0xb4, 0xad, 0xe9, 0x04, 0xd0, - 0xeb, 0x02, 0xbf, 0x9d, 0xd1, 0x9d, 0x24, 0x01, - 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, 0x9e, 0x04, - 0x01, 0x02, 0x01, 0x04, 0x05, 0x00, 0xa1, 0x01, - 0x03, 0xf8, 0x05, 0x00, 0x01, 0x00, 0xbc, 0x05, - 0x00, 0x00, 0x00, 0xba, 0x05, 0x00, 0x01, 0x00, - 0x84, 0x04, 0x32, 0x01, 0x82, 0x04, 0x31, 0x01, - 0xb4, 0x03, 0x00, 0x0c, 0xb0, 0x02, 0x0b, 0x01, - 0x9c, 0x04, 0x3e, 0x01, 0xd0, 0xb3, 0xa8, 0xe9, - 0x4d, 0xd0, 0xb3, 0xad, 0x69, 0x97, 0x00, 0x00, - 0x00, 0xdc, 0xdd, 0xb4, 0x9e, 0xac, 0xe9, 0x19, - 0x65, 0x02, 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, - 0x04, 0x7d, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, - 0x0e, 0xb3, 0xe0, 0xd0, 0x8e, 0xd4, 0xeb, 0xda, - 0xdf, 0x42, 0x7e, 0x01, 0x00, 0x00, 0xdd, 0xb4, - 0x9e, 0xdc, 0x9e, 0xd0, 0x24, 0x02, 0x00, 0xc9, - 0x5e, 0x04, 0x00, 0xc5, 0x04, 0x7f, 0x01, 0x00, - 0x00, 0xef, 0x0e, 0xd0, 0xc5, 0x9e, 0xd4, 0xdc, - 0xc5, 0x9d, 0xe0, 0xeb, 0xb5, 0xd0, 0x8c, 0xd4, - 0xd0, 0xb3, 0xad, 0xe9, 0x48, 0xdc, 0xb3, 0xac, - 0xe9, 0x22, 0x5e, 0x04, 0x00, 0xb4, 0x04, 0x62, - 0x01, 0x00, 0x00, 0xef, 0x0e, 0x5e, 0x04, 0x00, - 0xdd, 0xb4, 0x9e, 0x04, 0x7f, 0x01, 0x00, 0x00, - 0xef, 0x0e, 0xd0, 0x8e, 0xd4, 0xdd, 0xb4, 0x9e, - 0xe0, 0xeb, 0xd6, 0xdf, 0x42, 0x7e, 0x01, 0x00, - 0x00, 0xd0, 0xdc, 0x24, 0x02, 0x00, 0xc9, 0x5e, - 0x04, 0x00, 0xc5, 0x04, 0x80, 0x01, 0x00, 0x00, - 0xef, 0x0e, 0xd0, 0xc5, 0x9e, 0xd4, 0xdc, 0xc5, - 0x9e, 0xe0, 0xeb, 0xb5, 0x29, 0x0c, 0x43, 0x02, - 0x01, 0xa0, 0x04, 0x00, 0x05, 0x00, 0x06, 0x0d, - 0x00, 0x9c, 0x02, 0x05, 0xbc, 0x05, 0x00, 0x00, - 0x00, 0x82, 0x06, 0x00, 0x01, 0x00, 0xd0, 0x05, - 0x00, 0x02, 0x00, 0xe4, 0x05, 0x00, 0x03, 0x00, - 0x84, 0x06, 0x00, 0x04, 0x00, 0xec, 0x03, 0x26, - 0x01, 0xf0, 0x03, 0x28, 0x01, 0xcc, 0x03, 0x16, - 0x01, 0xf2, 0x03, 0x29, 0x01, 0xb4, 0x03, 0x00, - 0x0c, 0x9e, 0x04, 0x3f, 0x01, 0x94, 0x04, 0x3a, - 0x01, 0xe8, 0x03, 0x24, 0x01, 0xa0, 0x05, 0x80, - 0x01, 0x01, 0x9a, 0x04, 0x3d, 0x01, 0x84, 0x04, - 0x32, 0x01, 0x82, 0x04, 0x31, 0x01, 0xee, 0x03, - 0x27, 0x01, 0xdc, 0xdd, 0xad, 0x69, 0xc6, 0x00, - 0x00, 0x00, 0xde, 0x96, 0xe9, 0x32, 0xdd, 0x42, - 0x78, 0x01, 0x00, 0x00, 0xb3, 0xdf, 0x24, 0x02, - 0x00, 0xdc, 0x42, 0x78, 0x01, 0x00, 0x00, 0xb3, - 0xdf, 0x24, 0x02, 0x00, 0xac, 0xe9, 0x19, 0x65, - 0x04, 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, 0xdc, - 0x42, 0x78, 0x01, 0x00, 0x00, 0xdf, 0x24, 0x01, - 0x00, 0x24, 0x01, 0x00, 0x0e, 0xeb, 0x53, 0x5e, - 0x05, 0x00, 0x5e, 0x06, 0x00, 0xdd, 0x42, 0x78, + 0x5f, 0x62, 0x6c, 0x75, 0x65, 0x0e, 0x1b, 0x5b, + 0x33, 0x35, 0x3b, 0x31, 0x6d, 0x1c, 0x62, 0x72, + 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6d, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x61, 0x0e, 0x1b, 0x5b, 0x33, + 0x36, 0x3b, 0x31, 0x6d, 0x16, 0x62, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x5f, 0x63, 0x79, 0x61, 0x6e, + 0x0e, 0x1b, 0x5b, 0x33, 0x37, 0x3b, 0x31, 0x6d, + 0x18, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, + 0x77, 0x68, 0x69, 0x74, 0x65, 0x0c, 0x71, 0x6a, + 0x73, 0x20, 0x3e, 0x20, 0x0c, 0x20, 0x20, 0x2e, + 0x2e, 0x2e, 0x20, 0x02, 0x01, 0x02, 0x02, 0x02, + 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, + 0x07, 0x02, 0x08, 0x02, 0x0b, 0x02, 0x0e, 0x02, + 0x10, 0x02, 0x11, 0x02, 0x12, 0x02, 0x13, 0x02, + 0x14, 0x02, 0x18, 0x02, 0x19, 0x06, 0x1b, 0x4f, + 0x41, 0x06, 0x1b, 0x4f, 0x42, 0x06, 0x1b, 0x4f, + 0x43, 0x06, 0x1b, 0x4f, 0x44, 0x06, 0x1b, 0x4f, + 0x46, 0x06, 0x1b, 0x4f, 0x48, 0x0c, 0x1b, 0x5b, + 0x31, 0x3b, 0x35, 0x43, 0x0c, 0x1b, 0x5b, 0x31, + 0x3b, 0x35, 0x44, 0x08, 0x1b, 0x5b, 0x31, 0x7e, + 0x08, 0x1b, 0x5b, 0x33, 0x7e, 0x08, 0x1b, 0x5b, + 0x34, 0x7e, 0x08, 0x1b, 0x5b, 0x35, 0x7e, 0x08, + 0x1b, 0x5b, 0x36, 0x7e, 0x06, 0x1b, 0x5b, 0x41, + 0x06, 0x1b, 0x5b, 0x42, 0x06, 0x1b, 0x5b, 0x43, + 0x06, 0x1b, 0x5b, 0x44, 0x06, 0x1b, 0x5b, 0x46, + 0x06, 0x1b, 0x5b, 0x48, 0x04, 0x1b, 0x7f, 0x04, + 0x1b, 0x62, 0x04, 0x1b, 0x64, 0x04, 0x1b, 0x66, + 0x04, 0x1b, 0x6b, 0x04, 0x1b, 0x6c, 0x04, 0x1b, + 0x74, 0x04, 0x1b, 0x75, 0x02, 0x7f, 0x02, 0x78, + 0x06, 0x64, 0x65, 0x63, 0x08, 0x74, 0x69, 0x6d, + 0x65, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x0c, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x0a, + 0x63, 0x6c, 0x65, 0x61, 0x72, 0x08, 0x71, 0x75, + 0x69, 0x74, 0x0d, 0xb2, 0x03, 0x02, 0xb4, 0x03, + 0xb6, 0x03, 0x00, 0x00, 0x02, 0x00, 0xf8, 0x01, + 0x00, 0x01, 0xf8, 0x01, 0x01, 0x00, 0x0c, 0x20, + 0x02, 0x01, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x02, 0x01, 0x0f, 0x00, 0xb4, 0x03, 0x00, 0x0d, + 0xb6, 0x03, 0x01, 0x0d, 0x0c, 0x43, 0x02, 0x01, + 0x00, 0x01, 0x89, 0x01, 0x01, 0x04, 0x02, 0x5b, + 0xe8, 0x0c, 0x8a, 0x01, 0xb8, 0x03, 0x00, 0x01, + 0x40, 0xa0, 0x02, 0x00, 0x00, 0x40, 0xa8, 0x02, + 0x00, 0x01, 0x40, 0xa6, 0x02, 0x00, 0x02, 0x40, + 0xaa, 0x02, 0x00, 0x03, 0x40, 0xda, 0x02, 0x00, + 0x04, 0x40, 0xc6, 0x02, 0x00, 0x05, 0x40, 0xa2, + 0x02, 0x00, 0x06, 0x40, 0xb4, 0x02, 0x00, 0x07, + 0x40, 0xbc, 0x02, 0x00, 0x08, 0x40, 0xa4, 0x02, + 0x00, 0x09, 0x40, 0xac, 0x02, 0x00, 0x0a, 0x00, + 0xb0, 0x02, 0x00, 0x0b, 0x40, 0xb2, 0x02, 0x00, + 0x0c, 0x40, 0xba, 0x03, 0x00, 0x0d, 0x40, 0xbc, + 0x03, 0x00, 0x0e, 0x40, 0xbe, 0x03, 0x00, 0x0f, + 0x40, 0xc0, 0x03, 0x00, 0x10, 0x40, 0xc2, 0x03, + 0x00, 0x11, 0x40, 0xc4, 0x03, 0x00, 0x12, 0x40, + 0xc6, 0x03, 0x00, 0x13, 0x40, 0xc8, 0x03, 0x00, + 0x14, 0x40, 0xca, 0x03, 0x00, 0x15, 0x40, 0xcc, + 0x03, 0x00, 0x16, 0x40, 0xce, 0x03, 0x00, 0x17, + 0x40, 0xd0, 0x03, 0x00, 0x18, 0x40, 0xd2, 0x03, + 0x00, 0x19, 0x40, 0xd4, 0x03, 0x00, 0x1a, 0x40, + 0xd6, 0x03, 0x00, 0x1b, 0x40, 0xd8, 0x03, 0x00, + 0x1c, 0x40, 0xda, 0x03, 0x00, 0x1d, 0x40, 0xdc, + 0x03, 0x00, 0x1e, 0x40, 0xde, 0x03, 0x00, 0x1f, + 0x40, 0xe0, 0x03, 0x00, 0x20, 0x40, 0xe2, 0x03, + 0x00, 0x21, 0x40, 0xe4, 0x03, 0x00, 0x22, 0x40, + 0xe6, 0x03, 0x00, 0x23, 0x40, 0xe8, 0x03, 0x00, + 0x24, 0x40, 0xea, 0x03, 0x00, 0x25, 0x40, 0xec, + 0x03, 0x00, 0x26, 0x40, 0xee, 0x03, 0x00, 0x27, + 0x40, 0xf0, 0x03, 0x00, 0x28, 0x40, 0xf2, 0x03, + 0x00, 0x29, 0x40, 0xf4, 0x03, 0x00, 0x2a, 0x40, + 0xf6, 0x03, 0x00, 0x2b, 0x40, 0xf8, 0x03, 0x00, + 0x2c, 0x40, 0xfa, 0x03, 0x00, 0x2d, 0x40, 0xfc, + 0x03, 0x00, 0x2e, 0x40, 0xfe, 0x03, 0x00, 0x2f, + 0x40, 0x80, 0x04, 0x00, 0x30, 0x40, 0x82, 0x04, + 0x00, 0x31, 0x40, 0x84, 0x04, 0x00, 0x32, 0x40, + 0x86, 0x04, 0x00, 0x33, 0x40, 0x88, 0x04, 0x00, + 0x34, 0x00, 0x8a, 0x04, 0x00, 0x35, 0x40, 0x8c, + 0x04, 0x00, 0x36, 0x40, 0x8e, 0x04, 0x00, 0x37, + 0x40, 0x90, 0x04, 0x00, 0x38, 0x40, 0x92, 0x04, + 0x00, 0x39, 0x40, 0x94, 0x04, 0x00, 0x3a, 0x40, + 0x96, 0x04, 0x00, 0x3b, 0x40, 0x98, 0x04, 0x00, + 0x3c, 0x40, 0x9a, 0x04, 0x00, 0x3d, 0x40, 0x9c, + 0x04, 0x00, 0x3e, 0x40, 0x9e, 0x04, 0x00, 0x3f, + 0x40, 0xa0, 0x04, 0x00, 0x40, 0x40, 0xa2, 0x04, + 0x00, 0x41, 0x40, 0xa4, 0x04, 0x00, 0x42, 0x40, + 0xa6, 0x04, 0x00, 0x43, 0x00, 0xa8, 0x04, 0x00, + 0x44, 0x00, 0xaa, 0x04, 0x00, 0x45, 0x40, 0xac, + 0x04, 0x00, 0x46, 0x00, 0xae, 0x04, 0x00, 0x47, + 0x00, 0xb0, 0x04, 0x00, 0x48, 0x00, 0xb2, 0x04, + 0x00, 0x49, 0x00, 0xb4, 0x04, 0x00, 0x4a, 0x40, + 0xb6, 0x04, 0x00, 0x4b, 0x40, 0xb8, 0x04, 0x00, + 0x4c, 0x00, 0xba, 0x04, 0x00, 0x4d, 0x00, 0xbc, + 0x04, 0x00, 0x4e, 0x00, 0xbe, 0x04, 0x00, 0x4f, + 0x40, 0xc0, 0x04, 0x00, 0x50, 0x00, 0xc2, 0x04, + 0x00, 0x51, 0x00, 0xc4, 0x04, 0x00, 0x52, 0x40, + 0xc6, 0x04, 0x00, 0x53, 0x00, 0xc8, 0x04, 0x00, + 0x54, 0x00, 0xca, 0x04, 0x00, 0x55, 0x40, 0xcc, + 0x04, 0x00, 0x56, 0x00, 0xce, 0x04, 0x00, 0x57, + 0x00, 0xd0, 0x04, 0x00, 0x58, 0x00, 0xd2, 0x04, + 0x00, 0x59, 0x00, 0xd4, 0x04, 0x00, 0x5a, 0x00, + 0xd6, 0x04, 0x00, 0x5b, 0x00, 0xd8, 0x04, 0x00, + 0x5c, 0x00, 0xda, 0x04, 0x00, 0x5d, 0x40, 0xdc, + 0x04, 0x00, 0x5e, 0x00, 0xde, 0x04, 0x00, 0x5f, + 0x00, 0xe0, 0x04, 0x00, 0x60, 0x00, 0xe2, 0x04, + 0x00, 0x61, 0x00, 0xe4, 0x04, 0x00, 0x62, 0x00, + 0xe6, 0x04, 0x00, 0x63, 0x40, 0xe8, 0x04, 0x00, + 0x64, 0x00, 0xea, 0x04, 0x00, 0x65, 0x40, 0xec, + 0x04, 0x00, 0x66, 0x40, 0xee, 0x04, 0x00, 0x67, + 0x40, 0xf0, 0x04, 0x00, 0x68, 0x40, 0xf2, 0x04, + 0x00, 0x69, 0x40, 0xf4, 0x04, 0x00, 0x6a, 0x40, + 0xf6, 0x04, 0x00, 0x6b, 0x40, 0xf8, 0x04, 0x00, + 0x6c, 0x40, 0xfa, 0x04, 0x00, 0x6d, 0x40, 0xfc, + 0x04, 0x00, 0x6e, 0x40, 0xfe, 0x04, 0x00, 0x6f, + 0x40, 0x80, 0x05, 0x00, 0x70, 0x40, 0x82, 0x05, + 0x00, 0x71, 0x40, 0x84, 0x05, 0x00, 0x72, 0x40, + 0x86, 0x05, 0x00, 0x73, 0x40, 0x88, 0x05, 0x00, + 0x74, 0x40, 0x8a, 0x05, 0x00, 0x75, 0x40, 0x8c, + 0x05, 0x00, 0x76, 0x40, 0x8e, 0x05, 0x00, 0x77, + 0x40, 0x90, 0x05, 0x00, 0x78, 0x00, 0x92, 0x05, + 0x00, 0x79, 0x40, 0x94, 0x05, 0x00, 0x7a, 0x40, + 0x96, 0x05, 0x00, 0x7b, 0x40, 0x98, 0x05, 0x00, + 0x7c, 0x00, 0x9a, 0x05, 0x00, 0x7d, 0x40, 0x9c, + 0x05, 0x00, 0x7e, 0x40, 0x9e, 0x05, 0x00, 0x7f, + 0x40, 0xa0, 0x05, 0x00, 0x80, 0x01, 0x40, 0xa2, + 0x05, 0x00, 0x81, 0x01, 0x40, 0xa4, 0x05, 0x00, + 0x82, 0x01, 0x40, 0xa6, 0x05, 0x00, 0x83, 0x01, + 0x40, 0xa8, 0x05, 0x00, 0x84, 0x01, 0x40, 0xaa, + 0x05, 0x00, 0x85, 0x01, 0x40, 0xac, 0x05, 0x00, + 0x86, 0x01, 0x40, 0xae, 0x05, 0x00, 0x87, 0x01, + 0x00, 0xb0, 0x05, 0x00, 0x88, 0x01, 0x00, 0xb4, + 0x03, 0x00, 0x0c, 0xb6, 0x03, 0x01, 0x0c, 0x0c, + 0x43, 0x02, 0x01, 0x88, 0x04, 0x00, 0x01, 0x00, + 0x04, 0x08, 0x00, 0x89, 0x01, 0x01, 0xb2, 0x05, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x30, 0x01, 0xb4, + 0x03, 0x00, 0x0c, 0x84, 0x04, 0x32, 0x01, 0xb6, + 0x03, 0x01, 0x0c, 0x8a, 0x04, 0x35, 0x01, 0x82, + 0x04, 0x31, 0x01, 0xc6, 0x02, 0x05, 0x01, 0x8c, + 0x04, 0x36, 0x01, 0x65, 0x01, 0x00, 0x41, 0x0d, + 0x00, 0x00, 0x00, 0x42, 0x5a, 0x01, 0x00, 0x00, + 0x24, 0x00, 0x00, 0xe0, 0xbb, 0x50, 0xe2, 0x65, + 0x03, 0x00, 0x42, 0x5b, 0x01, 0x00, 0x00, 0xdc, + 0x24, 0x01, 0x00, 0xe9, 0x35, 0x65, 0x03, 0x00, + 0x41, 0x5c, 0x01, 0x00, 0x00, 0xe9, 0x14, 0x65, + 0x03, 0x00, 0x42, 0x5c, 0x01, 0x00, 0x00, 0xdc, + 0x24, 0x01, 0x00, 0xcc, 0xe9, 0x05, 0xc4, 0xb3, + 0x47, 0xe2, 0x65, 0x03, 0x00, 0x41, 0x5d, 0x01, + 0x00, 0x00, 0xe9, 0x0e, 0x65, 0x03, 0x00, 0x42, + 0x5d, 0x01, 0x00, 0x00, 0xdc, 0x24, 0x01, 0x00, + 0x0e, 0x65, 0x03, 0x00, 0x42, 0x5e, 0x01, 0x00, + 0x00, 0x65, 0x03, 0x00, 0x41, 0x5f, 0x01, 0x00, + 0x00, 0x5e, 0x04, 0x00, 0x24, 0x02, 0x00, 0x0e, + 0x5e, 0x06, 0x00, 0x11, 0xbb, 0x40, 0x21, 0x01, + 0x00, 0x5f, 0x05, 0x00, 0x65, 0x03, 0x00, 0x42, + 0x60, 0x01, 0x00, 0x00, 0xdc, 0x5e, 0x07, 0x00, + 0x24, 0x02, 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0x8a, 0x04, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, + 0x04, 0x00, 0x8e, 0x04, 0x37, 0x01, 0xdc, 0xb6, + 0xee, 0x29, 0x0c, 0x43, 0x02, 0x01, 0x8c, 0x04, + 0x00, 0x02, 0x00, 0x06, 0x04, 0x00, 0x28, 0x02, + 0xc2, 0x05, 0x00, 0x00, 0x00, 0xc4, 0x05, 0x00, + 0x01, 0x00, 0xb6, 0x03, 0x01, 0x0c, 0x80, 0x04, + 0x30, 0x01, 0x82, 0x04, 0x31, 0x01, 0x8e, 0x04, + 0x37, 0x01, 0x65, 0x00, 0x00, 0x42, 0x63, 0x01, + 0x00, 0x00, 0xdd, 0xde, 0x41, 0x64, 0x01, 0x00, + 0x00, 0xb3, 0xde, 0xe8, 0x24, 0x04, 0x00, 0xc8, + 0xb3, 0xc9, 0xc5, 0xc4, 0xa6, 0xe9, 0x0b, 0xdf, + 0xde, 0xc5, 0x47, 0xee, 0x0e, 0x93, 0x01, 0xeb, + 0xf2, 0x29, 0x0c, 0x43, 0x02, 0x01, 0x8e, 0x04, + 0x01, 0x00, 0x01, 0x04, 0x04, 0x00, 0x5f, 0x01, + 0xca, 0x05, 0x00, 0x01, 0x00, 0xc8, 0x03, 0x14, + 0x01, 0x80, 0x05, 0x70, 0x01, 0xfc, 0x03, 0x2e, + 0x01, 0xfe, 0x03, 0x2f, 0x01, 0xdc, 0x96, 0xe9, + 0x06, 0xdd, 0xd0, 0xee, 0x0e, 0x29, 0xde, 0xb3, + 0xaf, 0xe9, 0x24, 0xd0, 0xbc, 0x80, 0x00, 0xa9, + 0xe9, 0x1d, 0xd0, 0xbc, 0xc0, 0x00, 0xa6, 0xe9, + 0x16, 0xdf, 0xb9, 0x9f, 0xd0, 0xbb, 0x3f, 0xa2, + 0xa4, 0xe3, 0xde, 0x8e, 0xe6, 0xb3, 0xae, 0xe9, + 0x33, 0xdd, 0xdf, 0xee, 0x0e, 0x29, 0xd0, 0xbc, + 0xc0, 0x00, 0xa9, 0xe9, 0x21, 0xd0, 0xbc, 0xf8, + 0x00, 0xa6, 0xe9, 0x1a, 0xb4, 0xd0, 0xbc, 0xe0, + 0x00, 0xa9, 0x9d, 0xd0, 0xbc, 0xf0, 0x00, 0xa9, + 0x9d, 0xe2, 0xd0, 0xb4, 0xb9, 0xde, 0x9e, 0x9f, + 0xb4, 0x9e, 0xa2, 0xe3, 0x29, 0xb3, 0xe2, 0xdd, + 0xd0, 0xee, 0x0e, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0x90, 0x04, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x35, 0x01, 0xca, 0x05, 0x00, 0x01, 0x00, 0xd0, + 0x97, 0x04, 0x47, 0x00, 0x00, 0x00, 0xae, 0x11, + 0xe9, 0x2a, 0x0e, 0xd0, 0x04, 0x66, 0x01, 0x00, + 0x00, 0xa9, 0x11, 0xe9, 0x09, 0x0e, 0xd0, 0x04, + 0x67, 0x01, 0x00, 0x00, 0xa7, 0x11, 0xea, 0x14, + 0x0e, 0xd0, 0x04, 0x68, 0x01, 0x00, 0x00, 0xa9, + 0x11, 0xe9, 0x09, 0x0e, 0xd0, 0x04, 0x69, 0x01, + 0x00, 0x00, 0xa7, 0x28, 0x0c, 0x43, 0x02, 0x01, + 0x92, 0x04, 0x01, 0x00, 0x01, 0x02, 0x00, 0x02, + 0x19, 0x01, 0xca, 0x05, 0x00, 0x01, 0x00, 0x07, + 0x02, 0x30, 0x07, 0x02, 0x39, 0xd0, 0x97, 0x04, + 0x47, 0x00, 0x00, 0x00, 0xae, 0x11, 0xe9, 0x0e, + 0x0e, 0xd0, 0xbd, 0x00, 0xa9, 0x11, 0xe9, 0x06, + 0x0e, 0xd0, 0xbd, 0x01, 0xa7, 0x28, 0x0c, 0x43, + 0x02, 0x01, 0x94, 0x04, 0x01, 0x00, 0x01, 0x02, + 0x02, 0x00, 0x2d, 0x01, 0xca, 0x05, 0x00, 0x01, + 0x00, 0x90, 0x04, 0x38, 0x01, 0x92, 0x04, 0x39, + 0x01, 0xd0, 0x97, 0x04, 0x47, 0x00, 0x00, 0x00, + 0xae, 0x11, 0xe9, 0x22, 0x0e, 0xdc, 0xd0, 0xee, + 0x11, 0xea, 0x1b, 0x0e, 0xdd, 0xd0, 0xee, 0x11, + 0xea, 0x14, 0x0e, 0xd0, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0xac, 0x11, 0xea, 0x09, 0x0e, 0xd0, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0xac, 0x28, 0x0c, 0x43, + 0x02, 0x01, 0x96, 0x04, 0x01, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x32, 0x05, 0xd8, 0x05, 0x00, 0x01, + 0x00, 0xda, 0x05, 0x00, 0x00, 0x00, 0xca, 0x05, + 0x00, 0x01, 0x00, 0xc4, 0x05, 0x00, 0x02, 0x00, + 0xdc, 0x05, 0x00, 0x03, 0x00, 0xd0, 0xe8, 0xcb, + 0xb3, 0xc8, 0xb3, 0xca, 0xc6, 0xc7, 0xa6, 0xe9, + 0x25, 0xd0, 0x42, 0x6f, 0x01, 0x00, 0x00, 0xc6, + 0x24, 0x01, 0x00, 0xcd, 0x01, 0x00, 0xdc, 0x00, + 0x00, 0xa6, 0x11, 0xea, 0x09, 0x0e, 0xc5, 0x01, + 0x00, 0xe0, 0x00, 0x00, 0xa9, 0xe9, 0x03, 0x93, + 0x00, 0x93, 0x02, 0xeb, 0xd8, 0xc4, 0x28, 0x0c, + 0x43, 0x02, 0x01, 0x98, 0x04, 0x01, 0x01, 0x01, + 0x03, 0x00, 0x00, 0x29, 0x02, 0xca, 0x05, 0x00, + 0x01, 0x00, 0xe0, 0x05, 0x00, 0x00, 0x00, 0xd0, + 0x97, 0x04, 0x47, 0x00, 0x00, 0x00, 0xaf, 0xe9, + 0x03, 0x09, 0x28, 0xd0, 0x42, 0x71, 0x01, 0x00, + 0x00, 0xb3, 0x24, 0x01, 0x00, 0xcc, 0x01, 0x00, + 0xdc, 0x00, 0x00, 0xa9, 0x11, 0xe9, 0x09, 0x0e, + 0xc4, 0x01, 0x00, 0xe0, 0x00, 0x00, 0xa6, 0x28, + 0x0c, 0x43, 0x02, 0x01, 0x9a, 0x04, 0x02, 0x00, + 0x02, 0x03, 0x00, 0x00, 0x23, 0x02, 0xd0, 0x05, + 0x00, 0x01, 0x00, 0xe4, 0x05, 0x00, 0x01, 0x00, + 0xd0, 0xd1, 0x9d, 0x11, 0x04, 0x73, 0x01, 0x00, + 0x00, 0xae, 0xea, 0x13, 0x11, 0x04, 0x74, 0x01, + 0x00, 0x00, 0xae, 0xea, 0x0a, 0x11, 0x04, 0x75, + 0x01, 0x00, 0x00, 0xae, 0xe9, 0x03, 0x0a, 0x28, + 0x0e, 0x09, 0x28, 0x0c, 0x43, 0x02, 0x01, 0x9c, + 0x04, 0x03, 0x03, 0x03, 0x06, 0x03, 0x00, 0x62, + 0x06, 0xd8, 0x05, 0x00, 0x01, 0x00, 0xec, 0x05, + 0x00, 0x01, 0x00, 0xee, 0x05, 0x00, 0x01, 0x00, + 0xc4, 0x05, 0x00, 0x00, 0x00, 0xf0, 0x05, 0x00, + 0x01, 0x00, 0xf2, 0x05, 0x00, 0x02, 0x00, 0xb4, + 0x03, 0x00, 0x0c, 0xc2, 0x03, 0x11, 0x01, 0xc6, + 0x03, 0x13, 0x01, 0xd1, 0xc9, 0xc5, 0xd0, 0xe8, + 0xa6, 0xe9, 0x5a, 0xd2, 0xc5, 0xcc, 0x47, 0xca, + 0xc5, 0x8f, 0xcd, 0xd0, 0xe8, 0xa6, 0xe9, 0x08, + 0xd2, 0xc5, 0x47, 0xc6, 0xac, 0xea, 0xf2, 0x65, + 0x00, 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, 0xdd, + 0xde, 0xc6, 0x47, 0x11, 0xea, 0x07, 0x0e, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x47, 0x24, 0x01, 0x00, + 0x0e, 0x65, 0x00, 0x00, 0x42, 0x7a, 0x01, 0x00, + 0x00, 0xd0, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xc3, + 0x24, 0x02, 0x00, 0x24, 0x01, 0x00, 0x0e, 0x65, + 0x00, 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, 0xdd, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x47, 0x24, 0x01, + 0x00, 0x0e, 0xeb, 0xa2, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0x9e, 0x04, 0x02, 0x00, 0x02, 0x05, 0x01, + 0x00, 0x1d, 0x02, 0xfa, 0x05, 0x00, 0x01, 0x00, + 0xfc, 0x05, 0x00, 0x01, 0x00, 0xb4, 0x03, 0x00, + 0x0c, 0x65, 0x00, 0x00, 0x42, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0xd0, 0xb4, + 0xad, 0xe9, 0x04, 0xd0, 0xeb, 0x02, 0xbf, 0x9d, + 0xd1, 0x9d, 0x24, 0x01, 0x00, 0x29, 0x0c, 0x43, + 0x02, 0x01, 0xa0, 0x04, 0x01, 0x02, 0x01, 0x04, + 0x05, 0x00, 0xa1, 0x01, 0x03, 0x80, 0x06, 0x00, + 0x01, 0x00, 0xc4, 0x05, 0x00, 0x00, 0x00, 0xc2, + 0x05, 0x00, 0x01, 0x00, 0x86, 0x04, 0x33, 0x01, + 0x84, 0x04, 0x32, 0x01, 0xb4, 0x03, 0x00, 0x0c, + 0xb0, 0x02, 0x0b, 0x01, 0x9e, 0x04, 0x3f, 0x01, + 0xd0, 0xb3, 0xa8, 0xe9, 0x4d, 0xd0, 0xb3, 0xad, + 0x69, 0x97, 0x00, 0x00, 0x00, 0xdc, 0xdd, 0xb4, + 0x9e, 0xac, 0xe9, 0x19, 0x65, 0x02, 0x00, 0x42, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0x0e, 0xb3, 0xe0, 0xd0, + 0x8e, 0xd4, 0xeb, 0xda, 0xdf, 0x42, 0x82, 0x01, + 0x00, 0x00, 0xdd, 0xb4, 0x9e, 0xdc, 0x9e, 0xd0, + 0x24, 0x02, 0x00, 0xc9, 0x5e, 0x04, 0x00, 0xc5, + 0x04, 0x83, 0x01, 0x00, 0x00, 0xef, 0x0e, 0xd0, + 0xc5, 0x9e, 0xd4, 0xdc, 0xc5, 0x9d, 0xe0, 0xeb, + 0xb5, 0xd0, 0x8c, 0xd4, 0xd0, 0xb3, 0xad, 0xe9, + 0x48, 0xdc, 0xb3, 0xac, 0xe9, 0x22, 0x5e, 0x04, + 0x00, 0xb4, 0x04, 0x66, 0x01, 0x00, 0x00, 0xef, + 0x0e, 0x5e, 0x04, 0x00, 0xdd, 0xb4, 0x9e, 0x04, + 0x83, 0x01, 0x00, 0x00, 0xef, 0x0e, 0xd0, 0x8e, + 0xd4, 0xdd, 0xb4, 0x9e, 0xe0, 0xeb, 0xd6, 0xdf, + 0x42, 0x82, 0x01, 0x00, 0x00, 0xd0, 0xdc, 0x24, + 0x02, 0x00, 0xc9, 0x5e, 0x04, 0x00, 0xc5, 0x04, + 0x84, 0x01, 0x00, 0x00, 0xef, 0x0e, 0xd0, 0xc5, + 0x9e, 0xd4, 0xdc, 0xc5, 0x9e, 0xe0, 0xeb, 0xb5, + 0x29, 0x0c, 0x43, 0x02, 0x01, 0xa2, 0x04, 0x00, + 0x05, 0x00, 0x06, 0x0d, 0x00, 0x9c, 0x02, 0x05, + 0xc4, 0x05, 0x00, 0x00, 0x00, 0x8a, 0x06, 0x00, + 0x01, 0x00, 0xd8, 0x05, 0x00, 0x02, 0x00, 0xec, + 0x05, 0x00, 0x03, 0x00, 0x8c, 0x06, 0x00, 0x04, + 0x00, 0xee, 0x03, 0x27, 0x01, 0xf2, 0x03, 0x29, + 0x01, 0xcc, 0x03, 0x16, 0x01, 0xf4, 0x03, 0x2a, + 0x01, 0xb4, 0x03, 0x00, 0x0c, 0xa0, 0x04, 0x40, + 0x01, 0x96, 0x04, 0x3b, 0x01, 0xea, 0x03, 0x25, + 0x01, 0xa8, 0x05, 0x84, 0x01, 0x01, 0x9c, 0x04, + 0x3e, 0x01, 0x86, 0x04, 0x33, 0x01, 0x84, 0x04, + 0x32, 0x01, 0xf0, 0x03, 0x28, 0x01, 0xdc, 0xdd, + 0xad, 0x69, 0xc6, 0x00, 0x00, 0x00, 0xde, 0x96, + 0xe9, 0x32, 0xdd, 0x42, 0x7c, 0x01, 0x00, 0x00, + 0xb3, 0xdf, 0x24, 0x02, 0x00, 0xdc, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xb3, 0xdf, 0x24, 0x02, 0x00, - 0xee, 0x8c, 0xee, 0x0e, 0xde, 0xe9, 0x2e, 0x5e, - 0x07, 0x00, 0xe9, 0x0e, 0x5e, 0x07, 0x00, 0x04, - 0x7d, 0x01, 0x00, 0x00, 0x9d, 0xdc, 0x9d, 0xeb, - 0x02, 0xdc, 0xce, 0xe8, 0xdc, 0xe8, 0x9e, 0xcb, - 0x5e, 0x08, 0x00, 0xc6, 0xee, 0xc1, 0x04, 0x5e, - 0x09, 0x00, 0xc6, 0xc7, 0xc0, 0x04, 0xb5, 0x47, - 0xf0, 0x0e, 0xeb, 0x0e, 0x65, 0x04, 0x00, 0x42, - 0x76, 0x01, 0x00, 0x00, 0xdc, 0x24, 0x01, 0x00, - 0x0e, 0x5e, 0x0a, 0x00, 0x5e, 0x06, 0x00, 0xdc, - 0xee, 0x9d, 0x5e, 0x0b, 0x00, 0x9c, 0x60, 0x0a, - 0x00, 0xb3, 0xac, 0xe9, 0x12, 0x65, 0x04, 0x00, - 0x42, 0x76, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, - 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0x65, 0x04, - 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, 0x04, 0x84, - 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xdc, - 0xe1, 0xdc, 0xe8, 0xe3, 0x5e, 0x0c, 0x00, 0xdf, - 0xa8, 0xe9, 0x19, 0x5e, 0x05, 0x00, 0x5e, 0x06, - 0x00, 0xdc, 0x42, 0x78, 0x01, 0x00, 0x00, 0xdf, - 0x5e, 0x0c, 0x00, 0x24, 0x02, 0x00, 0xee, 0xee, - 0x0e, 0xeb, 0x1f, 0x5e, 0x0c, 0x00, 0xdf, 0xa6, - 0xe9, 0x18, 0x5e, 0x05, 0x00, 0x5e, 0x06, 0x00, - 0xdc, 0x42, 0x78, 0x01, 0x00, 0x00, 0x5e, 0x0c, - 0x00, 0xdf, 0x24, 0x02, 0x00, 0xee, 0x8c, 0xee, - 0x0e, 0x5e, 0x0c, 0x00, 0xe3, 0x65, 0x04, 0x00, - 0x41, 0x85, 0x01, 0x00, 0x00, 0x42, 0x86, 0x01, - 0x00, 0x00, 0x24, 0x00, 0x00, 0x29, 0x0c, 0x43, - 0x02, 0x01, 0xa2, 0x04, 0x01, 0x00, 0x01, 0x04, - 0x02, 0x00, 0x22, 0x01, 0xd0, 0x05, 0x00, 0x01, - 0x00, 0xec, 0x03, 0x26, 0x01, 0xee, 0x03, 0x27, - 0x01, 0xd0, 0xe9, 0x1f, 0xdc, 0x42, 0x78, 0x01, - 0x00, 0x00, 0xb3, 0xdd, 0x24, 0x02, 0x00, 0xd0, - 0x9d, 0xdc, 0x42, 0x78, 0x01, 0x00, 0x00, 0xdd, - 0x24, 0x01, 0x00, 0x9d, 0xe0, 0xdd, 0xd0, 0xe8, - 0x9d, 0xe1, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xa4, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x03, - 0x00, 0xf8, 0x03, 0x2c, 0x01, 0x0a, 0xe0, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0xa6, 0x04, 0x00, 0x00, - 0x00, 0x01, 0x02, 0x00, 0x07, 0x00, 0xec, 0x03, - 0x26, 0x01, 0xee, 0x03, 0x27, 0x01, 0xbf, 0xe0, - 0xb3, 0xe1, 0xbb, 0xfe, 0x28, 0x0c, 0x43, 0x02, - 0x01, 0xa8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, - 0xaa, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x03, 0x00, 0xee, 0x03, 0x27, 0x01, 0xb3, 0xe0, - 0x29, 0x0c, 0x43, 0x02, 0x01, 0xac, 0x04, 0x00, - 0x00, 0x00, 0x01, 0x02, 0x00, 0x04, 0x00, 0xee, - 0x03, 0x27, 0x01, 0xec, 0x03, 0x26, 0x01, 0xdd, - 0xe8, 0xe0, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xae, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x1d, - 0x00, 0xee, 0x03, 0x27, 0x01, 0xec, 0x03, 0x26, - 0x01, 0x96, 0x04, 0x3b, 0x01, 0xdc, 0xdd, 0xe8, - 0xa6, 0xe9, 0x17, 0xdc, 0x8f, 0xe0, 0xde, 0xdd, - 0x42, 0x87, 0x01, 0x00, 0x00, 0xdc, 0x24, 0x01, - 0x00, 0xee, 0xe9, 0x06, 0xdc, 0x8f, 0xe0, 0xeb, - 0xee, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xb0, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x1c, 0x00, - 0xee, 0x03, 0x27, 0x01, 0x96, 0x04, 0x3b, 0x01, - 0xec, 0x03, 0x26, 0x01, 0xdc, 0xb3, 0xa8, 0xe9, - 0x17, 0xdc, 0x8e, 0xe0, 0xdd, 0xde, 0x42, 0x87, - 0x01, 0x00, 0x00, 0xdc, 0x24, 0x01, 0x00, 0xee, - 0xe9, 0x06, 0xdc, 0x8e, 0xe0, 0xeb, 0xee, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0xb2, 0x04, 0x01, 0x00, - 0x01, 0x04, 0x02, 0x00, 0x35, 0x01, 0x90, 0x06, - 0x00, 0x01, 0x00, 0xec, 0x03, 0x26, 0x01, 0x92, - 0x04, 0x39, 0x01, 0xd0, 0xdc, 0xe8, 0xa6, 0xe9, - 0x15, 0xdd, 0xdc, 0x42, 0x87, 0x01, 0x00, 0x00, - 0xd0, 0x24, 0x01, 0x00, 0xee, 0x96, 0xe9, 0x06, - 0xd0, 0x8f, 0xd4, 0xeb, 0xe7, 0xd0, 0xdc, 0xe8, - 0xa6, 0xe9, 0x14, 0xdd, 0xdc, 0x42, 0x87, 0x01, - 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xee, 0xe9, - 0x06, 0xd0, 0x8f, 0xd4, 0xeb, 0xe8, 0xd0, 0x28, - 0x0c, 0x43, 0x02, 0x01, 0xb4, 0x04, 0x01, 0x00, - 0x01, 0x05, 0x02, 0x00, 0x37, 0x01, 0x90, 0x06, - 0x00, 0x01, 0x00, 0x92, 0x04, 0x39, 0x01, 0xec, - 0x03, 0x26, 0x01, 0xd0, 0xb3, 0xa8, 0xe9, 0x17, - 0xdc, 0xdd, 0x42, 0x87, 0x01, 0x00, 0x00, 0xd0, - 0xb4, 0x9e, 0x24, 0x01, 0x00, 0xee, 0x96, 0xe9, - 0x06, 0xd0, 0x8e, 0xd4, 0xeb, 0xe6, 0xd0, 0xb3, - 0xa8, 0xe9, 0x16, 0xdc, 0xdd, 0x42, 0x87, 0x01, - 0x00, 0x00, 0xd0, 0xb4, 0x9e, 0x24, 0x01, 0x00, - 0xee, 0xe9, 0x06, 0xd0, 0x8e, 0xd4, 0xeb, 0xe7, - 0xd0, 0x28, 0x0c, 0x43, 0x02, 0x01, 0xb6, 0x04, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x05, 0x00, - 0xee, 0x03, 0x27, 0x01, 0xb2, 0x04, 0x49, 0x01, - 0xdd, 0xdc, 0xee, 0xe0, 0x29, 0x0c, 0x43, 0x02, - 0x01, 0xb8, 0x04, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x00, 0x05, 0x00, 0xee, 0x03, 0x27, 0x01, 0xb4, - 0x04, 0x4a, 0x01, 0xdd, 0xdc, 0xee, 0xe0, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0xba, 0x04, 0x00, 0x00, - 0x00, 0x03, 0x03, 0x00, 0x17, 0x00, 0xb4, 0x03, - 0x00, 0x0c, 0xbc, 0x04, 0x4e, 0x01, 0xec, 0x03, - 0x26, 0x01, 0x65, 0x00, 0x00, 0x42, 0x76, 0x01, - 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x24, - 0x01, 0x00, 0x0e, 0xdd, 0xde, 0xee, 0x0e, 0xb2, - 0x28, 0x0c, 0x43, 0x02, 0x01, 0xbc, 0x04, 0x01, - 0x00, 0x01, 0x03, 0x02, 0x00, 0x36, 0x01, 0xd0, - 0x05, 0x00, 0x01, 0x00, 0xd6, 0x03, 0x1b, 0x01, - 0xd8, 0x03, 0x1c, 0x01, 0xd0, 0x42, 0x89, 0x01, - 0x00, 0x00, 0x24, 0x00, 0x00, 0xd8, 0xe9, 0x27, - 0xdc, 0xe8, 0xe9, 0x18, 0xdc, 0xdc, 0xe8, 0xb4, - 0x9e, 0x47, 0x96, 0xe9, 0x0f, 0xdc, 0x42, 0x30, - 0x00, 0x00, 0x00, 0x8e, 0x43, 0x30, 0x00, 0x00, - 0x00, 0xeb, 0xe6, 0xdc, 0x42, 0x8a, 0x01, 0x00, - 0x00, 0xd0, 0x24, 0x01, 0x00, 0x0e, 0xdc, 0xe8, - 0xe1, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xbe, 0x04, - 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x20, 0x00, - 0xd8, 0x03, 0x1c, 0x01, 0xd6, 0x03, 0x1b, 0x01, - 0xec, 0x03, 0x26, 0x01, 0xee, 0x03, 0x27, 0x01, - 0xdc, 0xb3, 0xa8, 0xe9, 0x1b, 0xdc, 0xdd, 0xe8, - 0xac, 0xe9, 0x0c, 0xdd, 0x42, 0x8a, 0x01, 0x00, - 0x00, 0xde, 0x24, 0x01, 0x00, 0x0e, 0xdc, 0x8e, - 0xe0, 0xdd, 0xdc, 0x47, 0xe6, 0xe8, 0xe3, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0xc0, 0x04, 0x00, 0x00, - 0x00, 0x03, 0x04, 0x00, 0x12, 0x00, 0xd8, 0x03, - 0x1c, 0x01, 0xd6, 0x03, 0x1b, 0x01, 0xec, 0x03, - 0x26, 0x01, 0xee, 0x03, 0x27, 0x01, 0xdc, 0xdd, - 0xe8, 0xb4, 0x9e, 0xa6, 0xe9, 0x0a, 0xdc, 0x8f, - 0xe0, 0xdd, 0xdc, 0x47, 0xe6, 0xe8, 0xe3, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0xc2, 0x04, 0x01, 0x03, - 0x01, 0x05, 0x04, 0x00, 0x3d, 0x04, 0x96, 0x06, - 0x00, 0x01, 0x00, 0x90, 0x06, 0x00, 0x00, 0x00, - 0xbc, 0x05, 0x00, 0x01, 0x00, 0xac, 0x01, 0x00, - 0x02, 0x00, 0xee, 0x03, 0x27, 0x01, 0xd6, 0x03, - 0x1b, 0x01, 0xd8, 0x03, 0x1c, 0x01, 0xec, 0x03, - 0x26, 0x01, 0xdc, 0xc8, 0xb4, 0xc9, 0xc5, 0xdd, - 0xe8, 0xa7, 0xe9, 0x33, 0xdd, 0xe8, 0xc5, 0xd0, - 0x9a, 0x9d, 0xde, 0x9d, 0xdd, 0xe8, 0x9c, 0xca, - 0xdd, 0xc6, 0x47, 0x42, 0x78, 0x01, 0x00, 0x00, - 0xb3, 0xc4, 0x24, 0x02, 0x00, 0xdf, 0x42, 0x78, + 0xac, 0xe9, 0x19, 0x65, 0x04, 0x00, 0x42, 0x7a, + 0x01, 0x00, 0x00, 0xdc, 0x42, 0x7c, 0x01, 0x00, + 0x00, 0xdf, 0x24, 0x01, 0x00, 0x24, 0x01, 0x00, + 0x0e, 0xeb, 0x53, 0x5e, 0x05, 0x00, 0x5e, 0x06, + 0x00, 0xdd, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xb3, + 0xdf, 0x24, 0x02, 0x00, 0xee, 0x8c, 0xee, 0x0e, + 0xde, 0xe9, 0x2e, 0x5e, 0x07, 0x00, 0xe9, 0x0e, + 0x5e, 0x07, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x9d, 0xdc, 0x9d, 0xeb, 0x02, 0xdc, 0xce, 0xe8, + 0xdc, 0xe8, 0x9e, 0xcb, 0x5e, 0x08, 0x00, 0xc6, + 0xee, 0xc1, 0x04, 0x5e, 0x09, 0x00, 0xc6, 0xc7, + 0xc0, 0x04, 0xb5, 0x47, 0xf0, 0x0e, 0xeb, 0x0e, + 0x65, 0x04, 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, + 0xdc, 0x24, 0x01, 0x00, 0x0e, 0x5e, 0x0a, 0x00, + 0x5e, 0x06, 0x00, 0xdc, 0xee, 0x9d, 0x5e, 0x0b, + 0x00, 0x9c, 0x60, 0x0a, 0x00, 0xb3, 0xac, 0xe9, + 0x12, 0x65, 0x04, 0x00, 0x42, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0x0e, 0x65, 0x04, 0x00, 0x42, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0x0e, 0xdc, 0xe1, 0xdc, 0xe8, 0xe3, + 0x5e, 0x0c, 0x00, 0xdf, 0xa8, 0xe9, 0x19, 0x5e, + 0x05, 0x00, 0x5e, 0x06, 0x00, 0xdc, 0x42, 0x7c, + 0x01, 0x00, 0x00, 0xdf, 0x5e, 0x0c, 0x00, 0x24, + 0x02, 0x00, 0xee, 0xee, 0x0e, 0xeb, 0x1f, 0x5e, + 0x0c, 0x00, 0xdf, 0xa6, 0xe9, 0x18, 0x5e, 0x05, + 0x00, 0x5e, 0x06, 0x00, 0xdc, 0x42, 0x7c, 0x01, + 0x00, 0x00, 0x5e, 0x0c, 0x00, 0xdf, 0x24, 0x02, + 0x00, 0xee, 0x8c, 0xee, 0x0e, 0x5e, 0x0c, 0x00, + 0xe3, 0x65, 0x04, 0x00, 0x41, 0x89, 0x01, 0x00, + 0x00, 0x42, 0x8a, 0x01, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xa4, 0x04, + 0x01, 0x00, 0x01, 0x04, 0x02, 0x00, 0x22, 0x01, + 0xd8, 0x05, 0x00, 0x01, 0x00, 0xee, 0x03, 0x27, + 0x01, 0xf0, 0x03, 0x28, 0x01, 0xd0, 0xe9, 0x1f, + 0xdc, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xb3, 0xdd, + 0x24, 0x02, 0x00, 0xd0, 0x9d, 0xdc, 0x42, 0x7c, + 0x01, 0x00, 0x00, 0xdd, 0x24, 0x01, 0x00, 0x9d, + 0xe0, 0xdd, 0xd0, 0xe8, 0x9d, 0xe1, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0xa6, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x03, 0x00, 0xfa, 0x03, 0x2d, + 0x01, 0x0a, 0xe0, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xa8, 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, + 0x07, 0x00, 0xee, 0x03, 0x27, 0x01, 0xf0, 0x03, + 0x28, 0x01, 0xbf, 0xe0, 0xb3, 0xe1, 0xbb, 0xfe, + 0x28, 0x0c, 0x43, 0x02, 0x01, 0xaa, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x29, + 0x0c, 0x43, 0x02, 0x01, 0xac, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x03, 0x00, 0xf0, 0x03, + 0x28, 0x01, 0xb3, 0xe0, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0xae, 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, + 0x00, 0x04, 0x00, 0xf0, 0x03, 0x28, 0x01, 0xee, + 0x03, 0x27, 0x01, 0xdd, 0xe8, 0xe0, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0xb0, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x00, 0x1d, 0x00, 0xf0, 0x03, 0x28, + 0x01, 0xee, 0x03, 0x27, 0x01, 0x98, 0x04, 0x3c, + 0x01, 0xdc, 0xdd, 0xe8, 0xa6, 0xe9, 0x17, 0xdc, + 0x8f, 0xe0, 0xde, 0xdd, 0x42, 0x8b, 0x01, 0x00, + 0x00, 0xdc, 0x24, 0x01, 0x00, 0xee, 0xe9, 0x06, + 0xdc, 0x8f, 0xe0, 0xeb, 0xee, 0x29, 0x0c, 0x43, + 0x02, 0x01, 0xb2, 0x04, 0x00, 0x00, 0x00, 0x04, + 0x03, 0x00, 0x1c, 0x00, 0xf0, 0x03, 0x28, 0x01, + 0x98, 0x04, 0x3c, 0x01, 0xee, 0x03, 0x27, 0x01, + 0xdc, 0xb3, 0xa8, 0xe9, 0x17, 0xdc, 0x8e, 0xe0, + 0xdd, 0xde, 0x42, 0x8b, 0x01, 0x00, 0x00, 0xdc, + 0x24, 0x01, 0x00, 0xee, 0xe9, 0x06, 0xdc, 0x8e, + 0xe0, 0xeb, 0xee, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xb4, 0x04, 0x01, 0x00, 0x01, 0x04, 0x02, 0x00, + 0x35, 0x01, 0x98, 0x06, 0x00, 0x01, 0x00, 0xee, + 0x03, 0x27, 0x01, 0x94, 0x04, 0x3a, 0x01, 0xd0, + 0xdc, 0xe8, 0xa6, 0xe9, 0x15, 0xdd, 0xdc, 0x42, + 0x8b, 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, + 0xee, 0x96, 0xe9, 0x06, 0xd0, 0x8f, 0xd4, 0xeb, + 0xe7, 0xd0, 0xdc, 0xe8, 0xa6, 0xe9, 0x14, 0xdd, + 0xdc, 0x42, 0x8b, 0x01, 0x00, 0x00, 0xd0, 0x24, + 0x01, 0x00, 0xee, 0xe9, 0x06, 0xd0, 0x8f, 0xd4, + 0xeb, 0xe8, 0xd0, 0x28, 0x0c, 0x43, 0x02, 0x01, + 0xb6, 0x04, 0x01, 0x00, 0x01, 0x05, 0x02, 0x00, + 0x37, 0x01, 0x98, 0x06, 0x00, 0x01, 0x00, 0x94, + 0x04, 0x3a, 0x01, 0xee, 0x03, 0x27, 0x01, 0xd0, + 0xb3, 0xa8, 0xe9, 0x17, 0xdc, 0xdd, 0x42, 0x8b, + 0x01, 0x00, 0x00, 0xd0, 0xb4, 0x9e, 0x24, 0x01, + 0x00, 0xee, 0x96, 0xe9, 0x06, 0xd0, 0x8e, 0xd4, + 0xeb, 0xe6, 0xd0, 0xb3, 0xa8, 0xe9, 0x16, 0xdc, + 0xdd, 0x42, 0x8b, 0x01, 0x00, 0x00, 0xd0, 0xb4, + 0x9e, 0x24, 0x01, 0x00, 0xee, 0xe9, 0x06, 0xd0, + 0x8e, 0xd4, 0xeb, 0xe7, 0xd0, 0x28, 0x0c, 0x43, + 0x02, 0x01, 0xb8, 0x04, 0x00, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x05, 0x00, 0xf0, 0x03, 0x28, 0x01, + 0xb4, 0x04, 0x4a, 0x01, 0xdd, 0xdc, 0xee, 0xe0, + 0x29, 0x0c, 0x43, 0x02, 0x01, 0xba, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x02, 0x00, 0x05, 0x00, 0xf0, + 0x03, 0x28, 0x01, 0xb6, 0x04, 0x4b, 0x01, 0xdd, + 0xdc, 0xee, 0xe0, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xbc, 0x04, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, + 0x17, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xbe, 0x04, + 0x4f, 0x01, 0xee, 0x03, 0x27, 0x01, 0x65, 0x00, + 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xdd, + 0xde, 0xee, 0x0e, 0xb2, 0x28, 0x0c, 0x43, 0x02, + 0x01, 0xbe, 0x04, 0x01, 0x00, 0x01, 0x03, 0x02, + 0x00, 0x36, 0x01, 0xd8, 0x05, 0x00, 0x01, 0x00, + 0xd6, 0x03, 0x1b, 0x01, 0xd8, 0x03, 0x1c, 0x01, + 0xd0, 0x42, 0x8d, 0x01, 0x00, 0x00, 0x24, 0x00, + 0x00, 0xd8, 0xe9, 0x27, 0xdc, 0xe8, 0xe9, 0x18, + 0xdc, 0xdc, 0xe8, 0xb4, 0x9e, 0x47, 0x96, 0xe9, + 0x0f, 0xdc, 0x42, 0x30, 0x00, 0x00, 0x00, 0x8e, + 0x43, 0x30, 0x00, 0x00, 0x00, 0xeb, 0xe6, 0xdc, + 0x42, 0x8e, 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0x0e, 0xdc, 0xe8, 0xe1, 0x29, 0x0c, 0x43, + 0x02, 0x01, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x03, + 0x04, 0x00, 0x20, 0x00, 0xd8, 0x03, 0x1c, 0x01, + 0xd6, 0x03, 0x1b, 0x01, 0xee, 0x03, 0x27, 0x01, + 0xf0, 0x03, 0x28, 0x01, 0xdc, 0xb3, 0xa8, 0xe9, + 0x1b, 0xdc, 0xdd, 0xe8, 0xac, 0xe9, 0x0c, 0xdd, + 0x42, 0x8e, 0x01, 0x00, 0x00, 0xde, 0x24, 0x01, + 0x00, 0x0e, 0xdc, 0x8e, 0xe0, 0xdd, 0xdc, 0x47, + 0xe6, 0xe8, 0xe3, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xc2, 0x04, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, + 0x12, 0x00, 0xd8, 0x03, 0x1c, 0x01, 0xd6, 0x03, + 0x1b, 0x01, 0xee, 0x03, 0x27, 0x01, 0xf0, 0x03, + 0x28, 0x01, 0xdc, 0xdd, 0xe8, 0xb4, 0x9e, 0xa6, + 0xe9, 0x0a, 0xdc, 0x8f, 0xe0, 0xdd, 0xdc, 0x47, + 0xe6, 0xe8, 0xe3, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xc4, 0x04, 0x01, 0x03, 0x01, 0x05, 0x04, 0x00, + 0x3d, 0x04, 0x9e, 0x06, 0x00, 0x01, 0x00, 0x98, + 0x06, 0x00, 0x00, 0x00, 0xc4, 0x05, 0x00, 0x01, + 0x00, 0xac, 0x01, 0x00, 0x02, 0x00, 0xf0, 0x03, + 0x28, 0x01, 0xd6, 0x03, 0x1b, 0x01, 0xd8, 0x03, + 0x1c, 0x01, 0xee, 0x03, 0x27, 0x01, 0xdc, 0xc8, + 0xb4, 0xc9, 0xc5, 0xdd, 0xe8, 0xa7, 0xe9, 0x33, + 0xdd, 0xe8, 0xc5, 0xd0, 0x9a, 0x9d, 0xde, 0x9d, + 0xdd, 0xe8, 0x9c, 0xca, 0xdd, 0xc6, 0x47, 0x42, + 0x7c, 0x01, 0x00, 0x00, 0xb3, 0xc4, 0x24, 0x02, + 0x00, 0xdf, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xb3, + 0xc4, 0x24, 0x02, 0x00, 0xac, 0xe9, 0x08, 0xc6, + 0xe2, 0xdd, 0xc6, 0x47, 0xe3, 0x29, 0x93, 0x01, + 0xeb, 0xc9, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xc6, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, + 0x00, 0xc4, 0x04, 0x52, 0x01, 0xdc, 0xb2, 0x23, + 0x01, 0x00, 0x0c, 0x43, 0x02, 0x01, 0xc8, 0x04, + 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, + 0xc4, 0x04, 0x52, 0x01, 0xdc, 0xb4, 0x23, 0x01, + 0x00, 0x0c, 0x43, 0x02, 0x01, 0xca, 0x04, 0x01, + 0x02, 0x01, 0x04, 0x05, 0x00, 0x65, 0x03, 0x9e, + 0x06, 0x00, 0x01, 0x00, 0xec, 0x05, 0x00, 0x00, + 0x00, 0xa0, 0x06, 0x00, 0x01, 0x00, 0xf0, 0x03, + 0x28, 0x01, 0x98, 0x04, 0x3c, 0x01, 0xee, 0x03, + 0x27, 0x01, 0xf8, 0x03, 0x2c, 0x01, 0xda, 0x04, + 0x5d, 0x01, 0xdc, 0xc8, 0xd0, 0xb3, 0xa6, 0xe9, + 0x15, 0x92, 0x00, 0xdd, 0xde, 0x42, 0x8b, 0x01, + 0x00, 0x00, 0xc4, 0x24, 0x01, 0x00, 0xee, 0xe9, + 0x05, 0x92, 0x00, 0xeb, 0xef, 0xc4, 0xb4, 0x9d, + 0xc9, 0xdd, 0xde, 0x42, 0x8b, 0x01, 0x00, 0x00, + 0xc5, 0x24, 0x01, 0x00, 0xee, 0xe9, 0x05, 0x93, + 0x01, 0xeb, 0xef, 0xc4, 0xb3, 0xa9, 0xe9, 0x2f, + 0xc4, 0xde, 0xe8, 0xa6, 0xe9, 0x29, 0xdf, 0x5e, + 0x04, 0x00, 0xae, 0xe9, 0x09, 0x5e, 0x04, 0x00, + 0xc3, 0xd0, 0xf0, 0x0e, 0x29, 0xde, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xb3, 0xc4, 0x24, 0x02, 0x00, - 0xac, 0xe9, 0x08, 0xc6, 0xe2, 0xdd, 0xc6, 0x47, - 0xe3, 0x29, 0x93, 0x01, 0xeb, 0xc9, 0x29, 0x0c, - 0x43, 0x02, 0x01, 0xc4, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x00, 0x05, 0x00, 0xc2, 0x04, 0x51, - 0x01, 0xdc, 0xb2, 0x23, 0x01, 0x00, 0x0c, 0x43, - 0x02, 0x01, 0xc6, 0x04, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x00, 0x05, 0x00, 0xc2, 0x04, 0x51, 0x01, - 0xdc, 0xb4, 0x23, 0x01, 0x00, 0x0c, 0x43, 0x02, - 0x01, 0xc8, 0x04, 0x01, 0x02, 0x01, 0x04, 0x05, - 0x00, 0x65, 0x03, 0x96, 0x06, 0x00, 0x01, 0x00, - 0xe4, 0x05, 0x00, 0x00, 0x00, 0x98, 0x06, 0x00, - 0x01, 0x00, 0xee, 0x03, 0x27, 0x01, 0x96, 0x04, - 0x3b, 0x01, 0xec, 0x03, 0x26, 0x01, 0xf6, 0x03, - 0x2b, 0x01, 0xd8, 0x04, 0x5c, 0x01, 0xdc, 0xc8, - 0xd0, 0xb3, 0xa6, 0xe9, 0x15, 0x92, 0x00, 0xdd, - 0xde, 0x42, 0x87, 0x01, 0x00, 0x00, 0xc4, 0x24, - 0x01, 0x00, 0xee, 0xe9, 0x05, 0x92, 0x00, 0xeb, - 0xef, 0xc4, 0xb4, 0x9d, 0xc9, 0xdd, 0xde, 0x42, - 0x87, 0x01, 0x00, 0x00, 0xc5, 0x24, 0x01, 0x00, - 0xee, 0xe9, 0x05, 0x93, 0x01, 0xeb, 0xef, 0xc4, - 0xb3, 0xa9, 0xe9, 0x2f, 0xc4, 0xde, 0xe8, 0xa6, - 0xe9, 0x29, 0xdf, 0x5e, 0x04, 0x00, 0xae, 0xe9, - 0x09, 0x5e, 0x04, 0x00, 0xc3, 0xd0, 0xf0, 0x0e, - 0x29, 0xde, 0x42, 0x78, 0x01, 0x00, 0x00, 0xb3, - 0xc4, 0x24, 0x02, 0x00, 0xde, 0x42, 0x78, 0x01, - 0x00, 0x00, 0xc5, 0x24, 0x01, 0x00, 0x9d, 0xe2, - 0xc4, 0xe0, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xca, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x04, - 0x00, 0xc8, 0x04, 0x54, 0x01, 0xdc, 0xb4, 0xee, - 0x29, 0x0c, 0x43, 0x02, 0x01, 0xcc, 0x04, 0x00, - 0x00, 0x00, 0x03, 0x03, 0x00, 0x1f, 0x00, 0xec, - 0x03, 0x26, 0x01, 0xb4, 0x03, 0x00, 0x0c, 0xc8, - 0x04, 0x54, 0x01, 0xdc, 0xe8, 0xb3, 0xac, 0xe9, - 0x15, 0x65, 0x01, 0x00, 0x42, 0x76, 0x01, 0x00, - 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x24, 0x01, - 0x00, 0x0e, 0xbb, 0xfd, 0x28, 0xde, 0xb4, 0xee, - 0x0e, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xce, 0x04, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x04, 0x00, - 0xc8, 0x04, 0x54, 0x01, 0xdc, 0xb2, 0xee, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0xd0, 0x04, 0x00, 0x01, - 0x00, 0x06, 0x02, 0x00, 0x51, 0x01, 0x90, 0x06, - 0x00, 0x00, 0x00, 0xee, 0x03, 0x27, 0x01, 0xec, - 0x03, 0x26, 0x01, 0xdc, 0xc8, 0xdd, 0xe8, 0xb4, - 0xa8, 0xe9, 0x49, 0xc4, 0xb3, 0xa8, 0xe9, 0x44, - 0xc4, 0xdd, 0xe8, 0xac, 0xe9, 0x03, 0x92, 0x00, - 0xdd, 0x42, 0x78, 0x01, 0x00, 0x00, 0xb3, 0xc4, - 0xb4, 0x9e, 0x24, 0x02, 0x00, 0xdd, 0x42, 0x78, - 0x01, 0x00, 0x00, 0xc4, 0xc4, 0xb4, 0x9d, 0x24, - 0x02, 0x00, 0x9d, 0xdd, 0x42, 0x78, 0x01, 0x00, - 0x00, 0xc4, 0xb4, 0x9e, 0xc4, 0x24, 0x02, 0x00, - 0x9d, 0xdd, 0x42, 0x78, 0x01, 0x00, 0x00, 0xc4, - 0xb4, 0x9d, 0x24, 0x01, 0x00, 0x9d, 0xe1, 0xc4, - 0xb4, 0x9d, 0xe0, 0x29, 0x0c, 0x43, 0x02, 0x01, - 0xd2, 0x04, 0x00, 0x04, 0x00, 0x05, 0x04, 0x00, - 0x55, 0x04, 0x9a, 0x06, 0x00, 0x00, 0x00, 0x9c, - 0x06, 0x00, 0x01, 0x00, 0x9e, 0x06, 0x00, 0x02, - 0x00, 0xa0, 0x06, 0x00, 0x03, 0x00, 0xb4, 0x04, - 0x4a, 0x01, 0xee, 0x03, 0x27, 0x01, 0xb2, 0x04, - 0x49, 0x01, 0xec, 0x03, 0x26, 0x01, 0xdc, 0xdd, - 0xee, 0xc8, 0xde, 0xc4, 0xee, 0xc9, 0xde, 0xdd, - 0xee, 0xca, 0xdc, 0xc6, 0xee, 0xcb, 0xc3, 0xa6, - 0xe9, 0x41, 0xc5, 0xdd, 0xa7, 0xe9, 0x3c, 0xdd, - 0xc7, 0xa7, 0xe9, 0x37, 0xc7, 0xc6, 0xa6, 0xe9, - 0x32, 0xdf, 0x42, 0x78, 0x01, 0x00, 0x00, 0xb3, - 0xc4, 0x24, 0x02, 0x00, 0xdf, 0x42, 0x78, 0x01, - 0x00, 0x00, 0xc7, 0xc6, 0x24, 0x02, 0x00, 0x9d, - 0xdf, 0x42, 0x78, 0x01, 0x00, 0x00, 0xc5, 0xc7, - 0x24, 0x02, 0x00, 0x9d, 0xdf, 0x42, 0x78, 0x01, - 0x00, 0x00, 0xc3, 0x24, 0x02, 0x00, 0x9d, 0xe3, - 0xc6, 0xe1, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xd4, - 0x04, 0x00, 0x01, 0x00, 0x05, 0x03, 0x00, 0x30, - 0x01, 0x98, 0x06, 0x00, 0x00, 0x00, 0xb2, 0x04, - 0x49, 0x01, 0xee, 0x03, 0x27, 0x01, 0xec, 0x03, - 0x26, 0x01, 0xdc, 0xdd, 0xee, 0xc8, 0xde, 0x42, - 0x78, 0x01, 0x00, 0x00, 0xb3, 0xdd, 0x24, 0x02, - 0x00, 0xde, 0x42, 0x78, 0x01, 0x00, 0x00, 0xdd, - 0xc4, 0x24, 0x02, 0x00, 0x42, 0x91, 0x01, 0x00, - 0x00, 0x24, 0x00, 0x00, 0x9d, 0xde, 0x42, 0x78, - 0x01, 0x00, 0x00, 0xc4, 0x24, 0x01, 0x00, 0x9d, - 0xe2, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xd6, 0x04, - 0x00, 0x01, 0x00, 0x05, 0x03, 0x00, 0x30, 0x01, - 0x98, 0x06, 0x00, 0x00, 0x00, 0xb2, 0x04, 0x49, - 0x01, 0xee, 0x03, 0x27, 0x01, 0xec, 0x03, 0x26, - 0x01, 0xdc, 0xdd, 0xee, 0xc8, 0xde, 0x42, 0x78, - 0x01, 0x00, 0x00, 0xb3, 0xdd, 0x24, 0x02, 0x00, - 0xde, 0x42, 0x78, 0x01, 0x00, 0x00, 0xdd, 0xc4, - 0x24, 0x02, 0x00, 0x42, 0x92, 0x01, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x9d, 0xde, 0x42, 0x78, 0x01, - 0x00, 0x00, 0xc4, 0x24, 0x01, 0x00, 0x9d, 0xe2, - 0x29, 0x0c, 0x43, 0x02, 0x01, 0xd8, 0x04, 0x03, - 0x01, 0x03, 0x04, 0x06, 0x00, 0x5e, 0x04, 0xe4, - 0x05, 0x00, 0x01, 0x00, 0x98, 0x06, 0x00, 0x01, - 0x00, 0x96, 0x06, 0x00, 0x01, 0x00, 0xa6, 0x06, - 0x00, 0x00, 0x00, 0xec, 0x03, 0x26, 0x01, 0xf6, - 0x03, 0x2b, 0x01, 0xd8, 0x04, 0x5c, 0x01, 0xda, - 0x03, 0x1d, 0x01, 0xee, 0x03, 0x27, 0x01, 0xf4, - 0x03, 0x2a, 0x01, 0xdc, 0x42, 0x78, 0x01, 0x00, - 0x00, 0xd0, 0xd1, 0x24, 0x02, 0x00, 0xc8, 0xdd, - 0xde, 0xaf, 0xe9, 0x05, 0xc4, 0xe3, 0xeb, 0x10, - 0xd2, 0xb3, 0xa6, 0xe9, 0x07, 0xc4, 0xdf, 0x9d, - 0xe3, 0xeb, 0x05, 0xdf, 0xc4, 0x9d, 0xe3, 0xdc, - 0x42, 0x78, 0x01, 0x00, 0x00, 0xb3, 0xd0, 0x24, - 0x02, 0x00, 0xdc, 0x42, 0x78, 0x01, 0x00, 0x00, - 0xd1, 0x24, 0x01, 0x00, 0x9d, 0xe0, 0x5e, 0x04, - 0x00, 0xd1, 0xa8, 0xe9, 0x0d, 0x5e, 0x04, 0x00, - 0xd1, 0xd0, 0x9e, 0x9e, 0x5f, 0x04, 0x00, 0xeb, - 0x0c, 0x5e, 0x04, 0x00, 0xd0, 0xa8, 0xe9, 0x05, - 0xd0, 0x5f, 0x04, 0x00, 0xde, 0x5f, 0x05, 0x00, - 0x29, 0x0c, 0x43, 0x02, 0x01, 0xda, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x00, 0xd8, - 0x04, 0x5c, 0x01, 0xee, 0x03, 0x27, 0x01, 0xec, - 0x03, 0x26, 0x01, 0xdc, 0xdd, 0xde, 0xe8, 0xb4, - 0xf0, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xdc, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x06, 0x00, - 0xd8, 0x04, 0x5c, 0x01, 0xee, 0x03, 0x27, 0x01, - 0xdc, 0xb3, 0xdd, 0xb2, 0xf0, 0x29, 0x0c, 0x43, + 0xde, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xc5, 0x24, + 0x01, 0x00, 0x9d, 0xe2, 0xc4, 0xe0, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0xcc, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x01, 0x00, 0x04, 0x00, 0xca, 0x04, 0x55, + 0x01, 0xdc, 0xb4, 0xee, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0xce, 0x04, 0x00, 0x00, 0x00, 0x03, 0x03, + 0x00, 0x1f, 0x00, 0xee, 0x03, 0x27, 0x01, 0xb4, + 0x03, 0x00, 0x0c, 0xca, 0x04, 0x55, 0x01, 0xdc, + 0xe8, 0xb3, 0xac, 0xe9, 0x15, 0x65, 0x01, 0x00, + 0x42, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xbb, 0xfd, + 0x28, 0xde, 0xb4, 0xee, 0x0e, 0x29, 0x0c, 0x43, + 0x02, 0x01, 0xd0, 0x04, 0x00, 0x00, 0x00, 0x02, + 0x01, 0x00, 0x04, 0x00, 0xca, 0x04, 0x55, 0x01, + 0xdc, 0xb2, 0xee, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xd2, 0x04, 0x00, 0x01, 0x00, 0x06, 0x02, 0x00, + 0x51, 0x01, 0x98, 0x06, 0x00, 0x00, 0x00, 0xf0, + 0x03, 0x28, 0x01, 0xee, 0x03, 0x27, 0x01, 0xdc, + 0xc8, 0xdd, 0xe8, 0xb4, 0xa8, 0xe9, 0x49, 0xc4, + 0xb3, 0xa8, 0xe9, 0x44, 0xc4, 0xdd, 0xe8, 0xac, + 0xe9, 0x03, 0x92, 0x00, 0xdd, 0x42, 0x7c, 0x01, + 0x00, 0x00, 0xb3, 0xc4, 0xb4, 0x9e, 0x24, 0x02, + 0x00, 0xdd, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xc4, + 0xc4, 0xb4, 0x9d, 0x24, 0x02, 0x00, 0x9d, 0xdd, + 0x42, 0x7c, 0x01, 0x00, 0x00, 0xc4, 0xb4, 0x9e, + 0xc4, 0x24, 0x02, 0x00, 0x9d, 0xdd, 0x42, 0x7c, + 0x01, 0x00, 0x00, 0xc4, 0xb4, 0x9d, 0x24, 0x01, + 0x00, 0x9d, 0xe1, 0xc4, 0xb4, 0x9d, 0xe0, 0x29, + 0x0c, 0x43, 0x02, 0x01, 0xd4, 0x04, 0x00, 0x04, + 0x00, 0x05, 0x04, 0x00, 0x55, 0x04, 0xa2, 0x06, + 0x00, 0x00, 0x00, 0xa4, 0x06, 0x00, 0x01, 0x00, + 0xa6, 0x06, 0x00, 0x02, 0x00, 0xa8, 0x06, 0x00, + 0x03, 0x00, 0xb6, 0x04, 0x4b, 0x01, 0xf0, 0x03, + 0x28, 0x01, 0xb4, 0x04, 0x4a, 0x01, 0xee, 0x03, + 0x27, 0x01, 0xdc, 0xdd, 0xee, 0xc8, 0xde, 0xc4, + 0xee, 0xc9, 0xde, 0xdd, 0xee, 0xca, 0xdc, 0xc6, + 0xee, 0xcb, 0xc3, 0xa6, 0xe9, 0x41, 0xc5, 0xdd, + 0xa7, 0xe9, 0x3c, 0xdd, 0xc7, 0xa7, 0xe9, 0x37, + 0xc7, 0xc6, 0xa6, 0xe9, 0x32, 0xdf, 0x42, 0x7c, + 0x01, 0x00, 0x00, 0xb3, 0xc4, 0x24, 0x02, 0x00, + 0xdf, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xc7, 0xc6, + 0x24, 0x02, 0x00, 0x9d, 0xdf, 0x42, 0x7c, 0x01, + 0x00, 0x00, 0xc5, 0xc7, 0x24, 0x02, 0x00, 0x9d, + 0xdf, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xc3, 0x24, + 0x02, 0x00, 0x9d, 0xe3, 0xc6, 0xe1, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0xd6, 0x04, 0x00, 0x01, 0x00, + 0x05, 0x03, 0x00, 0x30, 0x01, 0xa0, 0x06, 0x00, + 0x00, 0x00, 0xb4, 0x04, 0x4a, 0x01, 0xf0, 0x03, + 0x28, 0x01, 0xee, 0x03, 0x27, 0x01, 0xdc, 0xdd, + 0xee, 0xc8, 0xde, 0x42, 0x7c, 0x01, 0x00, 0x00, + 0xb3, 0xdd, 0x24, 0x02, 0x00, 0xde, 0x42, 0x7c, + 0x01, 0x00, 0x00, 0xdd, 0xc4, 0x24, 0x02, 0x00, + 0x42, 0x95, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, + 0x9d, 0xde, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xc4, + 0x24, 0x01, 0x00, 0x9d, 0xe2, 0x29, 0x0c, 0x43, + 0x02, 0x01, 0xd8, 0x04, 0x00, 0x01, 0x00, 0x05, + 0x03, 0x00, 0x30, 0x01, 0xa0, 0x06, 0x00, 0x00, + 0x00, 0xb4, 0x04, 0x4a, 0x01, 0xf0, 0x03, 0x28, + 0x01, 0xee, 0x03, 0x27, 0x01, 0xdc, 0xdd, 0xee, + 0xc8, 0xde, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xb3, + 0xdd, 0x24, 0x02, 0x00, 0xde, 0x42, 0x7c, 0x01, + 0x00, 0x00, 0xdd, 0xc4, 0x24, 0x02, 0x00, 0x42, + 0x96, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x9d, + 0xde, 0x42, 0x7c, 0x01, 0x00, 0x00, 0xc4, 0x24, + 0x01, 0x00, 0x9d, 0xe2, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0xda, 0x04, 0x03, 0x01, 0x03, 0x04, 0x06, + 0x00, 0x5e, 0x04, 0xec, 0x05, 0x00, 0x01, 0x00, + 0xa0, 0x06, 0x00, 0x01, 0x00, 0x9e, 0x06, 0x00, + 0x01, 0x00, 0xae, 0x06, 0x00, 0x00, 0x00, 0xee, + 0x03, 0x27, 0x01, 0xf8, 0x03, 0x2c, 0x01, 0xda, + 0x04, 0x5d, 0x01, 0xda, 0x03, 0x1d, 0x01, 0xf0, + 0x03, 0x28, 0x01, 0xf6, 0x03, 0x2b, 0x01, 0xdc, + 0x42, 0x7c, 0x01, 0x00, 0x00, 0xd0, 0xd1, 0x24, + 0x02, 0x00, 0xc8, 0xdd, 0xde, 0xaf, 0xe9, 0x05, + 0xc4, 0xe3, 0xeb, 0x10, 0xd2, 0xb3, 0xa6, 0xe9, + 0x07, 0xc4, 0xdf, 0x9d, 0xe3, 0xeb, 0x05, 0xdf, + 0xc4, 0x9d, 0xe3, 0xdc, 0x42, 0x7c, 0x01, 0x00, + 0x00, 0xb3, 0xd0, 0x24, 0x02, 0x00, 0xdc, 0x42, + 0x7c, 0x01, 0x00, 0x00, 0xd1, 0x24, 0x01, 0x00, + 0x9d, 0xe0, 0x5e, 0x04, 0x00, 0xd1, 0xa8, 0xe9, + 0x0d, 0x5e, 0x04, 0x00, 0xd1, 0xd0, 0x9e, 0x9e, + 0x5f, 0x04, 0x00, 0xeb, 0x0c, 0x5e, 0x04, 0x00, + 0xd0, 0xa8, 0xe9, 0x05, 0xd0, 0x5f, 0x04, 0x00, + 0xde, 0x5f, 0x05, 0x00, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0xdc, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, + 0x00, 0x07, 0x00, 0xda, 0x04, 0x5d, 0x01, 0xf0, + 0x03, 0x28, 0x01, 0xee, 0x03, 0x27, 0x01, 0xdc, + 0xdd, 0xde, 0xe8, 0xb4, 0xf0, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xde, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x03, 0x00, 0x08, 0x00, 0xd8, 0x04, 0x5c, 0x01, - 0xee, 0x03, 0x27, 0x01, 0xb2, 0x04, 0x49, 0x01, - 0xdc, 0xdd, 0xde, 0xdd, 0xee, 0xb4, 0xf0, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0xe0, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x03, 0x00, 0x08, 0x00, 0xd8, 0x04, - 0x5c, 0x01, 0xb4, 0x04, 0x4a, 0x01, 0xee, 0x03, - 0x27, 0x01, 0xdc, 0xdd, 0xde, 0xee, 0xde, 0xb2, - 0xf0, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xe2, 0x04, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x04, 0x00, - 0xa2, 0x04, 0x41, 0x01, 0xda, 0x03, 0x1d, 0x01, - 0xdc, 0xdd, 0xee, 0x29, 0x0c, 0x43, 0x02, 0x01, - 0xe4, 0x04, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, - 0x32, 0x00, 0xf6, 0x03, 0x2b, 0x01, 0xe4, 0x04, - 0x62, 0x01, 0xb4, 0x03, 0x00, 0x0c, 0x90, 0x05, - 0x78, 0x01, 0xfa, 0x04, 0x6d, 0x01, 0xdc, 0xdd, - 0xae, 0xe9, 0x17, 0x65, 0x02, 0x00, 0x42, 0x76, - 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, - 0x24, 0x01, 0x00, 0x0e, 0xdf, 0xb3, 0xee, 0x0e, - 0x29, 0x65, 0x02, 0x00, 0x42, 0x76, 0x01, 0x00, - 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x24, 0x01, - 0x00, 0x0e, 0x5e, 0x04, 0x00, 0xed, 0x0e, 0x29, + 0x02, 0x00, 0x06, 0x00, 0xda, 0x04, 0x5d, 0x01, + 0xf0, 0x03, 0x28, 0x01, 0xdc, 0xb3, 0xdd, 0xb2, + 0xf0, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xe0, 0x04, + 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x08, 0x00, + 0xda, 0x04, 0x5d, 0x01, 0xf0, 0x03, 0x28, 0x01, + 0xb4, 0x04, 0x4a, 0x01, 0xdc, 0xdd, 0xde, 0xdd, + 0xee, 0xb4, 0xf0, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xe2, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, + 0x08, 0x00, 0xda, 0x04, 0x5d, 0x01, 0xb6, 0x04, + 0x4b, 0x01, 0xf0, 0x03, 0x28, 0x01, 0xdc, 0xdd, + 0xde, 0xee, 0xde, 0xb2, 0xf0, 0x29, 0x0c, 0x43, + 0x02, 0x01, 0xe4, 0x04, 0x00, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x04, 0x00, 0xa4, 0x04, 0x42, 0x01, + 0xda, 0x03, 0x1d, 0x01, 0xdc, 0xdd, 0xee, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xe6, 0x04, 0x00, 0x00, - 0x00, 0x01, 0x02, 0x00, 0x05, 0x00, 0xec, 0x03, - 0x26, 0x01, 0xee, 0x03, 0x27, 0x01, 0xbf, 0xe0, - 0xb3, 0xe1, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xe8, - 0x04, 0x02, 0x01, 0x02, 0x04, 0x01, 0x00, 0x1f, - 0x03, 0xaa, 0x06, 0x00, 0x01, 0x00, 0x98, 0x06, - 0x00, 0x01, 0x00, 0x90, 0x06, 0x00, 0x00, 0x00, - 0x92, 0x04, 0x39, 0x01, 0xd1, 0xc8, 0xc4, 0xb3, - 0xa8, 0xe9, 0x0e, 0xdc, 0xd0, 0xc4, 0xb4, 0x9e, - 0x47, 0xee, 0xe9, 0x05, 0x92, 0x00, 0xeb, 0xef, - 0xd0, 0x42, 0x96, 0x01, 0x00, 0x00, 0xc4, 0xd1, - 0x25, 0x02, 0x00, 0x0c, 0x43, 0x02, 0x01, 0xea, - 0x04, 0x02, 0x04, 0x02, 0x05, 0x07, 0x04, 0x9f, - 0x02, 0x06, 0xaa, 0x06, 0x00, 0x01, 0x00, 0x90, - 0x06, 0x00, 0x01, 0x00, 0xc2, 0x05, 0x00, 0x00, - 0x00, 0xae, 0x06, 0x00, 0x01, 0x00, 0xb0, 0x06, - 0x00, 0x02, 0x00, 0xb2, 0x06, 0x00, 0x03, 0x00, - 0xb8, 0x03, 0x00, 0x03, 0x94, 0x05, 0x7a, 0x01, - 0x92, 0x04, 0x39, 0x01, 0xe8, 0x04, 0x64, 0x01, - 0xbc, 0x03, 0x0e, 0x01, 0xea, 0x04, 0x65, 0x01, - 0xbc, 0x02, 0x08, 0x01, 0x07, 0x02, 0x20, 0x07, - 0x34, 0x00, 0x00, 0x01, 0x00, 0x12, 0x00, 0x00, - 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x05, 0x08, - 0xf5, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x01, 0x20, - 0x0d, 0x00, 0x0b, 0x07, 0x1a, 0x5e, 0x5b, 0x64, - 0x67, 0x69, 0x6d, 0x73, 0x75, 0x76, 0x79, 0x5d, - 0x2b, 0x24, 0x07, 0x96, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x43, 0x00, 0x00, 0x00, 0x09, 0x06, 0x00, + 0x00, 0x03, 0x05, 0x00, 0x32, 0x00, 0xf8, 0x03, + 0x2c, 0x01, 0xe6, 0x04, 0x63, 0x01, 0xb4, 0x03, + 0x00, 0x0c, 0x92, 0x05, 0x79, 0x01, 0xfc, 0x04, + 0x6e, 0x01, 0xdc, 0xdd, 0xae, 0xe9, 0x17, 0x65, + 0x02, 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, + 0xdf, 0xb3, 0xee, 0x0e, 0x29, 0x65, 0x02, 0x00, + 0x42, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0x5e, 0x04, + 0x00, 0xed, 0x0e, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xe8, 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, + 0x05, 0x00, 0xee, 0x03, 0x27, 0x01, 0xf0, 0x03, + 0x28, 0x01, 0xbf, 0xe0, 0xb3, 0xe1, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0xea, 0x04, 0x02, 0x01, 0x02, + 0x04, 0x01, 0x00, 0x1f, 0x03, 0xb2, 0x06, 0x00, + 0x01, 0x00, 0xa0, 0x06, 0x00, 0x01, 0x00, 0x98, + 0x06, 0x00, 0x00, 0x00, 0x94, 0x04, 0x3a, 0x01, + 0xd1, 0xc8, 0xc4, 0xb3, 0xa8, 0xe9, 0x0e, 0xdc, + 0xd0, 0xc4, 0xb4, 0x9e, 0x47, 0xee, 0xe9, 0x05, + 0x92, 0x00, 0xeb, 0xef, 0xd0, 0x42, 0x9a, 0x01, + 0x00, 0x00, 0xc4, 0xd1, 0x25, 0x02, 0x00, 0x0c, + 0x43, 0x02, 0x01, 0xec, 0x04, 0x02, 0x04, 0x02, + 0x05, 0x07, 0x04, 0x9f, 0x02, 0x06, 0xb2, 0x06, + 0x00, 0x01, 0x00, 0x98, 0x06, 0x00, 0x01, 0x00, + 0xca, 0x05, 0x00, 0x00, 0x00, 0xb6, 0x06, 0x00, + 0x01, 0x00, 0xb8, 0x06, 0x00, 0x02, 0x00, 0xba, + 0x06, 0x00, 0x03, 0x00, 0xb8, 0x03, 0x00, 0x03, + 0x96, 0x05, 0x7b, 0x01, 0x94, 0x04, 0x3a, 0x01, + 0xea, 0x04, 0x65, 0x01, 0xbc, 0x03, 0x0e, 0x01, + 0xec, 0x04, 0x66, 0x01, 0xbc, 0x02, 0x08, 0x01, + 0x07, 0x02, 0x20, 0x07, 0x34, 0x00, 0x00, 0x01, + 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x05, 0x08, 0xf5, 0xff, 0xff, 0xff, - 0x0c, 0x00, 0x06, 0x1d, 0x20, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, - 0x01, 0x00, 0x00, 0x00, 0x16, 0x07, 0x00, 0x64, - 0x00, 0x64, 0x00, 0x67, 0x00, 0x67, 0x00, 0x69, - 0x00, 0x69, 0x00, 0x6d, 0x00, 0x6d, 0x00, 0x73, - 0x00, 0x73, 0x00, 0x75, 0x00, 0x76, 0x00, 0x79, - 0x00, 0x79, 0x00, 0x0b, 0x07, 0x0d, 0x00, 0x0b, - 0xd1, 0xb3, 0xa7, 0xe9, 0x03, 0xdc, 0x28, 0xd0, - 0xd1, 0xb4, 0x9e, 0x47, 0xc8, 0xd1, 0xb4, 0xae, - 0xe9, 0x17, 0xc4, 0x04, 0x9a, 0x01, 0x00, 0x00, - 0xae, 0x11, 0xea, 0x09, 0x0e, 0xc4, 0x04, 0x9b, - 0x01, 0x00, 0x00, 0xae, 0xe9, 0x03, 0xdd, 0x28, - 0x04, 0x9c, 0x01, 0x00, 0x00, 0x42, 0x9d, 0x01, - 0x00, 0x00, 0xc4, 0x24, 0x01, 0x00, 0xb3, 0xa9, - 0xe9, 0x02, 0x29, 0xc4, 0x04, 0x9b, 0x01, 0x00, - 0x00, 0xae, 0x69, 0xda, 0x00, 0x00, 0x00, 0xd1, - 0x8e, 0xd5, 0xd0, 0xd1, 0xb4, 0x9e, 0x47, 0xcc, - 0x11, 0x04, 0x9e, 0x01, 0x00, 0x00, 0xae, 0xea, - 0x13, 0x11, 0x04, 0x9f, 0x01, 0x00, 0x00, 0xae, - 0xea, 0x0a, 0x11, 0x04, 0xa0, 0x01, 0x00, 0x00, - 0xae, 0xe9, 0x07, 0x04, 0x64, 0x01, 0x00, 0x00, - 0x28, 0x11, 0x04, 0xa1, 0x01, 0x00, 0x00, 0xae, - 0xe9, 0x05, 0x26, 0x00, 0x00, 0x28, 0x11, 0x04, - 0xa2, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x07, 0xbd, - 0x00, 0xbd, 0x01, 0x33, 0x28, 0xde, 0xc4, 0xee, - 0x69, 0x89, 0x00, 0x00, 0x00, 0xdf, 0xd0, 0xd1, - 0xef, 0xc9, 0xd1, 0xc5, 0xe8, 0x9e, 0xca, 0xc5, - 0x04, 0x03, 0x00, 0x00, 0x00, 0xae, 0x11, 0xea, - 0x09, 0x0e, 0xc5, 0x04, 0x02, 0x00, 0x00, 0x00, - 0xae, 0xe9, 0x03, 0x0a, 0x28, 0xc5, 0x04, 0x01, - 0x00, 0x00, 0x00, 0xae, 0xe9, 0x03, 0x07, 0x28, - 0xc5, 0x04, 0x08, 0x00, 0x00, 0x00, 0xae, 0xe9, - 0x03, 0xdc, 0x28, 0x5e, 0x04, 0x00, 0xc5, 0x8d, - 0xee, 0x96, 0xe9, 0x03, 0xb3, 0x28, 0x5e, 0x05, - 0x00, 0xd0, 0xc6, 0xef, 0xcf, 0xf2, 0x11, 0xea, - 0x04, 0x0e, 0xc7, 0xf1, 0xe9, 0x03, 0xc7, 0x28, - 0xc7, 0xc5, 0x47, 0xf3, 0xea, 0x05, 0xc7, 0xc5, - 0x47, 0x28, 0xc6, 0xb6, 0xa9, 0xe9, 0x24, 0xd0, - 0xc6, 0xb4, 0x9e, 0x47, 0x04, 0xa2, 0x01, 0x00, - 0x00, 0xae, 0xe9, 0x17, 0xc5, 0x42, 0xa3, 0x01, - 0x00, 0x00, 0xbd, 0x02, 0xbd, 0x03, 0x33, 0x24, - 0x01, 0x00, 0xe9, 0x07, 0x5e, 0x06, 0x00, 0x23, - 0x00, 0x00, 0x0e, 0x0b, 0x28, 0xdc, 0x28, 0x0c, - 0x43, 0x02, 0x01, 0xec, 0x04, 0x02, 0x0a, 0x02, - 0x04, 0x03, 0x01, 0xee, 0x01, 0x0c, 0xaa, 0x06, - 0x00, 0x01, 0x00, 0x90, 0x06, 0x00, 0x01, 0x00, - 0xa6, 0x06, 0x00, 0x00, 0x00, 0xb2, 0x06, 0x00, - 0x01, 0x00, 0xc8, 0x06, 0x00, 0x02, 0x00, 0xca, - 0x06, 0x00, 0x03, 0x00, 0xbc, 0x05, 0x00, 0x04, - 0x00, 0xe8, 0x05, 0x00, 0x05, 0x00, 0xcc, 0x06, - 0x00, 0x06, 0x00, 0xce, 0x06, 0x00, 0x07, 0x00, - 0xd0, 0x06, 0x00, 0x08, 0x00, 0xd2, 0x06, 0x08, - 0x00, 0x21, 0xe8, 0x04, 0x64, 0x01, 0xea, 0x04, - 0x65, 0x01, 0xa0, 0x02, 0x00, 0x01, 0x0c, 0x43, - 0x02, 0x01, 0xd2, 0x06, 0x02, 0x00, 0x02, 0x03, - 0x00, 0x00, 0x34, 0x02, 0xc8, 0x05, 0x00, 0x01, - 0x00, 0xdc, 0x05, 0x00, 0x01, 0x00, 0xd0, 0xb3, - 0x47, 0xd1, 0xb3, 0x47, 0xad, 0xe9, 0x1b, 0xd0, - 0xb3, 0x47, 0x04, 0x66, 0x01, 0x00, 0x00, 0xac, - 0xe9, 0x03, 0xb4, 0x28, 0xd1, 0xb3, 0x47, 0x04, - 0x66, 0x01, 0x00, 0x00, 0xac, 0xe9, 0x03, 0xb2, - 0x28, 0xd0, 0xd1, 0xa6, 0xe9, 0x03, 0xb2, 0x28, - 0xd0, 0xd1, 0xa8, 0xe9, 0x04, 0xb4, 0x8d, 0x28, - 0xb3, 0x28, 0xdc, 0xd0, 0xd1, 0xef, 0xc8, 0xdd, - 0xd0, 0xd1, 0xc4, 0xe8, 0x9e, 0xef, 0xca, 0x26, - 0x00, 0x00, 0xcb, 0xb3, 0xc1, 0x04, 0xc6, 0xc9, - 0xc0, 0x04, 0xbb, 0x0a, 0xa6, 0xe9, 0x67, 0xc5, - 0xf2, 0xea, 0x63, 0xc5, 0x06, 0xaf, 0xe9, 0x5e, - 0xde, 0x42, 0xaa, 0x01, 0x00, 0x00, 0xc5, 0x24, - 0x01, 0x00, 0xc1, 0x07, 0xb3, 0xc1, 0x05, 0xc0, - 0x05, 0xc0, 0x07, 0xe8, 0xa6, 0xe9, 0x38, 0xc0, - 0x07, 0xc0, 0x05, 0x47, 0xc2, 0x08, 0x97, 0x04, - 0x47, 0x00, 0x00, 0x00, 0xac, 0xe9, 0x24, 0xbf, - 0xc0, 0x08, 0x8d, 0x9d, 0xc0, 0x08, 0xad, 0xe9, - 0x1a, 0xc0, 0x08, 0x42, 0xab, 0x01, 0x00, 0x00, - 0xc4, 0x24, 0x01, 0x00, 0xe9, 0x0d, 0xc7, 0x42, - 0x8a, 0x01, 0x00, 0x00, 0xc0, 0x08, 0x24, 0x01, - 0x00, 0x0e, 0x93, 0x05, 0xeb, 0xc2, 0xde, 0x42, - 0x5e, 0x00, 0x00, 0x00, 0xc5, 0x24, 0x01, 0x00, - 0xc9, 0x93, 0x04, 0xeb, 0x94, 0xc7, 0xe8, 0xb4, - 0xa8, 0xe9, 0x51, 0xbe, 0x00, 0xc1, 0x09, 0xbe, - 0x00, 0x0e, 0xc7, 0x42, 0xac, 0x01, 0x00, 0x00, - 0x62, 0x09, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xb4, - 0xc2, 0x05, 0xc1, 0x04, 0xc0, 0x04, 0xc7, 0xe8, - 0xa6, 0xe9, 0x29, 0xc7, 0xc0, 0x04, 0x47, 0xc7, - 0xc0, 0x04, 0xb4, 0x9e, 0x47, 0xad, 0xe9, 0x18, - 0xc7, 0xc0, 0x05, 0x91, 0xc1, 0x05, 0x1b, 0x11, - 0xb0, 0xea, 0x04, 0x1b, 0x71, 0x1b, 0x1b, 0xc7, - 0xc0, 0x04, 0x47, 0x1b, 0x71, 0x1b, 0x49, 0x93, - 0x04, 0xeb, 0xd2, 0xc7, 0xc0, 0x05, 0x43, 0x30, - 0x00, 0x00, 0x00, 0x0b, 0xc7, 0x4c, 0x55, 0x01, - 0x00, 0x00, 0xc4, 0xe8, 0x4c, 0x88, 0x01, 0x00, - 0x00, 0xc6, 0x4c, 0xad, 0x01, 0x00, 0x00, 0x28, - 0x0c, 0x43, 0x02, 0x01, 0xee, 0x04, 0x00, 0x0d, - 0x00, 0x07, 0x0a, 0x00, 0x8f, 0x03, 0x0d, 0xaa, - 0x05, 0x00, 0x00, 0x00, 0xdc, 0x06, 0x00, 0x01, - 0x00, 0xa6, 0x06, 0x00, 0x02, 0x00, 0xbc, 0x05, - 0x00, 0x03, 0x00, 0xe8, 0x05, 0x00, 0x04, 0x00, - 0xd2, 0x05, 0x00, 0x05, 0x00, 0xde, 0x06, 0x00, - 0x06, 0x00, 0xe0, 0x06, 0x00, 0x07, 0x00, 0xe2, - 0x06, 0x00, 0x08, 0x00, 0xe4, 0x06, 0x00, 0x09, - 0x00, 0xe6, 0x06, 0x00, 0x0a, 0x00, 0xe8, 0x06, - 0x00, 0x0b, 0x00, 0xea, 0x06, 0x00, 0x0c, 0x00, - 0xec, 0x04, 0x66, 0x01, 0xec, 0x03, 0x26, 0x01, - 0xee, 0x03, 0x27, 0x01, 0xa2, 0x04, 0x41, 0x01, - 0xf6, 0x03, 0x2b, 0x01, 0xee, 0x04, 0x67, 0x01, - 0xb0, 0x02, 0x0b, 0x01, 0x82, 0x04, 0x31, 0x01, - 0xb4, 0x03, 0x00, 0x0c, 0xfa, 0x04, 0x6d, 0x01, - 0xdc, 0xdd, 0xde, 0xef, 0xcd, 0x41, 0x55, 0x01, - 0x00, 0x00, 0xcc, 0xe8, 0xb3, 0xae, 0xe9, 0x02, - 0x29, 0xc4, 0xb3, 0x47, 0xce, 0xe8, 0xc1, 0x05, - 0xb4, 0xcb, 0xc7, 0xc4, 0xe8, 0xa6, 0xe9, 0x2a, - 0xc4, 0xc7, 0x47, 0xc1, 0x06, 0xb3, 0xc1, 0x04, - 0xc0, 0x04, 0xc0, 0x05, 0xa6, 0xe9, 0x17, 0xc0, - 0x06, 0xc0, 0x04, 0x47, 0xc6, 0xc0, 0x04, 0x47, - 0xaf, 0xe9, 0x07, 0xc0, 0x04, 0xc1, 0x05, 0xeb, - 0x05, 0x93, 0x04, 0xeb, 0xe4, 0x93, 0x03, 0xeb, - 0xd2, 0xc5, 0x41, 0x88, 0x01, 0x00, 0x00, 0xcb, - 0xc7, 0xc0, 0x05, 0xa6, 0xe9, 0x0b, 0xdf, 0xc6, - 0xc7, 0x47, 0xee, 0x0e, 0x93, 0x03, 0xeb, 0xf1, - 0x5e, 0x04, 0x00, 0x5e, 0x05, 0x00, 0xae, 0xe9, - 0x42, 0xc4, 0xe8, 0xb4, 0xac, 0xe9, 0x3c, 0xc5, - 0x41, 0xad, 0x01, 0x00, 0x00, 0xc4, 0xb3, 0x47, - 0x47, 0xc2, 0x0c, 0xf4, 0xe9, 0x1a, 0xdf, 0x04, - 0xb6, 0x01, 0x00, 0x00, 0xee, 0x0e, 0xc0, 0x0c, - 0xe8, 0xb3, 0xac, 0xe9, 0x1e, 0xdf, 0x04, 0xb7, - 0x01, 0x00, 0x00, 0xee, 0x0e, 0xeb, 0x14, 0xc0, - 0x0c, 0x97, 0x04, 0x48, 0x00, 0x00, 0x00, 0xac, - 0xe9, 0x09, 0xdf, 0x04, 0x9b, 0x01, 0x00, 0x00, - 0xee, 0x0e, 0x5e, 0x04, 0x00, 0x5e, 0x05, 0x00, - 0xae, 0x69, 0xdc, 0x00, 0x00, 0x00, 0xc4, 0xe8, - 0xb5, 0xa9, 0x69, 0xd3, 0x00, 0x00, 0x00, 0xb3, - 0xc1, 0x07, 0xb3, 0xcb, 0xc7, 0xc4, 0xe8, 0xa6, - 0xe9, 0x18, 0x5e, 0x06, 0x00, 0x42, 0xb8, 0x01, - 0x00, 0x00, 0xc0, 0x07, 0xc4, 0xc7, 0x47, 0xe8, - 0x24, 0x02, 0x00, 0xc1, 0x07, 0x93, 0x03, 0xeb, - 0xe4, 0xb5, 0x94, 0x07, 0x5e, 0x06, 0x00, 0x42, - 0xb8, 0x01, 0x00, 0x00, 0xb4, 0x5e, 0x06, 0x00, - 0x42, 0xb9, 0x01, 0x00, 0x00, 0x5e, 0x07, 0x00, - 0xb4, 0x9d, 0xc0, 0x07, 0x9b, 0x24, 0x01, 0x00, - 0x24, 0x02, 0x00, 0xc1, 0x09, 0x5e, 0x06, 0x00, - 0x42, 0xba, 0x01, 0x00, 0x00, 0xc4, 0xe8, 0xc0, - 0x09, 0x9b, 0x24, 0x01, 0x00, 0xc1, 0x0b, 0x65, - 0x08, 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, 0x04, - 0x7d, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, - 0xb3, 0xc1, 0x0a, 0xc0, 0x0a, 0xc0, 0x0b, 0xa6, - 0xe9, 0x58, 0xb3, 0xc1, 0x08, 0xc0, 0x08, 0xc0, - 0x09, 0xa6, 0xe9, 0x39, 0xc0, 0x08, 0xc0, 0x0b, - 0x9a, 0xc0, 0x0a, 0x9d, 0xcf, 0xc4, 0xe8, 0xa9, - 0xea, 0x2b, 0xc4, 0xc7, 0x47, 0xca, 0xc0, 0x08, - 0xc0, 0x09, 0xb4, 0x9e, 0xad, 0xe9, 0x0d, 0xc6, - 0x42, 0xbb, 0x01, 0x00, 0x00, 0xc0, 0x07, 0x24, - 0x01, 0x00, 0xca, 0x65, 0x08, 0x00, 0x42, 0x76, - 0x01, 0x00, 0x00, 0xc6, 0x24, 0x01, 0x00, 0x0e, - 0x93, 0x08, 0xeb, 0xc2, 0x65, 0x08, 0x00, 0x42, - 0x76, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, - 0x00, 0x24, 0x01, 0x00, 0x0e, 0x93, 0x0a, 0xeb, - 0xa3, 0x5e, 0x09, 0x00, 0xed, 0x0e, 0x29, 0x0c, - 0x43, 0x02, 0x01, 0xf2, 0x04, 0x02, 0x01, 0x02, - 0x02, 0x00, 0x00, 0x10, 0x03, 0xd0, 0x05, 0x00, - 0x01, 0x00, 0xf8, 0x06, 0x00, 0x01, 0x00, 0xdc, - 0x06, 0x00, 0x00, 0x00, 0xbf, 0xc8, 0xd1, 0x90, - 0xd5, 0xb3, 0xa8, 0xe9, 0x06, 0xd0, 0x94, 0x00, - 0xeb, 0xf5, 0xc4, 0x28, 0x0c, 0x43, 0x02, 0x01, - 0xfa, 0x04, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, - 0x1e, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xde, 0x03, - 0x1f, 0x01, 0x84, 0x04, 0x32, 0x01, 0x94, 0x04, - 0x3a, 0x01, 0x82, 0x04, 0x31, 0x01, 0xf0, 0x03, - 0x28, 0x01, 0xf2, 0x03, 0x29, 0x01, 0x65, 0x00, - 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, 0xdd, 0x24, - 0x01, 0x00, 0x0e, 0xdf, 0xdd, 0xee, 0x5e, 0x04, - 0x00, 0x9c, 0xe2, 0xbf, 0x5f, 0x05, 0x00, 0xb3, - 0x5f, 0x06, 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, - 0xfc, 0x04, 0x02, 0x01, 0x02, 0x06, 0x12, 0x01, - 0xb0, 0x01, 0x03, 0xfa, 0x06, 0x00, 0x01, 0x00, - 0xfc, 0x06, 0x00, 0x01, 0x00, 0xde, 0x06, 0x00, - 0x00, 0x00, 0xec, 0x03, 0x26, 0x01, 0xee, 0x03, - 0x27, 0x01, 0xd8, 0x03, 0x1c, 0x01, 0xd6, 0x03, - 0x1b, 0x01, 0xf8, 0x04, 0x6c, 0x01, 0xde, 0x03, - 0x1f, 0x01, 0xdc, 0x03, 0x1e, 0x01, 0xe8, 0x03, - 0x24, 0x01, 0xf2, 0x04, 0x69, 0x01, 0xe0, 0x03, - 0x20, 0x01, 0xe4, 0x03, 0x22, 0x01, 0xca, 0x03, - 0x15, 0x01, 0xb0, 0x02, 0x0b, 0x01, 0xe6, 0x03, - 0x23, 0x01, 0xe2, 0x03, 0x21, 0x01, 0xfa, 0x04, - 0x6d, 0x01, 0xa0, 0x04, 0x40, 0x01, 0xf6, 0x04, - 0x6b, 0x01, 0x07, 0x02, 0x30, 0xd0, 0x11, 0xea, - 0x03, 0x0e, 0xbf, 0xe4, 0xe8, 0xe1, 0xdf, 0xe8, - 0xe2, 0xd1, 0x5f, 0x04, 0x00, 0x5e, 0x06, 0x00, - 0x5f, 0x05, 0x00, 0x5e, 0x07, 0x00, 0xe9, 0x22, - 0x5e, 0x05, 0x00, 0x5e, 0x08, 0x00, 0x04, 0xbf, - 0x01, 0x00, 0x00, 0x5e, 0x09, 0x00, 0x5e, 0x05, - 0x00, 0xe8, 0x9e, 0xef, 0x9d, 0x60, 0x05, 0x00, - 0x5e, 0x0a, 0x00, 0x9d, 0x5f, 0x05, 0x00, 0xeb, - 0x66, 0x5e, 0x0b, 0x00, 0xe9, 0x50, 0x5e, 0x0c, - 0x00, 0x42, 0xc0, 0x01, 0x00, 0x00, 0x5e, 0x0d, - 0x00, 0x24, 0x01, 0x00, 0x04, 0xbf, 0x01, 0x00, - 0x00, 0x9d, 0xc8, 0xb3, 0x5f, 0x0d, 0x00, 0x5e, - 0x08, 0x00, 0xbd, 0x00, 0xb8, 0xc4, 0xe8, 0x9e, - 0xef, 0xc4, 0x9d, 0xc8, 0x5e, 0x05, 0x00, 0xc4, - 0x42, 0x78, 0x01, 0x00, 0x00, 0xb3, 0xc4, 0xe8, - 0xb7, 0x9e, 0x24, 0x02, 0x00, 0x04, 0x9b, 0x01, - 0x00, 0x00, 0x9d, 0xc4, 0x42, 0x78, 0x01, 0x00, - 0x00, 0xc4, 0xe8, 0xb7, 0x9e, 0x24, 0x01, 0x00, - 0x9d, 0x9d, 0x5f, 0x05, 0x00, 0x5e, 0x05, 0x00, - 0xe8, 0x5f, 0x09, 0x00, 0x5e, 0x05, 0x00, 0x5e, - 0x0e, 0x00, 0x9d, 0x5f, 0x05, 0x00, 0x5e, 0x0f, - 0x00, 0xed, 0x0e, 0x5e, 0x10, 0x00, 0xed, 0x0e, - 0xb3, 0x5f, 0x11, 0x00, 0x29, 0x0c, 0x43, 0x02, - 0x01, 0xfe, 0x04, 0x01, 0x01, 0x01, 0x03, 0x04, - 0x02, 0x8c, 0x01, 0x02, 0x82, 0x07, 0x00, 0x01, - 0x00, 0xc2, 0x05, 0x00, 0x00, 0x00, 0xa8, 0x02, - 0x01, 0x01, 0xf6, 0x04, 0x6b, 0x01, 0xf4, 0x04, - 0x6a, 0x01, 0x80, 0x05, 0x70, 0x01, 0x07, 0x02, - 0x30, 0x07, 0x02, 0x39, 0xdc, 0x42, 0xc2, 0x01, - 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xc8, 0xdd, - 0x11, 0xb3, 0xae, 0xe9, 0x16, 0xc4, 0x04, 0xc3, - 0x01, 0x00, 0x00, 0xac, 0xe9, 0x07, 0xc4, 0xe2, - 0xb4, 0xe1, 0xeb, 0x6c, 0xdf, 0xc4, 0xee, 0x0e, - 0xeb, 0x66, 0x11, 0xb4, 0xae, 0xe9, 0x27, 0xde, - 0xc4, 0x9d, 0xe2, 0xc4, 0x04, 0xc4, 0x01, 0x00, - 0x00, 0xac, 0xe9, 0x05, 0xb5, 0xe1, 0xeb, 0x50, - 0xc4, 0x04, 0xc5, 0x01, 0x00, 0x00, 0xac, 0xe9, - 0x05, 0xb6, 0xe1, 0xeb, 0x43, 0xdf, 0xde, 0xee, - 0x0e, 0xb3, 0xe1, 0xeb, 0x3b, 0x11, 0xb5, 0xae, - 0xe9, 0x27, 0xde, 0xc4, 0x9d, 0xe2, 0xc4, 0x04, - 0xc6, 0x01, 0x00, 0x00, 0xac, 0x11, 0xea, 0x0e, - 0x0e, 0xc4, 0xbd, 0x00, 0xa9, 0x11, 0xe9, 0x06, - 0x0e, 0xc4, 0xbd, 0x01, 0xa7, 0x96, 0xe9, 0x18, - 0xdf, 0xde, 0xee, 0x0e, 0xb3, 0xe1, 0xeb, 0x10, - 0x11, 0xb6, 0xae, 0xe9, 0x0b, 0xde, 0xc4, 0x9d, - 0xe2, 0xdf, 0xde, 0xee, 0x0e, 0xb3, 0xe1, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0x80, 0x05, 0x01, 0x01, - 0x01, 0x05, 0x0e, 0x00, 0xb6, 0x01, 0x02, 0x8e, - 0x07, 0x00, 0x01, 0x00, 0x90, 0x07, 0x00, 0x00, - 0x00, 0xf8, 0x03, 0x2c, 0x01, 0x94, 0x04, 0x3a, - 0x01, 0xa2, 0x04, 0x41, 0x01, 0xf0, 0x04, 0x68, - 0x01, 0xf4, 0x03, 0x2a, 0x01, 0xf8, 0x04, 0x6c, - 0x01, 0xec, 0x03, 0x26, 0x01, 0xb6, 0x03, 0x01, - 0x0c, 0xfe, 0x03, 0x2f, 0x01, 0xa4, 0x05, 0x82, - 0x01, 0x01, 0xf6, 0x03, 0x2b, 0x01, 0xa8, 0x04, - 0x44, 0x01, 0xee, 0x03, 0x27, 0x01, 0xa0, 0x04, - 0x40, 0x01, 0xdc, 0xe9, 0x11, 0xdd, 0xd0, 0xee, - 0xb4, 0xae, 0xe9, 0x05, 0xde, 0xd0, 0xee, 0x0e, - 0x09, 0xe0, 0xec, 0x80, 0x00, 0xdf, 0xd0, 0x47, - 0xcc, 0xe9, 0x5a, 0xc4, 0x5f, 0x04, 0x00, 0xc4, - 0xd0, 0xee, 0x11, 0xb2, 0xae, 0xe9, 0x09, 0x5e, - 0x05, 0x00, 0x5e, 0x06, 0x00, 0xee, 0x29, 0x11, - 0xbb, 0xfe, 0xae, 0xe9, 0x07, 0x5e, 0x05, 0x00, - 0x07, 0xee, 0x29, 0x11, 0xbb, 0xfd, 0xae, 0xe9, - 0x2b, 0x65, 0x07, 0x00, 0x42, 0x5a, 0x01, 0x00, - 0x00, 0x65, 0x07, 0x00, 0x41, 0x5b, 0x01, 0x00, - 0x00, 0x07, 0x24, 0x02, 0x00, 0x0e, 0x65, 0x07, - 0x00, 0x42, 0x5c, 0x01, 0x00, 0x00, 0x5e, 0x08, - 0x00, 0x07, 0x24, 0x02, 0x00, 0x0e, 0x5e, 0x09, - 0x00, 0xed, 0x29, 0x0e, 0x5e, 0x04, 0x00, 0x5f, - 0x0a, 0x00, 0xeb, 0x20, 0xdd, 0xd0, 0xee, 0xb4, - 0xae, 0xe9, 0x14, 0xd0, 0x04, 0xbf, 0x01, 0x00, - 0x00, 0xa9, 0xe9, 0x0b, 0xde, 0xd0, 0xee, 0x0e, - 0xde, 0x5f, 0x0a, 0x00, 0xeb, 0x06, 0x5e, 0x0b, - 0x00, 0xed, 0x0e, 0x5e, 0x0c, 0x00, 0xb3, 0xa6, - 0xe9, 0x04, 0xb3, 0xeb, 0x14, 0x5e, 0x0c, 0x00, - 0x5e, 0x06, 0x00, 0xe8, 0xa8, 0xe9, 0x07, 0x5e, - 0x06, 0x00, 0xe8, 0xeb, 0x04, 0x5e, 0x0c, 0x00, - 0x5f, 0x0c, 0x00, 0x5e, 0x0d, 0x00, 0xed, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0x82, 0x05, 0x02, 0x01, - 0x02, 0x05, 0x02, 0x01, 0x70, 0x03, 0xc8, 0x05, - 0x00, 0x01, 0x00, 0x92, 0x07, 0x00, 0x01, 0x00, - 0xa6, 0x06, 0x00, 0x00, 0x00, 0xba, 0x03, 0x0d, - 0x01, 0xb0, 0x02, 0x0b, 0x01, 0x07, 0x02, 0x30, - 0xdc, 0xd0, 0xee, 0x96, 0xe9, 0x0a, 0xd0, 0x42, - 0x36, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0xd0, - 0xb3, 0xac, 0xe9, 0x15, 0xb4, 0xd0, 0x9b, 0xb3, - 0xa6, 0xe9, 0x09, 0x04, 0xca, 0x01, 0x00, 0x00, - 0xc8, 0xeb, 0x4c, 0xbd, 0x00, 0xc8, 0xeb, 0x47, - 0xd1, 0xbb, 0x10, 0xac, 0xe9, 0x37, 0xd0, 0xdd, - 0x42, 0xb9, 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, - 0x00, 0xae, 0xe9, 0x29, 0xd0, 0xb3, 0xa6, 0xe9, - 0x0c, 0xd0, 0x8c, 0xd4, 0x04, 0xcb, 0x01, 0x00, - 0x00, 0xc8, 0xeb, 0x03, 0xbf, 0xc8, 0xc4, 0x04, - 0xcc, 0x01, 0x00, 0x00, 0xd0, 0x42, 0x36, 0x00, - 0x00, 0x00, 0xbb, 0x10, 0x24, 0x01, 0x00, 0x9d, - 0x9d, 0xc8, 0xeb, 0x0b, 0xd0, 0x42, 0x36, 0x00, - 0x00, 0x00, 0x24, 0x00, 0x00, 0xc8, 0xc4, 0x28, - 0x0c, 0x43, 0x02, 0x01, 0x84, 0x05, 0x02, 0x01, - 0x02, 0x05, 0x00, 0x00, 0x40, 0x03, 0xc8, 0x05, - 0x00, 0x01, 0x00, 0x92, 0x07, 0x00, 0x01, 0x00, - 0xa6, 0x06, 0x00, 0x00, 0x00, 0xd1, 0xbb, 0x10, - 0xac, 0xe9, 0x29, 0xd0, 0xb3, 0xa6, 0xe9, 0x0c, - 0xd0, 0x8c, 0xd4, 0x04, 0xcb, 0x01, 0x00, 0x00, - 0xc8, 0xeb, 0x03, 0xbf, 0xc8, 0xc4, 0x04, 0xcc, - 0x01, 0x00, 0x00, 0xd0, 0x42, 0x36, 0x00, 0x00, - 0x00, 0xbb, 0x10, 0x24, 0x01, 0x00, 0x9d, 0x9d, - 0xc8, 0xeb, 0x0b, 0xd0, 0x42, 0x36, 0x00, 0x00, - 0x00, 0x24, 0x00, 0x00, 0xc8, 0xc4, 0x04, 0x79, - 0x01, 0x00, 0x00, 0x9d, 0x28, 0x0c, 0x43, 0x02, - 0x01, 0x00, 0x04, 0x18, 0x04, 0x06, 0x12, 0x0e, - 0xea, 0x01, 0x1c, 0x9a, 0x07, 0x00, 0x01, 0x00, - 0xce, 0x03, 0x00, 0x01, 0x40, 0x9c, 0x07, 0x00, - 0x01, 0x40, 0x9e, 0x07, 0x00, 0x01, 0x40, 0xa0, - 0x07, 0x00, 0x00, 0x00, 0x82, 0x01, 0x00, 0x01, - 0x00, 0xa2, 0x07, 0x00, 0x02, 0x40, 0xa4, 0x07, - 0x00, 0x03, 0x40, 0xa6, 0x07, 0x00, 0x04, 0x40, - 0xa8, 0x07, 0x00, 0x05, 0x40, 0xaa, 0x07, 0x00, - 0x06, 0x40, 0x68, 0x00, 0x07, 0x40, 0xac, 0x07, - 0x00, 0x08, 0x40, 0xae, 0x07, 0x00, 0x09, 0x40, - 0xb0, 0x07, 0x00, 0x0a, 0x40, 0xb2, 0x07, 0x00, - 0x0b, 0x40, 0xb4, 0x07, 0x00, 0x0c, 0x40, 0xb6, - 0x07, 0x00, 0x0d, 0x40, 0xb8, 0x07, 0x00, 0x0e, - 0x40, 0xba, 0x07, 0x00, 0x0f, 0x40, 0xbc, 0x07, - 0x00, 0x10, 0x40, 0xbe, 0x07, 0x00, 0x11, 0x40, - 0xc0, 0x07, 0x00, 0x12, 0x40, 0xc2, 0x07, 0x00, - 0x13, 0x40, 0xc4, 0x07, 0x00, 0x14, 0x40, 0xc6, - 0x07, 0x00, 0x15, 0x40, 0xc8, 0x07, 0x00, 0x16, - 0x40, 0xca, 0x07, 0x00, 0x17, 0x40, 0xbe, 0x03, - 0x0f, 0x01, 0xb2, 0x02, 0x0c, 0x01, 0xa0, 0x02, - 0x00, 0x01, 0x82, 0x05, 0x71, 0x01, 0xd2, 0x03, - 0x19, 0x01, 0x84, 0x05, 0x72, 0x01, 0xa8, 0x02, - 0x01, 0x01, 0xb4, 0x02, 0x07, 0x01, 0xbc, 0x02, - 0x08, 0x01, 0xaa, 0x02, 0x03, 0x01, 0xa6, 0x02, - 0x02, 0x01, 0xda, 0x02, 0x04, 0x01, 0xa2, 0x02, - 0x06, 0x01, 0xc6, 0x02, 0x05, 0x01, 0xc2, 0x03, - 0x11, 0x01, 0xc6, 0x03, 0x13, 0x01, 0xb0, 0x02, - 0x0b, 0x01, 0x82, 0x04, 0x31, 0x01, 0x0c, 0x43, - 0x02, 0x01, 0x82, 0x01, 0x02, 0x00, 0x02, 0x01, - 0x01, 0x00, 0x0e, 0x02, 0xcc, 0x07, 0x00, 0x01, - 0x00, 0xce, 0x07, 0x00, 0x01, 0x00, 0xbe, 0x03, - 0x00, 0x00, 0xd0, 0xf3, 0xe9, 0x03, 0xd1, 0x28, - 0xd0, 0xf2, 0xe9, 0x03, 0xdc, 0x28, 0xd0, 0x28, - 0x0c, 0x43, 0x02, 0x01, 0xb2, 0x07, 0x01, 0x00, - 0x01, 0x04, 0x01, 0x00, 0x54, 0x01, 0xa6, 0x06, - 0x00, 0x01, 0x00, 0xb2, 0x02, 0x01, 0x00, 0xd0, - 0x42, 0xe8, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, - 0x00, 0x00, 0x24, 0x01, 0x00, 0xe9, 0x0b, 0xdc, - 0x42, 0xe9, 0x01, 0x00, 0x00, 0xd0, 0x25, 0x01, - 0x00, 0xdc, 0x42, 0xe9, 0x01, 0x00, 0x00, 0xd0, - 0x24, 0x01, 0x00, 0x42, 0x96, 0x01, 0x00, 0x00, - 0xb4, 0xb2, 0x24, 0x02, 0x00, 0x42, 0xea, 0x01, - 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, - 0x9f, 0x01, 0x00, 0x00, 0x24, 0x02, 0x00, 0xd4, - 0x04, 0x9e, 0x01, 0x00, 0x00, 0x42, 0x5b, 0x00, - 0x00, 0x00, 0xd0, 0x04, 0x9e, 0x01, 0x00, 0x00, - 0x25, 0x02, 0x00, 0x0c, 0x43, 0x02, 0x01, 0xb4, - 0x07, 0x01, 0x00, 0x01, 0x04, 0x01, 0x00, 0x0d, - 0x01, 0xa6, 0x06, 0x00, 0x01, 0x00, 0xac, 0x07, - 0x08, 0x01, 0xdc, 0x42, 0x8a, 0x01, 0x00, 0x00, - 0xbf, 0xd0, 0x9d, 0x24, 0x01, 0x00, 0x29, 0x0c, - 0x43, 0x02, 0x01, 0xb6, 0x07, 0x01, 0x00, 0x01, - 0x04, 0x01, 0x00, 0x0c, 0x01, 0xa6, 0x06, 0x00, - 0x01, 0x00, 0xac, 0x07, 0x08, 0x01, 0xdc, 0xdc, - 0xe8, 0xb4, 0x9e, 0x72, 0x13, 0x47, 0xd0, 0x9d, - 0x49, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xb8, 0x07, - 0x01, 0x00, 0x01, 0x04, 0x01, 0x00, 0x1f, 0x01, - 0xd8, 0x07, 0x00, 0x01, 0x00, 0xa0, 0x02, 0x02, - 0x00, 0xdc, 0x41, 0x3a, 0x00, 0x00, 0x00, 0x41, - 0x36, 0x00, 0x00, 0x00, 0x42, 0xed, 0x01, 0x00, - 0x00, 0xd0, 0x24, 0x01, 0x00, 0x42, 0x96, 0x01, - 0x00, 0x00, 0xbb, 0x08, 0xb2, 0x25, 0x02, 0x00, - 0x0c, 0x43, 0x02, 0x01, 0xba, 0x07, 0x02, 0x13, - 0x02, 0x09, 0x1a, 0x02, 0xed, 0x0b, 0x15, 0xc8, - 0x05, 0x00, 0x01, 0x00, 0xea, 0x03, 0x00, 0x01, - 0x00, 0xf2, 0x05, 0x00, 0x00, 0x00, 0xdc, 0x07, - 0x00, 0x01, 0x00, 0xbc, 0x05, 0x00, 0x02, 0x00, - 0xde, 0x07, 0x00, 0x03, 0x00, 0x8e, 0x07, 0x00, - 0x04, 0x00, 0xe0, 0x07, 0x00, 0x05, 0x00, 0xe2, - 0x07, 0x00, 0x06, 0x00, 0xe4, 0x07, 0x00, 0x07, - 0x00, 0xe6, 0x07, 0x00, 0x08, 0x00, 0xe8, 0x07, - 0x00, 0x09, 0x00, 0xea, 0x07, 0x00, 0x0a, 0x00, - 0xec, 0x07, 0x00, 0x0b, 0x00, 0xee, 0x07, 0x00, - 0x0c, 0x00, 0xf0, 0x07, 0x00, 0x0d, 0x00, 0xf2, - 0x07, 0x00, 0x0e, 0x00, 0xd2, 0x05, 0x00, 0x0f, - 0x00, 0xe4, 0x05, 0x00, 0x10, 0x00, 0xf4, 0x07, - 0x00, 0x11, 0x00, 0xf6, 0x07, 0x00, 0x12, 0x00, - 0xb4, 0x07, 0x0c, 0x01, 0x82, 0x05, 0x03, 0x00, - 0xd2, 0x03, 0x04, 0x00, 0x84, 0x05, 0x05, 0x00, - 0xa8, 0x07, 0x05, 0x01, 0xb2, 0x07, 0x0b, 0x01, - 0xa8, 0x02, 0x06, 0x00, 0xaa, 0x07, 0x06, 0x01, - 0x68, 0x07, 0x01, 0xac, 0x07, 0x08, 0x01, 0xb8, - 0x07, 0x0e, 0x01, 0xb4, 0x02, 0x07, 0x00, 0xb2, - 0x02, 0x01, 0x00, 0xbc, 0x02, 0x08, 0x00, 0xaa, - 0x02, 0x09, 0x00, 0xa6, 0x02, 0x0a, 0x00, 0xda, - 0x02, 0x0b, 0x00, 0xa2, 0x02, 0x0c, 0x00, 0xc6, - 0x02, 0x0d, 0x00, 0x9c, 0x07, 0x02, 0x03, 0xba, - 0x07, 0x0f, 0x01, 0xa4, 0x07, 0x03, 0x01, 0xce, - 0x03, 0x01, 0x03, 0xa0, 0x02, 0x02, 0x00, 0xb6, - 0x07, 0x0d, 0x01, 0xa6, 0x07, 0x04, 0x01, 0x07, - 0x32, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, - 0x5a, 0x5f, 0x24, 0x5d, 0x5b, 0x30, 0x2d, 0x39, - 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x5f, 0x24, - 0x5d, 0x2a, 0x07, 0xaa, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x4d, 0x00, 0x00, 0x00, 0x09, 0x06, 0x00, - 0x00, 0x00, 0x05, 0x08, 0xf5, 0xff, 0xff, 0xff, - 0x0c, 0x00, 0x06, 0x16, 0x04, 0x00, 0x24, 0x00, - 0x24, 0x00, 0x41, 0x00, 0x5a, 0x00, 0x5f, 0x00, - 0x5f, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x1d, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x16, - 0x05, 0x00, 0x24, 0x00, 0x24, 0x00, 0x30, 0x00, - 0x39, 0x00, 0x41, 0x00, 0x5a, 0x00, 0x5f, 0x00, - 0x5f, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x0b, 0x0d, - 0x00, 0x0b, 0xd0, 0x97, 0xc2, 0x06, 0x11, 0x04, - 0x44, 0x00, 0x00, 0x00, 0xae, 0xea, 0x0a, 0x11, - 0x04, 0x46, 0x00, 0x00, 0x00, 0xae, 0xe9, 0x08, - 0xdc, 0xd0, 0xee, 0x0e, 0xec, 0xd1, 0x05, 0x11, - 0x04, 0x45, 0x00, 0x00, 0x00, 0xae, 0xe9, 0x13, - 0xdc, 0xdd, 0xd0, 0xde, 0xe9, 0x05, 0xbb, 0x10, - 0xeb, 0x03, 0xbb, 0x0a, 0xef, 0xee, 0x0e, 0xec, - 0xb6, 0x05, 0x11, 0x04, 0x8b, 0x00, 0x00, 0x00, - 0xae, 0xe9, 0x13, 0xdc, 0xdf, 0xd0, 0xde, 0xe9, - 0x05, 0xbb, 0x10, 0xeb, 0x03, 0xbb, 0x0a, 0xef, - 0xee, 0x0e, 0xec, 0x9b, 0x05, 0x11, 0x04, 0x47, - 0x00, 0x00, 0x00, 0xae, 0xe9, 0x28, 0xd0, 0xe8, - 0x5e, 0x04, 0x00, 0xa8, 0xe9, 0x15, 0xd0, 0x42, - 0x78, 0x01, 0x00, 0x00, 0xb3, 0x5e, 0x04, 0x00, - 0x24, 0x02, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, - 0x9d, 0xd4, 0xdc, 0x5e, 0x05, 0x00, 0xd0, 0xee, - 0xee, 0x0e, 0xec, 0x6b, 0x05, 0x11, 0x04, 0x49, - 0x00, 0x00, 0x00, 0xae, 0xe9, 0x0c, 0xdc, 0x5e, - 0x06, 0x00, 0xd0, 0xee, 0xee, 0x0e, 0xec, 0x57, - 0x05, 0x11, 0x04, 0x48, 0x00, 0x00, 0x00, 0xae, - 0xea, 0x0d, 0x11, 0x04, 0x1b, 0x00, 0x00, 0x00, - 0xae, 0x69, 0x3c, 0x05, 0x00, 0x00, 0xd0, 0xf2, - 0xe9, 0x08, 0xdc, 0xd0, 0xee, 0x0e, 0xec, 0x37, - 0x05, 0x5e, 0x07, 0x00, 0x42, 0x9d, 0x01, 0x00, - 0x00, 0xd0, 0x24, 0x01, 0x00, 0xcc, 0xb3, 0xa9, - 0xe9, 0x1a, 0xdc, 0x04, 0xfd, 0x01, 0x00, 0x00, - 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc4, 0x04, 0xa1, - 0x01, 0x00, 0x00, 0x24, 0x02, 0x00, 0xee, 0x0e, - 0xec, 0x0d, 0x05, 0x5e, 0x08, 0x00, 0x42, 0x9d, - 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xcc, - 0xb3, 0xa9, 0xe9, 0x2e, 0xdc, 0x04, 0xfd, 0x01, - 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, 0x5e, - 0x07, 0x00, 0xe8, 0x04, 0xa1, 0x01, 0x00, 0x00, - 0x24, 0x02, 0x00, 0xee, 0x0e, 0x5e, 0x07, 0x00, - 0x42, 0x8a, 0x01, 0x00, 0x00, 0x5e, 0x08, 0x00, - 0xc4, 0x47, 0x24, 0x01, 0x00, 0x0e, 0xec, 0xcf, - 0x04, 0x5e, 0x09, 0x00, 0xe8, 0xc1, 0x0c, 0x5e, - 0x0a, 0x00, 0xd0, 0xee, 0xc1, 0x0d, 0x5e, 0x08, - 0x00, 0x42, 0x8a, 0x01, 0x00, 0x00, 0xd0, 0x24, - 0x01, 0x00, 0x0e, 0xd0, 0x5e, 0x0b, 0x00, 0xaa, - 0xe9, 0x28, 0xdc, 0x04, 0xfe, 0x01, 0x00, 0x00, - 0x42, 0x5b, 0x00, 0x00, 0x00, 0x5e, 0x0c, 0x00, - 0x42, 0xe9, 0x01, 0x00, 0x00, 0xd0, 0x42, 0xff, - 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x01, - 0x00, 0x24, 0x01, 0x00, 0xee, 0x0e, 0xec, 0xad, - 0x01, 0xd0, 0x5e, 0x0d, 0x00, 0xaa, 0xe9, 0x10, - 0xdc, 0xd0, 0x42, 0x36, 0x00, 0x00, 0x00, 0x24, - 0x00, 0x00, 0xee, 0x0e, 0xec, 0x97, 0x01, 0xd0, - 0x5e, 0x0e, 0x00, 0xaa, 0x11, 0xea, 0x10, 0x0e, - 0xd0, 0x5e, 0x0f, 0x00, 0xaa, 0x11, 0xea, 0x07, - 0x0e, 0xd0, 0x5e, 0x10, 0x00, 0xaa, 0xe9, 0x21, - 0xdc, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x42, 0x5b, - 0x00, 0x00, 0x00, 0xc0, 0x0d, 0x04, 0x00, 0x02, - 0x00, 0x00, 0xd0, 0x04, 0xa1, 0x01, 0x00, 0x00, - 0x24, 0x04, 0x00, 0xee, 0x0e, 0xec, 0x5e, 0x01, - 0xd0, 0x5e, 0x06, 0x00, 0xaa, 0xe9, 0x2c, 0xdc, - 0x04, 0xc4, 0x01, 0x00, 0x00, 0x42, 0x5b, 0x00, - 0x00, 0x00, 0xc0, 0x0d, 0x04, 0x00, 0x02, 0x00, - 0x00, 0x5e, 0x05, 0x00, 0xd0, 0xee, 0x04, 0xa1, - 0x01, 0x00, 0x00, 0x24, 0x04, 0x00, 0xee, 0x0e, - 0xd0, 0xe8, 0xc1, 0x0f, 0xb4, 0xc1, 0x08, 0xec, - 0x2c, 0x01, 0x5e, 0x11, 0x00, 0x42, 0x01, 0x02, - 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xe9, 0x0f, - 0xdc, 0x04, 0xc4, 0x01, 0x00, 0x00, 0xee, 0x0e, - 0xb4, 0xc1, 0x07, 0xec, 0x10, 0x01, 0xc0, 0x0d, - 0x42, 0xe8, 0x01, 0x00, 0x00, 0x04, 0x91, 0x00, - 0x00, 0x00, 0x24, 0x01, 0x00, 0xe9, 0x2d, 0xd0, - 0x5e, 0x12, 0x00, 0x41, 0x43, 0x00, 0x00, 0x00, - 0xaa, 0xe9, 0x21, 0xdc, 0xbf, 0x42, 0x5b, 0x00, - 0x00, 0x00, 0xc0, 0x0d, 0x04, 0xb6, 0x01, 0x00, - 0x00, 0xd0, 0xe8, 0x04, 0x02, 0x02, 0x00, 0x00, - 0x24, 0x04, 0x00, 0xee, 0x0e, 0xb4, 0xc1, 0x07, - 0xec, 0xd3, 0x00, 0xc0, 0x06, 0x04, 0x1b, 0x00, - 0x00, 0x00, 0xae, 0xe9, 0x32, 0xd0, 0x41, 0x35, - 0x00, 0x00, 0x00, 0xe9, 0x1f, 0xdc, 0x04, 0x03, - 0x02, 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, - 0xd0, 0x41, 0x35, 0x00, 0x00, 0x00, 0x04, 0xa1, - 0x01, 0x00, 0x00, 0x24, 0x02, 0x00, 0xee, 0x0e, - 0xec, 0xa3, 0x00, 0xdc, 0x04, 0x04, 0x02, 0x00, - 0x00, 0xee, 0x0e, 0xec, 0x98, 0x00, 0xd0, 0x41, - 0x3b, 0x00, 0x00, 0x00, 0x11, 0xe9, 0x0d, 0x0e, - 0xd0, 0x41, 0x3b, 0x00, 0x00, 0x00, 0x41, 0x35, - 0x00, 0x00, 0x00, 0x11, 0xea, 0x07, 0x0e, 0x04, - 0x90, 0x00, 0x00, 0x00, 0xc1, 0x0e, 0xc0, 0x0d, - 0x04, 0x90, 0x00, 0x00, 0x00, 0xaf, 0xe9, 0x1d, - 0xdc, 0xbf, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc0, - 0x0e, 0x04, 0x05, 0x02, 0x00, 0x00, 0xc0, 0x0d, - 0x04, 0x06, 0x02, 0x00, 0x00, 0x24, 0x04, 0x00, - 0xee, 0x0e, 0xeb, 0x4a, 0xd0, 0x41, 0x43, 0x00, - 0x00, 0x00, 0xf2, 0xe9, 0x1a, 0xdc, 0x04, 0xc4, - 0x01, 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, - 0xc0, 0x0e, 0x04, 0x07, 0x02, 0x00, 0x00, 0x24, - 0x02, 0x00, 0xee, 0x0e, 0xeb, 0x28, 0xc0, 0x0e, - 0x04, 0x90, 0x00, 0x00, 0x00, 0xaf, 0xe9, 0x16, - 0xdc, 0xbf, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc0, - 0x0e, 0x04, 0x08, 0x02, 0x00, 0x00, 0x24, 0x02, - 0x00, 0xee, 0x0e, 0xeb, 0x09, 0xdc, 0x04, 0x09, - 0x02, 0x00, 0x00, 0xee, 0x0e, 0x04, 0x0a, 0x02, - 0x00, 0x00, 0xc1, 0x0a, 0x07, 0xc1, 0x04, 0xb3, - 0xc8, 0xb3, 0xc9, 0xb3, 0xcb, 0xc0, 0x07, 0x69, - 0xcb, 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, - 0x00, 0xc1, 0x0a, 0xd0, 0xe8, 0xc1, 0x0f, 0xd1, - 0x5e, 0x13, 0x00, 0xa8, 0xe9, 0x12, 0xc0, 0x0f, - 0xe9, 0x0e, 0xdc, 0x04, 0xfc, 0x01, 0x00, 0x00, - 0xee, 0x0e, 0xdc, 0xc0, 0x0a, 0xee, 0x29, 0xb3, - 0xca, 0xc6, 0xc0, 0x0f, 0xa6, 0x69, 0x89, 0x00, - 0x00, 0x00, 0x93, 0x03, 0xc6, 0xd0, 0xab, 0xe9, - 0x0e, 0x5e, 0x14, 0x00, 0xd0, 0xc6, 0x47, 0xd1, - 0xb4, 0x9d, 0xef, 0x0e, 0xeb, 0x43, 0xc6, 0xc1, - 0x10, 0xc6, 0xb4, 0x9d, 0xc0, 0x0f, 0xa6, 0xe9, - 0x0d, 0xc6, 0xb4, 0x9d, 0xd0, 0xab, 0x96, 0xe9, - 0x05, 0x93, 0x02, 0xeb, 0xed, 0xc6, 0xc0, 0x10, - 0xa8, 0xe9, 0x1e, 0xdc, 0x04, 0x0b, 0x02, 0x00, - 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc6, 0xc0, - 0x10, 0x9e, 0xb4, 0x9d, 0x04, 0x0c, 0x02, 0x00, - 0x00, 0x24, 0x02, 0x00, 0xee, 0x0e, 0xeb, 0x09, - 0xdc, 0x04, 0x0d, 0x02, 0x00, 0x00, 0xee, 0x0e, - 0xc7, 0x5e, 0x15, 0x00, 0xa9, 0xe9, 0x24, 0xc0, - 0x0f, 0xc7, 0x9e, 0xb8, 0xa8, 0xe9, 0x1c, 0xdc, - 0x04, 0x0e, 0x02, 0x00, 0x00, 0x42, 0x5b, 0x00, - 0x00, 0x00, 0xc0, 0x0f, 0xc7, 0x9e, 0x04, 0x0f, - 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, 0xee, 0x0e, - 0xeb, 0x06, 0x93, 0x02, 0xec, 0x74, 0xff, 0xb4, - 0xc1, 0x08, 0xc6, 0xc0, 0x0f, 0xaf, 0xe9, 0x0c, - 0xc0, 0x0f, 0xbc, 0xe8, 0x03, 0xa8, 0xe9, 0x04, - 0xb4, 0xc1, 0x09, 0xc0, 0x09, 0x96, 0xe9, 0x24, - 0x5e, 0x16, 0x00, 0xe9, 0x0f, 0x5e, 0x17, 0x00, - 0x42, 0xaa, 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, - 0x00, 0xeb, 0x0d, 0x5e, 0x17, 0x00, 0x42, 0xc7, - 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xc2, - 0x04, 0xe8, 0xc8, 0xc0, 0x08, 0xe9, 0x1e, 0xc5, - 0xc4, 0xa6, 0xe9, 0x19, 0xc0, 0x04, 0xc5, 0x47, - 0x8d, 0xce, 0xc6, 0xb3, 0xa1, 0xaf, 0x11, 0xea, - 0x06, 0x0e, 0xc6, 0xc0, 0x0f, 0xa9, 0xea, 0x05, - 0x93, 0x01, 0xeb, 0xe4, 0xc5, 0xc4, 0xa6, 0x69, - 0x5a, 0x01, 0x00, 0x00, 0xc0, 0x0a, 0x96, 0xe9, - 0x12, 0x5e, 0x18, 0x00, 0x04, 0x08, 0x02, 0x00, - 0x00, 0xee, 0x0e, 0x04, 0x0a, 0x02, 0x00, 0x00, - 0xc1, 0x0a, 0xd1, 0x5e, 0x13, 0x00, 0xa8, 0xe9, - 0x13, 0xc5, 0xc4, 0xa6, 0xe9, 0x0e, 0xdc, 0x04, - 0xfc, 0x01, 0x00, 0x00, 0xee, 0x0e, 0xdc, 0xc0, - 0x0a, 0xee, 0x29, 0xc5, 0xca, 0xc6, 0xc4, 0xa6, - 0x69, 0x21, 0x01, 0x00, 0x00, 0xc0, 0x04, 0xc6, - 0x47, 0xc1, 0x05, 0x5e, 0x17, 0x00, 0x42, 0x65, - 0x00, 0x00, 0x00, 0xd0, 0xc0, 0x05, 0x24, 0x02, - 0x00, 0xc2, 0x11, 0x96, 0x6a, 0x00, 0x01, 0x00, - 0x00, 0xc0, 0x11, 0x41, 0x3e, 0x00, 0x00, 0x00, - 0x96, 0xe9, 0x1e, 0xdc, 0x04, 0xc4, 0x01, 0x00, - 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, 0x5e, 0x06, - 0x00, 0xc0, 0x05, 0xee, 0x04, 0xa1, 0x01, 0x00, - 0x00, 0x24, 0x02, 0x00, 0xee, 0x0e, 0xeb, 0x2e, - 0xc0, 0x05, 0x8d, 0xc0, 0x05, 0xb3, 0xa1, 0xae, - 0x11, 0xea, 0x11, 0x0e, 0xc0, 0x05, 0x42, 0xa3, - 0x01, 0x00, 0x00, 0xbd, 0x00, 0xbd, 0x01, 0x33, - 0x24, 0x01, 0x00, 0xe9, 0x08, 0xdc, 0xc0, 0x05, - 0xee, 0x0e, 0xeb, 0x0a, 0xdc, 0x5e, 0x05, 0x00, - 0xc0, 0x05, 0xee, 0xee, 0x0e, 0xdc, 0x04, 0x10, - 0x02, 0x00, 0x00, 0xee, 0x0e, 0x04, 0x3f, 0x00, - 0x00, 0x00, 0xc0, 0x11, 0xab, 0xe9, 0x12, 0x5e, - 0x14, 0x00, 0xc0, 0x11, 0x41, 0x3f, 0x00, 0x00, - 0x00, 0xd1, 0xb4, 0x9d, 0xef, 0x0e, 0xeb, 0x5c, - 0x26, 0x00, 0x00, 0xc1, 0x12, 0xc0, 0x11, 0x41, - 0x40, 0x00, 0x00, 0x00, 0xe9, 0x11, 0xc0, 0x12, - 0x42, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x11, 0x02, - 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xc0, 0x11, - 0x41, 0x41, 0x00, 0x00, 0x00, 0xe9, 0x11, 0xc0, - 0x12, 0x42, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x12, - 0x02, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xdc, - 0x04, 0xc4, 0x01, 0x00, 0x00, 0x42, 0x5b, 0x00, - 0x00, 0x00, 0xc0, 0x12, 0x42, 0x5a, 0x00, 0x00, - 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x24, 0x01, - 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x24, 0x02, - 0x00, 0xee, 0x0e, 0x93, 0x03, 0xc7, 0x5e, 0x19, - 0x00, 0xa8, 0xe9, 0x22, 0xc4, 0xc7, 0x9e, 0xb8, - 0xa8, 0xe9, 0x1b, 0xdc, 0x04, 0x0e, 0x02, 0x00, - 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc4, 0xc7, - 0x9e, 0x04, 0x13, 0x02, 0x00, 0x00, 0x24, 0x02, - 0x00, 0xee, 0x0e, 0xeb, 0x06, 0x93, 0x02, 0xec, - 0xdd, 0xfe, 0xc0, 0x0a, 0xe9, 0x06, 0xdc, 0xc0, - 0x0a, 0xee, 0x0e, 0x5e, 0x08, 0x00, 0x42, 0x14, - 0x02, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0x0e, - 0x5e, 0x07, 0x00, 0x42, 0x9d, 0x01, 0x00, 0x00, - 0xd0, 0x24, 0x01, 0x00, 0xce, 0xb3, 0xa8, 0xe9, - 0x36, 0x5e, 0x09, 0x00, 0xc0, 0x0c, 0x1b, 0x11, - 0xb0, 0xea, 0x04, 0x1b, 0x71, 0x1b, 0x1b, 0x04, - 0x15, 0x02, 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, - 0x00, 0xc6, 0x04, 0x16, 0x02, 0x00, 0x00, 0x5e, - 0x09, 0x00, 0xc0, 0x0c, 0x47, 0x24, 0x03, 0x00, - 0x1b, 0x71, 0x1b, 0x49, 0xeb, 0x09, 0xdc, 0x5e, - 0x06, 0x00, 0xd0, 0xee, 0xee, 0x0e, 0x29, 0x0c, - 0x43, 0x02, 0x01, 0xbc, 0x07, 0x02, 0x01, 0x02, - 0x03, 0x05, 0x00, 0x3d, 0x03, 0xa6, 0x06, 0x00, - 0x01, 0x00, 0xea, 0x05, 0x00, 0x01, 0x00, 0xae, - 0x08, 0x00, 0x00, 0x00, 0x9e, 0x07, 0x03, 0x03, - 0xb0, 0x07, 0x0a, 0x01, 0xae, 0x07, 0x09, 0x01, - 0xc2, 0x03, 0x0e, 0x00, 0xc6, 0x03, 0x0f, 0x00, - 0xdc, 0xe9, 0x30, 0xdd, 0xd1, 0xaf, 0xe9, 0x13, - 0xde, 0x42, 0x8a, 0x01, 0x00, 0x00, 0xdf, 0x41, - 0x77, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, - 0xd1, 0xe1, 0xd1, 0xe9, 0x16, 0xdf, 0x5e, 0x04, - 0x00, 0xd1, 0x47, 0x47, 0xcc, 0xe9, 0x0c, 0xde, - 0x42, 0x8a, 0x01, 0x00, 0x00, 0xc4, 0x24, 0x01, - 0x00, 0x0e, 0xde, 0x42, 0x8a, 0x01, 0x00, 0x00, - 0xd0, 0x24, 0x01, 0x00, 0x29, 0x0c, 0x43, 0x02, - 0x01, 0xbe, 0x07, 0x01, 0x00, 0x01, 0x03, 0x01, - 0x02, 0x2c, 0x01, 0xa6, 0x06, 0x00, 0x01, 0x00, - 0xbc, 0x07, 0x10, 0x01, 0x07, 0x02, 0x30, 0x07, - 0x02, 0x39, 0xd0, 0xb3, 0x47, 0xbd, 0x00, 0xa9, - 0xe9, 0x14, 0xd0, 0xb3, 0x47, 0xbd, 0x01, 0xa7, - 0xe9, 0x0c, 0xdc, 0xd0, 0x04, 0x45, 0x00, 0x00, - 0x00, 0xef, 0x0e, 0xeb, 0x0a, 0xdc, 0xd0, 0x04, - 0x18, 0x02, 0x00, 0x00, 0xef, 0x0e, 0xdc, 0x04, - 0x00, 0x02, 0x00, 0x00, 0xee, 0x29, 0x0c, 0x43, - 0x02, 0x01, 0xc0, 0x07, 0x01, 0x04, 0x01, 0x05, - 0x03, 0x14, 0xa1, 0x04, 0x05, 0xa6, 0x06, 0x00, - 0x01, 0x00, 0xea, 0x05, 0x00, 0x00, 0x00, 0xb2, - 0x08, 0x00, 0x01, 0x00, 0xd2, 0x05, 0x00, 0x02, - 0x00, 0xea, 0x06, 0x00, 0x03, 0x00, 0x9e, 0x07, - 0x03, 0x03, 0xbc, 0x07, 0x10, 0x01, 0xc2, 0x07, - 0x13, 0x01, 0x07, 0x20, 0x5e, 0x22, 0x28, 0x5b, - 0x5e, 0x5c, 0x5c, 0x22, 0x5d, 0x7c, 0x5c, 0x5c, - 0x2e, 0x29, 0x2a, 0x22, 0x07, 0x96, 0x01, 0x00, - 0x00, 0x02, 0x01, 0x43, 0x00, 0x00, 0x00, 0x09, - 0x06, 0x00, 0x00, 0x00, 0x05, 0x08, 0xf5, 0xff, - 0xff, 0xff, 0x0c, 0x00, 0x06, 0x01, 0x22, 0x0e, - 0x01, 0x01, 0x0a, 0x26, 0x00, 0x00, 0x00, 0x1a, - 0x0c, 0x01, 0x0a, 0x14, 0x00, 0x00, 0x00, 0x16, - 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0x23, 0x00, - 0x5b, 0x00, 0x5d, 0x00, 0xff, 0xff, 0x08, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x5c, 0x04, 0x0d, 0x01, - 0x1b, 0xd5, 0xff, 0xff, 0xff, 0x01, 0x22, 0x0d, - 0x00, 0x0b, 0x07, 0x20, 0x5e, 0x27, 0x28, 0x5b, - 0x5e, 0x5c, 0x5c, 0x27, 0x5d, 0x7c, 0x5c, 0x5c, - 0x2e, 0x29, 0x2a, 0x27, 0x07, 0x96, 0x01, 0x00, - 0x00, 0x02, 0x01, 0x43, 0x00, 0x00, 0x00, 0x09, - 0x06, 0x00, 0x00, 0x00, 0x05, 0x08, 0xf5, 0xff, - 0xff, 0xff, 0x0c, 0x00, 0x06, 0x01, 0x27, 0x0e, - 0x01, 0x01, 0x0a, 0x26, 0x00, 0x00, 0x00, 0x1a, - 0x0c, 0x01, 0x0a, 0x14, 0x00, 0x00, 0x00, 0x16, - 0x03, 0x00, 0x00, 0x00, 0x26, 0x00, 0x28, 0x00, - 0x5b, 0x00, 0x5d, 0x00, 0xff, 0xff, 0x08, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x5c, 0x04, 0x0d, 0x01, - 0x1b, 0xd5, 0xff, 0xff, 0xff, 0x01, 0x27, 0x0d, - 0x00, 0x0b, 0x07, 0x16, 0x5e, 0x5c, 0x3c, 0x5b, - 0x5e, 0x5c, 0x3e, 0x5d, 0x2b, 0x5c, 0x3e, 0x07, - 0x74, 0x00, 0x00, 0x01, 0x00, 0x32, 0x00, 0x00, + 0x0c, 0x00, 0x01, 0x20, 0x0d, 0x00, 0x0b, 0x07, + 0x1a, 0x5e, 0x5b, 0x64, 0x67, 0x69, 0x6d, 0x73, + 0x75, 0x76, 0x79, 0x5d, 0x2b, 0x24, 0x07, 0x96, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x43, 0x00, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x05, 0x08, - 0xf5, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x06, 0x01, - 0x3c, 0x1d, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, - 0x00, 0x00, 0x16, 0x02, 0x00, 0x00, 0x00, 0x3d, - 0x00, 0x3f, 0x00, 0xff, 0xff, 0x0b, 0x01, 0x3e, - 0x0d, 0x00, 0x0b, 0x07, 0x16, 0x5e, 0x5c, 0x5b, - 0x5b, 0x5e, 0x5c, 0x5d, 0x5d, 0x2b, 0x5c, 0x5d, - 0x07, 0x74, 0x00, 0x00, 0x01, 0x00, 0x32, 0x00, - 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x05, - 0x08, 0xf5, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x06, - 0x01, 0x5b, 0x1d, 0x0c, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, - 0x00, 0x00, 0x00, 0x16, 0x02, 0x00, 0x00, 0x00, - 0x5c, 0x00, 0x5e, 0x00, 0xff, 0xff, 0x0b, 0x01, - 0x5d, 0x0d, 0x00, 0x0b, 0x07, 0x02, 0x30, 0x07, - 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, - 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, - 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, - 0x02, 0x39, 0x07, 0x56, 0x5e, 0x5b, 0x30, 0x2d, - 0x39, 0x61, 0x2d, 0x7a, 0x5f, 0x5d, 0x2b, 0x5b, - 0x2e, 0x5d, 0x3f, 0x5b, 0x30, 0x2d, 0x39, 0x61, - 0x2d, 0x7a, 0x5f, 0x5d, 0x2a, 0x5b, 0x65, 0x45, - 0x70, 0x50, 0x5d, 0x3f, 0x5b, 0x2b, 0x2d, 0x5d, - 0x3f, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2a, 0x07, - 0x9e, 0x03, 0x00, 0x00, 0x01, 0x00, 0xc7, 0x00, - 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x05, - 0x08, 0xf5, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x06, - 0x1d, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, - 0x00, 0x16, 0x03, 0x00, 0x30, 0x00, 0x39, 0x00, - 0x5f, 0x00, 0x5f, 0x00, 0x61, 0x00, 0x7a, 0x00, - 0x0b, 0x1d, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x16, 0x01, 0x00, 0x2e, 0x00, 0x2e, - 0x00, 0x0b, 0x1d, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, - 0x00, 0x00, 0x00, 0x16, 0x03, 0x00, 0x30, 0x00, - 0x39, 0x00, 0x5f, 0x00, 0x5f, 0x00, 0x61, 0x00, - 0x7a, 0x00, 0x0b, 0x1d, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x16, 0x04, 0x00, 0x45, - 0x00, 0x45, 0x00, 0x50, 0x00, 0x50, 0x00, 0x65, - 0x00, 0x65, 0x00, 0x70, 0x00, 0x70, 0x00, 0x0b, - 0x1d, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x16, 0x02, 0x00, 0x2b, 0x00, 0x2b, 0x00, - 0x2d, 0x00, 0x2d, 0x00, 0x0b, 0x1d, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x16, 0x01, - 0x00, 0x30, 0x00, 0x39, 0x00, 0x0b, 0x0d, 0x00, - 0x0b, 0xdc, 0x96, 0xe9, 0x05, 0xdd, 0xd0, 0xee, - 0x29, 0xd0, 0xe8, 0xb3, 0xa8, 0x69, 0x13, 0x02, - 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0xc8, - 0xd0, 0xc9, 0xb3, 0xca, 0x07, 0xcb, 0xd0, 0xb3, - 0x47, 0x11, 0x04, 0x9f, 0x01, 0x00, 0x00, 0xae, - 0xe9, 0x19, 0x04, 0x47, 0x00, 0x00, 0x00, 0xc8, - 0xd0, 0x42, 0xa3, 0x01, 0x00, 0x00, 0xbd, 0x00, - 0xbd, 0x01, 0x33, 0x24, 0x01, 0x00, 0xcb, 0xec, - 0xb3, 0x01, 0x11, 0x04, 0x9e, 0x01, 0x00, 0x00, - 0xae, 0xe9, 0x19, 0x04, 0x47, 0x00, 0x00, 0x00, - 0xc8, 0xd0, 0x42, 0xa3, 0x01, 0x00, 0x00, 0xbd, - 0x02, 0xbd, 0x03, 0x33, 0x24, 0x01, 0x00, 0xcb, - 0xec, 0x92, 0x01, 0x11, 0x04, 0xa2, 0x01, 0x00, - 0x00, 0xae, 0xe9, 0x0a, 0x04, 0x1a, 0x02, 0x00, - 0x00, 0xc8, 0xec, 0x80, 0x01, 0x11, 0x04, 0x0b, - 0x02, 0x00, 0x00, 0xae, 0xe9, 0x1e, 0xd0, 0x42, - 0xa3, 0x01, 0x00, 0x00, 0xbd, 0x04, 0xbd, 0x05, - 0x33, 0x24, 0x01, 0x00, 0xcf, 0x69, 0x65, 0x01, - 0x00, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, 0xc8, - 0xec, 0x5a, 0x01, 0x11, 0x04, 0xc4, 0x01, 0x00, - 0x00, 0xae, 0xe9, 0x1b, 0xd0, 0x42, 0xa3, 0x01, - 0x00, 0x00, 0xbd, 0x06, 0xbd, 0x07, 0x33, 0x24, - 0x01, 0x00, 0xcf, 0xe9, 0x2e, 0x04, 0x1b, 0x02, - 0x00, 0x00, 0xc8, 0xec, 0x37, 0x01, 0x11, 0x04, - 0xa1, 0x01, 0x00, 0x00, 0xae, 0xea, 0x1c, 0x11, - 0x04, 0x0a, 0x02, 0x00, 0x00, 0xae, 0xea, 0x13, - 0x11, 0x04, 0x1c, 0x02, 0x00, 0x00, 0xae, 0xea, - 0x0a, 0x11, 0x04, 0xbf, 0x01, 0x00, 0x00, 0xae, - 0xe9, 0x0c, 0x04, 0x1d, 0x02, 0x00, 0x00, 0xc8, - 0xb4, 0xca, 0xec, 0x08, 0x01, 0x11, 0x04, 0x9b, - 0x01, 0x00, 0x00, 0xae, 0xe9, 0x0a, 0x04, 0x1b, - 0x02, 0x00, 0x00, 0xc8, 0xec, 0xf6, 0x00, 0x11, - 0xbd, 0x08, 0xae, 0xea, 0x37, 0x11, 0xbd, 0x09, - 0xae, 0xea, 0x31, 0x11, 0xbd, 0x0a, 0xae, 0xea, - 0x2b, 0x11, 0xbd, 0x0b, 0xae, 0xea, 0x25, 0x11, - 0xbd, 0x0c, 0xae, 0xea, 0x1f, 0x11, 0xbd, 0x0d, - 0xae, 0xea, 0x19, 0x11, 0xbd, 0x0e, 0xae, 0xea, - 0x13, 0x11, 0xbd, 0x0f, 0xae, 0xea, 0x0d, 0x11, - 0xbd, 0x10, 0xae, 0xea, 0x07, 0x11, 0xbd, 0x11, - 0xae, 0xe9, 0x19, 0x04, 0x45, 0x00, 0x00, 0x00, - 0xc8, 0xd0, 0x42, 0xa3, 0x01, 0x00, 0x00, 0xbd, - 0x12, 0xbd, 0x13, 0x33, 0x24, 0x01, 0x00, 0xcb, - 0xec, 0xa2, 0x00, 0x11, 0x04, 0xcb, 0x01, 0x00, - 0x00, 0xae, 0xe9, 0x06, 0xb4, 0xca, 0xec, 0x94, - 0x00, 0xde, 0xd0, 0xee, 0xe9, 0x06, 0xd0, 0xe8, - 0xb4, 0x9e, 0xca, 0xd0, 0x42, 0xab, 0x01, 0x00, - 0x00, 0x04, 0x9a, 0x00, 0x00, 0x00, 0x24, 0x01, - 0x00, 0xe9, 0x09, 0x04, 0x1e, 0x02, 0x00, 0x00, - 0xc8, 0xeb, 0x71, 0xd0, 0x42, 0xab, 0x01, 0x00, - 0x00, 0x04, 0x96, 0x00, 0x00, 0x00, 0x24, 0x01, - 0x00, 0xe9, 0x09, 0x04, 0x49, 0x00, 0x00, 0x00, - 0xc8, 0xeb, 0x59, 0xd0, 0x04, 0xdf, 0x00, 0x00, - 0x00, 0xae, 0x11, 0xea, 0x09, 0x0e, 0xd0, 0x04, - 0x1f, 0x02, 0x00, 0x00, 0xae, 0xe9, 0x09, 0x04, - 0x20, 0x02, 0x00, 0x00, 0xc8, 0xeb, 0x3d, 0xd0, - 0x04, 0x03, 0x00, 0x00, 0x00, 0xae, 0x11, 0xea, - 0x09, 0x0e, 0xd0, 0x04, 0x02, 0x00, 0x00, 0x00, - 0xae, 0xe9, 0x09, 0x04, 0x46, 0x00, 0x00, 0x00, - 0xc8, 0xeb, 0x21, 0xd0, 0x04, 0x01, 0x00, 0x00, - 0x00, 0xae, 0xe9, 0x09, 0x04, 0x01, 0x00, 0x00, - 0x00, 0xc8, 0xeb, 0x10, 0xd0, 0x04, 0x44, 0x00, - 0x00, 0x00, 0xae, 0xe9, 0x07, 0x04, 0x44, 0x00, - 0x00, 0x00, 0xc8, 0x0e, 0xc7, 0xe9, 0x06, 0xc7, - 0xb3, 0x47, 0xe8, 0xca, 0xc6, 0xb3, 0xa8, 0xe9, - 0x0d, 0xd0, 0x42, 0x96, 0x01, 0x00, 0x00, 0xb3, - 0xc6, 0x24, 0x02, 0x00, 0xc9, 0xdd, 0xc5, 0xc4, - 0xef, 0x0e, 0xd0, 0x42, 0x96, 0x01, 0x00, 0x00, - 0xc5, 0xe8, 0x24, 0x01, 0x00, 0xd4, 0xec, 0xea, - 0xfd, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xc2, 0x07, - 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x19, 0x02, - 0xa6, 0x06, 0x00, 0x01, 0x00, 0xc2, 0x05, 0x00, - 0x00, 0x00, 0xd0, 0xd0, 0xe8, 0xb4, 0x9e, 0x47, - 0xcc, 0x04, 0xc4, 0x01, 0x00, 0x00, 0xae, 0x11, - 0xea, 0x09, 0x0e, 0xc4, 0x04, 0x09, 0x02, 0x00, - 0x00, 0xae, 0x28, 0x0c, 0x43, 0x02, 0x01, 0xc4, - 0x07, 0x01, 0x04, 0x01, 0x08, 0x03, 0x00, 0x7c, - 0x05, 0xbc, 0x05, 0x00, 0x01, 0x00, 0xc2, 0x08, - 0x00, 0x00, 0x00, 0xc4, 0x08, 0x00, 0x01, 0x00, - 0xc6, 0x08, 0x00, 0x02, 0x00, 0xa6, 0x06, 0x00, - 0x03, 0x00, 0xac, 0x07, 0x08, 0x01, 0xc2, 0x07, - 0x13, 0x01, 0xc4, 0x07, 0x14, 0x01, 0xdc, 0xd0, - 0x47, 0xe8, 0xc8, 0xdc, 0xd0, 0xb4, 0x9d, 0x47, - 0x04, 0x10, 0x02, 0x00, 0x00, 0xae, 0xe9, 0x0e, - 0xd0, 0xb5, 0x9d, 0xd4, 0xc4, 0xb5, 0xdc, 0xd0, - 0x47, 0xe8, 0x9d, 0x9d, 0xc8, 0xc4, 0xc9, 0xdd, - 0xdc, 0xd0, 0x47, 0xee, 0xe9, 0x4f, 0xb4, 0xca, - 0xd0, 0x8f, 0xd8, 0xdc, 0xe8, 0xa6, 0xe9, 0x45, - 0xc6, 0x94, 0x01, 0xdc, 0xd0, 0x47, 0xcf, 0x04, - 0xa1, 0x01, 0x00, 0x00, 0xae, 0x11, 0xea, 0x09, - 0x0e, 0xc7, 0x04, 0x0a, 0x02, 0x00, 0x00, 0xae, - 0xea, 0x2b, 0xeb, 0x1c, 0x11, 0x7e, 0x7a, 0x5e, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x81, 0x02, 0x0e, - 0x3d, 0x79, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x81, 0x02, 0x0e, 0x3d, 0x84, 0xeb, 0x06, 0xde, - 0xd0, 0xee, 0xeb, 0xe1, 0x0e, 0xc4, 0x94, 0x01, - 0xb5, 0xca, 0xeb, 0xb5, 0xd0, 0xc5, 0x26, 0x02, - 0x00, 0x28, 0x0c, 0x43, 0x02, 0x01, 0xc6, 0x07, - 0x02, 0x02, 0x02, 0x03, 0x05, 0x00, 0x67, 0x04, - 0xbc, 0x05, 0x00, 0x01, 0x00, 0xc8, 0x08, 0x00, - 0x01, 0x00, 0xec, 0x07, 0x00, 0x00, 0x00, 0xa6, - 0x06, 0x00, 0x01, 0x00, 0xac, 0x07, 0x08, 0x01, - 0xbc, 0x07, 0x10, 0x01, 0xbe, 0x07, 0x11, 0x01, - 0xc0, 0x07, 0x12, 0x01, 0xc2, 0x07, 0x13, 0x01, - 0xbf, 0xc8, 0xd0, 0xd1, 0xa7, 0xe9, 0x60, 0xdc, - 0xd0, 0x91, 0xd4, 0x47, 0xcd, 0x04, 0xa1, 0x01, - 0x00, 0x00, 0xae, 0x11, 0xea, 0x09, 0x0e, 0xc5, - 0x04, 0x0a, 0x02, 0x00, 0x00, 0xae, 0xe9, 0x11, - 0xc4, 0xe8, 0xb4, 0xa8, 0xe9, 0x27, 0xdd, 0x04, - 0xbf, 0x01, 0x00, 0x00, 0xee, 0x0e, 0xeb, 0x1d, - 0xdd, 0xc4, 0xee, 0x0e, 0xdc, 0xd0, 0x47, 0x04, - 0x10, 0x02, 0x00, 0x00, 0xae, 0xe9, 0x0e, 0xde, - 0xc5, 0xee, 0x0e, 0xd0, 0x8f, 0xd4, 0xdc, 0xd0, - 0x91, 0xd4, 0x47, 0xc9, 0xdf, 0xc5, 0xee, 0x0e, - 0x5e, 0x04, 0x00, 0xc5, 0xee, 0xe9, 0x08, 0x04, - 0xbf, 0x01, 0x00, 0x00, 0xeb, 0x06, 0x04, 0x25, - 0x02, 0x00, 0x00, 0xc8, 0xeb, 0x9d, 0x29, 0x0c, - 0x43, 0x02, 0x01, 0xc8, 0x07, 0x02, 0x00, 0x02, - 0x04, 0x01, 0x00, 0x1a, 0x02, 0xa6, 0x06, 0x00, - 0x01, 0x00, 0xf8, 0x06, 0x00, 0x01, 0x00, 0xbc, - 0x07, 0x10, 0x01, 0xd1, 0xb3, 0xa8, 0xe9, 0x12, - 0xd0, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x42, 0x26, - 0x02, 0x00, 0x00, 0xd1, 0x24, 0x01, 0x00, 0x9d, - 0xd4, 0xdc, 0xd0, 0xee, 0x29, 0x0c, 0x43, 0x02, - 0x01, 0xca, 0x07, 0x02, 0x0c, 0x02, 0x08, 0x0b, - 0x00, 0x8f, 0x05, 0x0e, 0xce, 0x08, 0x00, 0x01, - 0x00, 0xf2, 0x01, 0x00, 0x01, 0x00, 0xd0, 0x08, - 0x00, 0x00, 0x00, 0xc8, 0x08, 0x00, 0x01, 0x00, - 0xc4, 0x08, 0x00, 0x02, 0x00, 0xec, 0x07, 0x00, - 0x03, 0x00, 0xd2, 0x08, 0x00, 0x04, 0x00, 0xbc, - 0x05, 0x00, 0x05, 0x00, 0xc2, 0x08, 0x00, 0x06, - 0x00, 0xde, 0x07, 0x00, 0x07, 0x00, 0xe2, 0x06, - 0x00, 0x08, 0x00, 0xd4, 0x08, 0x00, 0x09, 0x00, - 0xaa, 0x05, 0x00, 0x0a, 0x00, 0xd6, 0x08, 0x00, - 0x0b, 0x00, 0xa2, 0x07, 0x02, 0x01, 0xc4, 0x07, - 0x14, 0x01, 0xc6, 0x07, 0x15, 0x01, 0xac, 0x07, - 0x08, 0x01, 0xbe, 0x07, 0x11, 0x01, 0xc0, 0x07, - 0x12, 0x01, 0xc2, 0x07, 0x13, 0x01, 0xb0, 0x02, - 0x10, 0x00, 0xbc, 0x07, 0x10, 0x01, 0xc8, 0x07, - 0x16, 0x01, 0xca, 0x07, 0x17, 0x01, 0xdc, 0xd0, - 0x9e, 0xb5, 0x9e, 0xc8, 0x06, 0x11, 0xf1, 0xea, - 0x0d, 0x7e, 0x81, 0x00, 0x0e, 0xc9, 0x81, 0x00, - 0x0e, 0xca, 0x84, 0xeb, 0x07, 0x0e, 0xdd, 0xd1, - 0xee, 0xeb, 0xef, 0xc6, 0xc4, 0xa7, 0xe9, 0x0c, - 0xde, 0xd1, 0xc5, 0xef, 0x0e, 0xc5, 0xc6, 0x26, - 0x02, 0x00, 0x28, 0xdf, 0xd1, 0xb4, 0x9d, 0x47, - 0x04, 0x10, 0x02, 0x00, 0x00, 0xae, 0xe9, 0x0d, - 0x5e, 0x04, 0x00, 0xdf, 0xd1, 0x47, 0xee, 0x0e, - 0xd1, 0xb5, 0x9d, 0xd5, 0x5e, 0x05, 0x00, 0xdf, - 0xd1, 0x47, 0xee, 0x0e, 0x5e, 0x06, 0x00, 0xdf, - 0xd1, 0x47, 0xee, 0x96, 0xe9, 0x07, 0xd1, 0xc6, - 0x26, 0x02, 0x00, 0x28, 0xd0, 0xb5, 0x9d, 0xd4, - 0xc4, 0xb5, 0x9e, 0xc8, 0xbf, 0xcb, 0xd1, 0xb4, - 0x9d, 0xc1, 0x04, 0xdf, 0xd1, 0x47, 0x42, 0x2c, - 0x02, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, - 0x24, 0x01, 0x00, 0x69, 0xa9, 0x01, 0x00, 0x00, - 0xb3, 0xc1, 0x07, 0x26, 0x00, 0x00, 0xc1, 0x0a, - 0xc0, 0x04, 0xc1, 0x05, 0xc0, 0x05, 0xc5, 0xa6, - 0xe9, 0x5d, 0xdf, 0xc0, 0x05, 0x47, 0xb3, 0x47, - 0x04, 0x9b, 0x01, 0x00, 0x00, 0xae, 0x11, 0xea, - 0x0e, 0x0e, 0xdf, 0xc0, 0x05, 0xb4, 0x9d, 0x47, - 0x04, 0x10, 0x02, 0x00, 0x00, 0xae, 0xea, 0x3f, - 0xeb, 0x1c, 0x11, 0x7e, 0x79, 0x5e, 0x01, 0x00, - 0x00, 0x05, 0x00, 0x81, 0x02, 0x0e, 0x3d, 0x79, - 0x21, 0x02, 0x00, 0x00, 0x06, 0x00, 0x81, 0x02, - 0x0e, 0x3d, 0x84, 0xeb, 0x07, 0xdd, 0xc0, 0x05, - 0xee, 0xeb, 0xe0, 0x0e, 0xc0, 0x0a, 0xc0, 0x07, - 0x91, 0xc1, 0x07, 0x1b, 0x11, 0xb0, 0xea, 0x04, - 0x1b, 0x71, 0x1b, 0x1b, 0xc0, 0x06, 0x1b, 0x71, - 0x1b, 0x49, 0x93, 0x05, 0xeb, 0x9f, 0x5e, 0x07, - 0x00, 0x42, 0x7e, 0x01, 0x00, 0x00, 0xc4, 0xb6, - 0x9b, 0xc0, 0x0a, 0xe8, 0xbb, 0x10, 0x24, 0x03, - 0x00, 0xc1, 0x09, 0xc0, 0x09, 0xb4, 0xa8, 0xe9, - 0x73, 0x26, 0x00, 0x00, 0xc1, 0x0b, 0xb3, 0xc1, - 0x08, 0xb3, 0xc1, 0x07, 0xc0, 0x07, 0xc0, 0x0a, - 0xe8, 0xa6, 0xe9, 0x3b, 0xc0, 0x0b, 0xc0, 0x08, - 0x1b, 0x11, 0xb0, 0xea, 0x04, 0x1b, 0x71, 0x1b, - 0x1b, 0x5e, 0x07, 0x00, 0x42, 0xb8, 0x01, 0x00, - 0x00, 0xc0, 0x0b, 0xc0, 0x08, 0x47, 0x11, 0xea, - 0x03, 0x0e, 0xb3, 0xc0, 0x0a, 0xc0, 0x07, 0x47, - 0xb5, 0x9d, 0x24, 0x02, 0x00, 0x1b, 0x71, 0x1b, - 0x49, 0xc0, 0x08, 0xb4, 0x9d, 0xc0, 0x09, 0x9c, - 0xc1, 0x08, 0x93, 0x07, 0xeb, 0xbf, 0xb3, 0xc1, - 0x06, 0xb3, 0xc1, 0x08, 0xc0, 0x08, 0xc0, 0x09, - 0xa6, 0xe9, 0x0f, 0xc0, 0x06, 0xc0, 0x0b, 0xc0, - 0x08, 0x47, 0x9d, 0xc1, 0x06, 0x93, 0x08, 0xeb, - 0xec, 0xc0, 0x06, 0xc4, 0xa7, 0xea, 0x05, 0x92, - 0x09, 0xeb, 0x89, 0xc0, 0x09, 0xb4, 0xa8, 0x69, - 0xa5, 0x00, 0x00, 0x00, 0xb3, 0xc1, 0x06, 0xc0, - 0x09, 0xb4, 0x9e, 0xc1, 0x08, 0xc0, 0x04, 0xc1, - 0x05, 0xc0, 0x05, 0xc5, 0xa6, 0x69, 0x8b, 0x00, - 0x00, 0x00, 0xdf, 0xc0, 0x05, 0x47, 0xb3, 0x47, - 0x04, 0x9b, 0x01, 0x00, 0x00, 0xae, 0x11, 0xea, - 0x0e, 0x0e, 0xdf, 0xc0, 0x05, 0xb4, 0x9d, 0x47, - 0x04, 0x10, 0x02, 0x00, 0x00, 0xae, 0xea, 0x6a, - 0xc0, 0x06, 0xc7, 0xe8, 0x9d, 0xc1, 0x06, 0x5e, - 0x08, 0x00, 0xc7, 0xee, 0x0e, 0x04, 0x1c, 0x02, - 0x00, 0x00, 0xcb, 0xc0, 0x08, 0xc0, 0x09, 0xb4, - 0x9e, 0xae, 0xe9, 0x11, 0x5e, 0x09, 0x00, 0x04, - 0x7d, 0x01, 0x00, 0x00, 0xd0, 0xef, 0x0e, 0xb3, - 0xc1, 0x08, 0xeb, 0x2f, 0x5e, 0x09, 0x00, 0xbf, - 0xc0, 0x0b, 0xc0, 0x08, 0x91, 0xc1, 0x08, 0x47, - 0xc0, 0x06, 0x9e, 0xef, 0x0e, 0xeb, 0x1c, 0x11, - 0x7e, 0x79, 0x5e, 0x01, 0x00, 0x00, 0x05, 0x00, - 0x81, 0x02, 0x0e, 0x3d, 0x79, 0x21, 0x02, 0x00, - 0x00, 0x06, 0x00, 0x81, 0x02, 0x0e, 0x3d, 0x84, - 0xeb, 0x0a, 0x5e, 0x0a, 0x00, 0xd0, 0xc0, 0x05, - 0xef, 0xeb, 0xdd, 0x0e, 0x93, 0x05, 0xec, 0x72, - 0xff, 0xc0, 0x05, 0xc1, 0x04, 0xc0, 0x04, 0xc1, - 0x05, 0xc0, 0x05, 0xc5, 0xa6, 0xe9, 0x43, 0x5e, - 0x08, 0x00, 0xc7, 0xee, 0x0e, 0x04, 0x1c, 0x02, - 0x00, 0x00, 0xcb, 0x5e, 0x09, 0x00, 0x04, 0x7d, - 0x01, 0x00, 0x00, 0xd0, 0xef, 0x0e, 0xeb, 0x1c, - 0x11, 0x7e, 0x79, 0x5e, 0x01, 0x00, 0x00, 0x05, - 0x00, 0x81, 0x02, 0x0e, 0x3d, 0x79, 0x21, 0x02, - 0x00, 0x00, 0x06, 0x00, 0x81, 0x02, 0x0e, 0x3d, - 0x84, 0xeb, 0x0a, 0x5e, 0x0a, 0x00, 0xd0, 0xc0, - 0x05, 0xef, 0xeb, 0xdd, 0x0e, 0x93, 0x05, 0xeb, - 0xb9, 0x5e, 0x09, 0x00, 0x04, 0x7d, 0x01, 0x00, - 0x00, 0xd0, 0xb5, 0x9e, 0xd8, 0xef, 0x0e, 0x5e, - 0x05, 0x00, 0xdf, 0xc5, 0x47, 0xee, 0x0e, 0xc5, - 0xdc, 0x26, 0x02, 0x00, 0x28, 0xbe, 0x00, 0xc9, - 0xbe, 0x01, 0xc1, 0x0b, 0xbe, 0x02, 0xc1, 0x0c, - 0xbe, 0x03, 0xc1, 0x0d, 0xbe, 0x04, 0xc1, 0x0e, - 0xbe, 0x05, 0xc1, 0x0f, 0xbe, 0x06, 0xc1, 0x10, - 0xbe, 0x07, 0xc1, 0x11, 0xbe, 0x08, 0xc1, 0x12, - 0xbe, 0x09, 0xc1, 0x13, 0xbe, 0x0a, 0xc1, 0x14, - 0xbe, 0x0b, 0xc1, 0x15, 0xbe, 0x0c, 0xc1, 0x16, - 0xbe, 0x0d, 0xc1, 0x17, 0x0b, 0xc8, 0xd1, 0x97, - 0x04, 0x48, 0x00, 0x00, 0x00, 0xae, 0xe9, 0x1c, - 0xd1, 0x07, 0xaf, 0xe9, 0x17, 0xd1, 0xcc, 0x41, - 0x2d, 0x02, 0x00, 0x00, 0xd5, 0xc4, 0x41, 0x2e, - 0x02, 0x00, 0x00, 0xd6, 0xc4, 0x41, 0xe1, 0x00, - 0x00, 0x00, 0xd7, 0xd1, 0x97, 0x04, 0x46, 0x00, - 0x00, 0x00, 0xaf, 0xe9, 0x03, 0x09, 0xd5, 0xc5, - 0xd2, 0xb5, 0xef, 0xd6, 0xc5, 0xd3, 0x0a, 0xef, - 0xd7, 0xc5, 0xc4, 0x41, 0xd1, 0x01, 0x00, 0x00, - 0x5e, 0x10, 0x00, 0x42, 0x7e, 0x01, 0x00, 0x00, - 0x5e, 0x11, 0x00, 0xbb, 0x50, 0x24, 0x02, 0x00, - 0xef, 0xca, 0xc5, 0xc4, 0x41, 0xd2, 0x01, 0x00, - 0x00, 0xbb, 0x64, 0xef, 0xcb, 0xc5, 0xc4, 0x41, - 0xd3, 0x01, 0x00, 0x00, 0xc7, 0xbb, 0x0a, 0x9d, - 0xef, 0xc1, 0x04, 0xc5, 0xc4, 0x41, 0xd4, 0x01, - 0x00, 0x00, 0xbb, 0x4e, 0xef, 0xc1, 0x05, 0x0b, - 0x26, 0x01, 0x00, 0xc1, 0x06, 0x26, 0x00, 0x00, - 0xc1, 0x07, 0x26, 0x00, 0x00, 0xc1, 0x08, 0x26, - 0x00, 0x00, 0xc1, 0x09, 0x04, 0x77, 0x01, 0x00, - 0x00, 0xc1, 0x0a, 0xc0, 0x0f, 0xd0, 0xb3, 0xef, - 0x0e, 0xc0, 0x17, 0xb3, 0xb3, 0xef, 0x0e, 0xc0, - 0x10, 0xbf, 0xee, 0x0e, 0xc0, 0x09, 0x42, 0x5a, - 0x00, 0x00, 0x00, 0xbf, 0x25, 0x01, 0x00, 0x0c, - 0x43, 0x02, 0x01, 0x88, 0x05, 0x01, 0x00, 0x01, - 0x07, 0x05, 0x00, 0x3c, 0x01, 0x9a, 0x07, 0x00, - 0x01, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0x86, 0x05, - 0x73, 0x01, 0xd0, 0x03, 0x18, 0x01, 0xcc, 0x03, - 0x16, 0x01, 0xce, 0x03, 0x17, 0x01, 0x65, 0x00, - 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, 0xdd, 0x42, - 0x2f, 0x02, 0x00, 0x00, 0xd0, 0x0b, 0xde, 0x4c, - 0x2e, 0x02, 0x00, 0x00, 0xdf, 0x4c, 0xe1, 0x00, - 0x00, 0x00, 0x5e, 0x04, 0x00, 0x4c, 0x2d, 0x02, - 0x00, 0x00, 0x24, 0x02, 0x00, 0x24, 0x01, 0x00, - 0x0e, 0x65, 0x00, 0x00, 0x42, 0x76, 0x01, 0x00, - 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x24, 0x01, - 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, 0x8a, 0x05, - 0x01, 0x05, 0x01, 0x06, 0x03, 0x00, 0xb4, 0x01, - 0x06, 0xc8, 0x05, 0x00, 0x01, 0x00, 0x90, 0x06, - 0x00, 0x00, 0x00, 0xec, 0x03, 0x00, 0x01, 0x00, - 0xe0, 0x08, 0x00, 0x02, 0x00, 0x90, 0x07, 0x00, - 0x03, 0x00, 0xe2, 0x08, 0x00, 0x04, 0x00, 0x8c, - 0x05, 0x76, 0x01, 0x94, 0x05, 0x7a, 0x01, 0xb4, - 0x03, 0x00, 0x0c, 0xd0, 0x04, 0x32, 0x02, 0x00, - 0x00, 0xae, 0xe9, 0x06, 0xdc, 0xed, 0x0e, 0x0a, - 0x28, 0xd0, 0xb3, 0x47, 0x04, 0x9a, 0x01, 0x00, - 0x00, 0xaf, 0xe9, 0x0e, 0xd0, 0xb3, 0x47, 0x04, - 0x9b, 0x01, 0x00, 0x00, 0xaf, 0xe9, 0x03, 0x09, - 0x28, 0xb4, 0xc8, 0xc4, 0xd0, 0xe8, 0xa6, 0xe9, - 0x10, 0xd0, 0xc4, 0x47, 0x04, 0xbf, 0x01, 0x00, - 0x00, 0xaf, 0xe9, 0x05, 0x93, 0x00, 0xeb, 0xec, - 0xd0, 0x42, 0x78, 0x01, 0x00, 0x00, 0xb4, 0xc4, - 0x24, 0x02, 0x00, 0xc9, 0xb3, 0xca, 0xdd, 0x7d, - 0xeb, 0x21, 0xc1, 0x04, 0xc0, 0x04, 0x42, 0xab, - 0x01, 0x00, 0x00, 0xc5, 0x24, 0x01, 0x00, 0xe9, - 0x12, 0xdd, 0xc0, 0x04, 0x47, 0xcb, 0x93, 0x02, - 0xc0, 0x04, 0xc5, 0xae, 0xe9, 0x05, 0xb3, 0xca, - 0xeb, 0x05, 0x80, 0xe9, 0xde, 0x0e, 0x0e, 0xc7, - 0xe9, 0x1d, 0xc6, 0xb5, 0xa6, 0xe9, 0x18, 0xc7, - 0xd0, 0x42, 0x78, 0x01, 0x00, 0x00, 0xc4, 0x24, - 0x01, 0x00, 0x42, 0x33, 0x02, 0x00, 0x00, 0x24, - 0x00, 0x00, 0xee, 0x0e, 0xeb, 0x20, 0x65, 0x02, - 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, 0x04, 0x34, - 0x02, 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, - 0xc5, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x24, 0x02, - 0x00, 0x24, 0x01, 0x00, 0x0e, 0x0a, 0x28, 0x0c, - 0x43, 0x02, 0x01, 0x8c, 0x05, 0x00, 0x01, 0x00, - 0x07, 0x09, 0x01, 0xdc, 0x01, 0x01, 0xea, 0x08, - 0x00, 0x00, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xd2, - 0x03, 0x19, 0x01, 0xca, 0x03, 0x15, 0x01, 0xd4, - 0x03, 0x1a, 0x01, 0xd0, 0x03, 0x18, 0x01, 0xce, - 0x03, 0x17, 0x01, 0xcc, 0x03, 0x16, 0x01, 0xc6, - 0x03, 0x13, 0x01, 0xc4, 0x03, 0x12, 0x01, 0x0c, - 0x42, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, - 0x00, 0x00, 0x0f, 0x01, 0xf2, 0x05, 0x00, 0x01, - 0x00, 0xd0, 0xe9, 0x07, 0x04, 0x7c, 0x00, 0x00, - 0x00, 0x28, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x28, - 0xbe, 0x00, 0x4d, 0x35, 0x02, 0x00, 0x00, 0xc8, - 0x65, 0x00, 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, - 0x04, 0x36, 0x02, 0x00, 0x00, 0x04, 0x37, 0x02, - 0x00, 0x00, 0x9d, 0xc4, 0xdd, 0xee, 0x9d, 0x04, - 0x38, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x39, 0x02, - 0x00, 0x00, 0x9d, 0xc4, 0xdd, 0x96, 0xee, 0x9d, - 0x04, 0x3a, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x3b, - 0x02, 0x00, 0x00, 0x9d, 0xc4, 0xde, 0xee, 0x9d, - 0x04, 0x3c, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x3d, - 0x02, 0x00, 0x00, 0x9d, 0xc4, 0xdf, 0xee, 0x9d, - 0x04, 0x3e, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x3f, - 0x02, 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, - 0x5e, 0x04, 0x00, 0x04, 0x40, 0x02, 0x00, 0x00, - 0x24, 0x02, 0x00, 0x9d, 0x04, 0x41, 0x02, 0x00, - 0x00, 0x9d, 0xc4, 0x5e, 0x05, 0x00, 0xee, 0x9d, - 0x04, 0x42, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x43, - 0x02, 0x00, 0x00, 0x9d, 0xc4, 0x5e, 0x06, 0x00, - 0xee, 0x9d, 0x04, 0x44, 0x02, 0x00, 0x00, 0x9d, - 0x04, 0x45, 0x02, 0x00, 0x00, 0x9d, 0xc4, 0x5e, - 0x07, 0x00, 0x5e, 0x08, 0x00, 0x41, 0x46, 0x02, - 0x00, 0x00, 0xac, 0xee, 0x9d, 0x04, 0x47, 0x02, - 0x00, 0x00, 0x9d, 0x04, 0x48, 0x02, 0x00, 0x00, - 0x9d, 0xc4, 0x5e, 0x07, 0x00, 0x5e, 0x08, 0x00, - 0x41, 0x49, 0x02, 0x00, 0x00, 0xac, 0xee, 0x9d, - 0x04, 0x4a, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x4b, - 0x02, 0x00, 0x00, 0x9d, 0x04, 0x4c, 0x02, 0x00, - 0x00, 0x9d, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x9d, + 0xf5, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x06, 0x1d, + 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, + 0x16, 0x07, 0x00, 0x64, 0x00, 0x64, 0x00, 0x67, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x6d, 0x00, 0x73, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x76, 0x00, 0x79, 0x00, 0x79, 0x00, 0x0b, + 0x07, 0x0d, 0x00, 0x0b, 0xd1, 0xb3, 0xa7, 0xe9, + 0x03, 0xdc, 0x28, 0xd0, 0xd1, 0xb4, 0x9e, 0x47, + 0xc8, 0xd1, 0xb4, 0xae, 0xe9, 0x17, 0xc4, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0xae, 0x11, 0xea, 0x09, + 0x0e, 0xc4, 0x04, 0x9f, 0x01, 0x00, 0x00, 0xae, + 0xe9, 0x03, 0xdd, 0x28, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x42, 0xa1, 0x01, 0x00, 0x00, 0xc4, 0x24, + 0x01, 0x00, 0xb3, 0xa9, 0xe9, 0x02, 0x29, 0xc4, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0xae, 0x69, 0xda, + 0x00, 0x00, 0x00, 0xd1, 0x8e, 0xd5, 0xd0, 0xd1, + 0xb4, 0x9e, 0x47, 0xcc, 0x11, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0xae, 0xea, 0x13, 0x11, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0xae, 0xea, 0x0a, 0x11, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x07, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x28, 0x11, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0xae, 0xe9, 0x05, 0x26, 0x00, + 0x00, 0x28, 0x11, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0xae, 0xe9, 0x07, 0xbd, 0x00, 0xbd, 0x01, 0x33, + 0x28, 0xde, 0xc4, 0xee, 0x69, 0x89, 0x00, 0x00, + 0x00, 0xdf, 0xd0, 0xd1, 0xef, 0xc9, 0xd1, 0xc5, + 0xe8, 0x9e, 0xca, 0xc5, 0x04, 0x03, 0x00, 0x00, + 0x00, 0xae, 0x11, 0xea, 0x09, 0x0e, 0xc5, 0x04, + 0x02, 0x00, 0x00, 0x00, 0xae, 0xe9, 0x03, 0x0a, + 0x28, 0xc5, 0x04, 0x01, 0x00, 0x00, 0x00, 0xae, + 0xe9, 0x03, 0x07, 0x28, 0xc5, 0x04, 0x08, 0x00, + 0x00, 0x00, 0xae, 0xe9, 0x03, 0xdc, 0x28, 0x5e, + 0x04, 0x00, 0xc5, 0x8d, 0xee, 0x96, 0xe9, 0x03, + 0xb3, 0x28, 0x5e, 0x05, 0x00, 0xd0, 0xc6, 0xef, + 0xcf, 0xf2, 0x11, 0xea, 0x04, 0x0e, 0xc7, 0xf1, + 0xe9, 0x03, 0xc7, 0x28, 0xc7, 0xc5, 0x47, 0xf3, + 0xea, 0x05, 0xc7, 0xc5, 0x47, 0x28, 0xc6, 0xb6, + 0xa9, 0xe9, 0x24, 0xd0, 0xc6, 0xb4, 0x9e, 0x47, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x17, + 0xc5, 0x42, 0xa7, 0x01, 0x00, 0x00, 0xbd, 0x02, + 0xbd, 0x03, 0x33, 0x24, 0x01, 0x00, 0xe9, 0x07, + 0x5e, 0x06, 0x00, 0x23, 0x00, 0x00, 0x0e, 0x0b, + 0x28, 0xdc, 0x28, 0x0c, 0x43, 0x02, 0x01, 0xee, + 0x04, 0x02, 0x0a, 0x02, 0x04, 0x03, 0x01, 0xee, + 0x01, 0x0c, 0xb2, 0x06, 0x00, 0x01, 0x00, 0x98, + 0x06, 0x00, 0x01, 0x00, 0xae, 0x06, 0x00, 0x00, + 0x00, 0xba, 0x06, 0x00, 0x01, 0x00, 0xd0, 0x06, + 0x00, 0x02, 0x00, 0xd2, 0x06, 0x00, 0x03, 0x00, + 0xc4, 0x05, 0x00, 0x04, 0x00, 0xf0, 0x05, 0x00, + 0x05, 0x00, 0xd4, 0x06, 0x00, 0x06, 0x00, 0xd6, + 0x06, 0x00, 0x07, 0x00, 0xd8, 0x06, 0x00, 0x08, + 0x00, 0xda, 0x06, 0x08, 0x00, 0x21, 0xea, 0x04, + 0x65, 0x01, 0xec, 0x04, 0x66, 0x01, 0xa0, 0x02, + 0x00, 0x01, 0x0c, 0x43, 0x02, 0x01, 0xda, 0x06, + 0x02, 0x00, 0x02, 0x03, 0x00, 0x00, 0x34, 0x02, + 0xd0, 0x05, 0x00, 0x01, 0x00, 0xe4, 0x05, 0x00, + 0x01, 0x00, 0xd0, 0xb3, 0x47, 0xd1, 0xb3, 0x47, + 0xad, 0xe9, 0x1b, 0xd0, 0xb3, 0x47, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0xac, 0xe9, 0x03, 0xb4, 0x28, + 0xd1, 0xb3, 0x47, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0xac, 0xe9, 0x03, 0xb2, 0x28, 0xd0, 0xd1, 0xa6, + 0xe9, 0x03, 0xb2, 0x28, 0xd0, 0xd1, 0xa8, 0xe9, + 0x04, 0xb4, 0x8d, 0x28, 0xb3, 0x28, 0xdc, 0xd0, + 0xd1, 0xef, 0xc8, 0xdd, 0xd0, 0xd1, 0xc4, 0xe8, + 0x9e, 0xef, 0xca, 0x26, 0x00, 0x00, 0xcb, 0xb3, + 0xc1, 0x04, 0xc6, 0xc9, 0xc0, 0x04, 0xbb, 0x0a, + 0xa6, 0xe9, 0x67, 0xc5, 0xf2, 0xea, 0x63, 0xc5, + 0x06, 0xaf, 0xe9, 0x5e, 0xde, 0x42, 0xae, 0x01, + 0x00, 0x00, 0xc5, 0x24, 0x01, 0x00, 0xc1, 0x07, + 0xb3, 0xc1, 0x05, 0xc0, 0x05, 0xc0, 0x07, 0xe8, + 0xa6, 0xe9, 0x38, 0xc0, 0x07, 0xc0, 0x05, 0x47, + 0xc2, 0x08, 0x97, 0x04, 0x47, 0x00, 0x00, 0x00, + 0xac, 0xe9, 0x24, 0xbf, 0xc0, 0x08, 0x8d, 0x9d, + 0xc0, 0x08, 0xad, 0xe9, 0x1a, 0xc0, 0x08, 0x42, + 0xaf, 0x01, 0x00, 0x00, 0xc4, 0x24, 0x01, 0x00, + 0xe9, 0x0d, 0xc7, 0x42, 0x8e, 0x01, 0x00, 0x00, + 0xc0, 0x08, 0x24, 0x01, 0x00, 0x0e, 0x93, 0x05, + 0xeb, 0xc2, 0xde, 0x42, 0x5e, 0x00, 0x00, 0x00, + 0xc5, 0x24, 0x01, 0x00, 0xc9, 0x93, 0x04, 0xeb, + 0x94, 0xc7, 0xe8, 0xb4, 0xa8, 0xe9, 0x51, 0xbe, + 0x00, 0xc1, 0x09, 0xbe, 0x00, 0x0e, 0xc7, 0x42, + 0xb0, 0x01, 0x00, 0x00, 0x62, 0x09, 0x00, 0x24, + 0x01, 0x00, 0x0e, 0xb4, 0xc2, 0x05, 0xc1, 0x04, + 0xc0, 0x04, 0xc7, 0xe8, 0xa6, 0xe9, 0x29, 0xc7, + 0xc0, 0x04, 0x47, 0xc7, 0xc0, 0x04, 0xb4, 0x9e, + 0x47, 0xad, 0xe9, 0x18, 0xc7, 0xc0, 0x05, 0x91, + 0xc1, 0x05, 0x1b, 0x11, 0xb0, 0xea, 0x04, 0x1b, + 0x71, 0x1b, 0x1b, 0xc7, 0xc0, 0x04, 0x47, 0x1b, + 0x71, 0x1b, 0x49, 0x93, 0x04, 0xeb, 0xd2, 0xc7, + 0xc0, 0x05, 0x43, 0x30, 0x00, 0x00, 0x00, 0x0b, + 0xc7, 0x4c, 0x59, 0x01, 0x00, 0x00, 0xc4, 0xe8, + 0x4c, 0x8c, 0x01, 0x00, 0x00, 0xc6, 0x4c, 0xb1, + 0x01, 0x00, 0x00, 0x28, 0x0c, 0x43, 0x02, 0x01, + 0xf0, 0x04, 0x00, 0x0d, 0x00, 0x07, 0x0a, 0x00, + 0x8f, 0x03, 0x0d, 0xb2, 0x05, 0x00, 0x00, 0x00, + 0xe4, 0x06, 0x00, 0x01, 0x00, 0xae, 0x06, 0x00, + 0x02, 0x00, 0xc4, 0x05, 0x00, 0x03, 0x00, 0xf0, + 0x05, 0x00, 0x04, 0x00, 0xda, 0x05, 0x00, 0x05, + 0x00, 0xe6, 0x06, 0x00, 0x06, 0x00, 0xe8, 0x06, + 0x00, 0x07, 0x00, 0xea, 0x06, 0x00, 0x08, 0x00, + 0xec, 0x06, 0x00, 0x09, 0x00, 0xee, 0x06, 0x00, + 0x0a, 0x00, 0xf0, 0x06, 0x00, 0x0b, 0x00, 0xf2, + 0x06, 0x00, 0x0c, 0x00, 0xee, 0x04, 0x67, 0x01, + 0xee, 0x03, 0x27, 0x01, 0xf0, 0x03, 0x28, 0x01, + 0xa4, 0x04, 0x42, 0x01, 0xf8, 0x03, 0x2c, 0x01, + 0xf0, 0x04, 0x68, 0x01, 0xb0, 0x02, 0x0b, 0x01, + 0x84, 0x04, 0x32, 0x01, 0xb4, 0x03, 0x00, 0x0c, + 0xfc, 0x04, 0x6e, 0x01, 0xdc, 0xdd, 0xde, 0xef, + 0xcd, 0x41, 0x59, 0x01, 0x00, 0x00, 0xcc, 0xe8, + 0xb3, 0xae, 0xe9, 0x02, 0x29, 0xc4, 0xb3, 0x47, + 0xce, 0xe8, 0xc1, 0x05, 0xb4, 0xcb, 0xc7, 0xc4, + 0xe8, 0xa6, 0xe9, 0x2a, 0xc4, 0xc7, 0x47, 0xc1, + 0x06, 0xb3, 0xc1, 0x04, 0xc0, 0x04, 0xc0, 0x05, + 0xa6, 0xe9, 0x17, 0xc0, 0x06, 0xc0, 0x04, 0x47, + 0xc6, 0xc0, 0x04, 0x47, 0xaf, 0xe9, 0x07, 0xc0, + 0x04, 0xc1, 0x05, 0xeb, 0x05, 0x93, 0x04, 0xeb, + 0xe4, 0x93, 0x03, 0xeb, 0xd2, 0xc5, 0x41, 0x8c, + 0x01, 0x00, 0x00, 0xcb, 0xc7, 0xc0, 0x05, 0xa6, + 0xe9, 0x0b, 0xdf, 0xc6, 0xc7, 0x47, 0xee, 0x0e, + 0x93, 0x03, 0xeb, 0xf1, 0x5e, 0x04, 0x00, 0x5e, + 0x05, 0x00, 0xae, 0xe9, 0x42, 0xc4, 0xe8, 0xb4, + 0xac, 0xe9, 0x3c, 0xc5, 0x41, 0xb1, 0x01, 0x00, + 0x00, 0xc4, 0xb3, 0x47, 0x47, 0xc2, 0x0c, 0xf4, + 0xe9, 0x1a, 0xdf, 0x04, 0xba, 0x01, 0x00, 0x00, + 0xee, 0x0e, 0xc0, 0x0c, 0xe8, 0xb3, 0xac, 0xe9, + 0x1e, 0xdf, 0x04, 0xbb, 0x01, 0x00, 0x00, 0xee, + 0x0e, 0xeb, 0x14, 0xc0, 0x0c, 0x97, 0x04, 0x48, + 0x00, 0x00, 0x00, 0xac, 0xe9, 0x09, 0xdf, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0xee, 0x0e, 0x5e, 0x04, + 0x00, 0x5e, 0x05, 0x00, 0xae, 0x69, 0xdc, 0x00, + 0x00, 0x00, 0xc4, 0xe8, 0xb5, 0xa9, 0x69, 0xd3, + 0x00, 0x00, 0x00, 0xb3, 0xc1, 0x07, 0xb3, 0xcb, + 0xc7, 0xc4, 0xe8, 0xa6, 0xe9, 0x18, 0x5e, 0x06, + 0x00, 0x42, 0xbc, 0x01, 0x00, 0x00, 0xc0, 0x07, + 0xc4, 0xc7, 0x47, 0xe8, 0x24, 0x02, 0x00, 0xc1, + 0x07, 0x93, 0x03, 0xeb, 0xe4, 0xb5, 0x94, 0x07, + 0x5e, 0x06, 0x00, 0x42, 0xbc, 0x01, 0x00, 0x00, + 0xb4, 0x5e, 0x06, 0x00, 0x42, 0xbd, 0x01, 0x00, + 0x00, 0x5e, 0x07, 0x00, 0xb4, 0x9d, 0xc0, 0x07, + 0x9b, 0x24, 0x01, 0x00, 0x24, 0x02, 0x00, 0xc1, + 0x09, 0x5e, 0x06, 0x00, 0x42, 0xbe, 0x01, 0x00, + 0x00, 0xc4, 0xe8, 0xc0, 0x09, 0x9b, 0x24, 0x01, + 0x00, 0xc1, 0x0b, 0x65, 0x08, 0x00, 0x42, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x0e, 0xb3, 0xc1, 0x0a, 0xc0, + 0x0a, 0xc0, 0x0b, 0xa6, 0xe9, 0x58, 0xb3, 0xc1, + 0x08, 0xc0, 0x08, 0xc0, 0x09, 0xa6, 0xe9, 0x39, + 0xc0, 0x08, 0xc0, 0x0b, 0x9a, 0xc0, 0x0a, 0x9d, + 0xcf, 0xc4, 0xe8, 0xa9, 0xea, 0x2b, 0xc4, 0xc7, + 0x47, 0xca, 0xc0, 0x08, 0xc0, 0x09, 0xb4, 0x9e, + 0xad, 0xe9, 0x0d, 0xc6, 0x42, 0xbf, 0x01, 0x00, + 0x00, 0xc0, 0x07, 0x24, 0x01, 0x00, 0xca, 0x65, + 0x08, 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, 0xc6, + 0x24, 0x01, 0x00, 0x0e, 0x93, 0x08, 0xeb, 0xc2, + 0x65, 0x08, 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, + 0x0e, 0x93, 0x0a, 0xeb, 0xa3, 0x5e, 0x09, 0x00, + 0xed, 0x0e, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xf4, + 0x04, 0x02, 0x01, 0x02, 0x02, 0x00, 0x00, 0x10, + 0x03, 0xd8, 0x05, 0x00, 0x01, 0x00, 0x80, 0x07, + 0x00, 0x01, 0x00, 0xe4, 0x06, 0x00, 0x00, 0x00, + 0xbf, 0xc8, 0xd1, 0x90, 0xd5, 0xb3, 0xa8, 0xe9, + 0x06, 0xd0, 0x94, 0x00, 0xeb, 0xf5, 0xc4, 0x28, + 0x0c, 0x43, 0x02, 0x01, 0xfc, 0x04, 0x00, 0x00, + 0x00, 0x03, 0x07, 0x00, 0x1e, 0x00, 0xb4, 0x03, + 0x00, 0x0c, 0xde, 0x03, 0x1f, 0x01, 0x86, 0x04, + 0x33, 0x01, 0x96, 0x04, 0x3b, 0x01, 0x84, 0x04, + 0x32, 0x01, 0xf2, 0x03, 0x29, 0x01, 0xf4, 0x03, + 0x2a, 0x01, 0x65, 0x00, 0x00, 0x42, 0x7a, 0x01, + 0x00, 0x00, 0xdd, 0x24, 0x01, 0x00, 0x0e, 0xdf, + 0xdd, 0xee, 0x5e, 0x04, 0x00, 0x9c, 0xe2, 0xbf, + 0x5f, 0x05, 0x00, 0xb3, 0x5f, 0x06, 0x00, 0x29, + 0x0c, 0x43, 0x02, 0x01, 0xfe, 0x04, 0x02, 0x01, + 0x02, 0x05, 0x11, 0x00, 0x80, 0x01, 0x03, 0x82, + 0x07, 0x00, 0x01, 0x00, 0x84, 0x07, 0x00, 0x01, + 0x00, 0xe6, 0x06, 0x00, 0x00, 0x00, 0xee, 0x03, + 0x27, 0x01, 0xf0, 0x03, 0x28, 0x01, 0xd8, 0x03, + 0x1c, 0x01, 0xd6, 0x03, 0x1b, 0x01, 0xfa, 0x04, + 0x6d, 0x01, 0xde, 0x03, 0x1f, 0x01, 0xdc, 0x03, + 0x1e, 0x01, 0xea, 0x03, 0x25, 0x01, 0xf4, 0x04, + 0x6a, 0x01, 0xe0, 0x03, 0x20, 0x01, 0xe4, 0x03, + 0x22, 0x01, 0xca, 0x03, 0x15, 0x01, 0xe8, 0x03, + 0x24, 0x01, 0xe2, 0x03, 0x21, 0x01, 0xfc, 0x04, + 0x6e, 0x01, 0xa2, 0x04, 0x41, 0x01, 0xf8, 0x04, + 0x6c, 0x01, 0xd0, 0x11, 0xea, 0x03, 0x0e, 0xbf, + 0xe4, 0xe8, 0xe1, 0xdf, 0xe8, 0xe2, 0xd1, 0x5f, + 0x04, 0x00, 0x5e, 0x06, 0x00, 0x5f, 0x05, 0x00, + 0x5e, 0x07, 0x00, 0xe9, 0x22, 0x5e, 0x05, 0x00, + 0x5e, 0x08, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x5e, 0x09, 0x00, 0x5e, 0x05, 0x00, 0xe8, 0x9e, + 0xef, 0x9d, 0x60, 0x05, 0x00, 0x5e, 0x0a, 0x00, + 0x9d, 0x5f, 0x05, 0x00, 0xeb, 0x36, 0x5e, 0x0b, + 0x00, 0xe9, 0x20, 0x5e, 0x0c, 0x00, 0xbc, 0xe8, + 0x03, 0x9b, 0xc8, 0x5e, 0x05, 0x00, 0xc4, 0x42, + 0xc4, 0x01, 0x00, 0x00, 0xb9, 0x24, 0x01, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x9d, 0x9d, 0x5f, + 0x05, 0x00, 0x5e, 0x05, 0x00, 0xe8, 0x5f, 0x09, + 0x00, 0x5e, 0x05, 0x00, 0x5e, 0x0d, 0x00, 0x9d, + 0x5f, 0x05, 0x00, 0x5e, 0x0e, 0x00, 0xed, 0x0e, + 0x5e, 0x0f, 0x00, 0xed, 0x0e, 0xb3, 0x5f, 0x10, + 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, 0x80, 0x05, + 0x01, 0x01, 0x01, 0x03, 0x04, 0x02, 0x8c, 0x01, + 0x02, 0x8a, 0x07, 0x00, 0x01, 0x00, 0xca, 0x05, + 0x00, 0x00, 0x00, 0xa8, 0x02, 0x01, 0x01, 0xf8, + 0x04, 0x6c, 0x01, 0xf6, 0x04, 0x6b, 0x01, 0x82, + 0x05, 0x71, 0x01, 0x07, 0x02, 0x30, 0x07, 0x02, + 0x39, 0xdc, 0x42, 0xc6, 0x01, 0x00, 0x00, 0xd0, + 0x24, 0x01, 0x00, 0xc8, 0xdd, 0x11, 0xb3, 0xae, + 0xe9, 0x16, 0xc4, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0xac, 0xe9, 0x07, 0xc4, 0xe2, 0xb4, 0xe1, 0xeb, + 0x6c, 0xdf, 0xc4, 0xee, 0x0e, 0xeb, 0x66, 0x11, + 0xb4, 0xae, 0xe9, 0x27, 0xde, 0xc4, 0x9d, 0xe2, + 0xc4, 0x04, 0xc8, 0x01, 0x00, 0x00, 0xac, 0xe9, + 0x05, 0xb5, 0xe1, 0xeb, 0x50, 0xc4, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0xac, 0xe9, 0x05, 0xb6, 0xe1, + 0xeb, 0x43, 0xdf, 0xde, 0xee, 0x0e, 0xb3, 0xe1, + 0xeb, 0x3b, 0x11, 0xb5, 0xae, 0xe9, 0x27, 0xde, + 0xc4, 0x9d, 0xe2, 0xc4, 0x04, 0xca, 0x01, 0x00, + 0x00, 0xac, 0x11, 0xea, 0x0e, 0x0e, 0xc4, 0xbd, + 0x00, 0xa9, 0x11, 0xe9, 0x06, 0x0e, 0xc4, 0xbd, + 0x01, 0xa7, 0x96, 0xe9, 0x18, 0xdf, 0xde, 0xee, + 0x0e, 0xb3, 0xe1, 0xeb, 0x10, 0x11, 0xb6, 0xae, + 0xe9, 0x0b, 0xde, 0xc4, 0x9d, 0xe2, 0xdf, 0xde, + 0xee, 0x0e, 0xb3, 0xe1, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0x82, 0x05, 0x01, 0x01, 0x01, 0x05, 0x0e, + 0x00, 0xb6, 0x01, 0x02, 0x96, 0x07, 0x00, 0x01, + 0x00, 0x98, 0x07, 0x00, 0x00, 0x00, 0xfa, 0x03, + 0x2d, 0x01, 0x96, 0x04, 0x3b, 0x01, 0xa4, 0x04, + 0x42, 0x01, 0xf2, 0x04, 0x69, 0x01, 0xf6, 0x03, + 0x2b, 0x01, 0xfa, 0x04, 0x6d, 0x01, 0xee, 0x03, + 0x27, 0x01, 0xb6, 0x03, 0x01, 0x0c, 0x80, 0x04, + 0x30, 0x01, 0xac, 0x05, 0x86, 0x01, 0x01, 0xf8, + 0x03, 0x2c, 0x01, 0xaa, 0x04, 0x45, 0x01, 0xf0, + 0x03, 0x28, 0x01, 0xa2, 0x04, 0x41, 0x01, 0xdc, + 0xe9, 0x11, 0xdd, 0xd0, 0xee, 0xb4, 0xae, 0xe9, + 0x05, 0xde, 0xd0, 0xee, 0x0e, 0x09, 0xe0, 0xec, + 0x80, 0x00, 0xdf, 0xd0, 0x47, 0xcc, 0xe9, 0x5a, + 0xc4, 0x5f, 0x04, 0x00, 0xc4, 0xd0, 0xee, 0x11, + 0xb2, 0xae, 0xe9, 0x09, 0x5e, 0x05, 0x00, 0x5e, + 0x06, 0x00, 0xee, 0x29, 0x11, 0xbb, 0xfe, 0xae, + 0xe9, 0x07, 0x5e, 0x05, 0x00, 0x07, 0xee, 0x29, + 0x11, 0xbb, 0xfd, 0xae, 0xe9, 0x2b, 0x65, 0x07, + 0x00, 0x42, 0x5e, 0x01, 0x00, 0x00, 0x65, 0x07, + 0x00, 0x41, 0x5f, 0x01, 0x00, 0x00, 0x07, 0x24, + 0x02, 0x00, 0x0e, 0x65, 0x07, 0x00, 0x42, 0x60, + 0x01, 0x00, 0x00, 0x5e, 0x08, 0x00, 0x07, 0x24, + 0x02, 0x00, 0x0e, 0x5e, 0x09, 0x00, 0xed, 0x29, + 0x0e, 0x5e, 0x04, 0x00, 0x5f, 0x0a, 0x00, 0xeb, + 0x20, 0xdd, 0xd0, 0xee, 0xb4, 0xae, 0xe9, 0x14, + 0xd0, 0x04, 0xc3, 0x01, 0x00, 0x00, 0xa9, 0xe9, + 0x0b, 0xde, 0xd0, 0xee, 0x0e, 0xde, 0x5f, 0x0a, + 0x00, 0xeb, 0x06, 0x5e, 0x0b, 0x00, 0xed, 0x0e, + 0x5e, 0x0c, 0x00, 0xb3, 0xa6, 0xe9, 0x04, 0xb3, + 0xeb, 0x14, 0x5e, 0x0c, 0x00, 0x5e, 0x06, 0x00, + 0xe8, 0xa8, 0xe9, 0x07, 0x5e, 0x06, 0x00, 0xe8, + 0xeb, 0x04, 0x5e, 0x0c, 0x00, 0x5f, 0x0c, 0x00, + 0x5e, 0x0d, 0x00, 0xed, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0x84, 0x05, 0x02, 0x01, 0x02, 0x05, 0x02, + 0x01, 0x70, 0x03, 0xd0, 0x05, 0x00, 0x01, 0x00, + 0x9a, 0x07, 0x00, 0x01, 0x00, 0xae, 0x06, 0x00, + 0x00, 0x00, 0xba, 0x03, 0x0d, 0x01, 0xb0, 0x02, + 0x0b, 0x01, 0x07, 0x02, 0x30, 0xdc, 0xd0, 0xee, + 0x96, 0xe9, 0x0a, 0xd0, 0x42, 0x36, 0x00, 0x00, + 0x00, 0x25, 0x00, 0x00, 0xd0, 0xb3, 0xac, 0xe9, + 0x15, 0xb4, 0xd0, 0x9b, 0xb3, 0xa6, 0xe9, 0x09, + 0x04, 0xce, 0x01, 0x00, 0x00, 0xc8, 0xeb, 0x4c, + 0xbd, 0x00, 0xc8, 0xeb, 0x47, 0xd1, 0xbb, 0x10, + 0xac, 0xe9, 0x37, 0xd0, 0xdd, 0x42, 0xbd, 0x01, + 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xae, 0xe9, + 0x29, 0xd0, 0xb3, 0xa6, 0xe9, 0x0c, 0xd0, 0x8c, + 0xd4, 0x04, 0xcf, 0x01, 0x00, 0x00, 0xc8, 0xeb, + 0x03, 0xbf, 0xc8, 0xc4, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0xd0, 0x42, 0x36, 0x00, 0x00, 0x00, 0xbb, + 0x10, 0x24, 0x01, 0x00, 0x9d, 0x9d, 0xc8, 0xeb, + 0x0b, 0xd0, 0x42, 0x36, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0xc8, 0xc4, 0x28, 0x0c, 0x43, 0x02, + 0x01, 0x86, 0x05, 0x02, 0x01, 0x02, 0x05, 0x00, + 0x00, 0x40, 0x03, 0xd0, 0x05, 0x00, 0x01, 0x00, + 0x9a, 0x07, 0x00, 0x01, 0x00, 0xae, 0x06, 0x00, + 0x00, 0x00, 0xd1, 0xbb, 0x10, 0xac, 0xe9, 0x29, + 0xd0, 0xb3, 0xa6, 0xe9, 0x0c, 0xd0, 0x8c, 0xd4, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0xc8, 0xeb, 0x03, + 0xbf, 0xc8, 0xc4, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0xd0, 0x42, 0x36, 0x00, 0x00, 0x00, 0xbb, 0x10, + 0x24, 0x01, 0x00, 0x9d, 0x9d, 0xc8, 0xeb, 0x0b, + 0xd0, 0x42, 0x36, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x00, 0xc8, 0xc4, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x9d, 0x28, 0x0c, 0x43, 0x02, 0x01, 0x00, 0x04, + 0x18, 0x04, 0x06, 0x12, 0x0e, 0xea, 0x01, 0x1c, + 0xa2, 0x07, 0x00, 0x01, 0x00, 0xce, 0x03, 0x00, + 0x01, 0x40, 0xa4, 0x07, 0x00, 0x01, 0x40, 0xa6, + 0x07, 0x00, 0x01, 0x40, 0xa8, 0x07, 0x00, 0x00, + 0x00, 0x82, 0x01, 0x00, 0x01, 0x00, 0xaa, 0x07, + 0x00, 0x02, 0x40, 0xac, 0x07, 0x00, 0x03, 0x40, + 0xae, 0x07, 0x00, 0x04, 0x40, 0xb0, 0x07, 0x00, + 0x05, 0x40, 0xb2, 0x07, 0x00, 0x06, 0x40, 0x68, + 0x00, 0x07, 0x40, 0xb4, 0x07, 0x00, 0x08, 0x40, + 0xb6, 0x07, 0x00, 0x09, 0x40, 0xb8, 0x07, 0x00, + 0x0a, 0x40, 0xba, 0x07, 0x00, 0x0b, 0x40, 0xbc, + 0x07, 0x00, 0x0c, 0x40, 0xbe, 0x07, 0x00, 0x0d, + 0x40, 0xc0, 0x07, 0x00, 0x0e, 0x40, 0xc2, 0x07, + 0x00, 0x0f, 0x40, 0xc4, 0x07, 0x00, 0x10, 0x40, + 0xc6, 0x07, 0x00, 0x11, 0x40, 0xc8, 0x07, 0x00, + 0x12, 0x40, 0xca, 0x07, 0x00, 0x13, 0x40, 0xcc, + 0x07, 0x00, 0x14, 0x40, 0xce, 0x07, 0x00, 0x15, + 0x40, 0xd0, 0x07, 0x00, 0x16, 0x40, 0xd2, 0x07, + 0x00, 0x17, 0x40, 0xbe, 0x03, 0x0f, 0x01, 0xb2, + 0x02, 0x0c, 0x01, 0xa0, 0x02, 0x00, 0x01, 0x84, + 0x05, 0x72, 0x01, 0xd2, 0x03, 0x19, 0x01, 0x86, + 0x05, 0x73, 0x01, 0xa8, 0x02, 0x01, 0x01, 0xb4, + 0x02, 0x07, 0x01, 0xbc, 0x02, 0x08, 0x01, 0xaa, + 0x02, 0x03, 0x01, 0xa6, 0x02, 0x02, 0x01, 0xda, + 0x02, 0x04, 0x01, 0xa2, 0x02, 0x06, 0x01, 0xc6, + 0x02, 0x05, 0x01, 0xc2, 0x03, 0x11, 0x01, 0xc6, + 0x03, 0x13, 0x01, 0xb0, 0x02, 0x0b, 0x01, 0x84, + 0x04, 0x32, 0x01, 0x0c, 0x43, 0x02, 0x01, 0x82, + 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x00, 0x0e, + 0x02, 0xd4, 0x07, 0x00, 0x01, 0x00, 0xd6, 0x07, + 0x00, 0x01, 0x00, 0xbe, 0x03, 0x00, 0x00, 0xd0, + 0xf3, 0xe9, 0x03, 0xd1, 0x28, 0xd0, 0xf2, 0xe9, + 0x03, 0xdc, 0x28, 0xd0, 0x28, 0x0c, 0x43, 0x02, + 0x01, 0xba, 0x07, 0x01, 0x00, 0x01, 0x04, 0x01, + 0x00, 0x54, 0x01, 0xae, 0x06, 0x00, 0x01, 0x00, + 0xb2, 0x02, 0x01, 0x00, 0xd0, 0x42, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xe9, 0x0b, 0xdc, 0x42, 0xed, 0x01, + 0x00, 0x00, 0xd0, 0x25, 0x01, 0x00, 0xdc, 0x42, + 0xed, 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, + 0x42, 0x9a, 0x01, 0x00, 0x00, 0xb4, 0xb2, 0x24, + 0x02, 0x00, 0x42, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x24, 0x02, 0x00, 0xd4, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xd0, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x25, 0x02, 0x00, + 0x0c, 0x43, 0x02, 0x01, 0xbc, 0x07, 0x01, 0x00, + 0x01, 0x04, 0x01, 0x00, 0x0d, 0x01, 0xae, 0x06, + 0x00, 0x01, 0x00, 0xb4, 0x07, 0x08, 0x01, 0xdc, + 0x42, 0x8e, 0x01, 0x00, 0x00, 0xbf, 0xd0, 0x9d, 0x24, 0x01, 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, - 0x8e, 0x05, 0x01, 0x01, 0x01, 0x07, 0x01, 0x00, - 0x5f, 0x02, 0xa6, 0x06, 0x00, 0x01, 0x00, 0x9c, - 0x09, 0x04, 0x00, 0x03, 0xb4, 0x03, 0x00, 0x0c, - 0xd0, 0x42, 0x4f, 0x02, 0x00, 0x00, 0x04, 0x9b, - 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xd0, 0x42, - 0x4f, 0x02, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, - 0x00, 0x24, 0x01, 0x00, 0xa7, 0xe9, 0x09, 0xd0, - 0x04, 0x50, 0x02, 0x00, 0x00, 0x9d, 0xd4, 0x6c, - 0x13, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x42, - 0x51, 0x02, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, - 0x0e, 0x0e, 0x29, 0xc8, 0x6c, 0x21, 0x00, 0x00, - 0x00, 0x65, 0x00, 0x00, 0x42, 0x76, 0x01, 0x00, - 0x00, 0xbf, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc4, - 0x04, 0x7d, 0x01, 0x00, 0x00, 0x24, 0x02, 0x00, - 0x24, 0x01, 0x00, 0x0e, 0x0e, 0x29, 0x2f, 0x0c, - 0x43, 0x02, 0x01, 0x90, 0x05, 0x01, 0x00, 0x01, - 0x03, 0x02, 0x00, 0x10, 0x01, 0x9c, 0x09, 0x00, - 0x01, 0x00, 0xa4, 0x05, 0x82, 0x01, 0x01, 0xb4, - 0x03, 0x00, 0x0c, 0xdc, 0xed, 0x0e, 0x65, 0x01, - 0x00, 0x42, 0x48, 0x01, 0x00, 0x00, 0xd0, 0x24, - 0x01, 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, 0x92, - 0x05, 0x02, 0x00, 0x02, 0x03, 0x00, 0x00, 0x14, - 0x02, 0xa6, 0x06, 0x00, 0x01, 0x00, 0xce, 0x07, - 0x00, 0x01, 0x00, 0xd0, 0xe9, 0x10, 0x04, 0x52, - 0x02, 0x00, 0x00, 0x42, 0xe8, 0x01, 0x00, 0x00, - 0xd0, 0x24, 0x01, 0x00, 0x28, 0xd1, 0x28, 0x0c, - 0x42, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, - 0x02, 0x00, 0x06, 0x01, 0xa6, 0x06, 0x00, 0x01, - 0x00, 0xd2, 0x03, 0x19, 0x01, 0x92, 0x05, 0x79, - 0x01, 0xdd, 0xd0, 0x0a, 0xef, 0xe0, 0x29, 0x0c, - 0x42, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, - 0x02, 0x00, 0x07, 0x01, 0xa6, 0x06, 0x00, 0x01, - 0x00, 0xd2, 0x03, 0x19, 0x01, 0x92, 0x05, 0x79, - 0x01, 0xdd, 0xd0, 0x0a, 0xef, 0x96, 0xe0, 0x29, - 0x0c, 0x42, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, - 0x03, 0x02, 0x00, 0x07, 0x01, 0xa6, 0x06, 0x00, - 0x01, 0x00, 0xca, 0x03, 0x15, 0x01, 0x92, 0x05, - 0x79, 0x01, 0xdd, 0xd0, 0xdc, 0x96, 0xef, 0xe0, - 0x29, 0x0c, 0x42, 0x02, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x03, 0x02, 0x00, 0x07, 0x01, 0xa6, 0x06, - 0x00, 0x01, 0x00, 0xd4, 0x03, 0x1a, 0x01, 0x92, - 0x05, 0x79, 0x01, 0xdd, 0xd0, 0xdc, 0x96, 0xef, - 0xe0, 0x29, 0x0c, 0x42, 0x02, 0x01, 0x00, 0x01, - 0x00, 0x01, 0x02, 0x01, 0x00, 0x09, 0x01, 0xa6, - 0x06, 0x00, 0x01, 0x00, 0xd0, 0x03, 0x18, 0x01, - 0xd0, 0x8d, 0x11, 0xea, 0x03, 0x0e, 0xb5, 0xe0, - 0x29, 0x0c, 0x42, 0x02, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x03, 0x02, 0x00, 0x07, 0x01, 0xa6, 0x06, - 0x00, 0x01, 0x00, 0xce, 0x03, 0x17, 0x01, 0x92, - 0x05, 0x79, 0x01, 0xdd, 0xd0, 0xdc, 0x96, 0xef, - 0xe0, 0x29, 0x0c, 0x42, 0x02, 0x01, 0x00, 0x01, - 0x00, 0x01, 0x03, 0x02, 0x00, 0x07, 0x01, 0xa6, - 0x06, 0x00, 0x01, 0x00, 0xcc, 0x03, 0x16, 0x01, - 0x92, 0x05, 0x79, 0x01, 0xdd, 0xd0, 0xdc, 0x96, - 0xef, 0xe0, 0x29, 0x0c, 0x42, 0x02, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, - 0xc6, 0x03, 0x13, 0x01, 0xc4, 0x03, 0x12, 0x01, - 0xdd, 0x41, 0x46, 0x02, 0x00, 0x00, 0xe0, 0x29, - 0x0c, 0x42, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x02, 0x00, 0x08, 0x00, 0xc6, 0x03, 0x13, - 0x01, 0xc4, 0x03, 0x12, 0x01, 0xdd, 0x41, 0x49, - 0x02, 0x00, 0x00, 0xe0, 0x29, 0x0c, 0x42, 0x02, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, - 0x11, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0x65, 0x00, - 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, 0x04, 0x53, - 0x02, 0x00, 0x00, 0x24, 0x01, 0x00, 0x29, 0x0c, - 0x42, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x00, 0x04, 0x00, 0x90, 0x05, 0x78, 0x01, - 0xdc, 0xb3, 0xee, 0x29, 0x0c, 0x43, 0x02, 0x01, - 0x96, 0x05, 0x01, 0x03, 0x01, 0x06, 0x0a, 0x00, - 0xce, 0x01, 0x04, 0xa8, 0x09, 0x00, 0x01, 0x00, - 0xaa, 0x09, 0x00, 0x00, 0x00, 0xac, 0x09, 0x00, - 0x01, 0x00, 0xae, 0x09, 0x04, 0x00, 0x03, 0xd4, - 0x03, 0x1a, 0x01, 0xb4, 0x02, 0x07, 0x01, 0xb4, - 0x03, 0x00, 0x0c, 0xe6, 0x03, 0x23, 0x01, 0x88, - 0x05, 0x74, 0x01, 0xb8, 0x03, 0x00, 0x03, 0xc2, - 0x03, 0x11, 0x01, 0xc6, 0x03, 0x13, 0x01, 0xa4, - 0x02, 0x09, 0x01, 0xc0, 0x03, 0x10, 0x01, 0x6c, - 0x4a, 0x00, 0x00, 0x00, 0xdc, 0xe9, 0x09, 0x04, - 0x58, 0x02, 0x00, 0x00, 0xd0, 0x9d, 0xd4, 0xdd, - 0x42, 0x56, 0x02, 0x00, 0x00, 0x24, 0x00, 0x00, - 0xc9, 0x65, 0x02, 0x00, 0x42, 0x59, 0x02, 0x00, - 0x00, 0xd0, 0x0b, 0x0a, 0x4c, 0x5a, 0x02, 0x00, - 0x00, 0x24, 0x02, 0x00, 0xc8, 0xdd, 0x42, 0x56, - 0x02, 0x00, 0x00, 0x24, 0x00, 0x00, 0xc5, 0x9e, - 0xe3, 0x5e, 0x04, 0x00, 0xc4, 0xee, 0x0e, 0x5e, - 0x05, 0x00, 0xc4, 0x43, 0x66, 0x01, 0x00, 0x00, - 0x0e, 0x29, 0xca, 0x6c, 0x80, 0x00, 0x00, 0x00, - 0x65, 0x02, 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, - 0x5e, 0x06, 0x00, 0x5e, 0x07, 0x00, 0x41, 0x57, - 0x02, 0x00, 0x00, 0x47, 0x24, 0x01, 0x00, 0x0e, - 0xc6, 0x5e, 0x08, 0x00, 0xaa, 0xe9, 0x2a, 0x5e, - 0x09, 0x00, 0x42, 0x5b, 0x02, 0x00, 0x00, 0xc6, - 0x24, 0x01, 0x00, 0x0e, 0xc6, 0x41, 0x34, 0x00, - 0x00, 0x00, 0xe9, 0x33, 0x65, 0x02, 0x00, 0x42, - 0x76, 0x01, 0x00, 0x00, 0xc6, 0x41, 0x34, 0x00, - 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xeb, 0x1f, - 0x65, 0x02, 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, - 0x04, 0x5c, 0x02, 0x00, 0x00, 0x24, 0x01, 0x00, - 0x0e, 0x5e, 0x09, 0x00, 0x42, 0x5b, 0x02, 0x00, - 0x00, 0xc6, 0x24, 0x01, 0x00, 0x0e, 0x65, 0x02, - 0x00, 0x42, 0x76, 0x01, 0x00, 0x00, 0x5e, 0x06, - 0x00, 0x41, 0x77, 0x01, 0x00, 0x00, 0x24, 0x01, - 0x00, 0x0e, 0x0e, 0x29, 0x2f, 0x0c, 0x43, 0x02, - 0x01, 0x98, 0x05, 0x00, 0x00, 0x00, 0x03, 0x02, - 0x00, 0x14, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0x9a, - 0x05, 0x7d, 0x01, 0x65, 0x00, 0x00, 0x42, 0x76, - 0x01, 0x00, 0x00, 0x04, 0x5d, 0x02, 0x00, 0x00, - 0x24, 0x01, 0x00, 0x0e, 0xdd, 0xed, 0x29, 0x0c, - 0x43, 0x02, 0x01, 0x9a, 0x05, 0x00, 0x00, 0x00, - 0x04, 0x04, 0x00, 0x0c, 0x00, 0xfc, 0x04, 0x6e, - 0x01, 0xf2, 0x04, 0x69, 0x01, 0xea, 0x03, 0x25, - 0x01, 0x9c, 0x05, 0x7e, 0x01, 0xdc, 0xdd, 0x04, - 0x5e, 0x02, 0x00, 0x00, 0xde, 0xef, 0xdf, 0xef, - 0x29, 0x0c, 0x43, 0x02, 0x01, 0x9c, 0x05, 0x01, - 0x00, 0x01, 0x02, 0x02, 0x00, 0x07, 0x01, 0xa8, - 0x09, 0x00, 0x01, 0x00, 0x9e, 0x05, 0x7f, 0x01, - 0x9a, 0x05, 0x7d, 0x01, 0xdc, 0xd0, 0xee, 0x0e, - 0xdd, 0xed, 0x29, 0x0c, 0x43, 0x02, 0x01, 0x9e, - 0x05, 0x01, 0x01, 0x01, 0x02, 0x07, 0x00, 0x45, - 0x02, 0xa8, 0x09, 0x00, 0x01, 0x00, 0x84, 0x06, - 0x00, 0x00, 0x00, 0xe8, 0x03, 0x24, 0x01, 0x8a, - 0x05, 0x75, 0x01, 0xa0, 0x05, 0x80, 0x01, 0x01, - 0xdc, 0x03, 0x1e, 0x01, 0xea, 0x03, 0x25, 0x01, - 0x96, 0x05, 0x7b, 0x01, 0xb4, 0x03, 0x00, 0x0c, - 0xd0, 0x96, 0xe9, 0x02, 0x29, 0xdc, 0xe9, 0x0d, - 0xdc, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x9d, 0xd0, - 0x9d, 0xd4, 0xeb, 0x07, 0xdd, 0xd0, 0xee, 0xe9, - 0x02, 0x29, 0xde, 0xd0, 0xee, 0xcc, 0xb3, 0x47, - 0xe3, 0xc4, 0xb4, 0x47, 0x5f, 0x04, 0x00, 0xdf, - 0xe9, 0x04, 0xd0, 0xe0, 0x29, 0xbf, 0xe0, 0x5e, - 0x05, 0x00, 0xd0, 0xee, 0x0e, 0xb3, 0x5f, 0x04, - 0x00, 0x65, 0x06, 0x00, 0x42, 0x5f, 0x02, 0x00, - 0x00, 0x24, 0x00, 0x00, 0x29, 0x0c, 0x43, 0x02, - 0x01, 0xa0, 0x05, 0x01, 0x17, 0x01, 0x04, 0x03, - 0x0a, 0x84, 0x04, 0x18, 0xd0, 0x05, 0x00, 0x01, - 0x40, 0xbc, 0x05, 0x00, 0x00, 0x40, 0xc2, 0x05, - 0x00, 0x01, 0x40, 0xe4, 0x05, 0x00, 0x02, 0x40, - 0xf2, 0x05, 0x00, 0x03, 0x40, 0xea, 0x05, 0x00, - 0x04, 0x40, 0xc0, 0x09, 0x00, 0x05, 0x40, 0xea, - 0x03, 0x00, 0x06, 0x00, 0xc2, 0x09, 0x00, 0x07, - 0x00, 0xc4, 0x09, 0x00, 0x08, 0x40, 0xca, 0x06, - 0x00, 0x09, 0x40, 0xc6, 0x09, 0x00, 0x0a, 0x40, - 0xc8, 0x09, 0x00, 0x0b, 0x40, 0xca, 0x09, 0x00, - 0x0c, 0x40, 0xcc, 0x09, 0x00, 0x0d, 0x00, 0xce, - 0x09, 0x00, 0x0e, 0x00, 0xd0, 0x09, 0x00, 0x0f, - 0x00, 0xd2, 0x09, 0x00, 0x10, 0x00, 0xd4, 0x09, - 0x00, 0x11, 0x00, 0xd6, 0x09, 0x00, 0x12, 0x40, - 0xd8, 0x09, 0x00, 0x13, 0x40, 0xda, 0x09, 0x00, - 0x14, 0x40, 0xdc, 0x09, 0x00, 0x15, 0x00, 0xde, - 0x09, 0x00, 0x16, 0x00, 0x92, 0x04, 0x39, 0x01, - 0x98, 0x04, 0x3c, 0x01, 0x90, 0x04, 0x38, 0x01, - 0x0c, 0x43, 0x02, 0x01, 0xc6, 0x09, 0x01, 0x00, - 0x01, 0x02, 0x01, 0x00, 0x05, 0x01, 0xc2, 0x05, - 0x00, 0x01, 0x00, 0xc0, 0x09, 0x05, 0x01, 0xdc, - 0xd0, 0x9d, 0xe0, 0x29, 0x0c, 0x43, 0x02, 0x01, - 0xc8, 0x09, 0x01, 0x00, 0x01, 0x04, 0x01, 0x00, - 0x0d, 0x01, 0xc2, 0x05, 0x00, 0x01, 0x00, 0xc0, - 0x09, 0x05, 0x01, 0xdc, 0x42, 0x78, 0x01, 0x00, - 0x00, 0xdc, 0xe8, 0xb4, 0x9e, 0x25, 0x01, 0x00, - 0x0c, 0x43, 0x02, 0x01, 0xca, 0x09, 0x01, 0x00, - 0x01, 0x05, 0x02, 0x00, 0x14, 0x01, 0xc2, 0x05, - 0x00, 0x01, 0x00, 0xc8, 0x09, 0x0b, 0x01, 0xc0, - 0x09, 0x05, 0x01, 0xdc, 0xed, 0xd4, 0xdd, 0x42, - 0x78, 0x01, 0x00, 0x00, 0xb3, 0xdd, 0xe8, 0xb4, - 0x9e, 0x24, 0x02, 0x00, 0xe1, 0xd0, 0x28, 0x0c, - 0x43, 0x02, 0x01, 0xcc, 0x09, 0x00, 0x00, 0x00, - 0x03, 0x06, 0x00, 0x49, 0x00, 0xea, 0x05, 0x04, - 0x01, 0xc6, 0x09, 0x0a, 0x01, 0xbc, 0x05, 0x00, - 0x01, 0xf2, 0x05, 0x03, 0x01, 0xd0, 0x05, 0x00, - 0x03, 0xca, 0x09, 0x0c, 0x01, 0x04, 0x70, 0x02, - 0x00, 0x00, 0xe0, 0xdd, 0x04, 0xa2, 0x01, 0x00, - 0x00, 0xee, 0x0e, 0xde, 0x8f, 0xe2, 0xde, 0xdf, - 0xb4, 0x9e, 0xa6, 0xe9, 0x31, 0x5e, 0x04, 0x00, - 0xde, 0x47, 0x04, 0x7c, 0x00, 0x00, 0x00, 0xac, - 0xe9, 0x1f, 0x5e, 0x04, 0x00, 0xde, 0xb4, 0x9d, - 0x47, 0x04, 0xa2, 0x01, 0x00, 0x00, 0xac, 0xe9, - 0x10, 0xde, 0xb5, 0x9d, 0xe2, 0x5e, 0x05, 0x00, - 0x04, 0xa2, 0x01, 0x00, 0x00, 0xee, 0x0e, 0x29, - 0xde, 0x8f, 0xe2, 0xeb, 0xca, 0x29, 0x0c, 0x43, - 0x02, 0x01, 0xce, 0x09, 0x00, 0x00, 0x00, 0x02, - 0x04, 0x00, 0x1f, 0x00, 0xea, 0x05, 0x04, 0x01, - 0xbc, 0x05, 0x00, 0x01, 0xf2, 0x05, 0x03, 0x01, - 0xd0, 0x05, 0x00, 0x03, 0x04, 0x70, 0x02, 0x00, - 0x00, 0xe0, 0xdd, 0x8f, 0xe1, 0xdd, 0xde, 0xa6, - 0xe9, 0x11, 0xdf, 0xdd, 0x47, 0x04, 0x7d, 0x01, - 0x00, 0x00, 0xac, 0xea, 0x06, 0xdd, 0x8f, 0xe1, - 0xeb, 0xec, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xd0, - 0x09, 0x01, 0x00, 0x01, 0x03, 0x07, 0x00, 0x4c, - 0x01, 0xe2, 0x09, 0x00, 0x01, 0x00, 0xea, 0x05, - 0x04, 0x01, 0xc6, 0x09, 0x0a, 0x01, 0xbc, 0x05, - 0x00, 0x01, 0xf2, 0x05, 0x03, 0x01, 0xc2, 0x05, - 0x01, 0x01, 0xd0, 0x05, 0x00, 0x03, 0xca, 0x09, - 0x0c, 0x01, 0x04, 0x47, 0x00, 0x00, 0x00, 0xe0, - 0xdd, 0xd0, 0xee, 0x0e, 0xde, 0xdf, 0xa6, 0xe9, - 0x3d, 0x5e, 0x05, 0x00, 0xde, 0x91, 0xe2, 0x47, - 0x60, 0x04, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, - 0xac, 0xe9, 0x09, 0x04, 0x57, 0x02, 0x00, 0x00, - 0xe0, 0xeb, 0xe2, 0x5e, 0x04, 0x00, 0x04, 0x9a, - 0x01, 0x00, 0x00, 0xac, 0xe9, 0x0b, 0xde, 0xdf, - 0xa9, 0xea, 0x13, 0xde, 0x8f, 0xe2, 0xeb, 0xcd, - 0x5e, 0x04, 0x00, 0xd0, 0xac, 0xe9, 0xc6, 0x5e, - 0x06, 0x00, 0xed, 0x0e, 0x29, 0x29, 0x0c, 0x43, - 0x02, 0x01, 0xd2, 0x09, 0x00, 0x00, 0x00, 0x03, - 0x09, 0x00, 0xc4, 0x01, 0x00, 0xea, 0x05, 0x04, - 0x01, 0xc6, 0x09, 0x0a, 0x01, 0xbc, 0x05, 0x00, - 0x01, 0xf2, 0x05, 0x03, 0x01, 0xc2, 0x05, 0x01, - 0x01, 0xd0, 0x05, 0x00, 0x03, 0xc8, 0x09, 0x0b, - 0x01, 0xca, 0x09, 0x0c, 0x01, 0x92, 0x04, 0x00, - 0x00, 0x04, 0x1a, 0x02, 0x00, 0x00, 0xe0, 0xdd, - 0x04, 0xa2, 0x01, 0x00, 0x00, 0xee, 0x0e, 0xde, - 0xdf, 0xa6, 0x69, 0xb1, 0x00, 0x00, 0x00, 0x5e, - 0x05, 0x00, 0xde, 0x91, 0xe2, 0x47, 0x60, 0x04, - 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0xac, 0xe9, - 0x09, 0x04, 0x57, 0x02, 0x00, 0x00, 0xe0, 0xeb, - 0xdf, 0x5e, 0x04, 0x00, 0x04, 0x9a, 0x01, 0x00, - 0x00, 0xac, 0xe9, 0x0b, 0xde, 0xdf, 0xa6, 0xe9, - 0xcf, 0xde, 0x8f, 0xe2, 0xeb, 0xca, 0x5e, 0x06, - 0x00, 0xed, 0x04, 0xc4, 0x01, 0x00, 0x00, 0xac, - 0xe9, 0x13, 0x5e, 0x04, 0x00, 0x04, 0xa1, 0x01, - 0x00, 0x00, 0xac, 0xe9, 0xb3, 0x5e, 0x07, 0x00, - 0xed, 0x0e, 0xeb, 0xac, 0x5e, 0x04, 0x00, 0x04, - 0xc4, 0x01, 0x00, 0x00, 0xac, 0xe9, 0x2e, 0xdd, - 0x04, 0xc4, 0x01, 0x00, 0x00, 0xee, 0x0e, 0x5e, - 0x05, 0x00, 0xde, 0x47, 0x04, 0xc4, 0x01, 0x00, - 0x00, 0xac, 0x11, 0xea, 0x0d, 0x0e, 0x5e, 0x05, - 0x00, 0xde, 0x47, 0x04, 0xa1, 0x01, 0x00, 0x00, - 0xac, 0x69, 0x7d, 0xff, 0xff, 0xff, 0xde, 0x8f, - 0xe2, 0xec, 0x75, 0xff, 0x5e, 0x04, 0x00, 0x04, - 0xa2, 0x01, 0x00, 0x00, 0xac, 0x69, 0x69, 0xff, - 0xff, 0xff, 0x5e, 0x07, 0x00, 0xed, 0x0e, 0xde, - 0xdf, 0xa6, 0xe9, 0x11, 0x5e, 0x08, 0x00, 0x5e, - 0x05, 0x00, 0xde, 0x47, 0xee, 0xe9, 0x06, 0xde, - 0x8f, 0xe2, 0xeb, 0xec, 0x29, 0x0c, 0x43, 0x02, - 0x01, 0xd4, 0x09, 0x00, 0x00, 0x00, 0x03, 0x05, - 0x00, 0x41, 0x00, 0xea, 0x05, 0x04, 0x01, 0xbc, - 0x05, 0x00, 0x01, 0xf2, 0x05, 0x03, 0x01, 0x92, - 0x04, 0x00, 0x00, 0xd0, 0x05, 0x00, 0x03, 0x04, - 0x45, 0x00, 0x00, 0x00, 0xe0, 0xdd, 0xde, 0xa6, - 0xe9, 0x36, 0xdf, 0x5e, 0x04, 0x00, 0xdd, 0x47, - 0xee, 0x11, 0xea, 0x25, 0x0e, 0x5e, 0x04, 0x00, - 0xdd, 0x47, 0x04, 0x9b, 0x01, 0x00, 0x00, 0xac, - 0xe9, 0x1e, 0xdd, 0xde, 0xb4, 0x9e, 0xac, 0x11, - 0xea, 0x0f, 0x0e, 0x5e, 0x04, 0x00, 0xdd, 0xb4, - 0x9d, 0x47, 0x04, 0x9b, 0x01, 0x00, 0x00, 0xad, - 0xe9, 0x06, 0xdd, 0x8f, 0xe1, 0xeb, 0xc7, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0xdc, 0x09, 0x00, 0x03, - 0x00, 0x04, 0x0a, 0x00, 0x95, 0x02, 0x03, 0xa6, - 0x06, 0x00, 0x00, 0x00, 0xc2, 0x08, 0x00, 0x01, - 0x00, 0xe4, 0x09, 0x00, 0x02, 0x00, 0xc4, 0x09, - 0x08, 0x01, 0xbc, 0x05, 0x00, 0x01, 0xf2, 0x05, - 0x03, 0x01, 0x92, 0x04, 0x00, 0x00, 0xd0, 0x05, - 0x00, 0x03, 0xe4, 0x05, 0x02, 0x01, 0xd6, 0x09, - 0x12, 0x01, 0xea, 0x05, 0x04, 0x01, 0xd8, 0x09, - 0x13, 0x01, 0xda, 0x09, 0x14, 0x01, 0xb4, 0xe0, - 0xdd, 0xde, 0xa6, 0xe9, 0x0f, 0xdf, 0x5e, 0x04, - 0x00, 0xdd, 0x47, 0xee, 0xe9, 0x06, 0xdd, 0x8f, - 0xe1, 0xeb, 0xee, 0x5e, 0x04, 0x00, 0x42, 0x78, - 0x01, 0x00, 0x00, 0x5e, 0x05, 0x00, 0xdd, 0x24, - 0x02, 0x00, 0xc8, 0x04, 0x73, 0x02, 0x00, 0x00, - 0xc4, 0x9d, 0x04, 0x73, 0x02, 0x00, 0x00, 0x9d, - 0xc9, 0x5e, 0x06, 0x00, 0x42, 0x9d, 0x01, 0x00, - 0x00, 0xc5, 0x24, 0x01, 0x00, 0xb3, 0xa9, 0xe9, - 0x7c, 0x04, 0x20, 0x02, 0x00, 0x00, 0x5f, 0x07, - 0x00, 0xc4, 0x04, 0x03, 0x00, 0x00, 0x00, 0xae, - 0x11, 0xea, 0x09, 0x0e, 0xc4, 0x04, 0x02, 0x00, - 0x00, 0x00, 0xae, 0xe9, 0x0b, 0x04, 0x46, 0x00, - 0x00, 0x00, 0x5f, 0x07, 0x00, 0xeb, 0x43, 0xc4, - 0x04, 0x03, 0x00, 0x00, 0x00, 0xae, 0x11, 0xea, - 0x09, 0x0e, 0xc4, 0x04, 0x02, 0x00, 0x00, 0x00, - 0xae, 0xe9, 0x0b, 0x04, 0x46, 0x00, 0x00, 0x00, - 0x5f, 0x07, 0x00, 0xeb, 0x25, 0xc4, 0x04, 0x01, - 0x00, 0x00, 0x00, 0xae, 0xe9, 0x0b, 0x04, 0x01, - 0x00, 0x00, 0x00, 0x5f, 0x07, 0x00, 0xeb, 0x12, - 0xc4, 0x04, 0x44, 0x00, 0x00, 0x00, 0xae, 0xe9, - 0x09, 0x04, 0x44, 0x00, 0x00, 0x00, 0x5f, 0x07, - 0x00, 0x5e, 0x08, 0x00, 0x42, 0x9d, 0x01, 0x00, - 0x00, 0xc5, 0x24, 0x01, 0x00, 0xb3, 0xa9, 0xe9, - 0x03, 0xb3, 0xe0, 0x29, 0xdd, 0xca, 0xc6, 0xde, - 0xa6, 0xe9, 0x12, 0x5e, 0x04, 0x00, 0xc6, 0x47, - 0x04, 0xbf, 0x01, 0x00, 0x00, 0xac, 0xe9, 0x05, - 0x93, 0x02, 0xeb, 0xeb, 0xc6, 0xde, 0xa6, 0xe9, - 0x17, 0x5e, 0x04, 0x00, 0xc6, 0x47, 0x04, 0xb6, - 0x01, 0x00, 0x00, 0xac, 0xe9, 0x0a, 0x04, 0x1b, - 0x00, 0x00, 0x00, 0x5f, 0x07, 0x00, 0x29, 0x5e, - 0x09, 0x00, 0x42, 0x9d, 0x01, 0x00, 0x00, 0xc5, - 0x24, 0x01, 0x00, 0xb3, 0xa9, 0xe9, 0x0a, 0x04, - 0xf1, 0x01, 0x00, 0x00, 0x5f, 0x07, 0x00, 0x29, - 0x04, 0x74, 0x02, 0x00, 0x00, 0x5f, 0x07, 0x00, - 0xb3, 0xe0, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xde, - 0x09, 0x02, 0x00, 0x02, 0x03, 0x02, 0x00, 0x2b, - 0x02, 0xf2, 0x01, 0x00, 0x01, 0x00, 0xea, 0x09, - 0x00, 0x01, 0x00, 0xca, 0x06, 0x09, 0x01, 0xea, - 0x05, 0x04, 0x01, 0xdc, 0xe8, 0xd0, 0xa6, 0xe9, - 0x12, 0xdc, 0x42, 0x8a, 0x01, 0x00, 0x00, 0x04, - 0x16, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, - 0xeb, 0xea, 0xdc, 0xe8, 0xd1, 0xa6, 0xe9, 0x0e, - 0xdc, 0x42, 0x8a, 0x01, 0x00, 0x00, 0xdd, 0x24, - 0x01, 0x00, 0x0e, 0xeb, 0xee, 0x29, 0xbe, 0x00, - 0xc1, 0x0a, 0xbe, 0x01, 0xc1, 0x0b, 0xbe, 0x02, - 0xc1, 0x0c, 0xbe, 0x03, 0xc1, 0x0d, 0xbe, 0x04, - 0xc1, 0x0e, 0xbe, 0x05, 0xc1, 0x0f, 0xbe, 0x06, - 0xc1, 0x10, 0xbe, 0x07, 0xc1, 0x11, 0xbe, 0x08, - 0xc1, 0x15, 0xbe, 0x09, 0xc1, 0x16, 0xd0, 0xe8, - 0xcb, 0xbf, 0xc1, 0x05, 0xb3, 0xc1, 0x06, 0xb4, - 0xc1, 0x08, 0x26, 0x00, 0x00, 0xc1, 0x09, 0x04, - 0x73, 0x02, 0x00, 0x00, 0x04, 0x76, 0x02, 0x00, - 0x00, 0x9d, 0x04, 0x77, 0x02, 0x00, 0x00, 0x9d, - 0x04, 0x78, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x79, - 0x02, 0x00, 0x00, 0x9d, 0x04, 0x7a, 0x02, 0x00, - 0x00, 0x9d, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x9d, - 0x04, 0x7c, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x7d, - 0x02, 0x00, 0x00, 0x9d, 0x04, 0x7e, 0x02, 0x00, - 0x00, 0x9d, 0xc1, 0x12, 0x04, 0x7f, 0x02, 0x00, - 0x00, 0xc1, 0x13, 0x04, 0x80, 0x02, 0x00, 0x00, - 0xc1, 0x14, 0xb3, 0xc8, 0xc4, 0xc7, 0xa6, 0x69, - 0x6a, 0x01, 0x00, 0x00, 0x07, 0xc1, 0x04, 0xc4, - 0xca, 0xd0, 0xc4, 0x91, 0xc8, 0x47, 0xcd, 0x11, - 0x04, 0xbf, 0x01, 0x00, 0x00, 0xae, 0xea, 0x1c, - 0x11, 0x04, 0x81, 0x02, 0x00, 0x00, 0xae, 0xea, - 0x13, 0x11, 0x04, 0x82, 0x02, 0x00, 0x00, 0xae, - 0xea, 0x0a, 0x11, 0x04, 0x7d, 0x01, 0x00, 0x00, - 0xae, 0xe9, 0x04, 0x0e, 0xeb, 0xc7, 0x11, 0x04, - 0x83, 0x02, 0x00, 0x00, 0xae, 0xea, 0x0a, 0x11, - 0x04, 0xcb, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x18, - 0xc4, 0xc7, 0xa6, 0xe9, 0x0d, 0xd0, 0xc4, 0x47, - 0xc5, 0xac, 0xe9, 0x06, 0x93, 0x00, 0x0e, 0xeb, - 0xa4, 0xb4, 0xc1, 0x08, 0x0e, 0xeb, 0x9e, 0x11, - 0x04, 0xa2, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x44, - 0xc4, 0xc7, 0xa6, 0xe9, 0x13, 0xd0, 0xc4, 0x47, - 0x04, 0x7c, 0x00, 0x00, 0x00, 0xac, 0xe9, 0x08, - 0xc0, 0x0d, 0xed, 0x0e, 0xec, 0xdc, 0x00, 0xc4, - 0xc7, 0xa6, 0xe9, 0x13, 0xd0, 0xc4, 0x47, 0x04, - 0xa2, 0x01, 0x00, 0x00, 0xac, 0xe9, 0x08, 0xc0, - 0x0e, 0xed, 0x0e, 0xec, 0xc5, 0x00, 0xc0, 0x08, - 0xe9, 0x0b, 0xc0, 0x10, 0xed, 0x0e, 0xb3, 0xc1, - 0x08, 0xec, 0xb7, 0x00, 0xb4, 0xc1, 0x08, 0x0e, - 0xec, 0x53, 0xff, 0x11, 0x04, 0x9e, 0x01, 0x00, - 0x00, 0xae, 0xea, 0x13, 0x11, 0x04, 0x9f, 0x01, - 0x00, 0x00, 0xae, 0xea, 0x0a, 0x11, 0x04, 0xa0, - 0x01, 0x00, 0x00, 0xae, 0xe9, 0x0c, 0xc0, 0x0f, - 0xc5, 0xee, 0x0e, 0xb3, 0xc1, 0x08, 0xec, 0x8a, - 0x00, 0x11, 0x04, 0xb6, 0x01, 0x00, 0x00, 0xae, - 0xea, 0x13, 0x11, 0x04, 0xc4, 0x01, 0x00, 0x00, - 0xae, 0xea, 0x0a, 0x11, 0x04, 0x09, 0x02, 0x00, - 0x00, 0xae, 0xe9, 0x0f, 0xb4, 0xc1, 0x08, 0x93, - 0x06, 0xc0, 0x0a, 0xc5, 0xee, 0x0e, 0x0e, 0xec, - 0x04, 0xff, 0x11, 0x04, 0xb7, 0x01, 0x00, 0x00, - 0xae, 0xea, 0x13, 0x11, 0x04, 0xa1, 0x01, 0x00, - 0x00, 0xae, 0xea, 0x0a, 0x11, 0x04, 0x0a, 0x02, - 0x00, 0x00, 0xae, 0xe9, 0x25, 0xb3, 0xc1, 0x08, - 0xc0, 0x06, 0xb3, 0xa8, 0xe9, 0x13, 0xdd, 0xc0, - 0x0b, 0xed, 0xc5, 0xef, 0xe9, 0x0b, 0x92, 0x06, - 0xc0, 0x0c, 0xed, 0x0e, 0x0e, 0xec, 0xce, 0xfe, - 0x04, 0x57, 0x02, 0x00, 0x00, 0xc1, 0x04, 0xeb, - 0x21, 0xde, 0xc5, 0xee, 0xe9, 0x0a, 0xc0, 0x11, - 0xed, 0x0e, 0xb3, 0xc1, 0x08, 0xeb, 0x13, 0xdc, - 0xc5, 0xee, 0xe9, 0x07, 0xc0, 0x15, 0xed, 0x0e, - 0xeb, 0x08, 0xb4, 0xc1, 0x08, 0x0e, 0xec, 0xa5, - 0xfe, 0x0e, 0xc0, 0x04, 0x69, 0x9f, 0xfe, 0xff, - 0xff, 0xc0, 0x16, 0xc6, 0xc4, 0xef, 0x0e, 0xec, - 0x94, 0xfe, 0xc0, 0x16, 0xc7, 0xc7, 0xef, 0x0e, - 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x09, 0x26, 0x03, - 0x00, 0x28, 0x0c, 0x43, 0x02, 0x01, 0xa2, 0x05, - 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x36, 0x01, - 0xa6, 0x06, 0x00, 0x01, 0x00, 0xb4, 0x03, 0x00, - 0x0c, 0x65, 0x00, 0x00, 0x42, 0x84, 0x02, 0x00, - 0x00, 0x04, 0x85, 0x02, 0x00, 0x00, 0x24, 0x01, - 0x00, 0x11, 0xea, 0x1b, 0x0e, 0x65, 0x00, 0x00, - 0x42, 0x84, 0x02, 0x00, 0x00, 0x04, 0x86, 0x02, - 0x00, 0x00, 0x24, 0x01, 0x00, 0x11, 0xea, 0x07, - 0x0e, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0xa2, - 0x01, 0x00, 0x00, 0x9d, 0xd0, 0x9d, 0x28, 0x0c, - 0x43, 0x02, 0x01, 0xa4, 0x05, 0x00, 0x03, 0x00, - 0x05, 0x03, 0x00, 0x67, 0x03, 0xa6, 0x06, 0x00, - 0x00, 0x00, 0x8e, 0x0a, 0x00, 0x01, 0x00, 0x9c, - 0x09, 0x05, 0x00, 0x03, 0xd6, 0x03, 0x1b, 0x01, - 0xb4, 0x03, 0x00, 0x0c, 0xa2, 0x05, 0x81, 0x01, - 0x01, 0xdc, 0x42, 0x96, 0x01, 0x00, 0x00, 0xbc, - 0x18, 0xfc, 0x24, 0x01, 0x00, 0x42, 0x5a, 0x00, - 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x24, - 0x01, 0x00, 0x42, 0x33, 0x02, 0x00, 0x00, 0x24, - 0x00, 0x00, 0xcc, 0xe9, 0x43, 0x6c, 0x38, 0x00, - 0x00, 0x00, 0x65, 0x01, 0x00, 0x42, 0x88, 0x02, - 0x00, 0x00, 0xde, 0x04, 0x89, 0x02, 0x00, 0x00, - 0xee, 0x04, 0x21, 0x02, 0x00, 0x00, 0x24, 0x02, - 0x00, 0xcd, 0x42, 0x76, 0x01, 0x00, 0x00, 0xc4, - 0x04, 0x7d, 0x01, 0x00, 0x00, 0x9d, 0x24, 0x01, - 0x00, 0x0e, 0xc5, 0x42, 0x8a, 0x02, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x0e, 0x0e, 0x29, 0xca, 0x6c, - 0x06, 0x00, 0x00, 0x00, 0x0e, 0x29, 0x2f, 0x29, - 0x0c, 0x43, 0x02, 0x01, 0xa6, 0x05, 0x00, 0x01, - 0x00, 0x04, 0x04, 0x00, 0x2f, 0x01, 0xc8, 0x05, - 0x00, 0x00, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xa2, - 0x05, 0x81, 0x01, 0x01, 0xd6, 0x03, 0x1b, 0x01, - 0xd8, 0x03, 0x1c, 0x01, 0x65, 0x00, 0x00, 0x42, - 0x8b, 0x02, 0x00, 0x00, 0xdd, 0x04, 0x89, 0x02, - 0x00, 0x00, 0xee, 0x24, 0x01, 0x00, 0xcc, 0xe9, - 0x1a, 0xc4, 0x42, 0x33, 0x02, 0x00, 0x00, 0x24, - 0x00, 0x00, 0x42, 0x5c, 0x00, 0x00, 0x00, 0x04, - 0x7d, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xe6, - 0xe8, 0xe3, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xa8, - 0x05, 0x00, 0x02, 0x00, 0x04, 0x03, 0x02, 0x34, - 0x02, 0xea, 0x06, 0x00, 0x00, 0x00, 0xa6, 0x06, - 0x00, 0x01, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xc6, - 0x03, 0x13, 0x01, 0xc4, 0x03, 0x12, 0x01, 0x07, - 0x16, 0x28, 0x5c, 0x64, 0x2b, 0x29, 0x3b, 0x28, - 0x5c, 0x64, 0x2b, 0x29, 0x07, 0xa8, 0x01, 0x00, - 0x00, 0x03, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x09, - 0x06, 0x00, 0x00, 0x00, 0x05, 0x08, 0xf5, 0xff, - 0xff, 0xff, 0x0c, 0x00, 0x0c, 0x01, 0x1d, 0x08, + 0xbe, 0x07, 0x01, 0x00, 0x01, 0x04, 0x01, 0x00, + 0x0c, 0x01, 0xae, 0x06, 0x00, 0x01, 0x00, 0xb4, + 0x07, 0x08, 0x01, 0xdc, 0xdc, 0xe8, 0xb4, 0x9e, + 0x72, 0x13, 0x47, 0xd0, 0x9d, 0x49, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0xc0, 0x07, 0x01, 0x00, 0x01, + 0x04, 0x01, 0x00, 0x1f, 0x01, 0xe0, 0x07, 0x00, + 0x01, 0x00, 0xa0, 0x02, 0x02, 0x00, 0xdc, 0x41, + 0x3a, 0x00, 0x00, 0x00, 0x41, 0x36, 0x00, 0x00, + 0x00, 0x42, 0xf1, 0x01, 0x00, 0x00, 0xd0, 0x24, + 0x01, 0x00, 0x42, 0x9a, 0x01, 0x00, 0x00, 0xbb, + 0x08, 0xb2, 0x25, 0x02, 0x00, 0x0c, 0x43, 0x02, + 0x01, 0xc2, 0x07, 0x02, 0x13, 0x02, 0x09, 0x1a, + 0x02, 0xed, 0x0b, 0x15, 0xd0, 0x05, 0x00, 0x01, + 0x00, 0xec, 0x03, 0x00, 0x01, 0x00, 0xfa, 0x05, + 0x00, 0x00, 0x00, 0xe4, 0x07, 0x00, 0x01, 0x00, + 0xc4, 0x05, 0x00, 0x02, 0x00, 0xe6, 0x07, 0x00, + 0x03, 0x00, 0x96, 0x07, 0x00, 0x04, 0x00, 0xe8, + 0x07, 0x00, 0x05, 0x00, 0xea, 0x07, 0x00, 0x06, + 0x00, 0xec, 0x07, 0x00, 0x07, 0x00, 0xee, 0x07, + 0x00, 0x08, 0x00, 0xf0, 0x07, 0x00, 0x09, 0x00, + 0xf2, 0x07, 0x00, 0x0a, 0x00, 0xf4, 0x07, 0x00, + 0x0b, 0x00, 0xf6, 0x07, 0x00, 0x0c, 0x00, 0xf8, + 0x07, 0x00, 0x0d, 0x00, 0xfa, 0x07, 0x00, 0x0e, + 0x00, 0xda, 0x05, 0x00, 0x0f, 0x00, 0xec, 0x05, + 0x00, 0x10, 0x00, 0xfc, 0x07, 0x00, 0x11, 0x00, + 0xfe, 0x07, 0x00, 0x12, 0x00, 0xbc, 0x07, 0x0c, + 0x01, 0x84, 0x05, 0x03, 0x00, 0xd2, 0x03, 0x04, + 0x00, 0x86, 0x05, 0x05, 0x00, 0xb0, 0x07, 0x05, + 0x01, 0xba, 0x07, 0x0b, 0x01, 0xa8, 0x02, 0x06, + 0x00, 0xb2, 0x07, 0x06, 0x01, 0x68, 0x07, 0x01, + 0xb4, 0x07, 0x08, 0x01, 0xc0, 0x07, 0x0e, 0x01, + 0xb4, 0x02, 0x07, 0x00, 0xb2, 0x02, 0x01, 0x00, + 0xbc, 0x02, 0x08, 0x00, 0xaa, 0x02, 0x09, 0x00, + 0xa6, 0x02, 0x0a, 0x00, 0xda, 0x02, 0x0b, 0x00, + 0xa2, 0x02, 0x0c, 0x00, 0xc6, 0x02, 0x0d, 0x00, + 0xa4, 0x07, 0x02, 0x03, 0xc2, 0x07, 0x0f, 0x01, + 0xac, 0x07, 0x03, 0x01, 0xce, 0x03, 0x01, 0x03, + 0xa0, 0x02, 0x02, 0x00, 0xbe, 0x07, 0x0d, 0x01, + 0xae, 0x07, 0x04, 0x01, 0x07, 0x32, 0x5e, 0x5b, + 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x5f, 0x24, + 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x7a, + 0x41, 0x2d, 0x5a, 0x5f, 0x24, 0x5d, 0x2a, 0x07, + 0xaa, 0x01, 0x00, 0x00, 0x01, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x05, + 0x08, 0xf5, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x06, + 0x16, 0x04, 0x00, 0x24, 0x00, 0x24, 0x00, 0x41, + 0x00, 0x5a, 0x00, 0x5f, 0x00, 0x5f, 0x00, 0x61, + 0x00, 0x7a, 0x00, 0x1d, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x05, 0x00, 0x24, + 0x00, 0x24, 0x00, 0x30, 0x00, 0x39, 0x00, 0x41, + 0x00, 0x5a, 0x00, 0x5f, 0x00, 0x5f, 0x00, 0x61, + 0x00, 0x7a, 0x00, 0x0b, 0x0d, 0x00, 0x0b, 0xd0, + 0x97, 0xc2, 0x06, 0x11, 0x04, 0x44, 0x00, 0x00, + 0x00, 0xae, 0xea, 0x0a, 0x11, 0x04, 0x46, 0x00, + 0x00, 0x00, 0xae, 0xe9, 0x08, 0xdc, 0xd0, 0xee, + 0x0e, 0xec, 0xd1, 0x05, 0x11, 0x04, 0x45, 0x00, + 0x00, 0x00, 0xae, 0xe9, 0x13, 0xdc, 0xdd, 0xd0, + 0xde, 0xe9, 0x05, 0xbb, 0x10, 0xeb, 0x03, 0xbb, + 0x0a, 0xef, 0xee, 0x0e, 0xec, 0xb6, 0x05, 0x11, + 0x04, 0x8b, 0x00, 0x00, 0x00, 0xae, 0xe9, 0x13, + 0xdc, 0xdf, 0xd0, 0xde, 0xe9, 0x05, 0xbb, 0x10, + 0xeb, 0x03, 0xbb, 0x0a, 0xef, 0xee, 0x0e, 0xec, + 0x9b, 0x05, 0x11, 0x04, 0x47, 0x00, 0x00, 0x00, + 0xae, 0xe9, 0x28, 0xd0, 0xe8, 0x5e, 0x04, 0x00, + 0xa8, 0xe9, 0x15, 0xd0, 0x42, 0x7c, 0x01, 0x00, + 0x00, 0xb3, 0x5e, 0x04, 0x00, 0x24, 0x02, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x9d, 0xd4, 0xdc, + 0x5e, 0x05, 0x00, 0xd0, 0xee, 0xee, 0x0e, 0xec, + 0x6b, 0x05, 0x11, 0x04, 0x49, 0x00, 0x00, 0x00, + 0xae, 0xe9, 0x0c, 0xdc, 0x5e, 0x06, 0x00, 0xd0, + 0xee, 0xee, 0x0e, 0xec, 0x57, 0x05, 0x11, 0x04, + 0x48, 0x00, 0x00, 0x00, 0xae, 0xea, 0x0d, 0x11, + 0x04, 0x1b, 0x00, 0x00, 0x00, 0xae, 0x69, 0x3c, + 0x05, 0x00, 0x00, 0xd0, 0xf2, 0xe9, 0x08, 0xdc, + 0xd0, 0xee, 0x0e, 0xec, 0x37, 0x05, 0x5e, 0x07, + 0x00, 0x42, 0xa1, 0x01, 0x00, 0x00, 0xd0, 0x24, + 0x01, 0x00, 0xcc, 0xb3, 0xa9, 0xe9, 0x1a, 0xdc, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x42, 0x5b, 0x00, + 0x00, 0x00, 0xc4, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x24, 0x02, 0x00, 0xee, 0x0e, 0xec, 0x0d, 0x05, + 0x5e, 0x08, 0x00, 0x42, 0xa1, 0x01, 0x00, 0x00, + 0xd0, 0x24, 0x01, 0x00, 0xcc, 0xb3, 0xa9, 0xe9, + 0x2e, 0xdc, 0x04, 0x01, 0x02, 0x00, 0x00, 0x42, + 0x5b, 0x00, 0x00, 0x00, 0x5e, 0x07, 0x00, 0xe8, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x24, 0x02, 0x00, + 0xee, 0x0e, 0x5e, 0x07, 0x00, 0x42, 0x8e, 0x01, + 0x00, 0x00, 0x5e, 0x08, 0x00, 0xc4, 0x47, 0x24, + 0x01, 0x00, 0x0e, 0xec, 0xcf, 0x04, 0x5e, 0x09, + 0x00, 0xe8, 0xc1, 0x0c, 0x5e, 0x0a, 0x00, 0xd0, + 0xee, 0xc1, 0x0d, 0x5e, 0x08, 0x00, 0x42, 0x8e, + 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0x0e, + 0xd0, 0x5e, 0x0b, 0x00, 0xaa, 0xe9, 0x28, 0xdc, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x42, 0x5b, 0x00, + 0x00, 0x00, 0x5e, 0x0c, 0x00, 0x42, 0xed, 0x01, + 0x00, 0x00, 0xd0, 0x42, 0x03, 0x02, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x24, 0x01, 0x00, 0x24, 0x01, + 0x00, 0xee, 0x0e, 0xec, 0xad, 0x01, 0xd0, 0x5e, + 0x0d, 0x00, 0xaa, 0xe9, 0x10, 0xdc, 0xd0, 0x42, + 0x36, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0xee, + 0x0e, 0xec, 0x97, 0x01, 0xd0, 0x5e, 0x0e, 0x00, + 0xaa, 0x11, 0xea, 0x10, 0x0e, 0xd0, 0x5e, 0x0f, + 0x00, 0xaa, 0x11, 0xea, 0x07, 0x0e, 0xd0, 0x5e, + 0x10, 0x00, 0xaa, 0xe9, 0x21, 0xdc, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, + 0xc0, 0x0d, 0x04, 0x04, 0x02, 0x00, 0x00, 0xd0, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x24, 0x04, 0x00, + 0xee, 0x0e, 0xec, 0x5e, 0x01, 0xd0, 0x5e, 0x06, + 0x00, 0xaa, 0xe9, 0x2c, 0xdc, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc0, + 0x0d, 0x04, 0x04, 0x02, 0x00, 0x00, 0x5e, 0x05, + 0x00, 0xd0, 0xee, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x24, 0x04, 0x00, 0xee, 0x0e, 0xd0, 0xe8, 0xc1, + 0x0f, 0xb4, 0xc1, 0x08, 0xec, 0x2c, 0x01, 0x5e, + 0x11, 0x00, 0x42, 0x05, 0x02, 0x00, 0x00, 0xd0, + 0x24, 0x01, 0x00, 0xe9, 0x0f, 0xdc, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0xee, 0x0e, 0xb4, 0xc1, 0x07, + 0xec, 0x10, 0x01, 0xc0, 0x0d, 0x42, 0xec, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xe9, 0x2d, 0xd0, 0x5e, 0x12, 0x00, + 0x41, 0x43, 0x00, 0x00, 0x00, 0xaa, 0xe9, 0x21, + 0xdc, 0xbf, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc0, + 0x0d, 0x04, 0xba, 0x01, 0x00, 0x00, 0xd0, 0xe8, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x24, 0x04, 0x00, + 0xee, 0x0e, 0xb4, 0xc1, 0x07, 0xec, 0xd3, 0x00, + 0xc0, 0x06, 0x04, 0x1b, 0x00, 0x00, 0x00, 0xae, + 0xe9, 0x32, 0xd0, 0x41, 0x35, 0x00, 0x00, 0x00, + 0xe9, 0x1f, 0xdc, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x42, 0x5b, 0x00, 0x00, 0x00, 0xd0, 0x41, 0x35, + 0x00, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x24, 0x02, 0x00, 0xee, 0x0e, 0xec, 0xa3, 0x00, + 0xdc, 0x04, 0x08, 0x02, 0x00, 0x00, 0xee, 0x0e, + 0xec, 0x98, 0x00, 0xd0, 0x41, 0x3b, 0x00, 0x00, + 0x00, 0x11, 0xe9, 0x0d, 0x0e, 0xd0, 0x41, 0x3b, + 0x00, 0x00, 0x00, 0x41, 0x35, 0x00, 0x00, 0x00, + 0x11, 0xea, 0x07, 0x0e, 0x04, 0x90, 0x00, 0x00, + 0x00, 0xc1, 0x0e, 0xc0, 0x0d, 0x04, 0x90, 0x00, + 0x00, 0x00, 0xaf, 0xe9, 0x1d, 0xdc, 0xbf, 0x42, + 0x5b, 0x00, 0x00, 0x00, 0xc0, 0x0e, 0x04, 0x09, + 0x02, 0x00, 0x00, 0xc0, 0x0d, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x24, 0x04, 0x00, 0xee, 0x0e, 0xeb, + 0x4a, 0xd0, 0x41, 0x43, 0x00, 0x00, 0x00, 0xf2, + 0xe9, 0x1a, 0xdc, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc0, 0x0e, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, 0xee, + 0x0e, 0xeb, 0x28, 0xc0, 0x0e, 0x04, 0x90, 0x00, + 0x00, 0x00, 0xaf, 0xe9, 0x16, 0xdc, 0xbf, 0x42, + 0x5b, 0x00, 0x00, 0x00, 0xc0, 0x0e, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, 0xee, 0x0e, + 0xeb, 0x09, 0xdc, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0xee, 0x0e, 0x04, 0x0e, 0x02, 0x00, 0x00, 0xc1, + 0x0a, 0x07, 0xc1, 0x04, 0xb3, 0xc8, 0xb3, 0xc9, + 0xb3, 0xcb, 0xc0, 0x07, 0x69, 0xcb, 0x00, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0xc1, 0x0a, + 0xd0, 0xe8, 0xc1, 0x0f, 0xd1, 0x5e, 0x13, 0x00, + 0xa8, 0xe9, 0x12, 0xc0, 0x0f, 0xe9, 0x0e, 0xdc, + 0x04, 0x00, 0x02, 0x00, 0x00, 0xee, 0x0e, 0xdc, + 0xc0, 0x0a, 0xee, 0x29, 0xb3, 0xca, 0xc6, 0xc0, + 0x0f, 0xa6, 0x69, 0x89, 0x00, 0x00, 0x00, 0x93, + 0x03, 0xc6, 0xd0, 0xab, 0xe9, 0x0e, 0x5e, 0x14, + 0x00, 0xd0, 0xc6, 0x47, 0xd1, 0xb4, 0x9d, 0xef, + 0x0e, 0xeb, 0x43, 0xc6, 0xc1, 0x10, 0xc6, 0xb4, + 0x9d, 0xc0, 0x0f, 0xa6, 0xe9, 0x0d, 0xc6, 0xb4, + 0x9d, 0xd0, 0xab, 0x96, 0xe9, 0x05, 0x93, 0x02, + 0xeb, 0xed, 0xc6, 0xc0, 0x10, 0xa8, 0xe9, 0x1e, + 0xdc, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x42, 0x5b, + 0x00, 0x00, 0x00, 0xc6, 0xc0, 0x10, 0x9e, 0xb4, + 0x9d, 0x04, 0x10, 0x02, 0x00, 0x00, 0x24, 0x02, + 0x00, 0xee, 0x0e, 0xeb, 0x09, 0xdc, 0x04, 0x11, + 0x02, 0x00, 0x00, 0xee, 0x0e, 0xc7, 0x5e, 0x15, + 0x00, 0xa9, 0xe9, 0x24, 0xc0, 0x0f, 0xc7, 0x9e, + 0xb8, 0xa8, 0xe9, 0x1c, 0xdc, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc0, + 0x0f, 0xc7, 0x9e, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x24, 0x02, 0x00, 0xee, 0x0e, 0xeb, 0x06, 0x93, + 0x02, 0xec, 0x74, 0xff, 0xb4, 0xc1, 0x08, 0xc6, + 0xc0, 0x0f, 0xaf, 0xe9, 0x0c, 0xc0, 0x0f, 0xbc, + 0xe8, 0x03, 0xa8, 0xe9, 0x04, 0xb4, 0xc1, 0x09, + 0xc0, 0x09, 0x96, 0xe9, 0x24, 0x5e, 0x16, 0x00, + 0xe9, 0x0f, 0x5e, 0x17, 0x00, 0x42, 0xae, 0x01, + 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xeb, 0x0d, + 0x5e, 0x17, 0x00, 0x42, 0xcb, 0x01, 0x00, 0x00, + 0xd0, 0x24, 0x01, 0x00, 0xc2, 0x04, 0xe8, 0xc8, + 0xc0, 0x08, 0xe9, 0x1e, 0xc5, 0xc4, 0xa6, 0xe9, + 0x19, 0xc0, 0x04, 0xc5, 0x47, 0x8d, 0xce, 0xc6, + 0xb3, 0xa1, 0xaf, 0x11, 0xea, 0x06, 0x0e, 0xc6, + 0xc0, 0x0f, 0xa9, 0xea, 0x05, 0x93, 0x01, 0xeb, + 0xe4, 0xc5, 0xc4, 0xa6, 0x69, 0x5a, 0x01, 0x00, + 0x00, 0xc0, 0x0a, 0x96, 0xe9, 0x12, 0x5e, 0x18, + 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0xee, 0x0e, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0xc1, 0x0a, 0xd1, + 0x5e, 0x13, 0x00, 0xa8, 0xe9, 0x13, 0xc5, 0xc4, + 0xa6, 0xe9, 0x0e, 0xdc, 0x04, 0x00, 0x02, 0x00, + 0x00, 0xee, 0x0e, 0xdc, 0xc0, 0x0a, 0xee, 0x29, + 0xc5, 0xca, 0xc6, 0xc4, 0xa6, 0x69, 0x21, 0x01, + 0x00, 0x00, 0xc0, 0x04, 0xc6, 0x47, 0xc1, 0x05, + 0x5e, 0x17, 0x00, 0x42, 0x65, 0x00, 0x00, 0x00, + 0xd0, 0xc0, 0x05, 0x24, 0x02, 0x00, 0xc2, 0x11, + 0x96, 0x6a, 0x00, 0x01, 0x00, 0x00, 0xc0, 0x11, + 0x41, 0x3e, 0x00, 0x00, 0x00, 0x96, 0xe9, 0x1e, + 0xdc, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x42, 0x5b, + 0x00, 0x00, 0x00, 0x5e, 0x06, 0x00, 0xc0, 0x05, + 0xee, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x24, 0x02, + 0x00, 0xee, 0x0e, 0xeb, 0x2e, 0xc0, 0x05, 0x8d, + 0xc0, 0x05, 0xb3, 0xa1, 0xae, 0x11, 0xea, 0x11, + 0x0e, 0xc0, 0x05, 0x42, 0xa7, 0x01, 0x00, 0x00, + 0xbd, 0x00, 0xbd, 0x01, 0x33, 0x24, 0x01, 0x00, + 0xe9, 0x08, 0xdc, 0xc0, 0x05, 0xee, 0x0e, 0xeb, + 0x0a, 0xdc, 0x5e, 0x05, 0x00, 0xc0, 0x05, 0xee, + 0xee, 0x0e, 0xdc, 0x04, 0x14, 0x02, 0x00, 0x00, + 0xee, 0x0e, 0x04, 0x3f, 0x00, 0x00, 0x00, 0xc0, + 0x11, 0xab, 0xe9, 0x12, 0x5e, 0x14, 0x00, 0xc0, + 0x11, 0x41, 0x3f, 0x00, 0x00, 0x00, 0xd1, 0xb4, + 0x9d, 0xef, 0x0e, 0xeb, 0x5c, 0x26, 0x00, 0x00, + 0xc1, 0x12, 0xc0, 0x11, 0x41, 0x40, 0x00, 0x00, + 0x00, 0xe9, 0x11, 0xc0, 0x12, 0x42, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x24, + 0x01, 0x00, 0x0e, 0xc0, 0x11, 0x41, 0x41, 0x00, + 0x00, 0x00, 0xe9, 0x11, 0xc0, 0x12, 0x42, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x0e, 0xdc, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc0, + 0x12, 0x42, 0x5a, 0x00, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x24, 0x02, 0x00, 0xee, 0x0e, + 0x93, 0x03, 0xc7, 0x5e, 0x19, 0x00, 0xa8, 0xe9, + 0x22, 0xc4, 0xc7, 0x9e, 0xb8, 0xa8, 0xe9, 0x1b, + 0xdc, 0x04, 0x12, 0x02, 0x00, 0x00, 0x42, 0x5b, + 0x00, 0x00, 0x00, 0xc4, 0xc7, 0x9e, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, 0xee, 0x0e, + 0xeb, 0x06, 0x93, 0x02, 0xec, 0xdd, 0xfe, 0xc0, + 0x0a, 0xe9, 0x06, 0xdc, 0xc0, 0x0a, 0xee, 0x0e, + 0x5e, 0x08, 0x00, 0x42, 0x18, 0x02, 0x00, 0x00, + 0xd0, 0x24, 0x01, 0x00, 0x0e, 0x5e, 0x07, 0x00, + 0x42, 0xa1, 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0xce, 0xb3, 0xa8, 0xe9, 0x36, 0x5e, 0x09, + 0x00, 0xc0, 0x0c, 0x1b, 0x11, 0xb0, 0xea, 0x04, + 0x1b, 0x71, 0x1b, 0x1b, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc6, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x5e, 0x09, 0x00, 0xc0, + 0x0c, 0x47, 0x24, 0x03, 0x00, 0x1b, 0x71, 0x1b, + 0x49, 0xeb, 0x09, 0xdc, 0x5e, 0x06, 0x00, 0xd0, + 0xee, 0xee, 0x0e, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xc4, 0x07, 0x02, 0x01, 0x02, 0x03, 0x05, 0x00, + 0x3d, 0x03, 0xae, 0x06, 0x00, 0x01, 0x00, 0xf2, + 0x05, 0x00, 0x01, 0x00, 0xb6, 0x08, 0x00, 0x00, + 0x00, 0xa6, 0x07, 0x03, 0x03, 0xb8, 0x07, 0x0a, + 0x01, 0xb6, 0x07, 0x09, 0x01, 0xc2, 0x03, 0x0e, + 0x00, 0xc6, 0x03, 0x0f, 0x00, 0xdc, 0xe9, 0x30, + 0xdd, 0xd1, 0xaf, 0xe9, 0x13, 0xde, 0x42, 0x8e, + 0x01, 0x00, 0x00, 0xdf, 0x41, 0x7b, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0x0e, 0xd1, 0xe1, 0xd1, + 0xe9, 0x16, 0xdf, 0x5e, 0x04, 0x00, 0xd1, 0x47, + 0x47, 0xcc, 0xe9, 0x0c, 0xde, 0x42, 0x8e, 0x01, + 0x00, 0x00, 0xc4, 0x24, 0x01, 0x00, 0x0e, 0xde, + 0x42, 0x8e, 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xc6, 0x07, + 0x01, 0x00, 0x01, 0x03, 0x01, 0x02, 0x2c, 0x01, + 0xae, 0x06, 0x00, 0x01, 0x00, 0xc4, 0x07, 0x10, + 0x01, 0x07, 0x02, 0x30, 0x07, 0x02, 0x39, 0xd0, + 0xb3, 0x47, 0xbd, 0x00, 0xa9, 0xe9, 0x14, 0xd0, + 0xb3, 0x47, 0xbd, 0x01, 0xa7, 0xe9, 0x0c, 0xdc, + 0xd0, 0x04, 0x45, 0x00, 0x00, 0x00, 0xef, 0x0e, + 0xeb, 0x0a, 0xdc, 0xd0, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0xef, 0x0e, 0xdc, 0x04, 0x04, 0x02, 0x00, + 0x00, 0xee, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xc8, + 0x07, 0x01, 0x04, 0x01, 0x05, 0x03, 0x14, 0xa1, + 0x04, 0x05, 0xae, 0x06, 0x00, 0x01, 0x00, 0xf2, + 0x05, 0x00, 0x00, 0x00, 0xba, 0x08, 0x00, 0x01, + 0x00, 0xda, 0x05, 0x00, 0x02, 0x00, 0xf2, 0x06, + 0x00, 0x03, 0x00, 0xa6, 0x07, 0x03, 0x03, 0xc4, + 0x07, 0x10, 0x01, 0xca, 0x07, 0x13, 0x01, 0x07, + 0x20, 0x5e, 0x22, 0x28, 0x5b, 0x5e, 0x5c, 0x5c, + 0x22, 0x5d, 0x7c, 0x5c, 0x5c, 0x2e, 0x29, 0x2a, + 0x22, 0x07, 0x96, 0x01, 0x00, 0x00, 0x02, 0x01, + 0x43, 0x00, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x05, 0x08, 0xf5, 0xff, 0xff, 0xff, 0x0c, + 0x00, 0x06, 0x01, 0x22, 0x0e, 0x01, 0x01, 0x0a, + 0x26, 0x00, 0x00, 0x00, 0x1a, 0x0c, 0x01, 0x0a, + 0x14, 0x00, 0x00, 0x00, 0x16, 0x03, 0x00, 0x00, + 0x00, 0x21, 0x00, 0x23, 0x00, 0x5b, 0x00, 0x5d, + 0x00, 0xff, 0xff, 0x08, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x5c, 0x04, 0x0d, 0x01, 0x1b, 0xd5, 0xff, + 0xff, 0xff, 0x01, 0x22, 0x0d, 0x00, 0x0b, 0x07, + 0x20, 0x5e, 0x27, 0x28, 0x5b, 0x5e, 0x5c, 0x5c, + 0x27, 0x5d, 0x7c, 0x5c, 0x5c, 0x2e, 0x29, 0x2a, + 0x27, 0x07, 0x96, 0x01, 0x00, 0x00, 0x02, 0x01, + 0x43, 0x00, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x05, 0x08, 0xf5, 0xff, 0xff, 0xff, 0x0c, + 0x00, 0x06, 0x01, 0x27, 0x0e, 0x01, 0x01, 0x0a, + 0x26, 0x00, 0x00, 0x00, 0x1a, 0x0c, 0x01, 0x0a, + 0x14, 0x00, 0x00, 0x00, 0x16, 0x03, 0x00, 0x00, + 0x00, 0x26, 0x00, 0x28, 0x00, 0x5b, 0x00, 0x5d, + 0x00, 0xff, 0xff, 0x08, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x5c, 0x04, 0x0d, 0x01, 0x1b, 0xd5, 0xff, + 0xff, 0xff, 0x01, 0x27, 0x0d, 0x00, 0x0b, 0x07, + 0x16, 0x5e, 0x5c, 0x3c, 0x5b, 0x5e, 0x5c, 0x3e, + 0x5d, 0x2b, 0x5c, 0x3e, 0x07, 0x74, 0x00, 0x00, + 0x01, 0x00, 0x32, 0x00, 0x00, 0x00, 0x09, 0x06, + 0x00, 0x00, 0x00, 0x05, 0x08, 0xf5, 0xff, 0xff, + 0xff, 0x0c, 0x00, 0x06, 0x01, 0x3c, 0x1d, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x16, - 0x01, 0x00, 0x30, 0x00, 0x39, 0x00, 0x0b, 0x0d, - 0x01, 0x01, 0x3b, 0x0c, 0x02, 0x1d, 0x08, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x3f, 0x00, + 0xff, 0xff, 0x0b, 0x01, 0x3e, 0x0d, 0x00, 0x0b, + 0x07, 0x16, 0x5e, 0x5c, 0x5b, 0x5b, 0x5e, 0x5c, + 0x5d, 0x5d, 0x2b, 0x5c, 0x5d, 0x07, 0x74, 0x00, + 0x00, 0x01, 0x00, 0x32, 0x00, 0x00, 0x00, 0x09, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x08, 0xf5, 0xff, + 0xff, 0xff, 0x0c, 0x00, 0x06, 0x01, 0x5b, 0x1d, + 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, + 0x16, 0x02, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x5e, + 0x00, 0xff, 0xff, 0x0b, 0x01, 0x5d, 0x0d, 0x00, + 0x0b, 0x07, 0x02, 0x30, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x56, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, + 0x7a, 0x5f, 0x5d, 0x2b, 0x5b, 0x2e, 0x5d, 0x3f, + 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x7a, 0x5f, + 0x5d, 0x2a, 0x5b, 0x65, 0x45, 0x70, 0x50, 0x5d, + 0x3f, 0x5b, 0x2b, 0x2d, 0x5d, 0x3f, 0x5b, 0x30, + 0x2d, 0x39, 0x5d, 0x2a, 0x07, 0x9e, 0x03, 0x00, + 0x00, 0x01, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x09, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x08, 0xf5, 0xff, + 0xff, 0xff, 0x0c, 0x00, 0x06, 0x1d, 0x10, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x16, 0x03, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x5f, + 0x00, 0x61, 0x00, 0x7a, 0x00, 0x0b, 0x1d, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, + 0x01, 0x00, 0x2e, 0x00, 0x2e, 0x00, 0x0b, 0x1d, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, + 0x16, 0x03, 0x00, 0x30, 0x00, 0x39, 0x00, 0x5f, + 0x00, 0x5f, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x0b, + 0x1d, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x16, 0x04, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x50, 0x00, 0x50, 0x00, 0x65, 0x00, 0x65, 0x00, + 0x70, 0x00, 0x70, 0x00, 0x0b, 0x1d, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x02, + 0x00, 0x2b, 0x00, 0x2b, 0x00, 0x2d, 0x00, 0x2d, + 0x00, 0x0b, 0x1d, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, + 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x0b, 0x0d, 0x00, 0x0b, 0xdc, 0x96, + 0xe9, 0x05, 0xdd, 0xd0, 0xee, 0x29, 0xd0, 0xe8, + 0xb3, 0xa8, 0x69, 0x13, 0x02, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0xc8, 0xd0, 0xc9, 0xb3, + 0xca, 0x07, 0xcb, 0xd0, 0xb3, 0x47, 0x11, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x19, 0x04, + 0x47, 0x00, 0x00, 0x00, 0xc8, 0xd0, 0x42, 0xa7, + 0x01, 0x00, 0x00, 0xbd, 0x00, 0xbd, 0x01, 0x33, + 0x24, 0x01, 0x00, 0xcb, 0xec, 0xb3, 0x01, 0x11, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x19, + 0x04, 0x47, 0x00, 0x00, 0x00, 0xc8, 0xd0, 0x42, + 0xa7, 0x01, 0x00, 0x00, 0xbd, 0x02, 0xbd, 0x03, + 0x33, 0x24, 0x01, 0x00, 0xcb, 0xec, 0x92, 0x01, + 0x11, 0x04, 0xa6, 0x01, 0x00, 0x00, 0xae, 0xe9, + 0x0a, 0x04, 0x1e, 0x02, 0x00, 0x00, 0xc8, 0xec, + 0x80, 0x01, 0x11, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0xae, 0xe9, 0x1e, 0xd0, 0x42, 0xa7, 0x01, 0x00, + 0x00, 0xbd, 0x04, 0xbd, 0x05, 0x33, 0x24, 0x01, + 0x00, 0xcf, 0x69, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0xc8, 0xec, 0x5a, 0x01, + 0x11, 0x04, 0xc8, 0x01, 0x00, 0x00, 0xae, 0xe9, + 0x1b, 0xd0, 0x42, 0xa7, 0x01, 0x00, 0x00, 0xbd, + 0x06, 0xbd, 0x07, 0x33, 0x24, 0x01, 0x00, 0xcf, + 0xe9, 0x2e, 0x04, 0x1f, 0x02, 0x00, 0x00, 0xc8, + 0xec, 0x37, 0x01, 0x11, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0xae, 0xea, 0x1c, 0x11, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0xae, 0xea, 0x13, 0x11, 0x04, 0x20, + 0x02, 0x00, 0x00, 0xae, 0xea, 0x0a, 0x11, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x0c, 0x04, + 0x21, 0x02, 0x00, 0x00, 0xc8, 0xb4, 0xca, 0xec, + 0x08, 0x01, 0x11, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0xae, 0xe9, 0x0a, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0xc8, 0xec, 0xf6, 0x00, 0x11, 0xbd, 0x08, 0xae, + 0xea, 0x37, 0x11, 0xbd, 0x09, 0xae, 0xea, 0x31, + 0x11, 0xbd, 0x0a, 0xae, 0xea, 0x2b, 0x11, 0xbd, + 0x0b, 0xae, 0xea, 0x25, 0x11, 0xbd, 0x0c, 0xae, + 0xea, 0x1f, 0x11, 0xbd, 0x0d, 0xae, 0xea, 0x19, + 0x11, 0xbd, 0x0e, 0xae, 0xea, 0x13, 0x11, 0xbd, + 0x0f, 0xae, 0xea, 0x0d, 0x11, 0xbd, 0x10, 0xae, + 0xea, 0x07, 0x11, 0xbd, 0x11, 0xae, 0xe9, 0x19, + 0x04, 0x45, 0x00, 0x00, 0x00, 0xc8, 0xd0, 0x42, + 0xa7, 0x01, 0x00, 0x00, 0xbd, 0x12, 0xbd, 0x13, + 0x33, 0x24, 0x01, 0x00, 0xcb, 0xec, 0xa2, 0x00, + 0x11, 0x04, 0xcf, 0x01, 0x00, 0x00, 0xae, 0xe9, + 0x06, 0xb4, 0xca, 0xec, 0x94, 0x00, 0xde, 0xd0, + 0xee, 0xe9, 0x06, 0xd0, 0xe8, 0xb4, 0x9e, 0xca, + 0xd0, 0x42, 0xaf, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xe9, 0x09, + 0x04, 0x22, 0x02, 0x00, 0x00, 0xc8, 0xeb, 0x71, + 0xd0, 0x42, 0xaf, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xe9, 0x09, + 0x04, 0x49, 0x00, 0x00, 0x00, 0xc8, 0xeb, 0x59, + 0xd0, 0x04, 0xdf, 0x00, 0x00, 0x00, 0xae, 0x11, + 0xea, 0x09, 0x0e, 0xd0, 0x04, 0x23, 0x02, 0x00, + 0x00, 0xae, 0xe9, 0x09, 0x04, 0x24, 0x02, 0x00, + 0x00, 0xc8, 0xeb, 0x3d, 0xd0, 0x04, 0x03, 0x00, + 0x00, 0x00, 0xae, 0x11, 0xea, 0x09, 0x0e, 0xd0, + 0x04, 0x02, 0x00, 0x00, 0x00, 0xae, 0xe9, 0x09, + 0x04, 0x46, 0x00, 0x00, 0x00, 0xc8, 0xeb, 0x21, + 0xd0, 0x04, 0x01, 0x00, 0x00, 0x00, 0xae, 0xe9, + 0x09, 0x04, 0x01, 0x00, 0x00, 0x00, 0xc8, 0xeb, + 0x10, 0xd0, 0x04, 0x44, 0x00, 0x00, 0x00, 0xae, + 0xe9, 0x07, 0x04, 0x44, 0x00, 0x00, 0x00, 0xc8, + 0x0e, 0xc7, 0xe9, 0x06, 0xc7, 0xb3, 0x47, 0xe8, + 0xca, 0xc6, 0xb3, 0xa8, 0xe9, 0x0d, 0xd0, 0x42, + 0x9a, 0x01, 0x00, 0x00, 0xb3, 0xc6, 0x24, 0x02, + 0x00, 0xc9, 0xdd, 0xc5, 0xc4, 0xef, 0x0e, 0xd0, + 0x42, 0x9a, 0x01, 0x00, 0x00, 0xc5, 0xe8, 0x24, + 0x01, 0x00, 0xd4, 0xec, 0xea, 0xfd, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0xca, 0x07, 0x01, 0x01, 0x01, + 0x03, 0x00, 0x00, 0x19, 0x02, 0xae, 0x06, 0x00, + 0x01, 0x00, 0xca, 0x05, 0x00, 0x00, 0x00, 0xd0, + 0xd0, 0xe8, 0xb4, 0x9e, 0x47, 0xcc, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0xae, 0x11, 0xea, 0x09, 0x0e, + 0xc4, 0x04, 0x0d, 0x02, 0x00, 0x00, 0xae, 0x28, + 0x0c, 0x43, 0x02, 0x01, 0xcc, 0x07, 0x01, 0x04, + 0x01, 0x08, 0x03, 0x00, 0x7c, 0x05, 0xc4, 0x05, + 0x00, 0x01, 0x00, 0xca, 0x08, 0x00, 0x00, 0x00, + 0xcc, 0x08, 0x00, 0x01, 0x00, 0xce, 0x08, 0x00, + 0x02, 0x00, 0xae, 0x06, 0x00, 0x03, 0x00, 0xb4, + 0x07, 0x08, 0x01, 0xca, 0x07, 0x13, 0x01, 0xcc, + 0x07, 0x14, 0x01, 0xdc, 0xd0, 0x47, 0xe8, 0xc8, + 0xdc, 0xd0, 0xb4, 0x9d, 0x47, 0x04, 0x14, 0x02, + 0x00, 0x00, 0xae, 0xe9, 0x0e, 0xd0, 0xb5, 0x9d, + 0xd4, 0xc4, 0xb5, 0xdc, 0xd0, 0x47, 0xe8, 0x9d, + 0x9d, 0xc8, 0xc4, 0xc9, 0xdd, 0xdc, 0xd0, 0x47, + 0xee, 0xe9, 0x4f, 0xb4, 0xca, 0xd0, 0x8f, 0xd8, + 0xdc, 0xe8, 0xa6, 0xe9, 0x45, 0xc6, 0x94, 0x01, + 0xdc, 0xd0, 0x47, 0xcf, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0xae, 0x11, 0xea, 0x09, 0x0e, 0xc7, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0xae, 0xea, 0x2b, 0xeb, + 0x1c, 0x11, 0x7e, 0x7a, 0x62, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x81, 0x02, 0x0e, 0x3d, 0x79, 0x25, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x81, 0x02, 0x0e, + 0x3d, 0x84, 0xeb, 0x06, 0xde, 0xd0, 0xee, 0xeb, + 0xe1, 0x0e, 0xc4, 0x94, 0x01, 0xb5, 0xca, 0xeb, + 0xb5, 0xd0, 0xc5, 0x26, 0x02, 0x00, 0x28, 0x0c, + 0x43, 0x02, 0x01, 0xce, 0x07, 0x02, 0x02, 0x02, + 0x03, 0x05, 0x00, 0x67, 0x04, 0xc4, 0x05, 0x00, + 0x01, 0x00, 0xd0, 0x08, 0x00, 0x01, 0x00, 0xf4, + 0x07, 0x00, 0x00, 0x00, 0xae, 0x06, 0x00, 0x01, + 0x00, 0xb4, 0x07, 0x08, 0x01, 0xc4, 0x07, 0x10, + 0x01, 0xc6, 0x07, 0x11, 0x01, 0xc8, 0x07, 0x12, + 0x01, 0xca, 0x07, 0x13, 0x01, 0xbf, 0xc8, 0xd0, + 0xd1, 0xa7, 0xe9, 0x60, 0xdc, 0xd0, 0x91, 0xd4, + 0x47, 0xcd, 0x04, 0xa5, 0x01, 0x00, 0x00, 0xae, + 0x11, 0xea, 0x09, 0x0e, 0xc5, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0xae, 0xe9, 0x11, 0xc4, 0xe8, 0xb4, + 0xa8, 0xe9, 0x27, 0xdd, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0xee, 0x0e, 0xeb, 0x1d, 0xdd, 0xc4, 0xee, + 0x0e, 0xdc, 0xd0, 0x47, 0x04, 0x14, 0x02, 0x00, + 0x00, 0xae, 0xe9, 0x0e, 0xde, 0xc5, 0xee, 0x0e, + 0xd0, 0x8f, 0xd4, 0xdc, 0xd0, 0x91, 0xd4, 0x47, + 0xc9, 0xdf, 0xc5, 0xee, 0x0e, 0x5e, 0x04, 0x00, + 0xc5, 0xee, 0xe9, 0x08, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0xeb, 0x06, 0x04, 0x29, 0x02, 0x00, 0x00, + 0xc8, 0xeb, 0x9d, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xd0, 0x07, 0x02, 0x00, 0x02, 0x04, 0x01, 0x00, + 0x1a, 0x02, 0xae, 0x06, 0x00, 0x01, 0x00, 0x80, + 0x07, 0x00, 0x01, 0x00, 0xc4, 0x07, 0x10, 0x01, + 0xd1, 0xb3, 0xa8, 0xe9, 0x12, 0xd0, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x42, 0x2a, 0x02, 0x00, 0x00, + 0xd1, 0x24, 0x01, 0x00, 0x9d, 0xd4, 0xdc, 0xd0, + 0xee, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xd2, 0x07, + 0x02, 0x0c, 0x02, 0x08, 0x0b, 0x00, 0x8f, 0x05, + 0x0e, 0xd6, 0x08, 0x00, 0x01, 0x00, 0xf2, 0x01, + 0x00, 0x01, 0x00, 0xd8, 0x08, 0x00, 0x00, 0x00, + 0xd0, 0x08, 0x00, 0x01, 0x00, 0xcc, 0x08, 0x00, + 0x02, 0x00, 0xf4, 0x07, 0x00, 0x03, 0x00, 0xda, + 0x08, 0x00, 0x04, 0x00, 0xc4, 0x05, 0x00, 0x05, + 0x00, 0xca, 0x08, 0x00, 0x06, 0x00, 0xe6, 0x07, + 0x00, 0x07, 0x00, 0xea, 0x06, 0x00, 0x08, 0x00, + 0xdc, 0x08, 0x00, 0x09, 0x00, 0xb2, 0x05, 0x00, + 0x0a, 0x00, 0xde, 0x08, 0x00, 0x0b, 0x00, 0xaa, + 0x07, 0x02, 0x01, 0xcc, 0x07, 0x14, 0x01, 0xce, + 0x07, 0x15, 0x01, 0xb4, 0x07, 0x08, 0x01, 0xc6, + 0x07, 0x11, 0x01, 0xc8, 0x07, 0x12, 0x01, 0xca, + 0x07, 0x13, 0x01, 0xb0, 0x02, 0x10, 0x00, 0xc4, + 0x07, 0x10, 0x01, 0xd0, 0x07, 0x16, 0x01, 0xd2, + 0x07, 0x17, 0x01, 0xdc, 0xd0, 0x9e, 0xb5, 0x9e, + 0xc8, 0x06, 0x11, 0xf1, 0xea, 0x0d, 0x7e, 0x81, + 0x00, 0x0e, 0xc9, 0x81, 0x00, 0x0e, 0xca, 0x84, + 0xeb, 0x07, 0x0e, 0xdd, 0xd1, 0xee, 0xeb, 0xef, + 0xc6, 0xc4, 0xa7, 0xe9, 0x0c, 0xde, 0xd1, 0xc5, + 0xef, 0x0e, 0xc5, 0xc6, 0x26, 0x02, 0x00, 0x28, + 0xdf, 0xd1, 0xb4, 0x9d, 0x47, 0x04, 0x14, 0x02, + 0x00, 0x00, 0xae, 0xe9, 0x0d, 0x5e, 0x04, 0x00, + 0xdf, 0xd1, 0x47, 0xee, 0x0e, 0xd1, 0xb5, 0x9d, + 0xd5, 0x5e, 0x05, 0x00, 0xdf, 0xd1, 0x47, 0xee, + 0x0e, 0x5e, 0x06, 0x00, 0xdf, 0xd1, 0x47, 0xee, + 0x96, 0xe9, 0x07, 0xd1, 0xc6, 0x26, 0x02, 0x00, + 0x28, 0xd0, 0xb5, 0x9d, 0xd4, 0xc4, 0xb5, 0x9e, + 0xc8, 0xbf, 0xcb, 0xd1, 0xb4, 0x9d, 0xc1, 0x04, + 0xdf, 0xd1, 0x47, 0x42, 0x30, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, + 0x69, 0xa9, 0x01, 0x00, 0x00, 0xb3, 0xc1, 0x07, + 0x26, 0x00, 0x00, 0xc1, 0x0a, 0xc0, 0x04, 0xc1, + 0x05, 0xc0, 0x05, 0xc5, 0xa6, 0xe9, 0x5d, 0xdf, + 0xc0, 0x05, 0x47, 0xb3, 0x47, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0xae, 0x11, 0xea, 0x0e, 0x0e, 0xdf, + 0xc0, 0x05, 0xb4, 0x9d, 0x47, 0x04, 0x14, 0x02, + 0x00, 0x00, 0xae, 0xea, 0x3f, 0xeb, 0x1c, 0x11, + 0x7e, 0x79, 0x62, 0x01, 0x00, 0x00, 0x05, 0x00, + 0x81, 0x02, 0x0e, 0x3d, 0x79, 0x25, 0x02, 0x00, + 0x00, 0x06, 0x00, 0x81, 0x02, 0x0e, 0x3d, 0x84, + 0xeb, 0x07, 0xdd, 0xc0, 0x05, 0xee, 0xeb, 0xe0, + 0x0e, 0xc0, 0x0a, 0xc0, 0x07, 0x91, 0xc1, 0x07, + 0x1b, 0x11, 0xb0, 0xea, 0x04, 0x1b, 0x71, 0x1b, + 0x1b, 0xc0, 0x06, 0x1b, 0x71, 0x1b, 0x49, 0x93, + 0x05, 0xeb, 0x9f, 0x5e, 0x07, 0x00, 0x42, 0x82, + 0x01, 0x00, 0x00, 0xc4, 0xb6, 0x9b, 0xc0, 0x0a, + 0xe8, 0xbb, 0x10, 0x24, 0x03, 0x00, 0xc1, 0x09, + 0xc0, 0x09, 0xb4, 0xa8, 0xe9, 0x73, 0x26, 0x00, + 0x00, 0xc1, 0x0b, 0xb3, 0xc1, 0x08, 0xb3, 0xc1, + 0x07, 0xc0, 0x07, 0xc0, 0x0a, 0xe8, 0xa6, 0xe9, + 0x3b, 0xc0, 0x0b, 0xc0, 0x08, 0x1b, 0x11, 0xb0, + 0xea, 0x04, 0x1b, 0x71, 0x1b, 0x1b, 0x5e, 0x07, + 0x00, 0x42, 0xbc, 0x01, 0x00, 0x00, 0xc0, 0x0b, + 0xc0, 0x08, 0x47, 0x11, 0xea, 0x03, 0x0e, 0xb3, + 0xc0, 0x0a, 0xc0, 0x07, 0x47, 0xb5, 0x9d, 0x24, + 0x02, 0x00, 0x1b, 0x71, 0x1b, 0x49, 0xc0, 0x08, + 0xb4, 0x9d, 0xc0, 0x09, 0x9c, 0xc1, 0x08, 0x93, + 0x07, 0xeb, 0xbf, 0xb3, 0xc1, 0x06, 0xb3, 0xc1, + 0x08, 0xc0, 0x08, 0xc0, 0x09, 0xa6, 0xe9, 0x0f, + 0xc0, 0x06, 0xc0, 0x0b, 0xc0, 0x08, 0x47, 0x9d, + 0xc1, 0x06, 0x93, 0x08, 0xeb, 0xec, 0xc0, 0x06, + 0xc4, 0xa7, 0xea, 0x05, 0x92, 0x09, 0xeb, 0x89, + 0xc0, 0x09, 0xb4, 0xa8, 0x69, 0xa5, 0x00, 0x00, + 0x00, 0xb3, 0xc1, 0x06, 0xc0, 0x09, 0xb4, 0x9e, + 0xc1, 0x08, 0xc0, 0x04, 0xc1, 0x05, 0xc0, 0x05, + 0xc5, 0xa6, 0x69, 0x8b, 0x00, 0x00, 0x00, 0xdf, + 0xc0, 0x05, 0x47, 0xb3, 0x47, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0xae, 0x11, 0xea, 0x0e, 0x0e, 0xdf, + 0xc0, 0x05, 0xb4, 0x9d, 0x47, 0x04, 0x14, 0x02, + 0x00, 0x00, 0xae, 0xea, 0x6a, 0xc0, 0x06, 0xc7, + 0xe8, 0x9d, 0xc1, 0x06, 0x5e, 0x08, 0x00, 0xc7, + 0xee, 0x0e, 0x04, 0x20, 0x02, 0x00, 0x00, 0xcb, + 0xc0, 0x08, 0xc0, 0x09, 0xb4, 0x9e, 0xae, 0xe9, + 0x11, 0x5e, 0x09, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0xd0, 0xef, 0x0e, 0xb3, 0xc1, 0x08, 0xeb, + 0x2f, 0x5e, 0x09, 0x00, 0xbf, 0xc0, 0x0b, 0xc0, + 0x08, 0x91, 0xc1, 0x08, 0x47, 0xc0, 0x06, 0x9e, + 0xef, 0x0e, 0xeb, 0x1c, 0x11, 0x7e, 0x79, 0x62, + 0x01, 0x00, 0x00, 0x05, 0x00, 0x81, 0x02, 0x0e, + 0x3d, 0x79, 0x25, 0x02, 0x00, 0x00, 0x06, 0x00, + 0x81, 0x02, 0x0e, 0x3d, 0x84, 0xeb, 0x0a, 0x5e, + 0x0a, 0x00, 0xd0, 0xc0, 0x05, 0xef, 0xeb, 0xdd, + 0x0e, 0x93, 0x05, 0xec, 0x72, 0xff, 0xc0, 0x05, + 0xc1, 0x04, 0xc0, 0x04, 0xc1, 0x05, 0xc0, 0x05, + 0xc5, 0xa6, 0xe9, 0x43, 0x5e, 0x08, 0x00, 0xc7, + 0xee, 0x0e, 0x04, 0x20, 0x02, 0x00, 0x00, 0xcb, + 0x5e, 0x09, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0xd0, 0xef, 0x0e, 0xeb, 0x1c, 0x11, 0x7e, 0x79, + 0x62, 0x01, 0x00, 0x00, 0x05, 0x00, 0x81, 0x02, + 0x0e, 0x3d, 0x79, 0x25, 0x02, 0x00, 0x00, 0x06, + 0x00, 0x81, 0x02, 0x0e, 0x3d, 0x84, 0xeb, 0x0a, + 0x5e, 0x0a, 0x00, 0xd0, 0xc0, 0x05, 0xef, 0xeb, + 0xdd, 0x0e, 0x93, 0x05, 0xeb, 0xb9, 0x5e, 0x09, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0xd0, 0xb5, + 0x9e, 0xd8, 0xef, 0x0e, 0x5e, 0x05, 0x00, 0xdf, + 0xc5, 0x47, 0xee, 0x0e, 0xc5, 0xdc, 0x26, 0x02, + 0x00, 0x28, 0xbe, 0x00, 0xc9, 0xbe, 0x01, 0xc1, + 0x0b, 0xbe, 0x02, 0xc1, 0x0c, 0xbe, 0x03, 0xc1, + 0x0d, 0xbe, 0x04, 0xc1, 0x0e, 0xbe, 0x05, 0xc1, + 0x0f, 0xbe, 0x06, 0xc1, 0x10, 0xbe, 0x07, 0xc1, + 0x11, 0xbe, 0x08, 0xc1, 0x12, 0xbe, 0x09, 0xc1, + 0x13, 0xbe, 0x0a, 0xc1, 0x14, 0xbe, 0x0b, 0xc1, + 0x15, 0xbe, 0x0c, 0xc1, 0x16, 0xbe, 0x0d, 0xc1, + 0x17, 0x0b, 0xc8, 0xd1, 0x97, 0x04, 0x48, 0x00, + 0x00, 0x00, 0xae, 0xe9, 0x1c, 0xd1, 0x07, 0xaf, + 0xe9, 0x17, 0xd1, 0xcc, 0x41, 0x31, 0x02, 0x00, + 0x00, 0xd5, 0xc4, 0x41, 0x32, 0x02, 0x00, 0x00, + 0xd6, 0xc4, 0x41, 0xe1, 0x00, 0x00, 0x00, 0xd7, + 0xd1, 0x97, 0x04, 0x46, 0x00, 0x00, 0x00, 0xaf, + 0xe9, 0x03, 0x09, 0xd5, 0xc5, 0xd2, 0xb5, 0xef, + 0xd6, 0xc5, 0xd3, 0x0a, 0xef, 0xd7, 0xc5, 0xc4, + 0x41, 0xd5, 0x01, 0x00, 0x00, 0x5e, 0x10, 0x00, + 0x42, 0x82, 0x01, 0x00, 0x00, 0x5e, 0x11, 0x00, + 0xbb, 0x50, 0x24, 0x02, 0x00, 0xef, 0xca, 0xc5, + 0xc4, 0x41, 0xd6, 0x01, 0x00, 0x00, 0xbb, 0x64, + 0xef, 0xcb, 0xc5, 0xc4, 0x41, 0xd7, 0x01, 0x00, + 0x00, 0xc7, 0xbb, 0x0a, 0x9d, 0xef, 0xc1, 0x04, + 0xc5, 0xc4, 0x41, 0xd8, 0x01, 0x00, 0x00, 0xbb, + 0x4e, 0xef, 0xc1, 0x05, 0x0b, 0x26, 0x01, 0x00, + 0xc1, 0x06, 0x26, 0x00, 0x00, 0xc1, 0x07, 0x26, + 0x00, 0x00, 0xc1, 0x08, 0x26, 0x00, 0x00, 0xc1, + 0x09, 0x04, 0x7b, 0x01, 0x00, 0x00, 0xc1, 0x0a, + 0xc0, 0x0f, 0xd0, 0xb3, 0xef, 0x0e, 0xc0, 0x17, + 0xb3, 0xb3, 0xef, 0x0e, 0xc0, 0x10, 0xbf, 0xee, + 0x0e, 0xc0, 0x09, 0x42, 0x5a, 0x00, 0x00, 0x00, + 0xbf, 0x25, 0x01, 0x00, 0x0c, 0x43, 0x02, 0x01, + 0x8a, 0x05, 0x01, 0x00, 0x01, 0x07, 0x05, 0x00, + 0x3c, 0x01, 0xa2, 0x07, 0x00, 0x01, 0x00, 0xb4, + 0x03, 0x00, 0x0c, 0x88, 0x05, 0x74, 0x01, 0xd0, + 0x03, 0x18, 0x01, 0xcc, 0x03, 0x16, 0x01, 0xce, + 0x03, 0x17, 0x01, 0x65, 0x00, 0x00, 0x42, 0x7a, + 0x01, 0x00, 0x00, 0xdd, 0x42, 0x33, 0x02, 0x00, + 0x00, 0xd0, 0x0b, 0xde, 0x4c, 0x32, 0x02, 0x00, + 0x00, 0xdf, 0x4c, 0xe1, 0x00, 0x00, 0x00, 0x5e, + 0x04, 0x00, 0x4c, 0x31, 0x02, 0x00, 0x00, 0x24, + 0x02, 0x00, 0x24, 0x01, 0x00, 0x0e, 0x65, 0x00, + 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0x8c, 0x05, 0x01, 0x05, 0x01, + 0x06, 0x03, 0x00, 0xb4, 0x01, 0x06, 0xd0, 0x05, + 0x00, 0x01, 0x00, 0x98, 0x06, 0x00, 0x00, 0x00, + 0xee, 0x03, 0x00, 0x01, 0x00, 0xe8, 0x08, 0x00, + 0x02, 0x00, 0x98, 0x07, 0x00, 0x03, 0x00, 0xea, + 0x08, 0x00, 0x04, 0x00, 0x8e, 0x05, 0x77, 0x01, + 0x96, 0x05, 0x7b, 0x01, 0xb4, 0x03, 0x00, 0x0c, + 0xd0, 0x04, 0x36, 0x02, 0x00, 0x00, 0xae, 0xe9, + 0x06, 0xdc, 0xed, 0x0e, 0x0a, 0x28, 0xd0, 0xb3, + 0x47, 0x04, 0x9e, 0x01, 0x00, 0x00, 0xaf, 0xe9, + 0x0e, 0xd0, 0xb3, 0x47, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0xaf, 0xe9, 0x03, 0x09, 0x28, 0xb4, 0xc8, + 0xc4, 0xd0, 0xe8, 0xa6, 0xe9, 0x10, 0xd0, 0xc4, + 0x47, 0x04, 0xc3, 0x01, 0x00, 0x00, 0xaf, 0xe9, + 0x05, 0x93, 0x00, 0xeb, 0xec, 0xd0, 0x42, 0x7c, + 0x01, 0x00, 0x00, 0xb4, 0xc4, 0x24, 0x02, 0x00, + 0xc9, 0xb3, 0xca, 0xdd, 0x7d, 0xeb, 0x21, 0xc1, + 0x04, 0xc0, 0x04, 0x42, 0xaf, 0x01, 0x00, 0x00, + 0xc5, 0x24, 0x01, 0x00, 0xe9, 0x12, 0xdd, 0xc0, + 0x04, 0x47, 0xcb, 0x93, 0x02, 0xc0, 0x04, 0xc5, + 0xae, 0xe9, 0x05, 0xb3, 0xca, 0xeb, 0x05, 0x80, + 0xe9, 0xde, 0x0e, 0x0e, 0xc7, 0xe9, 0x1d, 0xc6, + 0xb5, 0xa6, 0xe9, 0x18, 0xc7, 0xd0, 0x42, 0x7c, + 0x01, 0x00, 0x00, 0xc4, 0x24, 0x01, 0x00, 0x42, + 0x37, 0x02, 0x00, 0x00, 0x24, 0x00, 0x00, 0xee, + 0x0e, 0xeb, 0x20, 0x65, 0x02, 0x00, 0x42, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x42, 0x5b, 0x00, 0x00, 0x00, 0xc5, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x24, 0x02, 0x00, 0x24, 0x01, + 0x00, 0x0e, 0x0a, 0x28, 0x0c, 0x43, 0x02, 0x01, + 0x8e, 0x05, 0x00, 0x01, 0x00, 0x07, 0x09, 0x01, + 0xdc, 0x01, 0x01, 0xf2, 0x08, 0x00, 0x00, 0x00, + 0xb4, 0x03, 0x00, 0x0c, 0xd2, 0x03, 0x19, 0x01, + 0xca, 0x03, 0x15, 0x01, 0xd4, 0x03, 0x1a, 0x01, + 0xd0, 0x03, 0x18, 0x01, 0xce, 0x03, 0x17, 0x01, + 0xcc, 0x03, 0x16, 0x01, 0xc6, 0x03, 0x13, 0x01, + 0xc4, 0x03, 0x12, 0x01, 0x0c, 0x42, 0x02, 0x01, + 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x0f, + 0x01, 0xfa, 0x05, 0x00, 0x01, 0x00, 0xd0, 0xe9, + 0x07, 0x04, 0x7c, 0x00, 0x00, 0x00, 0x28, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x28, 0xbe, 0x00, 0x4d, + 0x39, 0x02, 0x00, 0x00, 0xc8, 0x65, 0x00, 0x00, + 0x42, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x9d, + 0xc4, 0xdd, 0xee, 0x9d, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x9d, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x9d, + 0xc4, 0xdd, 0x96, 0xee, 0x9d, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x9d, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x9d, 0xc4, 0xde, 0xee, 0x9d, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x9d, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x9d, 0xc4, 0xdf, 0xee, 0x9d, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x9d, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x42, 0x5b, 0x00, 0x00, 0x00, 0x5e, 0x04, 0x00, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, + 0x9d, 0x04, 0x45, 0x02, 0x00, 0x00, 0x9d, 0xc4, + 0x5e, 0x05, 0x00, 0xee, 0x9d, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x9d, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x9d, 0xc4, 0x5e, 0x06, 0x00, 0xee, 0x9d, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x9d, 0xc4, 0x5e, 0x07, 0x00, 0x5e, + 0x08, 0x00, 0x41, 0x4a, 0x02, 0x00, 0x00, 0xac, + 0xee, 0x9d, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x9d, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x9d, 0xc4, 0x5e, + 0x07, 0x00, 0x5e, 0x08, 0x00, 0x41, 0x4d, 0x02, + 0x00, 0x00, 0xac, 0xee, 0x9d, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x9d, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x9d, 0x04, 0x50, 0x02, 0x00, 0x00, 0x9d, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x9d, 0x24, 0x01, 0x00, + 0x29, 0x0c, 0x43, 0x02, 0x01, 0x90, 0x05, 0x01, + 0x01, 0x01, 0x07, 0x01, 0x00, 0x5f, 0x02, 0xae, + 0x06, 0x00, 0x01, 0x00, 0xa4, 0x09, 0x04, 0x00, + 0x03, 0xb4, 0x03, 0x00, 0x0c, 0xd0, 0x42, 0x53, + 0x02, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xd0, 0x42, 0x53, 0x02, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xa7, 0xe9, 0x09, 0xd0, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x9d, 0xd4, 0x6c, 0x13, 0x00, 0x00, + 0x00, 0x65, 0x00, 0x00, 0x42, 0x55, 0x02, 0x00, + 0x00, 0xd0, 0x24, 0x01, 0x00, 0x0e, 0x0e, 0x29, + 0xc8, 0x6c, 0x21, 0x00, 0x00, 0x00, 0x65, 0x00, + 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, 0xbf, 0x42, + 0x5b, 0x00, 0x00, 0x00, 0xc4, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x24, 0x02, 0x00, 0x24, 0x01, 0x00, + 0x0e, 0x0e, 0x29, 0x2f, 0x0c, 0x43, 0x02, 0x01, + 0x92, 0x05, 0x01, 0x00, 0x01, 0x03, 0x02, 0x00, + 0x10, 0x01, 0xa4, 0x09, 0x00, 0x01, 0x00, 0xac, + 0x05, 0x86, 0x01, 0x01, 0xb4, 0x03, 0x00, 0x0c, + 0xdc, 0xed, 0x0e, 0x65, 0x01, 0x00, 0x42, 0x49, + 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0x29, + 0x0c, 0x43, 0x02, 0x01, 0x94, 0x05, 0x02, 0x00, + 0x02, 0x03, 0x00, 0x00, 0x14, 0x02, 0xae, 0x06, + 0x00, 0x01, 0x00, 0xd6, 0x07, 0x00, 0x01, 0x00, + 0xd0, 0xe9, 0x10, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x42, 0xec, 0x01, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0x28, 0xd1, 0x28, 0x0c, 0x42, 0x02, 0x01, + 0x00, 0x01, 0x00, 0x01, 0x03, 0x02, 0x00, 0x06, + 0x01, 0xae, 0x06, 0x00, 0x01, 0x00, 0xd2, 0x03, + 0x19, 0x01, 0x94, 0x05, 0x7a, 0x01, 0xdd, 0xd0, + 0x0a, 0xef, 0xe0, 0x29, 0x0c, 0x42, 0x02, 0x01, + 0x00, 0x01, 0x00, 0x01, 0x03, 0x02, 0x00, 0x07, + 0x01, 0xae, 0x06, 0x00, 0x01, 0x00, 0xd2, 0x03, + 0x19, 0x01, 0x94, 0x05, 0x7a, 0x01, 0xdd, 0xd0, + 0x0a, 0xef, 0x96, 0xe0, 0x29, 0x0c, 0x42, 0x02, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, 0x02, 0x00, + 0x07, 0x01, 0xae, 0x06, 0x00, 0x01, 0x00, 0xca, + 0x03, 0x15, 0x01, 0x94, 0x05, 0x7a, 0x01, 0xdd, + 0xd0, 0xdc, 0x96, 0xef, 0xe0, 0x29, 0x0c, 0x42, + 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, 0x02, + 0x00, 0x07, 0x01, 0xae, 0x06, 0x00, 0x01, 0x00, + 0xd4, 0x03, 0x1a, 0x01, 0x94, 0x05, 0x7a, 0x01, + 0xdd, 0xd0, 0xdc, 0x96, 0xef, 0xe0, 0x29, 0x0c, + 0x42, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, + 0x01, 0x00, 0x09, 0x01, 0xae, 0x06, 0x00, 0x01, + 0x00, 0xd0, 0x03, 0x18, 0x01, 0xd0, 0x8d, 0x11, + 0xea, 0x03, 0x0e, 0xb5, 0xe0, 0x29, 0x0c, 0x42, + 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, 0x02, + 0x00, 0x07, 0x01, 0xae, 0x06, 0x00, 0x01, 0x00, + 0xce, 0x03, 0x17, 0x01, 0x94, 0x05, 0x7a, 0x01, + 0xdd, 0xd0, 0xdc, 0x96, 0xef, 0xe0, 0x29, 0x0c, + 0x42, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, + 0x02, 0x00, 0x07, 0x01, 0xae, 0x06, 0x00, 0x01, + 0x00, 0xcc, 0x03, 0x16, 0x01, 0x94, 0x05, 0x7a, + 0x01, 0xdd, 0xd0, 0xdc, 0x96, 0xef, 0xe0, 0x29, + 0x0c, 0x42, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0xc6, 0x03, 0x13, + 0x01, 0xc4, 0x03, 0x12, 0x01, 0xdd, 0x41, 0x4a, + 0x02, 0x00, 0x00, 0xe0, 0x29, 0x0c, 0x42, 0x02, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, + 0x08, 0x00, 0xc6, 0x03, 0x13, 0x01, 0xc4, 0x03, + 0x12, 0x01, 0xdd, 0x41, 0x4d, 0x02, 0x00, 0x00, + 0xe0, 0x29, 0x0c, 0x42, 0x02, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x01, 0x00, 0x11, 0x00, 0xb4, + 0x03, 0x00, 0x0c, 0x65, 0x00, 0x00, 0x42, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x29, 0x0c, 0x42, 0x02, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x04, + 0x00, 0x92, 0x05, 0x79, 0x01, 0xdc, 0xb3, 0xee, + 0x29, 0x0c, 0x43, 0x02, 0x01, 0x98, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x02, 0x00, 0x14, 0x00, 0xb4, + 0x03, 0x00, 0x0c, 0x9a, 0x05, 0x7d, 0x01, 0x65, + 0x00, 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, + 0xdd, 0xed, 0x29, 0x0c, 0x43, 0x02, 0x01, 0x9a, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x0c, + 0x00, 0xfe, 0x04, 0x6f, 0x01, 0xf4, 0x04, 0x6a, + 0x01, 0xec, 0x03, 0x26, 0x01, 0x9c, 0x05, 0x7e, + 0x01, 0xdc, 0xdd, 0x04, 0x59, 0x02, 0x00, 0x00, + 0xde, 0xef, 0xdf, 0xef, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0x9c, 0x05, 0x01, 0x00, 0x01, 0x02, 0x02, + 0x00, 0x0a, 0x01, 0xb4, 0x09, 0x00, 0x01, 0x00, + 0x9e, 0x05, 0x7f, 0x01, 0x9a, 0x05, 0x7d, 0x01, + 0xdc, 0xd0, 0xee, 0x96, 0xe9, 0x04, 0xdd, 0xed, + 0x0e, 0x29, 0x0c, 0x43, 0x02, 0x01, 0x9e, 0x05, + 0x01, 0x01, 0x01, 0x03, 0x06, 0x00, 0x3b, 0x02, + 0xb4, 0x09, 0x00, 0x01, 0x00, 0x8c, 0x06, 0x00, + 0x00, 0x00, 0xea, 0x03, 0x25, 0x01, 0x8c, 0x05, + 0x76, 0x01, 0xa8, 0x05, 0x84, 0x01, 0x01, 0xdc, + 0x03, 0x1e, 0x01, 0xec, 0x03, 0x26, 0x01, 0xa0, + 0x05, 0x80, 0x01, 0x01, 0xd0, 0x96, 0xe9, 0x03, + 0x09, 0x28, 0xdc, 0xe9, 0x0d, 0xdc, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x9d, 0xd0, 0x9d, 0xd4, 0xeb, + 0x08, 0xdd, 0xd0, 0xee, 0xe9, 0x03, 0x09, 0x28, + 0xde, 0xd0, 0xee, 0xcc, 0xb3, 0x47, 0xe3, 0xc4, + 0xb4, 0x47, 0x5f, 0x04, 0x00, 0xdf, 0xe9, 0x05, + 0xd0, 0xe0, 0x09, 0x28, 0xbf, 0xe0, 0x5e, 0x05, + 0x00, 0xd0, 0x0a, 0xef, 0x0e, 0x0a, 0x28, 0x0c, + 0x43, 0x02, 0x01, 0xa0, 0x05, 0x02, 0x02, 0x02, + 0x06, 0x06, 0x00, 0x68, 0x04, 0xb4, 0x09, 0x00, + 0x01, 0x00, 0xb6, 0x09, 0x00, 0x01, 0x00, 0xb8, + 0x09, 0x00, 0x00, 0x00, 0xba, 0x09, 0x07, 0x00, + 0x03, 0xd4, 0x03, 0x1a, 0x01, 0xe6, 0x03, 0x23, + 0x01, 0xb6, 0x03, 0x01, 0x0c, 0xb4, 0x03, 0x00, + 0x0c, 0xa2, 0x05, 0x81, 0x01, 0x01, 0xa4, 0x05, + 0x82, 0x01, 0x01, 0x6c, 0x58, 0x00, 0x00, 0x00, + 0xdc, 0xe9, 0x09, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0xd0, 0x9d, 0xd4, 0x65, 0x02, 0x00, 0x42, 0x5f, + 0x02, 0x00, 0x00, 0x24, 0x00, 0x00, 0xe1, 0x65, + 0x03, 0x00, 0x42, 0x60, 0x02, 0x00, 0x00, 0xd0, + 0x0b, 0x0a, 0x4c, 0x61, 0x02, 0x00, 0x00, 0xd1, + 0x4c, 0x84, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, + 0xc8, 0xd1, 0xe9, 0x13, 0xc4, 0x42, 0x7e, 0x00, + 0x00, 0x00, 0x5e, 0x04, 0x00, 0x5e, 0x05, 0x00, + 0x24, 0x02, 0x00, 0x0e, 0xeb, 0x0d, 0x5e, 0x04, + 0x00, 0x0b, 0xc4, 0x4c, 0x3f, 0x00, 0x00, 0x00, + 0xee, 0x0e, 0x0e, 0x29, 0xc9, 0x6c, 0x0c, 0x00, + 0x00, 0x00, 0x5e, 0x05, 0x00, 0xc5, 0xee, 0x0e, + 0x0e, 0x29, 0x2f, 0x0c, 0x43, 0x02, 0x01, 0xa2, + 0x05, 0x01, 0x00, 0x01, 0x02, 0x06, 0x00, 0x27, + 0x01, 0xb8, 0x09, 0x00, 0x01, 0x00, 0xe8, 0x03, + 0x24, 0x01, 0xb6, 0x03, 0x01, 0x0c, 0xe6, 0x03, + 0x23, 0x01, 0x8a, 0x05, 0x75, 0x01, 0xb8, 0x03, + 0x00, 0x03, 0xa6, 0x05, 0x83, 0x01, 0x01, 0xd0, + 0x41, 0x3f, 0x00, 0x00, 0x00, 0xd4, 0x65, 0x01, + 0x00, 0x42, 0x5f, 0x02, 0x00, 0x00, 0x24, 0x00, + 0x00, 0xde, 0x9e, 0xe0, 0xdf, 0xd0, 0xee, 0x0e, + 0x5e, 0x04, 0x00, 0xd0, 0x43, 0x6a, 0x01, 0x00, + 0x00, 0x5e, 0x05, 0x00, 0xed, 0x29, 0x0c, 0x43, + 0x02, 0x01, 0xa4, 0x05, 0x01, 0x00, 0x01, 0x04, + 0x06, 0x00, 0x77, 0x01, 0xba, 0x09, 0x00, 0x01, + 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xc2, 0x03, 0x11, + 0x01, 0xc6, 0x03, 0x13, 0x01, 0xa4, 0x02, 0x09, + 0x01, 0xc0, 0x03, 0x10, 0x01, 0xa6, 0x05, 0x83, + 0x01, 0x01, 0x65, 0x00, 0x00, 0x42, 0x7a, 0x01, + 0x00, 0x00, 0xdd, 0xde, 0x41, 0x5d, 0x02, 0x00, + 0x00, 0x47, 0x24, 0x01, 0x00, 0x0e, 0xd0, 0xdf, + 0xaa, 0xe9, 0x2a, 0x5e, 0x04, 0x00, 0x42, 0x62, + 0x02, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0x0e, + 0xd0, 0x41, 0x34, 0x00, 0x00, 0x00, 0xe9, 0x33, + 0x65, 0x00, 0x00, 0x42, 0x7a, 0x01, 0x00, 0x00, + 0xd0, 0x41, 0x34, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0x0e, 0xeb, 0x1f, 0x65, 0x00, 0x00, 0x42, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x24, 0x01, 0x00, 0x0e, 0x5e, 0x04, 0x00, + 0x42, 0x62, 0x02, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0x0e, 0x65, 0x00, 0x00, 0x42, 0x7a, 0x01, + 0x00, 0x00, 0xdd, 0x41, 0x7b, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x0e, 0x5e, 0x05, 0x00, 0xed, + 0x29, 0x0c, 0x43, 0x02, 0x01, 0xa6, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x03, 0x00, 0x11, 0x00, 0xec, + 0x03, 0x26, 0x01, 0xb4, 0x03, 0x00, 0x0c, 0x9a, + 0x05, 0x7d, 0x01, 0xb3, 0xe0, 0x65, 0x01, 0x00, + 0x42, 0x64, 0x02, 0x00, 0x00, 0x24, 0x00, 0x00, + 0x0e, 0xde, 0xed, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xa8, 0x05, 0x01, 0x17, 0x01, 0x04, 0x03, 0x0a, + 0x84, 0x04, 0x18, 0xd8, 0x05, 0x00, 0x01, 0x40, + 0xc4, 0x05, 0x00, 0x00, 0x40, 0xca, 0x05, 0x00, + 0x01, 0x40, 0xec, 0x05, 0x00, 0x02, 0x40, 0xfa, + 0x05, 0x00, 0x03, 0x40, 0xf2, 0x05, 0x00, 0x04, + 0x40, 0xca, 0x09, 0x00, 0x05, 0x40, 0xec, 0x03, + 0x00, 0x06, 0x00, 0xcc, 0x09, 0x00, 0x07, 0x00, + 0xce, 0x09, 0x00, 0x08, 0x40, 0xd2, 0x06, 0x00, + 0x09, 0x40, 0xd0, 0x09, 0x00, 0x0a, 0x40, 0xd2, + 0x09, 0x00, 0x0b, 0x40, 0xd4, 0x09, 0x00, 0x0c, + 0x40, 0xd6, 0x09, 0x00, 0x0d, 0x00, 0xd8, 0x09, + 0x00, 0x0e, 0x00, 0xda, 0x09, 0x00, 0x0f, 0x00, + 0xdc, 0x09, 0x00, 0x10, 0x00, 0xde, 0x09, 0x00, + 0x11, 0x00, 0xe0, 0x09, 0x00, 0x12, 0x40, 0xe2, + 0x09, 0x00, 0x13, 0x40, 0xe4, 0x09, 0x00, 0x14, + 0x40, 0xe6, 0x09, 0x00, 0x15, 0x00, 0xe8, 0x09, + 0x00, 0x16, 0x00, 0x94, 0x04, 0x3a, 0x01, 0x9a, + 0x04, 0x3d, 0x01, 0x92, 0x04, 0x39, 0x01, 0x0c, + 0x43, 0x02, 0x01, 0xd0, 0x09, 0x01, 0x00, 0x01, + 0x02, 0x01, 0x00, 0x05, 0x01, 0xca, 0x05, 0x00, + 0x01, 0x00, 0xca, 0x09, 0x05, 0x01, 0xdc, 0xd0, + 0x9d, 0xe0, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xd2, + 0x09, 0x01, 0x00, 0x01, 0x04, 0x01, 0x00, 0x0d, + 0x01, 0xca, 0x05, 0x00, 0x01, 0x00, 0xca, 0x09, + 0x05, 0x01, 0xdc, 0x42, 0x7c, 0x01, 0x00, 0x00, + 0xdc, 0xe8, 0xb4, 0x9e, 0x25, 0x01, 0x00, 0x0c, + 0x43, 0x02, 0x01, 0xd4, 0x09, 0x01, 0x00, 0x01, + 0x05, 0x02, 0x00, 0x14, 0x01, 0xca, 0x05, 0x00, + 0x01, 0x00, 0xd2, 0x09, 0x0b, 0x01, 0xca, 0x09, + 0x05, 0x01, 0xdc, 0xed, 0xd4, 0xdd, 0x42, 0x7c, + 0x01, 0x00, 0x00, 0xb3, 0xdd, 0xe8, 0xb4, 0x9e, + 0x24, 0x02, 0x00, 0xe1, 0xd0, 0x28, 0x0c, 0x43, + 0x02, 0x01, 0xd6, 0x09, 0x00, 0x00, 0x00, 0x03, + 0x06, 0x00, 0x49, 0x00, 0xf2, 0x05, 0x04, 0x01, + 0xd0, 0x09, 0x0a, 0x01, 0xc4, 0x05, 0x00, 0x01, + 0xfa, 0x05, 0x03, 0x01, 0xd8, 0x05, 0x00, 0x03, + 0xd4, 0x09, 0x0c, 0x01, 0x04, 0x75, 0x02, 0x00, + 0x00, 0xe0, 0xdd, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0xee, 0x0e, 0xde, 0x8f, 0xe2, 0xde, 0xdf, 0xb4, + 0x9e, 0xa6, 0xe9, 0x31, 0x5e, 0x04, 0x00, 0xde, + 0x47, 0x04, 0x7c, 0x00, 0x00, 0x00, 0xac, 0xe9, + 0x1f, 0x5e, 0x04, 0x00, 0xde, 0xb4, 0x9d, 0x47, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0xac, 0xe9, 0x10, + 0xde, 0xb5, 0x9d, 0xe2, 0x5e, 0x05, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0xee, 0x0e, 0x29, 0xde, + 0x8f, 0xe2, 0xeb, 0xca, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0xd8, 0x09, 0x00, 0x00, 0x00, 0x02, 0x04, + 0x00, 0x1f, 0x00, 0xf2, 0x05, 0x04, 0x01, 0xc4, + 0x05, 0x00, 0x01, 0xfa, 0x05, 0x03, 0x01, 0xd8, + 0x05, 0x00, 0x03, 0x04, 0x75, 0x02, 0x00, 0x00, + 0xe0, 0xdd, 0x8f, 0xe1, 0xdd, 0xde, 0xa6, 0xe9, + 0x11, 0xdf, 0xdd, 0x47, 0x04, 0x81, 0x01, 0x00, + 0x00, 0xac, 0xea, 0x06, 0xdd, 0x8f, 0xe1, 0xeb, + 0xec, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xda, 0x09, + 0x01, 0x00, 0x01, 0x03, 0x07, 0x00, 0x4c, 0x01, + 0xec, 0x09, 0x00, 0x01, 0x00, 0xf2, 0x05, 0x04, + 0x01, 0xd0, 0x09, 0x0a, 0x01, 0xc4, 0x05, 0x00, + 0x01, 0xfa, 0x05, 0x03, 0x01, 0xca, 0x05, 0x01, + 0x01, 0xd8, 0x05, 0x00, 0x03, 0xd4, 0x09, 0x0c, + 0x01, 0x04, 0x47, 0x00, 0x00, 0x00, 0xe0, 0xdd, + 0xd0, 0xee, 0x0e, 0xde, 0xdf, 0xa6, 0xe9, 0x3d, + 0x5e, 0x05, 0x00, 0xde, 0x91, 0xe2, 0x47, 0x60, + 0x04, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0xac, + 0xe9, 0x09, 0x04, 0x5d, 0x02, 0x00, 0x00, 0xe0, + 0xeb, 0xe2, 0x5e, 0x04, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0xac, 0xe9, 0x0b, 0xde, 0xdf, 0xa9, + 0xea, 0x13, 0xde, 0x8f, 0xe2, 0xeb, 0xcd, 0x5e, + 0x04, 0x00, 0xd0, 0xac, 0xe9, 0xc6, 0x5e, 0x06, + 0x00, 0xed, 0x0e, 0x29, 0x29, 0x0c, 0x43, 0x02, + 0x01, 0xdc, 0x09, 0x00, 0x00, 0x00, 0x03, 0x09, + 0x00, 0xc4, 0x01, 0x00, 0xf2, 0x05, 0x04, 0x01, + 0xd0, 0x09, 0x0a, 0x01, 0xc4, 0x05, 0x00, 0x01, + 0xfa, 0x05, 0x03, 0x01, 0xca, 0x05, 0x01, 0x01, + 0xd8, 0x05, 0x00, 0x03, 0xd2, 0x09, 0x0b, 0x01, + 0xd4, 0x09, 0x0c, 0x01, 0x94, 0x04, 0x00, 0x00, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0xe0, 0xdd, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0xee, 0x0e, 0xde, 0xdf, + 0xa6, 0x69, 0xb1, 0x00, 0x00, 0x00, 0x5e, 0x05, + 0x00, 0xde, 0x91, 0xe2, 0x47, 0x60, 0x04, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0xac, 0xe9, 0x09, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0xe0, 0xeb, 0xdf, + 0x5e, 0x04, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0xac, 0xe9, 0x0b, 0xde, 0xdf, 0xa6, 0xe9, 0xcf, + 0xde, 0x8f, 0xe2, 0xeb, 0xca, 0x5e, 0x06, 0x00, + 0xed, 0x04, 0xc8, 0x01, 0x00, 0x00, 0xac, 0xe9, + 0x13, 0x5e, 0x04, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0xac, 0xe9, 0xb3, 0x5e, 0x07, 0x00, 0xed, + 0x0e, 0xeb, 0xac, 0x5e, 0x04, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0xac, 0xe9, 0x2e, 0xdd, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0xee, 0x0e, 0x5e, 0x05, + 0x00, 0xde, 0x47, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0xac, 0x11, 0xea, 0x0d, 0x0e, 0x5e, 0x05, 0x00, + 0xde, 0x47, 0x04, 0xa5, 0x01, 0x00, 0x00, 0xac, + 0x69, 0x7d, 0xff, 0xff, 0xff, 0xde, 0x8f, 0xe2, + 0xec, 0x75, 0xff, 0x5e, 0x04, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0xac, 0x69, 0x69, 0xff, 0xff, + 0xff, 0x5e, 0x07, 0x00, 0xed, 0x0e, 0xde, 0xdf, + 0xa6, 0xe9, 0x11, 0x5e, 0x08, 0x00, 0x5e, 0x05, + 0x00, 0xde, 0x47, 0xee, 0xe9, 0x06, 0xde, 0x8f, + 0xe2, 0xeb, 0xec, 0x29, 0x0c, 0x43, 0x02, 0x01, + 0xde, 0x09, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, + 0x41, 0x00, 0xf2, 0x05, 0x04, 0x01, 0xc4, 0x05, + 0x00, 0x01, 0xfa, 0x05, 0x03, 0x01, 0x94, 0x04, + 0x00, 0x00, 0xd8, 0x05, 0x00, 0x03, 0x04, 0x45, + 0x00, 0x00, 0x00, 0xe0, 0xdd, 0xde, 0xa6, 0xe9, + 0x36, 0xdf, 0x5e, 0x04, 0x00, 0xdd, 0x47, 0xee, + 0x11, 0xea, 0x25, 0x0e, 0x5e, 0x04, 0x00, 0xdd, + 0x47, 0x04, 0x9f, 0x01, 0x00, 0x00, 0xac, 0xe9, + 0x1e, 0xdd, 0xde, 0xb4, 0x9e, 0xac, 0x11, 0xea, + 0x0f, 0x0e, 0x5e, 0x04, 0x00, 0xdd, 0xb4, 0x9d, + 0x47, 0x04, 0x9f, 0x01, 0x00, 0x00, 0xad, 0xe9, + 0x06, 0xdd, 0x8f, 0xe1, 0xeb, 0xc7, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0xe6, 0x09, 0x00, 0x03, 0x00, + 0x04, 0x0a, 0x00, 0x95, 0x02, 0x03, 0xae, 0x06, + 0x00, 0x00, 0x00, 0xca, 0x08, 0x00, 0x01, 0x00, + 0xee, 0x09, 0x00, 0x02, 0x00, 0xce, 0x09, 0x08, + 0x01, 0xc4, 0x05, 0x00, 0x01, 0xfa, 0x05, 0x03, + 0x01, 0x94, 0x04, 0x00, 0x00, 0xd8, 0x05, 0x00, + 0x03, 0xec, 0x05, 0x02, 0x01, 0xe0, 0x09, 0x12, + 0x01, 0xf2, 0x05, 0x04, 0x01, 0xe2, 0x09, 0x13, + 0x01, 0xe4, 0x09, 0x14, 0x01, 0xb4, 0xe0, 0xdd, + 0xde, 0xa6, 0xe9, 0x0f, 0xdf, 0x5e, 0x04, 0x00, + 0xdd, 0x47, 0xee, 0xe9, 0x06, 0xdd, 0x8f, 0xe1, + 0xeb, 0xee, 0x5e, 0x04, 0x00, 0x42, 0x7c, 0x01, + 0x00, 0x00, 0x5e, 0x05, 0x00, 0xdd, 0x24, 0x02, + 0x00, 0xc8, 0x04, 0x78, 0x02, 0x00, 0x00, 0xc4, + 0x9d, 0x04, 0x78, 0x02, 0x00, 0x00, 0x9d, 0xc9, + 0x5e, 0x06, 0x00, 0x42, 0xa1, 0x01, 0x00, 0x00, + 0xc5, 0x24, 0x01, 0x00, 0xb3, 0xa9, 0xe9, 0x7c, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x5f, 0x07, 0x00, + 0xc4, 0x04, 0x03, 0x00, 0x00, 0x00, 0xae, 0x11, + 0xea, 0x09, 0x0e, 0xc4, 0x04, 0x02, 0x00, 0x00, + 0x00, 0xae, 0xe9, 0x0b, 0x04, 0x46, 0x00, 0x00, + 0x00, 0x5f, 0x07, 0x00, 0xeb, 0x43, 0xc4, 0x04, + 0x03, 0x00, 0x00, 0x00, 0xae, 0x11, 0xea, 0x09, + 0x0e, 0xc4, 0x04, 0x02, 0x00, 0x00, 0x00, 0xae, + 0xe9, 0x0b, 0x04, 0x46, 0x00, 0x00, 0x00, 0x5f, + 0x07, 0x00, 0xeb, 0x25, 0xc4, 0x04, 0x01, 0x00, + 0x00, 0x00, 0xae, 0xe9, 0x0b, 0x04, 0x01, 0x00, + 0x00, 0x00, 0x5f, 0x07, 0x00, 0xeb, 0x12, 0xc4, + 0x04, 0x44, 0x00, 0x00, 0x00, 0xae, 0xe9, 0x09, + 0x04, 0x44, 0x00, 0x00, 0x00, 0x5f, 0x07, 0x00, + 0x5e, 0x08, 0x00, 0x42, 0xa1, 0x01, 0x00, 0x00, + 0xc5, 0x24, 0x01, 0x00, 0xb3, 0xa9, 0xe9, 0x03, + 0xb3, 0xe0, 0x29, 0xdd, 0xca, 0xc6, 0xde, 0xa6, + 0xe9, 0x12, 0x5e, 0x04, 0x00, 0xc6, 0x47, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0xac, 0xe9, 0x05, 0x93, + 0x02, 0xeb, 0xeb, 0xc6, 0xde, 0xa6, 0xe9, 0x17, + 0x5e, 0x04, 0x00, 0xc6, 0x47, 0x04, 0xba, 0x01, + 0x00, 0x00, 0xac, 0xe9, 0x0a, 0x04, 0x1b, 0x00, + 0x00, 0x00, 0x5f, 0x07, 0x00, 0x29, 0x5e, 0x09, + 0x00, 0x42, 0xa1, 0x01, 0x00, 0x00, 0xc5, 0x24, + 0x01, 0x00, 0xb3, 0xa9, 0xe9, 0x0a, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x5f, 0x07, 0x00, 0x29, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x5f, 0x07, 0x00, 0xb3, + 0xe0, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xe8, 0x09, + 0x02, 0x00, 0x02, 0x03, 0x02, 0x00, 0x2b, 0x02, + 0xf2, 0x01, 0x00, 0x01, 0x00, 0xf4, 0x09, 0x00, + 0x01, 0x00, 0xd2, 0x06, 0x09, 0x01, 0xf2, 0x05, + 0x04, 0x01, 0xdc, 0xe8, 0xd0, 0xa6, 0xe9, 0x12, + 0xdc, 0x42, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xeb, + 0xea, 0xdc, 0xe8, 0xd1, 0xa6, 0xe9, 0x0e, 0xdc, + 0x42, 0x8e, 0x01, 0x00, 0x00, 0xdd, 0x24, 0x01, + 0x00, 0x0e, 0xeb, 0xee, 0x29, 0xbe, 0x00, 0xc1, + 0x0a, 0xbe, 0x01, 0xc1, 0x0b, 0xbe, 0x02, 0xc1, + 0x0c, 0xbe, 0x03, 0xc1, 0x0d, 0xbe, 0x04, 0xc1, + 0x0e, 0xbe, 0x05, 0xc1, 0x0f, 0xbe, 0x06, 0xc1, + 0x10, 0xbe, 0x07, 0xc1, 0x11, 0xbe, 0x08, 0xc1, + 0x15, 0xbe, 0x09, 0xc1, 0x16, 0xd0, 0xe8, 0xcb, + 0xbf, 0xc1, 0x05, 0xb3, 0xc1, 0x06, 0xb4, 0xc1, + 0x08, 0x26, 0x00, 0x00, 0xc1, 0x09, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x9d, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x9d, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x9d, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x9d, 0x04, 0x80, 0x02, 0x00, 0x00, 0x9d, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x9d, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x9d, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x9d, 0xc1, 0x12, 0x04, 0x84, 0x02, 0x00, 0x00, + 0xc1, 0x13, 0x04, 0x85, 0x02, 0x00, 0x00, 0xc1, + 0x14, 0xb3, 0xc8, 0xc4, 0xc7, 0xa6, 0x69, 0x6a, + 0x01, 0x00, 0x00, 0x07, 0xc1, 0x04, 0xc4, 0xca, + 0xd0, 0xc4, 0x91, 0xc8, 0x47, 0xcd, 0x11, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0xae, 0xea, 0x1c, 0x11, + 0x04, 0x86, 0x02, 0x00, 0x00, 0xae, 0xea, 0x13, + 0x11, 0x04, 0x87, 0x02, 0x00, 0x00, 0xae, 0xea, + 0x0a, 0x11, 0x04, 0x81, 0x01, 0x00, 0x00, 0xae, + 0xe9, 0x04, 0x0e, 0xeb, 0xc7, 0x11, 0x04, 0x88, + 0x02, 0x00, 0x00, 0xae, 0xea, 0x0a, 0x11, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x18, 0xc4, + 0xc7, 0xa6, 0xe9, 0x0d, 0xd0, 0xc4, 0x47, 0xc5, + 0xac, 0xe9, 0x06, 0x93, 0x00, 0x0e, 0xeb, 0xa4, + 0xb4, 0xc1, 0x08, 0x0e, 0xeb, 0x9e, 0x11, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0xae, 0xe9, 0x44, 0xc4, + 0xc7, 0xa6, 0xe9, 0x13, 0xd0, 0xc4, 0x47, 0x04, + 0x7c, 0x00, 0x00, 0x00, 0xac, 0xe9, 0x08, 0xc0, + 0x0d, 0xed, 0x0e, 0xec, 0xdc, 0x00, 0xc4, 0xc7, + 0xa6, 0xe9, 0x13, 0xd0, 0xc4, 0x47, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0xac, 0xe9, 0x08, 0xc0, 0x0e, + 0xed, 0x0e, 0xec, 0xc5, 0x00, 0xc0, 0x08, 0xe9, + 0x0b, 0xc0, 0x10, 0xed, 0x0e, 0xb3, 0xc1, 0x08, + 0xec, 0xb7, 0x00, 0xb4, 0xc1, 0x08, 0x0e, 0xec, + 0x53, 0xff, 0x11, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0xae, 0xea, 0x13, 0x11, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0xae, 0xea, 0x0a, 0x11, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0xae, 0xe9, 0x0c, 0xc0, 0x0f, 0xc5, + 0xee, 0x0e, 0xb3, 0xc1, 0x08, 0xec, 0x8a, 0x00, + 0x11, 0x04, 0xba, 0x01, 0x00, 0x00, 0xae, 0xea, + 0x13, 0x11, 0x04, 0xc8, 0x01, 0x00, 0x00, 0xae, + 0xea, 0x0a, 0x11, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0xae, 0xe9, 0x0f, 0xb4, 0xc1, 0x08, 0x93, 0x06, + 0xc0, 0x0a, 0xc5, 0xee, 0x0e, 0x0e, 0xec, 0x04, + 0xff, 0x11, 0x04, 0xbb, 0x01, 0x00, 0x00, 0xae, + 0xea, 0x13, 0x11, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0xae, 0xea, 0x0a, 0x11, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0xae, 0xe9, 0x25, 0xb3, 0xc1, 0x08, 0xc0, + 0x06, 0xb3, 0xa8, 0xe9, 0x13, 0xdd, 0xc0, 0x0b, + 0xed, 0xc5, 0xef, 0xe9, 0x0b, 0x92, 0x06, 0xc0, + 0x0c, 0xed, 0x0e, 0x0e, 0xec, 0xce, 0xfe, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0xc1, 0x04, 0xeb, 0x21, + 0xde, 0xc5, 0xee, 0xe9, 0x0a, 0xc0, 0x11, 0xed, + 0x0e, 0xb3, 0xc1, 0x08, 0xeb, 0x13, 0xdc, 0xc5, + 0xee, 0xe9, 0x07, 0xc0, 0x15, 0xed, 0x0e, 0xeb, + 0x08, 0xb4, 0xc1, 0x08, 0x0e, 0xec, 0xa5, 0xfe, + 0x0e, 0xc0, 0x04, 0x69, 0x9f, 0xfe, 0xff, 0xff, + 0xc0, 0x16, 0xc6, 0xc4, 0xef, 0x0e, 0xec, 0x94, + 0xfe, 0xc0, 0x16, 0xc7, 0xc7, 0xef, 0x0e, 0xc0, + 0x05, 0xc0, 0x06, 0xc0, 0x09, 0x26, 0x03, 0x00, + 0x28, 0x0c, 0x43, 0x02, 0x01, 0xaa, 0x05, 0x01, + 0x00, 0x01, 0x03, 0x01, 0x00, 0x36, 0x01, 0xae, + 0x06, 0x00, 0x01, 0x00, 0xb4, 0x03, 0x00, 0x0c, + 0x65, 0x00, 0x00, 0x42, 0x89, 0x02, 0x00, 0x00, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x24, 0x01, 0x00, + 0x11, 0xea, 0x1b, 0x0e, 0x65, 0x00, 0x00, 0x42, + 0x89, 0x02, 0x00, 0x00, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x24, 0x01, 0x00, 0x11, 0xea, 0x07, 0x0e, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x9d, 0xd0, 0x9d, 0x28, 0x0c, 0x43, + 0x02, 0x01, 0xac, 0x05, 0x00, 0x03, 0x00, 0x05, + 0x03, 0x00, 0x67, 0x03, 0xae, 0x06, 0x00, 0x00, + 0x00, 0x98, 0x0a, 0x00, 0x01, 0x00, 0xa4, 0x09, + 0x05, 0x00, 0x03, 0xd6, 0x03, 0x1b, 0x01, 0xb4, + 0x03, 0x00, 0x0c, 0xaa, 0x05, 0x85, 0x01, 0x01, + 0xdc, 0x42, 0x9a, 0x01, 0x00, 0x00, 0xbc, 0x18, + 0xfc, 0x24, 0x01, 0x00, 0x42, 0x5a, 0x00, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0x42, 0x37, 0x02, 0x00, 0x00, 0x24, 0x00, + 0x00, 0xcc, 0xe9, 0x43, 0x6c, 0x38, 0x00, 0x00, + 0x00, 0x65, 0x01, 0x00, 0x42, 0x8d, 0x02, 0x00, + 0x00, 0xde, 0x04, 0x8e, 0x02, 0x00, 0x00, 0xee, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, + 0xcd, 0x42, 0x7a, 0x01, 0x00, 0x00, 0xc4, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x9d, 0x24, 0x01, 0x00, + 0x0e, 0xc5, 0x42, 0x8f, 0x02, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x0e, 0x0e, 0x29, 0xca, 0x6c, 0x06, + 0x00, 0x00, 0x00, 0x0e, 0x29, 0x2f, 0x29, 0x0c, + 0x43, 0x02, 0x01, 0xae, 0x05, 0x00, 0x01, 0x00, + 0x04, 0x04, 0x00, 0x2f, 0x01, 0xd0, 0x05, 0x00, + 0x00, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xaa, 0x05, + 0x85, 0x01, 0x01, 0xd6, 0x03, 0x1b, 0x01, 0xd8, + 0x03, 0x1c, 0x01, 0x65, 0x00, 0x00, 0x42, 0x90, + 0x02, 0x00, 0x00, 0xdd, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0xee, 0x24, 0x01, 0x00, 0xcc, 0xe9, 0x1a, + 0xc4, 0x42, 0x37, 0x02, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x42, 0x5c, 0x00, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xe6, 0xe8, + 0xe3, 0x29, 0x0c, 0x43, 0x02, 0x01, 0xb0, 0x05, + 0x00, 0x02, 0x00, 0x04, 0x03, 0x02, 0x34, 0x02, + 0xf2, 0x06, 0x00, 0x00, 0x00, 0xae, 0x06, 0x00, + 0x01, 0x00, 0xb4, 0x03, 0x00, 0x0c, 0xc6, 0x03, + 0x13, 0x01, 0xc4, 0x03, 0x12, 0x01, 0x07, 0x16, + 0x28, 0x5c, 0x64, 0x2b, 0x29, 0x3b, 0x28, 0x5c, + 0x64, 0x2b, 0x29, 0x07, 0xa8, 0x01, 0x00, 0x00, + 0x03, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x09, 0x06, + 0x00, 0x00, 0x00, 0x05, 0x08, 0xf5, 0xff, 0xff, + 0xff, 0x0c, 0x00, 0x0c, 0x01, 0x1d, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x16, 0x01, - 0x00, 0x30, 0x00, 0x39, 0x00, 0x0b, 0x0d, 0x02, - 0x0d, 0x00, 0x0b, 0x65, 0x00, 0x00, 0x42, 0x84, - 0x02, 0x00, 0x00, 0x04, 0x8c, 0x02, 0x00, 0x00, - 0x24, 0x01, 0x00, 0xcd, 0xe9, 0x21, 0xc5, 0x42, - 0xa3, 0x01, 0x00, 0x00, 0xbd, 0x00, 0xbd, 0x01, - 0x33, 0x24, 0x01, 0x00, 0xcc, 0xe9, 0x10, 0xc4, - 0xb5, 0x47, 0x8d, 0xb3, 0xaf, 0xe9, 0x08, 0xde, - 0x41, 0x49, 0x02, 0x00, 0x00, 0xe1, 0x29, 0xbe, - 0x00, 0xc1, 0x33, 0xbe, 0x01, 0xc1, 0x34, 0xbe, - 0x02, 0xc1, 0x35, 0xbe, 0x03, 0xc1, 0x36, 0xbe, - 0x04, 0xc1, 0x37, 0xbe, 0x05, 0xc1, 0x38, 0xbe, - 0x06, 0xc1, 0x39, 0xbe, 0x07, 0xc1, 0x3a, 0xbe, - 0x08, 0xc1, 0x3b, 0xbe, 0x09, 0xc1, 0x3c, 0xbe, - 0x0a, 0xc1, 0x3d, 0xbe, 0x0b, 0xc1, 0x3e, 0xbe, - 0x0c, 0xc1, 0x3f, 0xbe, 0x0d, 0xc1, 0x40, 0xbe, - 0x0e, 0xc1, 0x41, 0xbe, 0x0f, 0xc1, 0x42, 0xbe, - 0x10, 0xc1, 0x43, 0xbe, 0x11, 0xc1, 0x44, 0xbe, - 0x12, 0xc1, 0x45, 0xbe, 0x13, 0xc1, 0x46, 0xbe, - 0x14, 0xc1, 0x47, 0xbe, 0x15, 0xc1, 0x48, 0xbe, - 0x16, 0xc1, 0x49, 0xbe, 0x17, 0xc1, 0x4a, 0xbe, - 0x18, 0xc1, 0x4b, 0xbe, 0x19, 0xc1, 0x4c, 0xbe, - 0x1a, 0xc1, 0x4d, 0xbe, 0x1b, 0xc1, 0x4e, 0xbe, - 0x1c, 0xc1, 0x4f, 0xbe, 0x1d, 0xc1, 0x50, 0xbe, - 0x1e, 0xc1, 0x51, 0xbe, 0x1f, 0xc1, 0x52, 0xbe, - 0x20, 0xc1, 0x53, 0xbe, 0x21, 0xc1, 0x54, 0xbe, - 0x22, 0xc1, 0x55, 0xbe, 0x23, 0xc1, 0x56, 0xbe, - 0x24, 0xc1, 0x57, 0xbe, 0x25, 0xc1, 0x58, 0xbe, - 0x26, 0xc1, 0x59, 0xbe, 0x27, 0xc1, 0x5a, 0xbe, - 0x28, 0xc1, 0x5b, 0xbe, 0x29, 0xc1, 0x5c, 0xbe, - 0x2a, 0xc1, 0x5d, 0xbe, 0x2b, 0xc1, 0x5e, 0xbe, - 0x2c, 0xc1, 0x5f, 0xbe, 0x2d, 0xc1, 0x60, 0xbe, - 0x2e, 0xc1, 0x61, 0xbe, 0x2f, 0xc1, 0x62, 0xbe, - 0x30, 0xc1, 0x63, 0xbe, 0x31, 0xc1, 0x64, 0xbe, - 0x32, 0xc1, 0x65, 0xbe, 0x33, 0xc1, 0x66, 0xbe, - 0x34, 0xc1, 0x67, 0xbe, 0x35, 0xc1, 0x69, 0xbe, - 0x36, 0xc1, 0x6d, 0xbe, 0x37, 0xc1, 0x6e, 0xbe, - 0x38, 0xc1, 0x6f, 0xbe, 0x39, 0xc1, 0x70, 0xbe, - 0x3a, 0xc1, 0x71, 0xbe, 0x3b, 0xc1, 0x72, 0xbe, - 0x3d, 0xc1, 0x74, 0xbe, 0x3e, 0xc1, 0x75, 0xbe, - 0x3f, 0xc1, 0x76, 0xbe, 0x40, 0xc1, 0x77, 0xbe, - 0x41, 0xc1, 0x78, 0xbe, 0x42, 0xc1, 0x79, 0xbe, - 0x4e, 0xc1, 0x7b, 0xbe, 0x4f, 0xc1, 0x7c, 0xbe, - 0x50, 0xc1, 0x7d, 0xbe, 0x51, 0xc1, 0x7e, 0xbe, - 0x52, 0xc1, 0x7f, 0xbe, 0x53, 0xc1, 0x80, 0xbe, - 0x54, 0xc1, 0x81, 0xbe, 0x55, 0xc1, 0x82, 0xbe, - 0x56, 0xc1, 0x83, 0xbe, 0x57, 0xc1, 0x84, 0xd0, - 0x65, 0x01, 0x00, 0x43, 0xdb, 0x00, 0x00, 0x00, - 0xd0, 0x65, 0x00, 0x00, 0x43, 0xda, 0x00, 0x00, - 0x00, 0xd0, 0x41, 0x90, 0x00, 0x00, 0x00, 0xc8, - 0xd0, 0x41, 0x94, 0x00, 0x00, 0x00, 0xc9, 0xd0, - 0x41, 0x93, 0x00, 0x00, 0x00, 0xca, 0xd0, 0x41, - 0x95, 0x00, 0x00, 0x00, 0xcb, 0xd0, 0x41, 0xad, - 0x00, 0x00, 0x00, 0xc1, 0x04, 0xd0, 0x41, 0xa3, - 0x00, 0x00, 0x00, 0xc1, 0x05, 0xd0, 0x41, 0x91, - 0x00, 0x00, 0x00, 0xc1, 0x06, 0xd0, 0x41, 0x9a, - 0x00, 0x00, 0x00, 0xc1, 0x07, 0xd0, 0x41, 0x9e, - 0x00, 0x00, 0x00, 0xc1, 0x08, 0xd0, 0x41, 0x92, - 0x00, 0x00, 0x00, 0xc1, 0x09, 0xd0, 0x41, 0x96, - 0x00, 0x00, 0x00, 0xc1, 0x0a, 0xd0, 0x41, 0x98, - 0x00, 0x00, 0x00, 0xc1, 0x0b, 0xd0, 0x41, 0x99, - 0x00, 0x00, 0x00, 0xc1, 0x0c, 0xd0, 0x41, 0xdd, - 0x00, 0x00, 0x00, 0xc1, 0x0d, 0xd0, 0x41, 0xde, - 0x00, 0x00, 0x00, 0xc1, 0x0e, 0xd0, 0x41, 0xdf, - 0x00, 0x00, 0x00, 0xc1, 0x0f, 0xd0, 0x41, 0xe0, - 0x00, 0x00, 0x00, 0xc1, 0x10, 0x0b, 0x04, 0x8d, - 0x02, 0x00, 0x00, 0x4c, 0x77, 0x01, 0x00, 0x00, - 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4c, 0x8f, 0x02, - 0x00, 0x00, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4c, - 0x91, 0x02, 0x00, 0x00, 0x04, 0x92, 0x02, 0x00, - 0x00, 0x4c, 0x93, 0x02, 0x00, 0x00, 0x04, 0x94, - 0x02, 0x00, 0x00, 0x4c, 0x95, 0x02, 0x00, 0x00, - 0x04, 0x96, 0x02, 0x00, 0x00, 0x4c, 0x97, 0x02, - 0x00, 0x00, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4c, - 0x99, 0x02, 0x00, 0x00, 0x04, 0x9a, 0x02, 0x00, - 0x00, 0x4c, 0x9b, 0x02, 0x00, 0x00, 0x04, 0x9c, - 0x02, 0x00, 0x00, 0x4c, 0x9d, 0x02, 0x00, 0x00, - 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4c, 0x9f, 0x02, - 0x00, 0x00, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4c, - 0xa0, 0x02, 0x00, 0x00, 0x04, 0xa1, 0x02, 0x00, - 0x00, 0x4c, 0xa2, 0x02, 0x00, 0x00, 0x04, 0xa3, - 0x02, 0x00, 0x00, 0x4c, 0xa4, 0x02, 0x00, 0x00, - 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4c, 0xa6, 0x02, - 0x00, 0x00, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4c, - 0xa8, 0x02, 0x00, 0x00, 0x04, 0xa9, 0x02, 0x00, - 0x00, 0x4c, 0xaa, 0x02, 0x00, 0x00, 0x04, 0xab, - 0x02, 0x00, 0x00, 0x4c, 0xac, 0x02, 0x00, 0x00, - 0x04, 0xad, 0x02, 0x00, 0x00, 0x4c, 0xae, 0x02, - 0x00, 0x00, 0xc1, 0x11, 0x0b, 0x0b, 0x04, 0x9b, - 0x02, 0x00, 0x00, 0x4c, 0x1b, 0x02, 0x00, 0x00, - 0x04, 0xae, 0x02, 0x00, 0x00, 0x4c, 0x46, 0x00, - 0x00, 0x00, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4c, - 0x70, 0x02, 0x00, 0x00, 0x04, 0x99, 0x02, 0x00, - 0x00, 0x4c, 0x1e, 0x02, 0x00, 0x00, 0x04, 0xa4, - 0x02, 0x00, 0x00, 0x4c, 0x16, 0x00, 0x00, 0x00, - 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4c, 0x57, 0x02, - 0x00, 0x00, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4c, - 0x1b, 0x00, 0x00, 0x00, 0x04, 0xa4, 0x02, 0x00, - 0x00, 0x4c, 0x74, 0x02, 0x00, 0x00, 0x04, 0xae, - 0x02, 0x00, 0x00, 0x4c, 0x20, 0x02, 0x00, 0x00, - 0x04, 0xae, 0x02, 0x00, 0x00, 0x4c, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4c, - 0x45, 0x00, 0x00, 0x00, 0x04, 0x9d, 0x02, 0x00, - 0x00, 0x4c, 0x1d, 0x02, 0x00, 0x00, 0x04, 0x9d, - 0x02, 0x00, 0x00, 0x4c, 0x18, 0x02, 0x00, 0x00, - 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4c, 0x1a, 0x02, - 0x00, 0x00, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4c, - 0x47, 0x00, 0x00, 0x00, 0x04, 0xae, 0x02, 0x00, - 0x00, 0x4c, 0x49, 0x00, 0x00, 0x00, 0x04, 0xaa, - 0x02, 0x00, 0x00, 0x4c, 0xf1, 0x01, 0x00, 0x00, - 0x04, 0xae, 0x02, 0x00, 0x00, 0x4c, 0x44, 0x00, - 0x00, 0x00, 0x4c, 0x46, 0x02, 0x00, 0x00, 0x0b, - 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4c, 0x1b, 0x02, - 0x00, 0x00, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4c, - 0x46, 0x00, 0x00, 0x00, 0x04, 0xa0, 0x02, 0x00, - 0x00, 0x4c, 0x70, 0x02, 0x00, 0x00, 0x04, 0x99, - 0x02, 0x00, 0x00, 0x4c, 0x1e, 0x02, 0x00, 0x00, - 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4c, 0x16, 0x00, - 0x00, 0x00, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4c, - 0x57, 0x02, 0x00, 0x00, 0x04, 0xa6, 0x02, 0x00, - 0x00, 0x4c, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x8f, - 0x02, 0x00, 0x00, 0x4c, 0x74, 0x02, 0x00, 0x00, - 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4c, 0x20, 0x02, - 0x00, 0x00, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4c, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x93, 0x02, 0x00, - 0x00, 0x4c, 0x45, 0x00, 0x00, 0x00, 0x04, 0x8f, - 0x02, 0x00, 0x00, 0x4c, 0x1d, 0x02, 0x00, 0x00, - 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4c, 0x18, 0x02, - 0x00, 0x00, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4c, - 0x1a, 0x02, 0x00, 0x00, 0x04, 0xac, 0x02, 0x00, - 0x00, 0x4c, 0x47, 0x00, 0x00, 0x00, 0x04, 0xa0, - 0x02, 0x00, 0x00, 0x4c, 0x49, 0x00, 0x00, 0x00, - 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4c, 0xf1, 0x01, - 0x00, 0x00, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4c, - 0x44, 0x00, 0x00, 0x00, 0x4c, 0x49, 0x02, 0x00, - 0x00, 0xc2, 0x12, 0x41, 0x46, 0x02, 0x00, 0x00, - 0xc1, 0x13, 0x0a, 0xc1, 0x14, 0x09, 0xc1, 0x15, - 0x0a, 0xc1, 0x16, 0x09, 0xc1, 0x17, 0xb5, 0xc1, - 0x18, 0x09, 0xc1, 0x19, 0x09, 0xc1, 0x1a, 0x26, - 0x00, 0x00, 0xc1, 0x1b, 0xbf, 0xc1, 0x1d, 0xbf, - 0xc1, 0x1e, 0xbf, 0xc1, 0x1f, 0xb3, 0xc1, 0x20, - 0x04, 0xaf, 0x02, 0x00, 0x00, 0xc1, 0x21, 0x04, - 0xb0, 0x02, 0x00, 0x00, 0xc1, 0x22, 0xb3, 0xc1, - 0x23, 0xbf, 0xc1, 0x24, 0xb3, 0xc1, 0x25, 0xbf, - 0xc1, 0x26, 0xb3, 0xc1, 0x27, 0xbf, 0xc1, 0x28, - 0xb3, 0xc1, 0x29, 0x09, 0xc1, 0x2c, 0xb3, 0xc1, - 0x2d, 0xb3, 0xc1, 0x2e, 0xb3, 0xc1, 0x32, 0x0b, - 0xc0, 0x45, 0x4c, 0xb1, 0x02, 0x00, 0x00, 0xc0, - 0x48, 0x4c, 0xb2, 0x02, 0x00, 0x00, 0xc0, 0x62, - 0x4c, 0xb3, 0x02, 0x00, 0x00, 0xc0, 0x56, 0x4c, - 0xb4, 0x02, 0x00, 0x00, 0xc0, 0x46, 0x4c, 0xb5, - 0x02, 0x00, 0x00, 0xc0, 0x47, 0x4c, 0xb6, 0x02, - 0x00, 0x00, 0xc0, 0x43, 0x4c, 0xb7, 0x02, 0x00, - 0x00, 0xc0, 0x57, 0x4c, 0xb8, 0x02, 0x00, 0x00, - 0xc0, 0x67, 0x4c, 0x81, 0x02, 0x00, 0x00, 0xc0, - 0x4d, 0x4c, 0x7d, 0x01, 0x00, 0x00, 0xc0, 0x5d, - 0x4c, 0xb9, 0x02, 0x00, 0x00, 0xc0, 0x4d, 0x4c, - 0x82, 0x02, 0x00, 0x00, 0xc0, 0x50, 0x4c, 0xba, - 0x02, 0x00, 0x00, 0xc0, 0x4f, 0x4c, 0xbb, 0x02, - 0x00, 0x00, 0xc0, 0x42, 0x4c, 0xbc, 0x02, 0x00, - 0x00, 0xc0, 0x44, 0x4c, 0xbd, 0x02, 0x00, 0x00, - 0xc0, 0x44, 0x4c, 0xbe, 0x02, 0x00, 0x00, 0xc0, - 0x58, 0x4c, 0xbf, 0x02, 0x00, 0x00, 0xc0, 0x63, - 0x4c, 0xc0, 0x02, 0x00, 0x00, 0xc0, 0x61, 0x4c, - 0xc1, 0x02, 0x00, 0x00, 0xc0, 0x4f, 0x4c, 0xc2, - 0x02, 0x00, 0x00, 0xc0, 0x50, 0x4c, 0xc3, 0x02, - 0x00, 0x00, 0xc0, 0x47, 0x4c, 0xc4, 0x02, 0x00, - 0x00, 0xc0, 0x48, 0x4c, 0xc5, 0x02, 0x00, 0x00, - 0xc0, 0x4b, 0x4c, 0xc6, 0x02, 0x00, 0x00, 0xc0, - 0x4c, 0x4c, 0xc7, 0x02, 0x00, 0x00, 0xc0, 0x4b, - 0x4c, 0xc8, 0x02, 0x00, 0x00, 0xc0, 0x4c, 0x4c, - 0xc9, 0x02, 0x00, 0x00, 0xc0, 0x45, 0x4c, 0xca, - 0x02, 0x00, 0x00, 0xc0, 0x55, 0x4c, 0xcb, 0x02, - 0x00, 0x00, 0xc0, 0x46, 0x4c, 0xcc, 0x02, 0x00, - 0x00, 0xc0, 0x52, 0x4c, 0xcd, 0x02, 0x00, 0x00, - 0xc0, 0x53, 0x4c, 0xce, 0x02, 0x00, 0x00, 0xc0, - 0x4f, 0x4c, 0xcf, 0x02, 0x00, 0x00, 0xc0, 0x50, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x0b, 0x0d, 0x01, + 0x01, 0x3b, 0x0c, 0x02, 0x1d, 0x08, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x7f, 0x01, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x0b, 0x0d, 0x02, 0x0d, + 0x00, 0x0b, 0x65, 0x00, 0x00, 0x42, 0x89, 0x02, + 0x00, 0x00, 0x04, 0x91, 0x02, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xcd, 0xe9, 0x21, 0xc5, 0x42, 0xa7, + 0x01, 0x00, 0x00, 0xbd, 0x00, 0xbd, 0x01, 0x33, + 0x24, 0x01, 0x00, 0xcc, 0xe9, 0x10, 0xc4, 0xb5, + 0x47, 0x8d, 0xb3, 0xaf, 0xe9, 0x08, 0xde, 0x41, + 0x4d, 0x02, 0x00, 0x00, 0xe1, 0x29, 0xbe, 0x00, + 0xc1, 0x34, 0xbe, 0x01, 0xc1, 0x35, 0xbe, 0x02, + 0xc1, 0x36, 0xbe, 0x03, 0xc1, 0x37, 0xbe, 0x04, + 0xc1, 0x38, 0xbe, 0x05, 0xc1, 0x39, 0xbe, 0x06, + 0xc1, 0x3a, 0xbe, 0x07, 0xc1, 0x3b, 0xbe, 0x08, + 0xc1, 0x3c, 0xbe, 0x09, 0xc1, 0x3d, 0xbe, 0x0a, + 0xc1, 0x3e, 0xbe, 0x0b, 0xc1, 0x3f, 0xbe, 0x0c, + 0xc1, 0x40, 0xbe, 0x0d, 0xc1, 0x41, 0xbe, 0x0e, + 0xc1, 0x42, 0xbe, 0x0f, 0xc1, 0x43, 0xbe, 0x10, + 0xc1, 0x44, 0xbe, 0x11, 0xc1, 0x45, 0xbe, 0x12, + 0xc1, 0x46, 0xbe, 0x13, 0xc1, 0x47, 0xbe, 0x14, + 0xc1, 0x48, 0xbe, 0x15, 0xc1, 0x49, 0xbe, 0x16, + 0xc1, 0x4a, 0xbe, 0x17, 0xc1, 0x4b, 0xbe, 0x18, + 0xc1, 0x4c, 0xbe, 0x19, 0xc1, 0x4d, 0xbe, 0x1a, + 0xc1, 0x4e, 0xbe, 0x1b, 0xc1, 0x4f, 0xbe, 0x1c, + 0xc1, 0x50, 0xbe, 0x1d, 0xc1, 0x51, 0xbe, 0x1e, + 0xc1, 0x52, 0xbe, 0x1f, 0xc1, 0x53, 0xbe, 0x20, + 0xc1, 0x54, 0xbe, 0x21, 0xc1, 0x55, 0xbe, 0x22, + 0xc1, 0x56, 0xbe, 0x23, 0xc1, 0x57, 0xbe, 0x24, + 0xc1, 0x58, 0xbe, 0x25, 0xc1, 0x59, 0xbe, 0x26, + 0xc1, 0x5a, 0xbe, 0x27, 0xc1, 0x5b, 0xbe, 0x28, + 0xc1, 0x5c, 0xbe, 0x29, 0xc1, 0x5d, 0xbe, 0x2a, + 0xc1, 0x5e, 0xbe, 0x2b, 0xc1, 0x5f, 0xbe, 0x2c, + 0xc1, 0x60, 0xbe, 0x2d, 0xc1, 0x61, 0xbe, 0x2e, + 0xc1, 0x62, 0xbe, 0x2f, 0xc1, 0x63, 0xbe, 0x30, + 0xc1, 0x64, 0xbe, 0x31, 0xc1, 0x65, 0xbe, 0x32, + 0xc1, 0x66, 0xbe, 0x33, 0xc1, 0x67, 0xbe, 0x34, + 0xc1, 0x68, 0xbe, 0x35, 0xc1, 0x6a, 0xbe, 0x36, + 0xc1, 0x6e, 0xbe, 0x37, 0xc1, 0x6f, 0xbe, 0x38, + 0xc1, 0x70, 0xbe, 0x39, 0xc1, 0x71, 0xbe, 0x3a, + 0xc1, 0x72, 0xbe, 0x3b, 0xc1, 0x73, 0xbe, 0x3d, + 0xc1, 0x75, 0xbe, 0x3e, 0xc1, 0x76, 0xbe, 0x3f, + 0xc1, 0x77, 0xbe, 0x40, 0xc1, 0x78, 0xbe, 0x41, + 0xc1, 0x79, 0xbe, 0x42, 0xc1, 0x7a, 0xbe, 0x4e, + 0xc1, 0x7c, 0xbe, 0x4f, 0xc1, 0x7d, 0xbe, 0x50, + 0xc1, 0x7e, 0xbe, 0x51, 0xc1, 0x7f, 0xbe, 0x52, + 0xc1, 0x80, 0xbe, 0x53, 0xc1, 0x81, 0xbe, 0x54, + 0xc1, 0x82, 0xbe, 0x55, 0xc1, 0x83, 0xbe, 0x56, + 0xc1, 0x84, 0xbe, 0x57, 0xc1, 0x85, 0xbe, 0x58, + 0xc1, 0x86, 0xbe, 0x59, 0xc1, 0x87, 0xbe, 0x5a, + 0xc1, 0x88, 0xd0, 0x65, 0x01, 0x00, 0x43, 0xdb, + 0x00, 0x00, 0x00, 0xd0, 0x65, 0x00, 0x00, 0x43, + 0xda, 0x00, 0x00, 0x00, 0xd0, 0x41, 0x90, 0x00, + 0x00, 0x00, 0xc8, 0xd0, 0x41, 0x94, 0x00, 0x00, + 0x00, 0xc9, 0xd0, 0x41, 0x93, 0x00, 0x00, 0x00, + 0xca, 0xd0, 0x41, 0x95, 0x00, 0x00, 0x00, 0xcb, + 0xd0, 0x41, 0xad, 0x00, 0x00, 0x00, 0xc1, 0x04, + 0xd0, 0x41, 0xa3, 0x00, 0x00, 0x00, 0xc1, 0x05, + 0xd0, 0x41, 0x91, 0x00, 0x00, 0x00, 0xc1, 0x06, + 0xd0, 0x41, 0x9a, 0x00, 0x00, 0x00, 0xc1, 0x07, + 0xd0, 0x41, 0x9e, 0x00, 0x00, 0x00, 0xc1, 0x08, + 0xd0, 0x41, 0x92, 0x00, 0x00, 0x00, 0xc1, 0x09, + 0xd0, 0x41, 0x96, 0x00, 0x00, 0x00, 0xc1, 0x0a, + 0xd0, 0x41, 0x98, 0x00, 0x00, 0x00, 0xc1, 0x0b, + 0xd0, 0x41, 0x99, 0x00, 0x00, 0x00, 0xc1, 0x0c, + 0xd0, 0x41, 0xdd, 0x00, 0x00, 0x00, 0xc1, 0x0d, + 0xd0, 0x41, 0xde, 0x00, 0x00, 0x00, 0xc1, 0x0e, + 0xd0, 0x41, 0xdf, 0x00, 0x00, 0x00, 0xc1, 0x0f, + 0xd0, 0x41, 0xe0, 0x00, 0x00, 0x00, 0xc1, 0x10, + 0x0b, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4c, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4c, 0x94, 0x02, 0x00, 0x00, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4c, 0x96, 0x02, 0x00, 0x00, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4c, 0x98, 0x02, 0x00, + 0x00, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4c, 0x9a, + 0x02, 0x00, 0x00, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4c, 0x9c, 0x02, 0x00, 0x00, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4c, 0x9e, 0x02, 0x00, 0x00, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4c, 0xa0, 0x02, 0x00, + 0x00, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4c, 0xa2, + 0x02, 0x00, 0x00, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4c, 0xa4, 0x02, 0x00, 0x00, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4c, 0xa5, 0x02, 0x00, 0x00, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4c, 0xa7, 0x02, 0x00, + 0x00, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4c, 0xa9, + 0x02, 0x00, 0x00, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4c, 0xab, 0x02, 0x00, 0x00, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4c, 0xad, 0x02, 0x00, 0x00, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4c, 0xaf, 0x02, 0x00, + 0x00, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4c, 0xb1, + 0x02, 0x00, 0x00, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4c, 0xb3, 0x02, 0x00, 0x00, 0xc1, 0x11, 0x0b, + 0x0b, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4c, 0x1f, + 0x02, 0x00, 0x00, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4c, 0x46, 0x00, 0x00, 0x00, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4c, 0x75, 0x02, 0x00, 0x00, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4c, 0x22, 0x02, 0x00, + 0x00, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4c, 0x16, + 0x00, 0x00, 0x00, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4c, 0x5d, 0x02, 0x00, 0x00, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4c, 0x1b, 0x00, 0x00, 0x00, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4c, 0x79, 0x02, 0x00, + 0x00, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4c, 0x24, + 0x02, 0x00, 0x00, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4c, 0x01, 0x00, 0x00, 0x00, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4c, 0x45, 0x00, 0x00, 0x00, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4c, 0x21, 0x02, 0x00, + 0x00, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4c, 0x1c, + 0x02, 0x00, 0x00, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4c, 0x1e, 0x02, 0x00, 0x00, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4c, 0x47, 0x00, 0x00, 0x00, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4c, 0x49, 0x00, 0x00, + 0x00, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4c, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4c, 0x44, 0x00, 0x00, 0x00, 0x4c, 0x4a, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4c, 0x1f, 0x02, 0x00, 0x00, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4c, 0x46, 0x00, 0x00, 0x00, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4c, 0x75, 0x02, 0x00, + 0x00, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4c, 0x22, + 0x02, 0x00, 0x00, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4c, 0x16, 0x00, 0x00, 0x00, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4c, 0x5d, 0x02, 0x00, 0x00, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4c, 0x1b, 0x00, 0x00, + 0x00, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4c, 0x79, + 0x02, 0x00, 0x00, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4c, 0x24, 0x02, 0x00, 0x00, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4c, 0x45, 0x00, 0x00, + 0x00, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4c, 0x21, + 0x02, 0x00, 0x00, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4c, 0x1c, 0x02, 0x00, 0x00, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4c, 0x1e, 0x02, 0x00, 0x00, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4c, 0x47, 0x00, 0x00, + 0x00, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4c, 0x49, + 0x00, 0x00, 0x00, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4c, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4c, 0x44, 0x00, 0x00, 0x00, 0x4c, + 0x4d, 0x02, 0x00, 0x00, 0xc2, 0x12, 0x41, 0x4a, + 0x02, 0x00, 0x00, 0xc1, 0x13, 0x0a, 0xc1, 0x14, + 0x09, 0xc1, 0x15, 0x0a, 0xc1, 0x16, 0x09, 0xc1, + 0x17, 0xb5, 0xc1, 0x18, 0x09, 0xc1, 0x19, 0x09, + 0xc1, 0x1a, 0x26, 0x00, 0x00, 0xc1, 0x1b, 0xbf, + 0xc1, 0x1d, 0xbf, 0xc1, 0x1e, 0xbf, 0xc1, 0x1f, + 0xb3, 0xc1, 0x20, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0xc1, 0x21, 0x04, 0xb5, 0x02, 0x00, 0x00, 0xc1, + 0x22, 0xb3, 0xc1, 0x24, 0xbf, 0xc1, 0x25, 0xb3, + 0xc1, 0x26, 0xbf, 0xc1, 0x27, 0xb3, 0xc1, 0x28, + 0xbf, 0xc1, 0x29, 0xb3, 0xc1, 0x2a, 0x09, 0xc1, + 0x2d, 0xb3, 0xc1, 0x2e, 0xb3, 0xc1, 0x2f, 0xb3, + 0xc1, 0x33, 0x0b, 0xc0, 0x46, 0x4c, 0xb6, 0x02, + 0x00, 0x00, 0xc0, 0x49, 0x4c, 0xb7, 0x02, 0x00, + 0x00, 0xc0, 0x63, 0x4c, 0xb8, 0x02, 0x00, 0x00, + 0xc0, 0x57, 0x4c, 0xb9, 0x02, 0x00, 0x00, 0xc0, + 0x47, 0x4c, 0xba, 0x02, 0x00, 0x00, 0xc0, 0x48, + 0x4c, 0xbb, 0x02, 0x00, 0x00, 0xc0, 0x44, 0x4c, + 0xbc, 0x02, 0x00, 0x00, 0xc0, 0x58, 0x4c, 0xbd, + 0x02, 0x00, 0x00, 0xc0, 0x68, 0x4c, 0x86, 0x02, + 0x00, 0x00, 0xc0, 0x4e, 0x4c, 0x81, 0x01, 0x00, + 0x00, 0xc0, 0x5e, 0x4c, 0xbe, 0x02, 0x00, 0x00, + 0xc0, 0x4e, 0x4c, 0x87, 0x02, 0x00, 0x00, 0xc0, + 0x51, 0x4c, 0xbf, 0x02, 0x00, 0x00, 0xc0, 0x50, + 0x4c, 0xc0, 0x02, 0x00, 0x00, 0xc0, 0x43, 0x4c, + 0xc1, 0x02, 0x00, 0x00, 0xc0, 0x45, 0x4c, 0xc2, + 0x02, 0x00, 0x00, 0xc0, 0x45, 0x4c, 0xc3, 0x02, + 0x00, 0x00, 0xc0, 0x59, 0x4c, 0xc4, 0x02, 0x00, + 0x00, 0xc0, 0x64, 0x4c, 0xc5, 0x02, 0x00, 0x00, + 0xc0, 0x62, 0x4c, 0xc6, 0x02, 0x00, 0x00, 0xc0, + 0x50, 0x4c, 0xc7, 0x02, 0x00, 0x00, 0xc0, 0x51, + 0x4c, 0xc8, 0x02, 0x00, 0x00, 0xc0, 0x48, 0x4c, + 0xc9, 0x02, 0x00, 0x00, 0xc0, 0x49, 0x4c, 0xca, + 0x02, 0x00, 0x00, 0xc0, 0x4c, 0x4c, 0xcb, 0x02, + 0x00, 0x00, 0xc0, 0x4d, 0x4c, 0xcc, 0x02, 0x00, + 0x00, 0xc0, 0x4c, 0x4c, 0xcd, 0x02, 0x00, 0x00, + 0xc0, 0x4d, 0x4c, 0xce, 0x02, 0x00, 0x00, 0xc0, + 0x46, 0x4c, 0xcf, 0x02, 0x00, 0x00, 0xc0, 0x56, 0x4c, 0xd0, 0x02, 0x00, 0x00, 0xc0, 0x47, 0x4c, - 0xd1, 0x02, 0x00, 0x00, 0xc0, 0x48, 0x4c, 0xd2, - 0x02, 0x00, 0x00, 0xc0, 0x46, 0x4c, 0xd3, 0x02, - 0x00, 0x00, 0xc0, 0x45, 0x4c, 0xd4, 0x02, 0x00, - 0x00, 0xc0, 0x60, 0x4c, 0xd5, 0x02, 0x00, 0x00, - 0xc0, 0x4c, 0x4c, 0xd6, 0x02, 0x00, 0x00, 0xc0, - 0x5f, 0x4c, 0xd7, 0x02, 0x00, 0x00, 0xc0, 0x4b, - 0x4c, 0xd8, 0x02, 0x00, 0x00, 0xc0, 0x5e, 0x4c, - 0xd9, 0x02, 0x00, 0x00, 0xc0, 0x5b, 0x4c, 0xda, - 0x02, 0x00, 0x00, 0xc0, 0x59, 0x4c, 0xdb, 0x02, - 0x00, 0x00, 0xc0, 0x5a, 0x4c, 0xdc, 0x02, 0x00, - 0x00, 0xc0, 0x57, 0x4c, 0xdd, 0x02, 0x00, 0x00, - 0xc1, 0x68, 0x0b, 0xc2, 0x73, 0xbe, 0x3c, 0x43, - 0x2f, 0x02, 0x00, 0x00, 0xc4, 0x42, 0x5f, 0x00, - 0x00, 0x00, 0x0b, 0xc0, 0x76, 0x4c, 0x46, 0x01, - 0x00, 0x00, 0xc0, 0x77, 0x4c, 0x47, 0x01, 0x00, - 0x00, 0xbe, 0x43, 0x4d, 0xde, 0x02, 0x00, 0x00, - 0x4c, 0xde, 0x02, 0x00, 0x00, 0xbe, 0x44, 0x4d, - 0xdf, 0x02, 0x00, 0x00, 0x4c, 0xdf, 0x02, 0x00, - 0x00, 0xbe, 0x45, 0x4d, 0xe0, 0x02, 0x00, 0x00, - 0x4c, 0xe0, 0x02, 0x00, 0x00, 0xbe, 0x46, 0x4d, - 0xe1, 0x02, 0x00, 0x00, 0x4c, 0xe1, 0x02, 0x00, - 0x00, 0xbe, 0x47, 0x4d, 0x2e, 0x02, 0x00, 0x00, - 0x4c, 0x2e, 0x02, 0x00, 0x00, 0xbe, 0x48, 0x4d, - 0xe2, 0x02, 0x00, 0x00, 0x4c, 0xe2, 0x02, 0x00, - 0x00, 0xbe, 0x49, 0x4d, 0x17, 0x02, 0x00, 0x00, - 0x4c, 0x17, 0x02, 0x00, 0x00, 0xbe, 0x4a, 0x4d, - 0x46, 0x02, 0x00, 0x00, 0x4c, 0x46, 0x02, 0x00, - 0x00, 0xbe, 0x4b, 0x4d, 0x49, 0x02, 0x00, 0x00, - 0x4c, 0x49, 0x02, 0x00, 0x00, 0xbe, 0x4c, 0x4d, - 0xe3, 0x02, 0x00, 0x00, 0x4c, 0xe3, 0x02, 0x00, - 0x00, 0xbe, 0x4d, 0x4d, 0xe4, 0x02, 0x00, 0x00, - 0x4c, 0xe4, 0x02, 0x00, 0x00, 0x07, 0x24, 0x02, - 0x00, 0xc1, 0x7a, 0xc0, 0x84, 0xed, 0x0e, 0xc0, - 0x83, 0xed, 0x0e, 0xc0, 0x33, 0xed, 0x0e, 0xc0, - 0x7c, 0xed, 0x29, 0x08, 0xe9, 0x02, 0x29, 0xbe, - 0x00, 0x38, 0x8a, 0x00, 0x00, 0x00, 0xee, 0x0e, - 0x06, 0x2e, + 0xd1, 0x02, 0x00, 0x00, 0xc0, 0x53, 0x4c, 0xd2, + 0x02, 0x00, 0x00, 0xc0, 0x54, 0x4c, 0xd3, 0x02, + 0x00, 0x00, 0xc0, 0x50, 0x4c, 0xd4, 0x02, 0x00, + 0x00, 0xc0, 0x51, 0x4c, 0xd5, 0x02, 0x00, 0x00, + 0xc0, 0x48, 0x4c, 0xd6, 0x02, 0x00, 0x00, 0xc0, + 0x49, 0x4c, 0xd7, 0x02, 0x00, 0x00, 0xc0, 0x47, + 0x4c, 0xd8, 0x02, 0x00, 0x00, 0xc0, 0x46, 0x4c, + 0xd9, 0x02, 0x00, 0x00, 0xc0, 0x61, 0x4c, 0xda, + 0x02, 0x00, 0x00, 0xc0, 0x4d, 0x4c, 0xdb, 0x02, + 0x00, 0x00, 0xc0, 0x60, 0x4c, 0xdc, 0x02, 0x00, + 0x00, 0xc0, 0x4c, 0x4c, 0xdd, 0x02, 0x00, 0x00, + 0xc0, 0x5f, 0x4c, 0xde, 0x02, 0x00, 0x00, 0xc0, + 0x5c, 0x4c, 0xdf, 0x02, 0x00, 0x00, 0xc0, 0x5a, + 0x4c, 0xe0, 0x02, 0x00, 0x00, 0xc0, 0x5b, 0x4c, + 0xe1, 0x02, 0x00, 0x00, 0xc0, 0x58, 0x4c, 0xe2, + 0x02, 0x00, 0x00, 0xc1, 0x69, 0x0b, 0xc2, 0x74, + 0xbe, 0x3c, 0x43, 0x33, 0x02, 0x00, 0x00, 0xc4, + 0x42, 0x5f, 0x00, 0x00, 0x00, 0x0b, 0xc0, 0x77, + 0x4c, 0x47, 0x01, 0x00, 0x00, 0xc0, 0x78, 0x4c, + 0x48, 0x01, 0x00, 0x00, 0xbe, 0x43, 0x4d, 0xe3, + 0x02, 0x00, 0x00, 0x4c, 0xe3, 0x02, 0x00, 0x00, + 0xbe, 0x44, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x4c, + 0xe4, 0x02, 0x00, 0x00, 0xbe, 0x45, 0x4d, 0xe5, + 0x02, 0x00, 0x00, 0x4c, 0xe5, 0x02, 0x00, 0x00, + 0xbe, 0x46, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x4c, + 0xe6, 0x02, 0x00, 0x00, 0xbe, 0x47, 0x4d, 0x32, + 0x02, 0x00, 0x00, 0x4c, 0x32, 0x02, 0x00, 0x00, + 0xbe, 0x48, 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x4c, + 0xe7, 0x02, 0x00, 0x00, 0xbe, 0x49, 0x4d, 0x1b, + 0x02, 0x00, 0x00, 0x4c, 0x1b, 0x02, 0x00, 0x00, + 0xbe, 0x4a, 0x4d, 0x4a, 0x02, 0x00, 0x00, 0x4c, + 0x4a, 0x02, 0x00, 0x00, 0xbe, 0x4b, 0x4d, 0x4d, + 0x02, 0x00, 0x00, 0x4c, 0x4d, 0x02, 0x00, 0x00, + 0xbe, 0x4c, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4c, + 0xe8, 0x02, 0x00, 0x00, 0xbe, 0x4d, 0x4d, 0xe9, + 0x02, 0x00, 0x00, 0x4c, 0xe9, 0x02, 0x00, 0x00, + 0x07, 0x24, 0x02, 0x00, 0xc1, 0x7b, 0xc0, 0x88, + 0xed, 0x0e, 0xc0, 0x87, 0xed, 0x0e, 0xc0, 0x34, + 0xed, 0x0e, 0xc0, 0x7c, 0xed, 0x29, 0x08, 0xe9, + 0x02, 0x29, 0xbe, 0x00, 0x38, 0x8a, 0x00, 0x00, + 0x00, 0xee, 0x0e, 0x06, 0x2e, }; diff --git a/gen/test_fib.c b/gen/test_fib.c index 5355a37..d37dd9f 100644 --- a/gen/test_fib.c +++ b/gen/test_fib.c @@ -2,9 +2,9 @@ #include "quickjs-libc.h" -const uint32_t qjsc_test_fib_size = 166; +const uint32_t qjsc_test_fib_size = 167; -const uint8_t qjsc_test_fib[166] = { +const uint8_t qjsc_test_fib[167] = { 0x0c, 0x07, 0x28, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x69, 0x62, 0x2e, 0x6a, 0x73, 0x10, @@ -15,17 +15,17 @@ const uint8_t qjsc_test_fib[166] = { 0x6f, 0x72, 0x6c, 0x64, 0x10, 0x66, 0x69, 0x62, 0x28, 0x31, 0x30, 0x29, 0x3d, 0x0d, 0xb2, 0x03, 0x01, 0xb4, 0x03, 0x00, 0x00, 0x01, 0x00, 0xb6, - 0x03, 0x00, 0x0c, 0x20, 0xfa, 0x01, 0x9e, 0x01, - 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x32, 0x00, - 0xb6, 0x03, 0x00, 0x0c, 0x08, 0xe9, 0x02, 0x29, - 0x38, 0xdc, 0x00, 0x00, 0x00, 0x42, 0xdd, 0x00, - 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x24, - 0x01, 0x00, 0x0e, 0x38, 0xdc, 0x00, 0x00, 0x00, - 0x42, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, - 0x00, 0x00, 0x65, 0x00, 0x00, 0xbb, 0x0a, 0xee, - 0x24, 0x02, 0x00, 0x0e, 0x06, 0x2e, 0xb2, 0x03, - 0x01, 0x01, 0x0a, 0x01, 0x01, 0x00, 0x04, 0x0a, - 0x02, 0x62, 0x00, 0x4d, 0x30, 0x00, + 0x03, 0x00, 0x00, 0x0c, 0x20, 0xfa, 0x01, 0x9e, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x32, + 0x00, 0xb6, 0x03, 0x00, 0x0c, 0x08, 0xe9, 0x02, + 0x29, 0x38, 0xdc, 0x00, 0x00, 0x00, 0x42, 0xdd, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x0e, 0x38, 0xdc, 0x00, 0x00, + 0x00, 0x42, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0xbb, 0x0a, + 0xee, 0x24, 0x02, 0x00, 0x0e, 0x06, 0x2e, 0xb2, + 0x03, 0x01, 0x01, 0x0a, 0x01, 0x01, 0x00, 0x04, + 0x0a, 0x02, 0x62, 0x00, 0x4d, 0x30, 0x00, }; static JSContext *JS_NewCustomContext(JSRuntime *rt) diff --git a/libregexp.c b/libregexp.c index 11b574e..a26b74c 100644 --- a/libregexp.c +++ b/libregexp.c @@ -712,7 +712,7 @@ static int parse_unicode_property(REParseState *s, CharRange *cr, static int get_class_atom(REParseState *s, CharRange *cr, const uint8_t **pp, BOOL inclass) { - const uint8_t *p; + const uint8_t *p, *p_next; uint32_t c; int ret; @@ -804,15 +804,18 @@ static int get_class_atom(REParseState *s, CharRange *cr, /* fall thru */ default: normal_char: - /* normal char */ - if (c >= 128) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); - if ((unsigned)c > 0xffff && !s->is_unicode) { - /* XXX: should handle non BMP-1 code points */ + p++; + if (c >= 0x80) { + c = utf8_decode(p - 1, &p_next); + if (p_next == p) + return re_parse_error(s, "invalid UTF-8 sequence"); + p = p_next; + if (c > 0xFFFF && !s->is_unicode) { + // TODO(chqrlie): should handle non BMP-1 code points in + // the calling function and no require the source string + // to be CESU-8 encoded if not s->is_unicode return re_parse_error(s, "malformed unicode char"); } - } else { - p++; } break; } @@ -1105,35 +1108,35 @@ static int re_is_simple_quantifier(const uint8_t *bc_buf, int bc_buf_len) /* '*pp' is the first char after '<' */ static int re_parse_group_name(char *buf, int buf_size, const uint8_t **pp) { - const uint8_t *p, *p1; + const uint8_t *p, *p_next; uint32_t c, d; char *q; p = *pp; q = buf; for(;;) { - c = *p; + c = *p++; if (c == '\\') { - p++; if (*p != 'u') return -1; c = lre_parse_escape(&p, 2); // accept surrogate pairs + if ((int)c < 0) + return -1; } else if (c == '>') { break; - } else if (c >= 128) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); + } else if (c >= 0x80) { + c = utf8_decode(p - 1, &p_next); + if (p_next == p) + return -1; + p = p_next; if (is_hi_surrogate(c)) { - d = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p1); + d = utf8_decode(p, &p_next); if (is_lo_surrogate(d)) { c = from_surrogate(c, d); - p = p1; + p = p_next; } } - } else { - p++; } - if (c > 0x10FFFF) - return -1; if (q == buf) { if (!lre_js_is_ident_first(c)) return -1; @@ -1143,16 +1146,15 @@ static int re_parse_group_name(char *buf, int buf_size, const uint8_t **pp) } if ((q - buf + UTF8_CHAR_LEN_MAX + 1) > buf_size) return -1; - if (c < 128) { + if (c < 0x80) { *q++ = c; } else { - q += unicode_to_utf8((uint8_t*)q, c); + q += utf8_encode((uint8_t*)q, c); } } if (q == buf) return -1; *q = '\0'; - p++; *pp = p; return 0; } diff --git a/libregexp.h b/libregexp.h index f029309..1822f93 100644 --- a/libregexp.h +++ b/libregexp.h @@ -53,7 +53,7 @@ int lre_exec(uint8_t **capture, int lre_parse_escape(const uint8_t **pp, int allow_utf16); LRE_BOOL lre_is_space(int c); -void lre_byte_swap(uint8_t *buf, size_t len, BOOL is_byte_swapped); +void lre_byte_swap(uint8_t *buf, size_t len, LRE_BOOL is_byte_swapped); /* must be provided by the user */ LRE_BOOL lre_check_stack_overflow(void *opaque, size_t alloca_size); diff --git a/libunicode.h b/libunicode.h index d815b4b..91cfbee 100644 --- a/libunicode.h +++ b/libunicode.h @@ -24,6 +24,7 @@ #ifndef LIBUNICODE_H #define LIBUNICODE_H +#include #include #define LRE_BOOL int /* for documentation purposes */ diff --git a/qjs.c b/qjs.c index ccda7e5..a293a17 100644 --- a/qjs.c +++ b/qjs.c @@ -58,6 +58,7 @@ static int eval_buf(JSContext *ctx, const void *buf, int buf_len, js_module_set_import_meta(ctx, val, TRUE, TRUE); val = JS_EvalFunction(ctx, val); } + val = js_std_await(ctx, val); } else { val = JS_Eval(ctx, buf, buf_len, filename, eval_flags); } diff --git a/quickjs-libc.c b/quickjs-libc.c index c5b1235..a594d74 100644 --- a/quickjs-libc.c +++ b/quickjs-libc.c @@ -272,20 +272,21 @@ static JSValue js_printf_internal(JSContext *ctx, if (i >= argc) goto missing; if (JS_IsString(argv[i])) { + // TODO(chqrlie) need an API to wrap charCodeAt and codePointAt */ string_arg = JS_ToCString(ctx, argv[i++]); if (!string_arg) goto fail; - int32_arg = unicode_from_utf8((const uint8_t *)string_arg, UTF8_CHAR_LEN_MAX, &p); + int32_arg = utf8_decode((const uint8_t *)string_arg, &p); JS_FreeCString(ctx, string_arg); } else { if (JS_ToInt32(ctx, &int32_arg, argv[i++])) goto fail; } - /* handle utf-8 encoding explicitly */ + // XXX: throw an exception? if ((unsigned)int32_arg > 0x10FFFF) int32_arg = 0xFFFD; /* ignore conversion flags, width and precision */ - len = unicode_to_utf8(cbuf, int32_arg); + len = utf8_encode(cbuf, int32_arg); dbuf_put(&dbuf, cbuf, len); break; @@ -777,6 +778,7 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val, JSValue ret; JSValue options_obj; BOOL backtrace_barrier = FALSE; + BOOL is_async = FALSE; int flags; if (argc >= 2) { @@ -784,6 +786,9 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val, if (get_bool_option(ctx, &backtrace_barrier, options_obj, "backtrace_barrier")) return JS_EXCEPTION; + if (get_bool_option(ctx, &is_async, options_obj, + "async")) + return JS_EXCEPTION; } str = JS_ToCStringLen(ctx, &len, argv[0]); @@ -796,6 +801,8 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val, flags = JS_EVAL_TYPE_GLOBAL; if (backtrace_barrier) flags |= JS_EVAL_FLAG_BACKTRACE_BARRIER; + if (is_async) + flags |= JS_EVAL_FLAG_ASYNC; ret = JS_Eval(ctx, str, len, "", flags); JS_FreeCString(ctx, str); if (!ts->recv_pipe && --ts->eval_script_recurse == 0) { @@ -2113,6 +2120,38 @@ static JSClassDef js_os_timer_class = { .gc_mark = js_os_timer_mark, }; +/* return a promise */ +static JSValue js_os_sleepAsync(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + JSRuntime *rt = JS_GetRuntime(ctx); + JSThreadState *ts = JS_GetRuntimeOpaque(rt); + int64_t delay; + JSOSTimer *th; + JSValue promise, resolving_funcs[2]; + + if (JS_ToInt64(ctx, &delay, argv[0])) + return JS_EXCEPTION; + promise = JS_NewPromiseCapability(ctx, resolving_funcs); + if (JS_IsException(promise)) + return JS_EXCEPTION; + + th = js_mallocz(ctx, sizeof(*th)); + if (!th) { + JS_FreeValue(ctx, promise); + JS_FreeValue(ctx, resolving_funcs[0]); + JS_FreeValue(ctx, resolving_funcs[1]); + return JS_EXCEPTION; + } + th->has_object = FALSE; + th->timeout = js__hrtime_ms() + delay; + th->func = JS_DupValue(ctx, resolving_funcs[0]); + list_add_tail(&th->link, &ts->os_timers); + JS_FreeValue(ctx, resolving_funcs[0]); + JS_FreeValue(ctx, resolving_funcs[1]); + return promise; +} + static void call_handler(JSContext *ctx, JSValue func) { JSValue ret, func1; @@ -3328,6 +3367,7 @@ static void *worker_func(void *opaque) JSRuntime *rt; JSThreadState *ts; JSContext *ctx; + JSValue val; rt = JS_NewRuntime(); if (rt == NULL) { @@ -3354,11 +3394,14 @@ static void *worker_func(void *opaque) js_std_add_helpers(ctx, -1, NULL); - if (!JS_RunModule(ctx, args->basename, args->filename)) - js_std_dump_error(ctx); + val = JS_LoadModule(ctx, args->basename, args->filename); free(args->filename); free(args->basename); free(args); + val = js_std_await(ctx, val); + if (JS_IsException(val)) + js_std_dump_error(ctx); + JS_FreeValue(ctx, val); js_std_loop(ctx); @@ -3701,6 +3744,7 @@ static const JSCFunctionListEntry js_os_funcs[] = { // per spec: both functions can cancel timeouts and intervals JS_CFUNC_DEF("clearTimeout", 1, js_os_clearTimeout ), JS_CFUNC_DEF("clearInterval", 1, js_os_clearTimeout ), + JS_CFUNC_DEF("sleepAsync", 1, js_os_sleepAsync ), JS_PROP_STRING_DEF("platform", OS_PLATFORM, 0 ), JS_CFUNC_DEF("getcwd", 0, js_os_getcwd ), JS_CFUNC_DEF("chdir", 0, js_os_chdir ), @@ -3979,6 +4023,42 @@ void js_std_loop(JSContext *ctx) } } +/* Wait for a promise and execute pending jobs while waiting for + it. Return the promise result or JS_EXCEPTION in case of promise + rejection. */ +JSValue js_std_await(JSContext *ctx, JSValue obj) +{ + JSValue ret; + int state; + + for(;;) { + state = JS_PromiseState(ctx, obj); + if (state == JS_PROMISE_FULFILLED) { + ret = JS_PromiseResult(ctx, obj); + JS_FreeValue(ctx, obj); + break; + } else if (state == JS_PROMISE_REJECTED) { + ret = JS_Throw(ctx, JS_PromiseResult(ctx, obj)); + JS_FreeValue(ctx, obj); + break; + } else if (state == JS_PROMISE_PENDING) { + JSContext *ctx1; + int err; + err = JS_ExecutePendingJob(JS_GetRuntime(ctx), &ctx1); + if (err < 0) { + js_std_dump_error(ctx1); + } + if (os_poll_func) + os_poll_func(ctx); + } else { + /* not a promise */ + ret = obj; + break; + } + } + return ret; +} + void js_std_eval_binary(JSContext *ctx, const uint8_t *buf, size_t buf_len, int load_only) { @@ -3997,8 +4077,11 @@ void js_std_eval_binary(JSContext *ctx, const uint8_t *buf, size_t buf_len, goto exception; } js_module_set_import_meta(ctx, obj, FALSE, TRUE); + val = JS_EvalFunction(ctx, obj); + val = js_std_await(ctx, val); + } else { + val = JS_EvalFunction(ctx, obj); } - val = JS_EvalFunction(ctx, obj); if (JS_IsException(val)) { exception: js_std_dump_error(ctx); diff --git a/quickjs-libc.h b/quickjs-libc.h index f8e31d4..ad850a3 100644 --- a/quickjs-libc.h +++ b/quickjs-libc.h @@ -37,6 +37,7 @@ JSModuleDef *js_init_module_std(JSContext *ctx, const char *module_name); JSModuleDef *js_init_module_os(JSContext *ctx, const char *module_name); void js_std_add_helpers(JSContext *ctx, int argc, char **argv); void js_std_loop(JSContext *ctx); +JSValue js_std_await(JSContext *ctx, JSValue obj); void js_std_init_handlers(JSRuntime *rt); void js_std_free_handlers(JSRuntime *rt); void js_std_dump_error(JSContext *ctx); diff --git a/quickjs.c b/quickjs.c index 8b37ef1..66a153f 100644 --- a/quickjs.c +++ b/quickjs.c @@ -58,11 +58,6 @@ #define MALLOC_OVERHEAD 8 #endif -#if !defined(_WIN32) && !defined(__wasi__) -/* define it if printf uses the RNDN rounding mode instead of RNDNA */ -#define CONFIG_PRINTF_RNDN -#endif - #if defined(__NEWLIB__) #define NO_TM_GMTOFF #endif @@ -193,6 +188,7 @@ typedef enum JSErrorEnum { JS_AGGREGATE_ERROR, JS_NATIVE_ERROR_COUNT, /* number of different NativeError objects */ + JS_PLAIN_ERROR = JS_NATIVE_ERROR_COUNT } JSErrorEnum; #define JS_MAX_LOCAL_VARS 65535 @@ -271,6 +267,8 @@ struct JSRuntime { JSModuleNormalizeFunc *module_normalize_func; JSModuleLoaderFunc *module_loader_func; void *module_loader_opaque; + /* timestamp for internal use in module evaluation */ + int64_t module_async_evaluation_next_timestamp; /* used to allocate, free and clone SharedArrayBuffers */ JSSharedArrayBufferFunctions sab_funcs; @@ -765,6 +763,15 @@ typedef struct JSImportEntry { int req_module_idx; /* in req_module_entries */ } JSImportEntry; +typedef enum { + JS_MODULE_STATUS_UNLINKED, + JS_MODULE_STATUS_LINKING, + JS_MODULE_STATUS_LINKED, + JS_MODULE_STATUS_EVALUATING, + JS_MODULE_STATUS_EVALUATING_ASYNC, + JS_MODULE_STATUS_EVALUATED, +} JSModuleStatus; + struct JSModuleDef { JSRefCountHeader header; /* must come first, 32-bit */ JSAtom module_name; @@ -786,15 +793,26 @@ struct JSModuleDef { int import_entries_count; int import_entries_size; - JSValue promise; JSValue module_ns; JSValue func_obj; /* only used for JS modules */ JSModuleInitFunc *init_func; /* only used for C modules */ + BOOL has_tla : 8; /* true if func_obj contains await */ BOOL resolved : 8; BOOL func_created : 8; - BOOL instantiated : 8; - BOOL evaluated : 8; - BOOL eval_mark : 8; /* temporary use during js_evaluate_module() */ + JSModuleStatus status : 8; + /* temp use during js_module_link() & js_module_evaluate() */ + int dfs_index, dfs_ancestor_index; + JSModuleDef *stack_prev; + /* temp use during js_module_evaluate() */ + JSModuleDef **async_parent_modules; + int async_parent_modules_count; + int async_parent_modules_size; + int pending_async_dependencies; + BOOL async_evaluation; + int64_t async_evaluation_timestamp; + JSModuleDef *cycle_root; + JSValue promise; /* corresponds to spec field: capability */ + JSValue resolving_funcs[2]; /* corresponds to spec field: capability */ /* true if evaluation yielded an exception. It is saved in eval_exception */ BOOL eval_has_exception : 8; @@ -859,14 +877,6 @@ struct JSShape { JSShapeProperty prop[0]; /* prop_size elements */ }; -typedef struct JSPromiseData { - JSPromiseStateEnum promise_state; - /* 0=fulfill, 1=reject, list of JSPromiseReactionData.link */ - struct list_head promise_reactions[2]; - BOOL is_handled; /* Note: only useful to debug */ - JSValue promise_result; -} JSPromiseData; - struct JSObject { union { JSGCObjectHeader header; @@ -1109,12 +1119,8 @@ static JSValue js_regexp_constructor_internal(JSContext *ctx, JSValue ctor, static void gc_decref(JSRuntime *rt); static int JS_NewClass1(JSRuntime *rt, JSClassID class_id, const JSClassDef *class_def, JSAtom name); -static JSValue js_promise_all(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic); -static JSValue js_promise_then(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv); -static JSValue js_array_push(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int unshift); +static JSValue js_array_push(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv, int unshift); typedef enum JSStrictEqModeEnum { JS_EQ_STRICT, @@ -1204,6 +1210,8 @@ static __exception int perform_promise_then(JSContext *ctx, JSValue *cap_resolving_funcs); static JSValue js_promise_resolve(JSContext *ctx, JSValue this_val, int argc, JSValue *argv, int magic); +static JSValue js_promise_then(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv); static int js_string_compare(JSContext *ctx, const JSString *p1, const JSString *p2); static JSValue JS_ToNumber(JSContext *ctx, JSValue val); @@ -1778,6 +1786,10 @@ void JS_SetDumpFlags(JSRuntime *rt, uint64_t flags) rt->dump_flags = flags; } +size_t JS_GetGCThreshold(JSRuntime *rt) { + return rt->malloc_gc_threshold; +} + /* use -1 to disable automatic GC */ void JS_SetGCThreshold(JSRuntime *rt, size_t gc_threshold) { @@ -2231,7 +2243,6 @@ JSValue JS_GetClassProto(JSContext *ctx, JSClassID class_id) typedef enum JSFreeModuleEnum { JS_FREE_MODULE_ALL, JS_FREE_MODULE_NOT_RESOLVED, - JS_FREE_MODULE_NOT_EVALUATED, } JSFreeModuleEnum; /* XXX: would be more efficient with separate module lists */ @@ -2241,9 +2252,7 @@ static void js_free_modules(JSContext *ctx, JSFreeModuleEnum flag) list_for_each_safe(el, el1, &ctx->loaded_modules) { JSModuleDef *m = list_entry(el, JSModuleDef, link); if (flag == JS_FREE_MODULE_ALL || - (flag == JS_FREE_MODULE_NOT_RESOLVED && !m->resolved) || - (flag == JS_FREE_MODULE_NOT_EVALUATED && !m->evaluated - && !m->eval_mark)) { + (flag == JS_FREE_MODULE_NOT_RESOLVED && !m->resolved)) { js_free_module_def(ctx, m); } } @@ -3070,38 +3079,25 @@ static const char *JS_AtomGetStrRT(JSRuntime *rt, char *buf, int buf_size, snprintf(buf, buf_size, "", atom); } else { JSAtomStruct *p = rt->atom_array[atom]; + *buf = '\0'; if (atom_is_free(p)) { assert(!atom_is_free(p)); snprintf(buf, buf_size, "", atom); - } else { - int i, c; - char *q; - JSString *str; - - q = buf; - str = p; - if (str) { - if (!str->is_wide_char) { - /* special case ASCII strings */ - c = 0; - for(i = 0; i < str->len; i++) { - c |= str->u.str8[i]; - } - if (c < 0x80) - return (const char *)str->u.str8; - } + } else if (p != NULL) { + JSString *str = p; + if (str->is_wide_char) { + /* encode surrogates correctly */ + utf8_encode_buf16(buf, buf_size, str->u.str16, str->len); + } else { + /* special case ASCII strings */ + int i, c = 0; for(i = 0; i < str->len; i++) { - c = string_get(str, i); - if ((q - buf) >= buf_size - UTF8_CHAR_LEN_MAX) - break; - if (c < 128) { - *q++ = c; - } else { - q += unicode_to_utf8((uint8_t *)q, c); - } + c |= str->u.str8[i]; } + if (c < 0x80) + return (const char *)str->u.str8; + utf8_encode_buf8(buf, buf_size, str->u.str8, str->len); } - *q = '\0'; } } return buf; @@ -3351,6 +3347,7 @@ const char *JS_AtomToCString(JSContext *ctx, JSAtom atom) /* return a string atom containing name concatenated with str1 */ /* `str1` may be pure ASCII or UTF-8 encoded */ +// TODO(chqrlie): use string concatenation instead of UTF-8 conversion static JSAtom js_atom_concat_str(JSContext *ctx, JSAtom name, const char *str1) { JSValue str; @@ -3903,64 +3900,44 @@ static JSValue string_buffer_end(StringBuffer *s) /* create a string from a UTF-8 buffer */ JSValue JS_NewStringLen(JSContext *ctx, const char *buf, size_t buf_len) { - const uint8_t *p, *p_end, *p_start, *p_next; - uint32_t c; - StringBuffer b_s, *b = &b_s; - size_t len1; + JSString *str; + size_t len; + int kind; if (buf_len <= 0) { return JS_AtomToString(ctx, JS_ATOM_empty_string); } - p_start = (const uint8_t *)buf; - p_end = p_start + buf_len; - p = p_start; - while (p < p_end && *p < 128) - p++; - len1 = p - p_start; - if (len1 > JS_STRING_LEN_MAX) + /* Compute string kind and length: 7-bit, 8-bit, 16-bit, 16-bit UTF-16 */ + kind = utf8_scan(buf, buf_len, &len); + if (len > JS_STRING_LEN_MAX) return JS_ThrowRangeError(ctx, "invalid string length"); - if (p == p_end) { - /* ASCII string */ - return js_new_string8_len(ctx, buf, buf_len); - } else { - if (string_buffer_init(ctx, b, buf_len)) - goto fail; - string_buffer_write8(b, p_start, len1); - while (p < p_end) { - if (*p < 128) { - string_buffer_putc8(b, *p++); - } else { - /* parse utf-8 sequence, return 0xFFFFFFFF for error */ - c = unicode_from_utf8(p, p_end - p, &p_next); - if (c < 0x10000) { - p = p_next; - } else if (c <= 0x10FFFF) { - p = p_next; - /* surrogate pair */ - string_buffer_putc16(b, get_hi_surrogate(c)); - c = get_lo_surrogate(c); - } else { - /* invalid char */ - c = 0xfffd; - /* skip the invalid chars */ - /* XXX: seems incorrect. Why not just use c = *p++; ? */ - while (p < p_end && (*p >= 0x80 && *p < 0xc0)) - p++; - if (p < p_end) { - p++; - while (p < p_end && (*p >= 0x80 && *p < 0xc0)) - p++; - } - } - string_buffer_putc16(b, c); - } - } - } - return string_buffer_end(b); - fail: - string_buffer_free(b); - return JS_EXCEPTION; + switch (kind) { + case UTF8_PLAIN_ASCII: + str = js_alloc_string(ctx, len, 0); + if (!str) + return JS_EXCEPTION; + memcpy(str->u.str8, buf, len); + str->u.str8[len] = '\0'; + break; + case UTF8_NON_ASCII: + /* buf contains non-ASCII code-points, but limited to 8-bit values */ + str = js_alloc_string(ctx, len, 0); + if (!str) + return JS_EXCEPTION; + utf8_decode_buf8(str->u.str8, len + 1, buf, buf_len); + break; + default: + // This causes a potential problem in JS_ThrowError if message is invalid + //if (kind & UTF8_HAS_ERRORS) + // return JS_ThrowRangeError(ctx, "invalid UTF-8 sequence"); + str = js_alloc_string(ctx, len, 1); + if (!str) + return JS_EXCEPTION; + utf8_decode_buf16(str->u.str16, len, buf, buf_len); + break; + } + return JS_MKPTR(JS_TAG_STRING, str); } static JSValue JS_ConcatString3(JSContext *ctx, const char *str1, @@ -4107,7 +4084,7 @@ go: /* c = 0xfffd; */ /* error */ } } - q += unicode_to_utf8(q, c); + q += utf8_encode(q, c); } } } @@ -6678,8 +6655,11 @@ static JSValue JS_ThrowError2(JSContext *ctx, JSErrorEnum error_num, JSValue obj, ret, msg; vsnprintf(buf, sizeof(buf), fmt, ap); - obj = JS_NewObjectProtoClass(ctx, ctx->native_error_proto[error_num], - JS_CLASS_ERROR); + if (error_num == JS_PLAIN_ERROR) + obj = JS_NewError(ctx); + else + obj = JS_NewObjectProtoClass(ctx, ctx->native_error_proto[error_num], + JS_CLASS_ERROR); if (unlikely(JS_IsException(obj))) { /* out of memory: throw JS_NULL to avoid recursing */ obj = JS_NULL; @@ -6713,6 +6693,17 @@ static JSValue JS_ThrowError(JSContext *ctx, JSErrorEnum error_num, return JS_ThrowError2(ctx, error_num, fmt, ap, add_backtrace); } +JSValue __attribute__((format(printf, 2, 3))) JS_ThrowPlainError(JSContext *ctx, const char *fmt, ...) +{ + JSValue val; + va_list ap; + + va_start(ap, fmt); + val = JS_ThrowError(ctx, JS_PLAIN_ERROR, fmt, ap); + va_end(ap); + return val; +} + JSValue __attribute__((format(printf, 2, 3))) JS_ThrowSyntaxError(JSContext *ctx, const char *fmt, ...) { JSValue val; @@ -7047,6 +7038,10 @@ static JSValue JS_GetPrototypeFree(JSContext *ctx, JSValue obj) return obj1; } +int JS_GetLength(JSContext *ctx, JSValue obj, int64_t *pres) { + return js_get_length64(ctx, pres, obj); +} + /* return TRUE, FALSE or (-1) in case of exception */ static int JS_OrdinaryIsInstanceOf(JSContext *ctx, JSValue val, JSValue obj) @@ -7885,6 +7880,12 @@ int JS_GetOwnProperty(JSContext *ctx, JSPropertyDescriptor *desc, return JS_GetOwnPropertyInternal(ctx, desc, JS_VALUE_GET_OBJ(obj), prop); } +void JS_FreePropertyEnum(JSContext *ctx, JSPropertyEnum *tab, + uint32_t len) +{ + js_free_prop_enum(ctx, tab, len); +} + /* return -1 if exception (Proxy object only) or TRUE/FALSE */ int JS_IsExtensible(JSContext *ctx, JSValue obj) { @@ -10113,6 +10114,7 @@ int JS_ToBool(JSContext *ctx, JSValue val) return JS_ToBoolFree(ctx, js_dup(val)); } +/* pc points to pure ASCII or UTF-8, null terminated contents */ static int skip_spaces(const char *pc) { const uint8_t *p, *p_next, *p_start; @@ -10120,19 +10122,19 @@ static int skip_spaces(const char *pc) p = p_start = (const uint8_t *)pc; for (;;) { - c = *p; - if (c < 128) { + c = *p++; + if (c < 0x80) { if (!((c >= 0x09 && c <= 0x0d) || (c == 0x20))) break; - p++; } else { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p_next); + c = utf8_decode(p - 1, &p_next); + /* no need to test for invalid UTF-8, 0xFFFD is not a space */ if (!lre_is_space(c)) break; p = p_next; } } - return p - p_start; + return p - 1 - p_start; } static inline int to_digit(int c) @@ -10174,10 +10176,7 @@ static double js_strtod(const char *str, int radix, BOOL is_float) n_max = ((uint64_t)-1 - (radix - 1)) / radix; /* XXX: could be more precise */ int_exp = 0; - while (*p != '\0') { - c = to_digit((uint8_t)*p); - if (c >= radix) - break; + while ((c = to_digit(*p)) < radix) { if (n <= n_max) { n = n * radix + c; } else { @@ -10200,26 +10199,9 @@ static double js_strtod(const char *str, int radix, BOOL is_float) return d; } -#define ATOD_INT_ONLY (1 << 0) -/* accept Oo and Ob prefixes in addition to 0x prefix if radix = 0 */ -#define ATOD_ACCEPT_BIN_OCT (1 << 2) -/* accept O prefix as octal if radix == 0 and properly formed (Annex B) */ -#define ATOD_ACCEPT_LEGACY_OCTAL (1 << 4) -/* accept _ between digits as a digit separator */ -#define ATOD_ACCEPT_UNDERSCORES (1 << 5) -/* allow a suffix to override the type */ -#define ATOD_ACCEPT_SUFFIX (1 << 6) -/* default type */ -#define ATOD_TYPE_MASK (1 << 7) -#define ATOD_TYPE_FLOAT64 (0 << 7) -#define ATOD_TYPE_BIG_INT (1 << 7) -/* accept -0x1 */ -#define ATOD_ACCEPT_PREFIX_AFTER_SIGN (1 << 10) - -static JSValue js_string_to_bigint(JSContext *ctx, const char *buf, - int radix, int flags, slimb_t *pexponent) +static JSValue js_string_to_bigint(JSContext *ctx, const char *buf, int radix) { - bf_t a_s, *a = &a_s; + bf_t *a; int ret; JSValue val; val = JS_NewBigInt(ctx); @@ -10231,136 +10213,136 @@ static JSValue js_string_to_bigint(JSContext *ctx, const char *buf, JS_FreeValue(ctx, val); return JS_ThrowOutOfMemory(ctx); } - val = JS_CompactBigInt1(ctx, val); - return val; + return JS_CompactBigInt1(ctx, val); } -/* return an exception in case of memory error. Return JS_NAN if - invalid syntax */ -static JSValue js_atof2(JSContext *ctx, const char *str, const char **pp, - int radix, int flags, slimb_t *pexponent) +/* `js_atof(ctx, p, len, pp, radix, flags)` + Convert the string pointed to by `p` to a number value. + Return an exception in case of memory error. + Return `JS_NAN` if invalid syntax. + - `p` points to a null terminated UTF-8 encoded char array, + - `len` the length of the array, + - `pp` if not null receives a pointer to the next character, + - `radix` must be in range 2 to 36, else return `JS_NAN`. + - `flags` is a combination of the flags below. + There is a null byte at `p[len]`, but there might be embedded null + bytes between `p[0]` and `p[len]` which must produce `JS_NAN` if + the `ATOD_NO_TRAILING_CHARS` flag is present. + */ + +#define ATOD_TRIM_SPACES (1 << 0) /* trim white space */ +#define ATOD_ACCEPT_EMPTY (1 << 1) /* accept an empty string, value is 0 */ +#define ATOD_ACCEPT_FLOAT (1 << 2) /* parse decimal floating point syntax */ +#define ATOD_ACCEPT_INFINITY (1 << 3) /* parse Infinity as a float point number */ +#define ATOD_ACCEPT_BIN_OCT (1 << 4) /* accept 0o and 0b prefixes */ +#define ATOD_ACCEPT_HEX_PREFIX (1 << 5) /* accept 0x prefix for radix 16 */ +#define ATOD_ACCEPT_UNDERSCORES (1 << 6) /* accept _ between digits as a digit separator */ +#define ATOD_ACCEPT_SUFFIX (1 << 7) /* allow 'n' suffix to produce BigInt */ +#define ATOD_WANT_BIG_INT (1 << 8) /* return type must be BigInt */ +#define ATOD_DECIMAL_AFTER_SIGN (1 << 9) /* only accept decimal number after sign */ +#define ATOD_NO_TRAILING_CHARS (1 << 10) /* do not accept trailing characters */ + +static JSValue js_atof(JSContext *ctx, const char *p, size_t len, + const char **pp, int radix, int flags) { - const char *p, *p_start; - int sep, is_neg; - BOOL is_float, has_legacy_octal; - int atod_type = flags & ATOD_TYPE_MASK; - char buf1[64], *buf; - int i, j, len; - BOOL buf_allocated = FALSE; - JSValue val; + const char *p_start; + const char *end = p + len; + int sep; + BOOL is_float; + char buf1[64], *buf = buf1; + size_t i, j; + JSValue val = JS_NAN; + double d; + char sign; + + if (radix < 2 || radix > 36) + goto done; /* optional separator between digits */ sep = (flags & ATOD_ACCEPT_UNDERSCORES) ? '_' : 256; - has_legacy_octal = FALSE; - - p = str; - p_start = p; - is_neg = 0; - if (p[0] == '+') { + sign = 0; + if (flags & ATOD_TRIM_SPACES) + p += skip_spaces(p); + if (p == end && (flags & ATOD_ACCEPT_EMPTY)) { + if (pp) *pp = p; + if (flags & ATOD_WANT_BIG_INT) + return JS_NewBigInt64(ctx, 0); + else + return js_int32(0); + } + if (*p == '+' || *p == '-') { + sign = *p; p++; - p_start++; - if (!(flags & ATOD_ACCEPT_PREFIX_AFTER_SIGN)) - goto no_radix_prefix; - } else if (p[0] == '-') { - p++; - p_start++; - is_neg = 1; - if (!(flags & ATOD_ACCEPT_PREFIX_AFTER_SIGN)) - goto no_radix_prefix; + if (flags & ATOD_DECIMAL_AFTER_SIGN) + flags &= ~(ATOD_ACCEPT_HEX_PREFIX | ATOD_ACCEPT_BIN_OCT); } if (p[0] == '0') { if ((p[1] == 'x' || p[1] == 'X') && - (radix == 0 || radix == 16)) { + ((flags & ATOD_ACCEPT_HEX_PREFIX) || radix == 16)) { p += 2; radix = 16; - } else if ((p[1] == 'o' || p[1] == 'O') && - radix == 0 && (flags & ATOD_ACCEPT_BIN_OCT)) { - p += 2; - radix = 8; - } else if ((p[1] == 'b' || p[1] == 'B') && - radix == 0 && (flags & ATOD_ACCEPT_BIN_OCT)) { - p += 2; - radix = 2; - } else if ((p[1] >= '0' && p[1] <= '9') && - radix == 0 && (flags & ATOD_ACCEPT_LEGACY_OCTAL)) { - int i; - has_legacy_octal = TRUE; - sep = 256; - for (i = 1; (p[i] >= '0' && p[i] <= '7'); i++) - continue; - if (p[i] == '8' || p[i] == '9') - goto no_prefix; - p += 1; - radix = 8; - } else { - goto no_prefix; + } else if (flags & ATOD_ACCEPT_BIN_OCT) { + if (p[1] == 'o' || p[1] == 'O') { + p += 2; + radix = 8; + } else if (p[1] == 'b' || p[1] == 'B') { + p += 2; + radix = 2; + } } - /* there must be a digit after the prefix */ - if (to_digit((uint8_t)*p) >= radix) - goto fail; - no_prefix: ; } else { - no_radix_prefix: - if (!(flags & ATOD_INT_ONLY) && - atod_type == ATOD_TYPE_FLOAT64 && - strstart(p, "Infinity", &p)) { - double d = INF; - if (is_neg) + if (*p == 'I' && (flags & ATOD_ACCEPT_INFINITY) && strstart(p, "Infinity", &p)) { + d = INF; + if (sign == '-') d = -d; val = js_float64(d); goto done; } } - if (radix == 0) - radix = 10; is_float = FALSE; p_start = p; - while (to_digit((uint8_t)*p) < radix - || (*p == sep && (radix != 10 || - p != p_start + 1 || p[-1] != '0') && - to_digit((uint8_t)p[1]) < radix)) { + while (to_digit(*p) < radix) { p++; + if (*p == sep && to_digit(p[1]) < radix) + p++; } - if (!(flags & ATOD_INT_ONLY) && radix == 10) { - if (*p == '.' && (p > p_start || to_digit((uint8_t)p[1]) < radix)) { + if ((flags & ATOD_ACCEPT_FLOAT) && radix == 10) { + if (*p == '.' && (p > p_start || to_digit(p[1]) < radix)) { is_float = TRUE; p++; - if (*p == sep) - goto fail; - while (to_digit((uint8_t)*p) < radix || - (*p == sep && to_digit((uint8_t)p[1]) < radix)) + while (to_digit(*p) < radix) { p++; + if (*p == sep && to_digit(p[1]) < radix) + p++; + } } if (p > p_start && (*p == 'e' || *p == 'E')) { - const char *p1 = p + 1; - is_float = TRUE; - if (*p1 == '+') { - p1++; - } else if (*p1 == '-') { - p1++; + i = 1; + if (p[1] == '+' || p[1] == '-') { + i++; } - if (is_digit((uint8_t)*p1)) { - p = p1 + 1; - while (is_digit((uint8_t)*p) || (*p == sep && is_digit((uint8_t)p[1]))) + if (is_digit(p[i])) { + is_float = TRUE; + p += i + 1; + while (is_digit(*p) || (*p == sep && is_digit(p[1]))) p++; } } } if (p == p_start) - goto fail; + goto done; - buf = buf1; - buf_allocated = FALSE; len = p - p_start; if (unlikely((len + 2) > sizeof(buf1))) { buf = js_malloc_rt(ctx->rt, len + 2); /* no exception raised */ - if (!buf) - goto mem_error; - buf_allocated = TRUE; + if (!buf) { + if (pp) *pp = p; + return JS_ThrowOutOfMemory(ctx); + } } - /* remove the separators and the radix prefixes */ + /* remove the separators and the radix prefix */ j = 0; - if (is_neg) + if (sign == '-') buf[j++] = '-'; for (i = 0; i < len; i++) { if (p_start[i] != '_') @@ -10371,46 +10353,31 @@ static JSValue js_atof2(JSContext *ctx, const char *str, const char **pp, if (flags & ATOD_ACCEPT_SUFFIX) { if (*p == 'n') { p++; - atod_type = ATOD_TYPE_BIG_INT; + flags |= ATOD_WANT_BIG_INT; } } - switch(atod_type) { - case ATOD_TYPE_FLOAT64: - { - double d; - d = js_strtod(buf, radix, is_float); - /* return int or float64 */ - val = js_number(d); - } - break; - case ATOD_TYPE_BIG_INT: - if (has_legacy_octal || is_float) - goto fail; - val = js_string_to_bigint(ctx, buf, radix, flags, NULL); - break; - default: - abort(); + if (flags & ATOD_WANT_BIG_INT) { + if (!is_float) + val = js_string_to_bigint(ctx, buf, radix); + } else { + d = js_strtod(buf, radix, is_float); + val = js_number(d); /* return int or float64 */ } -done: - if (buf_allocated) + done: + if (flags & ATOD_NO_TRAILING_CHARS) { + if (flags & ATOD_TRIM_SPACES) + p += skip_spaces(p); + if (p != end) { + JS_FreeValue(ctx, val); + val = JS_NAN; + } + } + if (buf != buf1) js_free_rt(ctx->rt, buf); - if (pp) - *pp = p; + if (pp) *pp = p; return val; - fail: - val = JS_NAN; - goto done; - mem_error: - val = JS_ThrowOutOfMemory(ctx); - goto done; -} - -static JSValue js_atof(JSContext *ctx, const char *str, const char **pp, - int radix, int flags) -{ - return js_atof2(ctx, str, pp, radix, flags, NULL); } typedef enum JSToNumberHintEnum { @@ -10454,28 +10421,18 @@ static JSValue JS_ToNumberHintFree(JSContext *ctx, JSValue val, case JS_TAG_STRING: { const char *str; - const char *p; size_t len; + int flags; str = JS_ToCStringLen(ctx, &len, val); JS_FreeValue(ctx, val); if (!str) return JS_EXCEPTION; - p = str; - p += skip_spaces(p); - if ((p - str) == len) { - ret = js_int32(0); - } else { - int flags = ATOD_ACCEPT_BIN_OCT; - ret = js_atof(ctx, p, &p, 0, flags); - if (!JS_IsException(ret)) { - p += skip_spaces(p); - if ((p - str) != len) { - JS_FreeValue(ctx, ret); - ret = JS_NAN; - } - } - } + flags = ATOD_TRIM_SPACES | ATOD_ACCEPT_EMPTY | + ATOD_ACCEPT_FLOAT | ATOD_ACCEPT_INFINITY | + ATOD_ACCEPT_HEX_PREFIX | ATOD_ACCEPT_BIN_OCT | + ATOD_DECIMAL_AFTER_SIGN | ATOD_NO_TRAILING_CHARS; + ret = js_atof(ctx, str, len, NULL, 10, flags); JS_FreeCString(ctx, str); } break; @@ -11059,6 +11016,7 @@ static JSValue js_bigint_to_string1(JSContext *ctx, JSValue val, int radix) bf_t a_s, *a; char *str; int saved_sign; + size_t len; a = JS_ToBigInt(ctx, &a_s, val); if (!a) @@ -11066,14 +11024,13 @@ static JSValue js_bigint_to_string1(JSContext *ctx, JSValue val, int radix) saved_sign = a->sign; if (a->expn == BF_EXP_ZERO) a->sign = 0; - // TODO(chqrlie) bf_ftoa should return the string length to the caller - str = bf_ftoa(NULL, a, radix, 0, BF_RNDZ | BF_FTOA_FORMAT_FRAC | + str = bf_ftoa(&len, a, radix, 0, BF_RNDZ | BF_FTOA_FORMAT_FRAC | BF_FTOA_JS_QUIRKS); a->sign = saved_sign; JS_FreeBigInt(ctx, a, &a_s); if (!str) return JS_ThrowOutOfMemory(ctx); - ret = js_new_string8(ctx, str); + ret = js_new_string8_len(ctx, str, len); bf_free(ctx->bf_ctx, str); return ret; } @@ -11083,262 +11040,354 @@ static JSValue js_bigint_to_string(JSContext *ctx, JSValue val) return js_bigint_to_string1(ctx, val, 10); } -/* buf1 contains the printf result */ -static void js_ecvt1(double d, int n_digits, int *decpt, int *sign, char *buf, - int rounding_mode, char *buf1, int buf1_size) +/*---- floating point number to string conversions ----*/ + +/* JavaScript rounding is specified as round to nearest tie away + from zero (RNDNA), but in `printf` the "ties" case is not + specified (in most cases it is RNDN, round to nearest, tie to even), + so we must round manually. We generate 2 extra places and make + an extra call to snprintf if these are exactly '50'. + We set the current rounding mode to FE_DOWNWARD to check if the + last 2 places become '49'. If not, we must round up, which is + performed in place using the string digits. + + Note that we cannot rely on snprintf for rounding up: + the code below fails on macOS for `0.5.toFixed(0)`: gives `0` expected `1` + fesetround(FE_UPWARD); + snprintf(dest, size, "%.*f", n_digits, d); + fesetround(FE_TONEAREST); + */ + +/* `js_fcvt` minimum buffer length: + - up to 21 digits in integral part + - 1 potential decimal point + - up to 102 decimals + - 1 null terminator + */ +#define JS_FCVT_BUF_SIZE (21+1+102+1) + +/* `js_ecvt` minimum buffer length: + - 1 leading digit + - 1 potential decimal point + - up to 102 decimals + - 5 exponent characters (from 'e-324' to 'e+308') + - 1 null terminator + */ +#define JS_ECVT_BUF_SIZE (1+1+102+5+1) + +/* `js_dtoa` minimum buffer length: + - 8 byte prefix + - either JS_FCVT_BUF_SIZE or JS_ECVT_BUF_SIZE + - JS_FCVT_BUF_SIZE is larger than JS_ECVT_BUF_SIZE + */ +#define JS_DTOA_BUF_SIZE (8+JS_FCVT_BUF_SIZE) + +/* `js_ecvt1`: compute the digits and decimal point spot for a double + - `d` is finite, positive or zero + - `n_digits` number of significant digits in range 1..103 + - `buf` receives the printf result + - `buf` has a fixed format: n_digits with a decimal point at offset 1 + and exponent 'e{+/-}xx[x]' at offset n_digits+1 + Return n_digits + Store the position of the decimal point into `*decpt` + */ +static int js_ecvt1(double d, int n_digits, + char dest[minimum_length(JS_ECVT_BUF_SIZE)], + size_t size, int *decpt) { - if (rounding_mode != FE_TONEAREST) - fesetround(rounding_mode); - snprintf(buf1, buf1_size, "%+.*e", n_digits - 1, d); - if (rounding_mode != FE_TONEAREST) - fesetround(FE_TONEAREST); - *sign = (buf1[0] == '-'); - /* mantissa */ - buf[0] = buf1[1]; - if (n_digits > 1) - memcpy(buf + 1, buf1 + 3, n_digits - 1); - buf[n_digits] = '\0'; - /* exponent */ - *decpt = atoi(buf1 + n_digits + 2 + (n_digits > 1)) + 1; -} - -/* maximum buffer size for js_dtoa */ -#define JS_DTOA_BUF_SIZE 128 - -/* needed because ecvt usually limits the number of digits to - 17. Return the number of digits. */ -static int js_ecvt(double d, int n_digits, int *decpt, int *sign, char *buf, - BOOL is_fixed) -{ - int rounding_mode; - char buf_tmp[JS_DTOA_BUF_SIZE]; - - if (!is_fixed) { - unsigned int n_digits_min, n_digits_max; - /* find the minimum amount of digits (XXX: inefficient but simple) */ - n_digits_min = 1; - n_digits_max = 17; - while (n_digits_min < n_digits_max) { - n_digits = (n_digits_min + n_digits_max) / 2; - js_ecvt1(d, n_digits, decpt, sign, buf, FE_TONEAREST, - buf_tmp, sizeof(buf_tmp)); - if (strtod(buf_tmp, NULL) == d) { - /* no need to keep the trailing zeros */ - while (n_digits >= 2 && buf[n_digits - 1] == '0') - n_digits--; - n_digits_max = n_digits; - } else { - n_digits_min = n_digits + 1; - } - } - n_digits = n_digits_max; - rounding_mode = FE_TONEAREST; - } else { - rounding_mode = FE_TONEAREST; -#ifdef CONFIG_PRINTF_RNDN - { - char buf1[JS_DTOA_BUF_SIZE], buf2[JS_DTOA_BUF_SIZE]; - int decpt1, sign1, decpt2, sign2; - /* The JS rounding is specified as round to nearest ties away - from zero (RNDNA), but in printf the "ties" case is not - specified (for example it is RNDN for glibc, RNDNA for - Windows), so we must round manually. */ - js_ecvt1(d, n_digits + 1, &decpt1, &sign1, buf1, FE_TONEAREST, - buf_tmp, sizeof(buf_tmp)); - /* XXX: could use 2 digits to reduce the average running time */ - if (buf1[n_digits] == '5') { - js_ecvt1(d, n_digits + 1, &decpt1, &sign1, buf1, FE_DOWNWARD, - buf_tmp, sizeof(buf_tmp)); - js_ecvt1(d, n_digits + 1, &decpt2, &sign2, buf2, FE_UPWARD, - buf_tmp, sizeof(buf_tmp)); - if (memcmp(buf1, buf2, n_digits + 1) == 0 && decpt1 == decpt2) { - /* exact result: round away from zero */ - if (sign1) - rounding_mode = FE_DOWNWARD; - else - rounding_mode = FE_UPWARD; - } - } - } -#endif /* CONFIG_PRINTF_RNDN */ - } - js_ecvt1(d, n_digits, decpt, sign, buf, rounding_mode, - buf_tmp, sizeof(buf_tmp)); + /* d is positive, ensure decimal point is always present */ + snprintf(dest, size, "%#.*e", n_digits - 1, d); + /* dest contents: + 0: first digit + 1: '.' decimal point (locale specific) + 2..n_digits: (n_digits-1) additional digits + n_digits+1: 'e' exponent mark + n_digits+2..: exponent sign, value and null terminator + */ + /* extract the exponent (actually the position of the decimal point) */ + *decpt = 1 + atoi(dest + n_digits + 2); return n_digits; } -static size_t js_fcvt1(char (*buf)[JS_DTOA_BUF_SIZE], double d, int n_digits, - int rounding_mode) +/* `js_ecvt`: compute the digits and decimal point spot for a double + with proper javascript rounding. We cannot use `ecvt` for multiple + resasons: portability, because of the number of digits is typically + limited to 17, finally because the default rounding is inadequate. + `d` is finite and positive or zero. + `n_digits` number of significant digits in range 1..101 + or 0 for automatic (only as many digits as necessary) + Return the number of digits produced in `dest`. + Store the position of the decimal point into `*decpt` + */ +static int js_ecvt(double d, int n_digits, + char dest[minimum_length(JS_ECVT_BUF_SIZE)], + size_t size, int *decpt) { - size_t n; - if (rounding_mode != FE_TONEAREST) - fesetround(rounding_mode); - n = snprintf(*buf, sizeof(*buf), "%.*f", n_digits, d); - if (rounding_mode != FE_TONEAREST) - fesetround(FE_TONEAREST); - assert(n < sizeof(*buf)); - return n; -} + int i; -static size_t js_fcvt(char (*buf)[JS_DTOA_BUF_SIZE], double d, int n_digits) -{ - int rounding_mode; - rounding_mode = FE_TONEAREST; -#ifdef CONFIG_PRINTF_RNDN - { - int n1, n2; - char buf1[JS_DTOA_BUF_SIZE]; - char buf2[JS_DTOA_BUF_SIZE]; - - /* The JS rounding is specified as round to nearest ties away from - zero (RNDNA), but in printf the "ties" case is not specified - (for example it is RNDN for glibc, RNDNA for Windows), so we - must round manually. */ - n1 = js_fcvt1(&buf1, d, n_digits + 1, FE_TONEAREST); - rounding_mode = FE_TONEAREST; - /* XXX: could use 2 digits to reduce the average running time */ - if (buf1[n1 - 1] == '5') { - n1 = js_fcvt1(&buf1, d, n_digits + 1, FE_DOWNWARD); - n2 = js_fcvt1(&buf2, d, n_digits + 1, FE_UPWARD); - if (n1 == n2 && memcmp(buf1, buf2, n1) == 0) { - /* exact result: round away from zero */ - if (buf1[0] == '-') - rounding_mode = FE_DOWNWARD; - else - rounding_mode = FE_UPWARD; + if (n_digits == 0) { + /* find the minimum number of digits (XXX: inefficient but simple) */ + // TODO(chqrlie) use direct method from quickjs-printf + unsigned int n_digits_min = 1; + unsigned int n_digits_max = 17; + for (;;) { + n_digits = (n_digits_min + n_digits_max) / 2; + js_ecvt1(d, n_digits, dest, size, decpt); + if (n_digits_min == n_digits_max) + return n_digits; + /* dest contents: + 0: first digit + 1: '.' decimal point (locale specific) + 2..n_digits: (n_digits-1) additional digits + n_digits+1: 'e' exponent mark + n_digits+2..: exponent sign, value and null terminator + */ + if (strtod(dest, NULL) == d) { + unsigned int n0 = n_digits; + /* enough digits */ + /* strip the trailing zeros */ + while (dest[n_digits] == '0') + n_digits--; + if (n_digits == n_digits_min) + return n_digits; + /* done if trailing zeros and not denormal or huge */ + if (n_digits < n0 && d > 3e-308 && d < 8e307) + return n_digits; + n_digits_max = n_digits; + } else { + /* need at least one more digit */ + n_digits_min = n_digits + 1; } } - } -#endif /* CONFIG_PRINTF_RNDN */ - return js_fcvt1(buf, d, n_digits, rounding_mode); -} - -/* radix != 10 is only supported with flags = JS_DTOA_VAR_FORMAT */ -/* use as many digits as necessary */ -#define JS_DTOA_VAR_FORMAT (0 << 0) -/* use n_digits significant digits (1 <= n_digits <= 101) */ -#define JS_DTOA_FIXED_FORMAT (1 << 0) -/* force fractional format: [-]dd.dd with n_digits fractional digits */ -#define JS_DTOA_FRAC_FORMAT (2 << 0) -/* force exponential notation either in fixed or variable format */ -#define JS_DTOA_FORCE_EXP (1 << 2) - -/* XXX: slow and maybe not fully correct. Use libbf when it is fast enough. - XXX: radix != 10 is only supported for small integers -*/ -static size_t js_dtoa1(char (*buf)[JS_DTOA_BUF_SIZE], double d, - int radix, int n_digits, int flags) -{ - char *q; - - if (!isfinite(d)) { - if (isnan(d)) { - memcpy(*buf, "NaN", sizeof "NaN"); - return sizeof("NaN") - 1; - } else if (d < 0) { - memcpy(*buf, "-Infinity", sizeof "-Infinity"); - return sizeof("-Infinity") - 1; - } else { - memcpy(*buf, "Infinity", sizeof "Infinity"); - return sizeof("Infinity") - 1; - } - } else if (flags == JS_DTOA_VAR_FORMAT) { - int64_t i64; - char buf1[72], *ptr; - if (d > (double)MAX_SAFE_INTEGER || d < (double)-MAX_SAFE_INTEGER) - goto generic_conv; - i64 = (int64_t)d; - if (d != i64) - goto generic_conv; - /* fast path for integers */ - return i64toa_radix(*buf, i64, radix); } else { - if (d == 0.0) - d = 0.0; /* convert -0 to 0 */ - if (flags == JS_DTOA_FRAC_FORMAT) { - return js_fcvt(buf, d, n_digits); - } else { - char buf1[JS_DTOA_BUF_SIZE]; - int sign, decpt, k, n, i, p, n_max; - BOOL is_fixed; - generic_conv: - is_fixed = ((flags & 3) == JS_DTOA_FIXED_FORMAT); - if (is_fixed) { - n_max = n_digits; - } else { - n_max = 21; - } - /* the number has k digits (k >= 1) */ - k = js_ecvt(d, n_digits, &decpt, &sign, buf1, is_fixed); - n = decpt; /* d=10^(n-k)*(buf1) i.e. d= < x.yyyy 10^(n-1) */ - q = *buf; - if (sign) - *q++ = '-'; - if (flags & JS_DTOA_FORCE_EXP) - goto force_exp; - if (n >= 1 && n <= n_max) { - if (k <= n) { - memcpy(q, buf1, k); - q += k; - for(i = 0; i < (n - k); i++) - *q++ = '0'; - *q = '\0'; - } else { - /* k > n */ - memcpy(q, buf1, n); - q += n; - *q++ = '.'; - for(i = 0; i < (k - n); i++) - *q++ = buf1[n + i]; - *q = '\0'; - } - } else if (n >= -5 && n <= 0) { - *q++ = '0'; - *q++ = '.'; - for(i = 0; i < -n; i++) - *q++ = '0'; - memcpy(q, buf1, k); - q += k; - *q = '\0'; - } else { - force_exp: - /* exponential notation */ - *q++ = buf1[0]; - if (k > 1) { - *q++ = '.'; - for(i = 1; i < k; i++) - *q++ = buf1[i]; - } - *q++ = 'e'; - p = n - 1; - if (p >= 0) - *q++ = '+'; - q += snprintf(q, *buf + sizeof(*buf) - q, "%d", p); - } - return q - *buf; +#if defined(FE_DOWNWARD) && defined(FE_TONEAREST) + /* generate 2 extra digits: 99% chances to avoid 2 calls */ + js_ecvt1(d, n_digits + 2, dest, size, decpt); + if (dest[n_digits + 1] < '5') + return n_digits; /* truncate the 2 extra digits */ + if (dest[n_digits + 1] == '5' && dest[n_digits + 2] == '0') { + /* close to half-way: try rounding toward 0 */ + fesetround(FE_DOWNWARD); + js_ecvt1(d, n_digits + 2, dest, size, decpt); + fesetround(FE_TONEAREST); + if (dest[n_digits + 1] < '5') + return n_digits; /* truncate the 2 extra digits */ } + /* round up in the string */ + for(i = n_digits;; i--) { + /* ignore the locale specific decimal point */ + if (is_digit(dest[i])) { + if (dest[i]++ < '9') + break; + dest[i] = '0'; + if (i == 0) { + dest[0] = '1'; + (*decpt)++; + break; + } + } + } + return n_digits; /* truncate the 2 extra digits */ +#else + /* No disambiguation available, eg: __wasi__ targets */ + return js_ecvt1(d, n_digits, dest, size, decpt); +#endif } } -static JSValue js_dtoa(JSContext *ctx, - double d, int radix, int n_digits, int flags) +/* `js_fcvt`: convert a floating point value to %f format using RNDNA + `d` is finite and positive or zero. + `n_digits` number of decimal places in range 0..100 + Return the number of characters produced in `dest`. + */ +static size_t js_fcvt(double d, int n_digits, + char dest[minimum_length(JS_FCVT_BUF_SIZE)], size_t size) +{ +#if defined(FE_DOWNWARD) && defined(FE_TONEAREST) + int i, n1, n2; + /* generate 2 extra digits: 99% chances to avoid 2 calls */ + n1 = snprintf(dest, size, "%.*f", n_digits + 2, d) - 2; + if (dest[n1] >= '5') { + if (dest[n1] == '5' && dest[n1 + 1] == '0') { + /* close to half-way: try rounding toward 0 */ + fesetround(FE_DOWNWARD); + n1 = snprintf(dest, size, "%.*f", n_digits + 2, d) - 2; + fesetround(FE_TONEAREST); + } + if (dest[n1] >= '5') { /* number should be rounded up */ + /* d is either exactly half way or greater: round the string manually */ + for (i = n1 - 1;; i--) { + /* ignore the locale specific decimal point */ + if (is_digit(dest[i])) { + if (dest[i]++ < '9') + break; + dest[i] = '0'; + if (i == 0) { + dest[0] = '1'; + dest[n1] = '0'; + dest[n1 - n_digits - 1] = '0'; + dest[n1 - n_digits] = '.'; + n1++; + break; + } + } + } + } + } + /* truncate the extra 2 digits and the decimal point if !n_digits */ + n1 -= !n_digits; + //dest[n1] = '\0'; // optional + return n1; +#else + /* No disambiguation available, eg: __wasi__ targets */ + return snprintf(dest, size, "%.*f", n_digits, d); +#endif +} + +static JSValue js_dtoa_infinite(JSContext *ctx, double d) +{ + // TODO(chqrlie) use atoms for NaN and Infinite? + if (isnan(d)) + return js_new_string8(ctx, "NaN"); + if (d < 0) + return js_new_string8(ctx, "-Infinity"); + else + return js_new_string8(ctx, "Infinity"); +} + +#define JS_DTOA_TOSTRING 0 /* use as many digits as necessary */ +#define JS_DTOA_EXPONENTIAL 1 /* use exponential notation either fixed or variable digits */ +#define JS_DTOA_FIXED 2 /* force fixed number of fractional digits */ +#define JS_DTOA_PRECISION 3 /* use n_digits significant digits (1 <= n_digits <= 101) */ + +/* `js_dtoa`: convert a floating point number to a string + - `mode`: one of the 4 supported formats + - `n_digits`: digit number according to mode + - TOSTRING: 0 only. As many digits as necessary + - EXPONENTIAL: 0 as many decimals as necessary + - 1..101 number of significant digits + - FIXED: 0..100 number of decimal places + - PRECISION: 1..101 number of significant digits + */ +// XXX: should use libbf or quickjs-printf. +static JSValue js_dtoa(JSContext *ctx, double d, int n_digits, int mode) { char buf[JS_DTOA_BUF_SIZE]; - size_t len = js_dtoa1(&buf, d, radix, n_digits, flags); - return js_new_string8_len(ctx, buf, len); + size_t len; + char *start; + int sign, decpt, exp, i, k, n, n_max; + + if (!isfinite(d)) + return js_dtoa_infinite(ctx, d); + + sign = (d < 0); + start = buf + 8; + d = fabs(d); /* also converts -0 to 0 */ + + if (mode != JS_DTOA_EXPONENTIAL && n_digits == 0) { + /* fast path for exact integers in variable format: + clip to MAX_SAFE_INTEGER because to ensure insignificant + digits are generated as 0. + used for JS_DTOA_TOSTRING and JS_DTOA_FIXED without decimals. + */ + if (d <= (double)MAX_SAFE_INTEGER) { + uint64_t u64 = (uint64_t)d; + if (d == u64) { + len = u64toa(start, u64); + goto done; + } + } + } + if (mode == JS_DTOA_FIXED) { + len = js_fcvt(d, n_digits, start, sizeof(buf) - 8); + // TODO(chqrlie) patch the locale specific decimal point + goto done; + } + + n_max = (n_digits > 0) ? n_digits : 21; + /* the number has k digits (1 <= k <= n_max) */ + k = js_ecvt(d, n_digits, start, sizeof(buf) - 8, &decpt); + /* buffer contents: + 0: first digit + 1: '.' decimal point + 2..k: (k-1) additional digits + */ + n = decpt; /* d=10^(n-k)*(buf1) i.e. d= < x.yyyy 10^(n-1) */ + if (mode != JS_DTOA_EXPONENTIAL) { + /* mode is JS_DTOA_PRECISION or JS_DTOA_TOSTRING */ + if (n >= 1 && n <= n_max) { + /* between 1 and n_max digits before the decimal point */ + if (k <= n) { + /* all digits before the point, append zeros */ + start[1] = start[0]; + start++; + for(i = k; i < n; i++) + start[i] = '0'; + len = n; + } else { + /* k > n: move digits before the point */ + for(i = 1; i < n; i++) + start[i] = start[i + 1]; + start[i] = '.'; + len = 1 + k; + } + goto done; + } + if (n >= -5 && n <= 0) { + /* insert -n leading 0 decimals and a '0.' prefix */ + n = -n; + start[1] = start[0]; + start -= n + 1; + start[0] = '0'; + start[1] = '.'; + for(i = 0; i < n; i++) + start[2 + i] = '0'; + len = 2 + k + n; + goto done; + } + } + /* exponential notation */ + exp = n - 1; + /* count the digits and the decimal point if at least one decimal */ + len = k + (k > 1); + start[1] = '.'; /* patch the locale specific decimal point */ + start[len] = 'e'; + start[len + 1] = '+'; + if (exp < 0) { + start[len + 1] = '-'; + exp = -exp; + } + len += 2 + 1 + (exp > 9) + (exp > 99); + for (i = len - 1; exp > 9;) { + int quo = exp / 10; + start[i--] = (char)('0' + exp % 10); + exp = quo; + } + start[i] = (char)('0' + exp); + + done: + start[-1] = '-'; /* prepend the sign if negative */ + return js_new_string8_len(ctx, start - sign, len + sign); } -/* d is guaranteed to be finite */ +/* `js_dtoa_radix`: convert a floating point number using a specific base + - `d` must be finite + - `radix` must be in range 2..36 + */ static JSValue js_dtoa_radix(JSContext *ctx, double d, int radix) { char buf[2200], *ptr, *ptr2, *ptr3; - /* d is finite */ - int sign = d < 0; - int digit; + int sign, digit; double frac, d0; - int64_t n0 = 0; + int64_t n0; + + if (!isfinite(d)) + return js_dtoa_infinite(ctx, d); + + sign = (d < 0); d = fabs(d); d0 = trunc(d); + n0 = 0; frac = d - d0; ptr2 = buf + 1100; /* ptr2 points to the end of the string */ ptr = ptr2; /* ptr points to the beginning of the string */ @@ -11402,7 +11451,7 @@ static JSValue js_dtoa_radix(JSContext *ctx, double d, int radix) ptr2[-1] = (ptr2[-1] == '9') ? 'a' : ptr2[-1] + 1; } } else { - /* strip trailing fractional zeroes */ + /* strip trailing fractional zeros */ while (ptr2[-1] == '0') ptr2--; /* strip the 'decimal' point if last */ @@ -11458,8 +11507,7 @@ JSValue JS_ToStringInternal(JSContext *ctx, JSValue val, BOOL is_ToPropertyKey) return JS_ThrowTypeError(ctx, "cannot convert symbol to string"); } case JS_TAG_FLOAT64: - return js_dtoa(ctx, JS_VALUE_GET_FLOAT64(val), 10, 0, - JS_DTOA_VAR_FORMAT); + return js_dtoa(ctx, JS_VALUE_GET_FLOAT64(val), 0, JS_DTOA_TOSTRING); case JS_TAG_BIG_INT: return js_bigint_to_string(ctx, val); default: @@ -11898,7 +11946,7 @@ static bf_t *JS_ToBigInt1(JSContext *ctx, bf_t *buf, JSValue val) /* return NaN if bad bigint literal */ static JSValue JS_StringToBigInt(JSContext *ctx, JSValue val) { - const char *str, *p; + const char *str; size_t len; int flags; @@ -11906,21 +11954,11 @@ static JSValue JS_StringToBigInt(JSContext *ctx, JSValue val) JS_FreeValue(ctx, val); if (!str) return JS_EXCEPTION; - p = str; - p += skip_spaces(p); - if ((p - str) == len) { - val = JS_NewBigInt64(ctx, 0); - } else { - flags = ATOD_INT_ONLY | ATOD_ACCEPT_BIN_OCT | ATOD_TYPE_BIG_INT; - val = js_atof(ctx, p, &p, 0, flags); - p += skip_spaces(p); - if (!JS_IsException(val)) { - if ((p - str) != len) { - JS_FreeValue(ctx, val); - val = JS_NAN; - } - } - } + flags = ATOD_WANT_BIG_INT | + ATOD_TRIM_SPACES | ATOD_ACCEPT_EMPTY | + ATOD_ACCEPT_HEX_PREFIX | ATOD_ACCEPT_BIN_OCT | + ATOD_DECIMAL_AFTER_SIGN | ATOD_NO_TRAILING_CHARS; + val = js_atof(ctx, str, len, NULL, 10, flags); JS_FreeCString(ctx, str); return val; } @@ -12041,6 +12079,11 @@ int JS_ToBigInt64(JSContext *ctx, int64_t *pres, JSValue val) return JS_ToBigInt64Free(ctx, pres, js_dup(val)); } +int JS_ToBigUint64(JSContext *ctx, uint64_t *pres, JSValue val) +{ + return JS_ToBigInt64Free(ctx, (int64_t *)pres, js_dup(val)); +} + static JSValue JS_NewBigInt(JSContext *ctx) { JSBigInt *p; @@ -18484,6 +18527,7 @@ typedef struct JSFunctionDef { int source_len; JSModuleDef *module; /* != NULL when parsing a module */ + BOOL has_await; /* TRUE if await is used (used in module eval) */ JSInlineCache *ic; /* inline cache for field op */ } JSFunctionDef; @@ -18499,7 +18543,6 @@ typedef struct JSToken { } str; struct { JSValue val; - slimb_t exponent; /* may be != 0 only if val is a float */ } num; struct { JSAtom atom; @@ -18729,6 +18772,7 @@ static int js_parse_error_reserved_identifier(JSParseState *s) static __exception int js_parse_template_part(JSParseState *s, const uint8_t *p) { + const uint8_t *p_next; uint32_t c; StringBuffer b_s, *b = &b_s; @@ -18766,9 +18810,8 @@ static __exception int js_parse_template_part(JSParseState *s, s->eol = &p[-1]; s->mark = p; } else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p - 1, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { + c = utf8_decode(p - 1, &p_next); + if (p_next == p) { js_parse_error(s, "invalid UTF-8 sequence"); goto fail; } @@ -18794,6 +18837,7 @@ static __exception int js_parse_string(JSParseState *s, int sep, BOOL do_throw, const uint8_t *p, JSToken *token, const uint8_t **pp) { + const uint8_t *p_next; int ret; uint32_t c; StringBuffer b_s, *b = &b_s; @@ -18872,9 +18916,8 @@ static __exception int js_parse_string(JSParseState *s, int sep, } goto fail; } else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { + c = utf8_decode(p, &p_next); + if (p_next == p + 1) { goto invalid_utf8; } p = p_next; @@ -18899,9 +18942,8 @@ static __exception int js_parse_string(JSParseState *s, int sep, break; } } else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p - 1, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) + c = utf8_decode(p - 1, &p_next); + if (p_next == p) goto invalid_utf8; p = p_next; } @@ -18933,7 +18975,7 @@ static inline BOOL token_is_pseudo_keyword(JSParseState *s, JSAtom atom) { static __exception int js_parse_regexp(JSParseState *s) { - const uint8_t *p; + const uint8_t *p, *p_next; BOOL in_class; StringBuffer b_s, *b = &b_s; StringBuffer b2_s, *b2 = &b2_s; @@ -18972,9 +19014,8 @@ static __exception int js_parse_regexp(JSParseState *s) else if (c == '\0' && p >= s->buf_end) goto eof_error; else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p - 1, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { + c = utf8_decode(p - 1, &p_next); + if (p_next == p) { goto invalid_utf8; } p = p_next; @@ -18982,9 +19023,8 @@ static __exception int js_parse_regexp(JSParseState *s) goto eol_error; } } else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p - 1, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { + c = utf8_decode(p - 1, &p_next); + if (p_next == p) { invalid_utf8: js_parse_error(s, "invalid UTF-8 sequence"); goto fail; @@ -19003,14 +19043,8 @@ static __exception int js_parse_regexp(JSParseState *s) /* flags */ for(;;) { - const uint8_t *p_next = p; - c = *p_next++; - if (c >= 0x80) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { - goto invalid_utf8; - } - } + c = utf8_decode(p, &p_next); + /* no need to test for invalid UTF-8, 0xFFFD is not ident_next */ if (!lre_js_is_ident_next(c)) break; if (string_buffer_putc(b2, c)) @@ -19060,10 +19094,10 @@ static __exception int ident_realloc(JSContext *ctx, char **pbuf, size_t *psize, static JSAtom parse_ident(JSParseState *s, const uint8_t **pp, BOOL *pident_has_escape, int c, BOOL is_private) { - const uint8_t *p, *p1; + const uint8_t *p, *p_next; char ident_buf[128], *buf; size_t ident_size, ident_pos; - JSAtom atom; + JSAtom atom = JS_ATOM_NULL; p = *pp; buf = ident_buf; @@ -19072,28 +19106,26 @@ static JSAtom parse_ident(JSParseState *s, const uint8_t **pp, if (is_private) buf[ident_pos++] = '#'; for(;;) { - p1 = p; - - if (c < 128) { + if (c < 0x80) { buf[ident_pos++] = c; } else { - ident_pos += unicode_to_utf8((uint8_t*)buf + ident_pos, c); + ident_pos += utf8_encode((uint8_t*)buf + ident_pos, c); } - c = *p1++; - if (c == '\\' && *p1 == 'u') { - c = lre_parse_escape(&p1, TRUE); + c = *p; + p_next = p + 1; + if (c == '\\' && *p_next == 'u') { + c = lre_parse_escape(&p_next, TRUE); *pident_has_escape = TRUE; - } else if (c >= 128) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p1); + } else if (c >= 0x80) { + c = utf8_decode(p, &p_next); + /* no need to test for invalid UTF-8, 0xFFFD is not ident_next */ } if (!lre_js_is_ident_next(c)) break; - p = p1; + p = p_next; if (unlikely(ident_pos >= ident_size - UTF8_CHAR_LEN_MAX)) { - if (ident_realloc(s->ctx, &buf, &ident_size, ident_buf)) { - atom = JS_ATOM_NULL; + if (ident_realloc(s->ctx, &buf, &ident_size, ident_buf)) goto done; - } } } /* buf is pure ASCII or UTF-8 encoded */ @@ -19108,10 +19140,11 @@ static JSAtom parse_ident(JSParseState *s, const uint8_t **pp, static __exception int next_token(JSParseState *s) { - const uint8_t *p; + const uint8_t *p, *p_next; int c; BOOL ident_has_escape; JSAtom atom; + int flags, radix; if (js_check_stack_overflow(s->ctx->rt, 1000)) { JS_ThrowStackOverflow(s->ctx); @@ -19188,11 +19221,10 @@ static __exception int next_token(JSParseState *s) s->got_lf = TRUE; /* considered as LF for ASI */ p++; } else if (*p >= 0x80) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); + c = utf8_decode(p, &p); + /* ignore invalid UTF-8 in comments */ if (c == CP_LS || c == CP_PS) { s->got_lf = TRUE; /* considered as LF for ASI */ - } else if (c == -1) { - p++; /* skip invalid UTF-8 */ } } else { p++; @@ -19210,12 +19242,11 @@ static __exception int next_token(JSParseState *s) if (*p == '\r' || *p == '\n') break; if (*p >= 0x80) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); + c = utf8_decode(p, &p); + /* ignore invalid UTF-8 in comments */ /* LS or PS are considered as line terminator */ if (c == CP_LS || c == CP_PS) { break; - } else if (c == -1) { - p++; /* skip invalid UTF-8 */ } } else { p++; @@ -19305,20 +19336,21 @@ static __exception int next_token(JSParseState *s) case '#': /* private name */ { - const uint8_t *p1; p++; - p1 = p; - c = *p1++; - if (c == '\\' && *p1 == 'u') { - c = lre_parse_escape(&p1, TRUE); - } else if (c >= 128) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p1); + c = *p; + p_next = p + 1; + if (c == '\\' && *p_next == 'u') { + c = lre_parse_escape(&p_next, TRUE); + } else if (c >= 0x80) { + c = utf8_decode(p, &p_next); + if (p_next == p + 1) + goto invalid_utf8; } if (!lre_js_is_ident_first(c)) { js_parse_error(s, "invalid first character of private name"); goto fail; } - p = p1; + p = p_next; ident_has_escape = FALSE; /* not used */ atom = parse_ident(s, &p, &ident_has_escape, c, TRUE); if (atom == JS_ATOM_NULL) @@ -19334,37 +19366,56 @@ static __exception int next_token(JSParseState *s) break; } if (p[1] >= '0' && p[1] <= '9') { + flags = ATOD_ACCEPT_UNDERSCORES | ATOD_ACCEPT_FLOAT; + radix = 10; goto parse_number; - } else { - goto def_token; } - break; + goto def_token; case '0': - /* in strict mode, octal literals are not accepted */ - if (is_digit(p[1]) && (s->cur_func->js_mode & JS_MODE_STRICT)) { - js_parse_error(s, "octal literals are deprecated in strict mode"); + if (is_digit(p[1])) { /* handle legacy octal */ + if (s->cur_func->js_mode & JS_MODE_STRICT) { + js_parse_error(s, "Octal literals are not allowed in strict mode"); + goto fail; + } + /* Legacy octal: no separators, no suffix, no floats, + base 8 unless non octal digits are detected */ + flags = 0; + radix = 8; + while (is_digit(*p)) { + if (*p >= '8' && *p <= '9') + radix = 10; + p++; + } + p = s->token.ptr; + goto parse_number; + } + if (p[1] == '_') { + js_parse_error(s, "Numeric separator can not be used after leading 0"); goto fail; } + flags = ATOD_ACCEPT_HEX_PREFIX | ATOD_ACCEPT_BIN_OCT | + ATOD_ACCEPT_FLOAT | ATOD_ACCEPT_UNDERSCORES | ATOD_ACCEPT_SUFFIX; + radix = 10; goto parse_number; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': /* number */ - parse_number: { JSValue ret; - const uint8_t *p1; - int flags; - flags = ATOD_ACCEPT_BIN_OCT | ATOD_ACCEPT_LEGACY_OCTAL | - ATOD_ACCEPT_UNDERSCORES | ATOD_ACCEPT_SUFFIX; - s->token.u.num.exponent = 0; - ret = js_atof2(s->ctx, (const char *)p, (const char **)&p, 0, - flags, &s->token.u.num.exponent); + const char *p1; + + flags = ATOD_ACCEPT_FLOAT | ATOD_ACCEPT_UNDERSCORES | ATOD_ACCEPT_SUFFIX; + radix = 10; + parse_number: + p1 = (const char *)p; + ret = js_atof(s->ctx, p1, s->buf_end - p, &p1, radix, flags); + p = (const uint8_t *)p1; if (JS_IsException(ret)) goto fail; /* reject `10instanceof Number` */ if (JS_VALUE_IS_NAN(ret) || - lre_js_is_ident_next(unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p1))) { + lre_js_is_ident_next(utf8_decode(p, &p_next))) { JS_FreeValue(s->ctx, ret); js_parse_error(s, "invalid number literal"); goto fail; @@ -19556,9 +19607,11 @@ static __exception int next_token(JSParseState *s) } break; default: - if (c >= 128) { - /* unicode value */ - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); + if (c >= 0x80) { /* non-ASCII code-point */ + c = utf8_decode(p, &p_next); + if (p_next == p + 1) + goto invalid_utf8; + p = p_next; switch(c) { case CP_PS: case CP_LS: @@ -19589,6 +19642,8 @@ static __exception int next_token(JSParseState *s) // dump_token(s, &s->token); return 0; + invalid_utf8: + js_parse_error(s, "invalid UTF-8 sequence"); fail: s->token.val = TOK_ERROR; return -1; @@ -19613,7 +19668,7 @@ static int json_parse_error(JSParseState *s, const uint8_t *curp, const char *ms static int json_parse_string(JSParseState *s, const uint8_t **pp) { - const uint8_t *p = *pp; + const uint8_t *p, *p_next; int i; uint32_t c; StringBuffer b_s, *b = &b_s; @@ -19621,6 +19676,7 @@ static int json_parse_string(JSParseState *s, const uint8_t **pp) if (string_buffer_init(s->ctx, b, 32)) goto fail; + p = *pp; for(;;) { if (p >= s->buf_end) { goto end_of_input; @@ -19662,9 +19718,8 @@ static int json_parse_string(JSParseState *s, const uint8_t **pp) } } else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p - 1, s->buf_end - p, &p_next); - if (c > 0x10FFFF) { + c = utf8_decode(p - 1, &p_next); + if (p_next == p) { json_parse_error(s, p - 1, "Bad UTF-8 sequence"); goto fail; } @@ -19762,7 +19817,7 @@ static JSAtom json_parse_ident(JSParseState *s, const uint8_t **pp, int c) static __exception int json_next_token(JSParseState *s) { - const uint8_t *p; + const uint8_t *p, *p_next; int c; JSAtom atom; @@ -19866,10 +19921,9 @@ static __exception int json_next_token(JSParseState *s) goto fail; break; default: - if (c >= 128) { - const uint8_t *p_next; - c = unicode_from_utf8(p, s->buf_end - p, &p_next); - if (c == -1) { + if (c >= 0x80) { + c = utf8_decode(p, &p_next); + if (p_next == p + 1) { js_parse_error(s, "Unexpected token '\\x%02x' in JSON", *p); } else { if (c > 0xFFFF) { @@ -19991,12 +20045,10 @@ static void skip_shebang(const uint8_t **pp, const uint8_t *buf_end) if (*p == '\n' || *p == '\r') { break; } else if (*p >= 0x80) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); - if (c == CP_LS || c == CP_PS) { + c = utf8_decode(p, &p); + /* purposely ignore UTF-8 encoding errors in this comment line */ + if (c == CP_LS || c == CP_PS) break; - } else if (c == -1) { - p++; /* skip invalid UTF-8 */ - } } else { p++; } @@ -20877,7 +20929,7 @@ static int __exception js_parse_property_name(JSParseState *s, goto fail1; if (s->token.val == ':' || s->token.val == ',' || s->token.val == '}' || s->token.val == '(' || - s->token.val == '=' ) { + s->token.val == '=') { is_non_reserved_ident = TRUE; goto ident_found; } @@ -20893,7 +20945,8 @@ static int __exception js_parse_property_name(JSParseState *s, if (next_token(s)) goto fail1; if (s->token.val == ':' || s->token.val == ',' || - s->token.val == '}' || s->token.val == '(') { + s->token.val == '}' || s->token.val == '(' || + s->token.val == '=') { is_non_reserved_ident = TRUE; goto ident_found; } @@ -21649,7 +21702,12 @@ static __exception int js_parse_class(JSParseState *s, BOOL is_class_expr, goto fail; continue; } - is_static = (s->token.val == TOK_STATIC); + is_static = FALSE; + if (s->token.val == TOK_STATIC) { + int next = peek_token(s, TRUE); + if (!(next == ';' || next == '}' || next == '(' || next == '=')) + is_static = TRUE; + } prop_type = -1; if (is_static) { if (next_token(s)) @@ -23707,6 +23765,7 @@ static __exception int js_parse_unary(JSParseState *s, int parse_flags) return -1; if (js_parse_unary(s, PF_POW_FORBIDDEN)) return -1; + s->cur_func->has_await = TRUE; emit_op(s, OP_await); parse_flags = 0; break; @@ -25134,6 +25193,7 @@ static __exception int js_parse_statement_or_decl(JSParseState *s, is_async = TRUE; if (next_token(s)) goto fail; + s->cur_func->has_await = TRUE; } if (js_parse_expect(s, '(')) goto fail; @@ -25662,11 +25722,13 @@ static JSModuleDef *js_new_module_def(JSContext *ctx, JSAtom name) } m->header.ref_count = 1; m->module_name = name; - m->promise = JS_UNDEFINED; m->module_ns = JS_UNDEFINED; m->func_obj = JS_UNDEFINED; m->eval_exception = JS_UNDEFINED; m->meta_obj = JS_UNDEFINED; + m->promise = JS_UNDEFINED; + m->resolving_funcs[0] = JS_UNDEFINED; + m->resolving_funcs[1] = JS_UNDEFINED; list_add_tail(&m->link, &ctx->loaded_modules); return m; } @@ -25684,11 +25746,13 @@ static void js_mark_module_def(JSRuntime *rt, JSModuleDef *m, } } - JS_MarkValue(rt, m->promise, mark_func); JS_MarkValue(rt, m->module_ns, mark_func); JS_MarkValue(rt, m->func_obj, mark_func); JS_MarkValue(rt, m->eval_exception, mark_func); JS_MarkValue(rt, m->meta_obj, mark_func); + JS_MarkValue(rt, m->promise, mark_func); + JS_MarkValue(rt, m->resolving_funcs[0], mark_func); + JS_MarkValue(rt, m->resolving_funcs[1], mark_func); } static void js_free_module_def(JSContext *ctx, JSModuleDef *m) @@ -25719,12 +25783,15 @@ static void js_free_module_def(JSContext *ctx, JSModuleDef *m) JS_FreeAtom(ctx, mi->import_name); } js_free(ctx, m->import_entries); + js_free(ctx, m->async_parent_modules); - JS_FreeValue(ctx, m->promise); JS_FreeValue(ctx, m->module_ns); JS_FreeValue(ctx, m->func_obj); JS_FreeValue(ctx, m->eval_exception); JS_FreeValue(ctx, m->meta_obj); + JS_FreeValue(ctx, m->promise); + JS_FreeValue(ctx, m->resolving_funcs[0]); + JS_FreeValue(ctx, m->resolving_funcs[1]); list_del(&m->link); js_free(ctx, m); } @@ -26592,7 +26659,8 @@ static int js_create_module_function(JSContext *ctx, JSModuleDef *m) /* Prepare a module to be executed by resolving all the imported variables. */ -static int js_link_module(JSContext *ctx, JSModuleDef *m) +static int js_inner_module_linking(JSContext *ctx, JSModuleDef *m, + JSModuleDef **pstack_top, int index) { int i; JSImportEntry *mi; @@ -26602,21 +26670,47 @@ static int js_link_module(JSContext *ctx, JSModuleDef *m) BOOL is_c_module; JSValue ret_val; - if (m->instantiated) - return 0; - m->instantiated = TRUE; + if (js_check_stack_overflow(ctx->rt, 0)) { + JS_ThrowStackOverflow(ctx); + return -1; + } #ifdef DUMP_MODULE_RESOLVE if (check_dump_flag(ctx->rt, DUMP_MODULE_RESOLVE)) { char buf1[ATOM_GET_STR_BUF_SIZE]; - printf("start instantiating module '%s':\n", JS_AtomGetStr(ctx, buf1, sizeof(buf1), m->module_name)); + printf("js_inner_module_linking '%s':\n", JS_AtomGetStr(ctx, buf1, sizeof(buf1), m->module_name)); } #endif + if (m->status == JS_MODULE_STATUS_LINKING || + m->status == JS_MODULE_STATUS_LINKED || + m->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m->status == JS_MODULE_STATUS_EVALUATED) + return index; + + assert(m->status == JS_MODULE_STATUS_UNLINKED); + m->status = JS_MODULE_STATUS_LINKING; + m->dfs_index = index; + m->dfs_ancestor_index = index; + index++; + /* push 'm' on stack */ + m->stack_prev = *pstack_top; + *pstack_top = m; + for(i = 0; i < m->req_module_entries_count; i++) { JSReqModuleEntry *rme = &m->req_module_entries[i]; - if (js_link_module(ctx, rme->module) < 0) + m1 = rme->module; + index = js_inner_module_linking(ctx, m1, pstack_top, index); + if (index < 0) goto fail; + assert(m1->status == JS_MODULE_STATUS_LINKING || + m1->status == JS_MODULE_STATUS_LINKED || + m1->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m1->status == JS_MODULE_STATUS_EVALUATED); + if (m1->status == JS_MODULE_STATUS_LINKING) { + m->dfs_ancestor_index = min_int(m->dfs_ancestor_index, + m1->dfs_ancestor_index); + } } #ifdef DUMP_MODULE_RESOLVE @@ -26743,13 +26837,59 @@ static int js_link_module(JSContext *ctx, JSModuleDef *m) JS_FreeValue(ctx, ret_val); } - module_trace(ctx, "done instantiate\n"); + assert(m->dfs_ancestor_index <= m->dfs_index); + if (m->dfs_index == m->dfs_ancestor_index) { + for(;;) { + /* pop m1 from stack */ + m1 = *pstack_top; + *pstack_top = m1->stack_prev; + m1->status = JS_MODULE_STATUS_LINKED; + if (m1 == m) + break; + } + } - return 0; +#ifdef DUMP_MODULE_RESOLVE + printf("js_inner_module_linking done\n"); +#endif + return index; fail: return -1; } +/* Prepare a module to be executed by resolving all the imported + variables. */ +static int js_link_module(JSContext *ctx, JSModuleDef *m) +{ + JSModuleDef *stack_top, *m1; + +#ifdef DUMP_MODULE_RESOLVE + { + char buf1[ATOM_GET_STR_BUF_SIZE]; + printf("js_link_module '%s':\n", JS_AtomGetStr(ctx, buf1, sizeof(buf1), m->module_name)); + } +#endif + assert(m->status == JS_MODULE_STATUS_UNLINKED || + m->status == JS_MODULE_STATUS_LINKED || + m->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m->status == JS_MODULE_STATUS_EVALUATED); + stack_top = NULL; + if (js_inner_module_linking(ctx, m, &stack_top, 0) < 0) { + while (stack_top != NULL) { + m1 = stack_top; + assert(m1->status == JS_MODULE_STATUS_LINKING); + m1->status = JS_MODULE_STATUS_UNLINKED; + stack_top = m1->stack_prev; + } + return -1; + } + assert(stack_top == NULL); + assert(m->status == JS_MODULE_STATUS_LINKED || + m->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m->status == JS_MODULE_STATUS_EVALUATED); + return 0; +} + /* return JS_ATOM_NULL if the name cannot be found. Only works with not striped bytecode functions. */ JSAtom JS_GetScriptOrModuleName(JSContext *ctx, int n_stack_levels) @@ -26817,41 +26957,110 @@ static JSValue js_import_meta(JSContext *ctx) return JS_GetImportMeta(ctx, m); } -/* used by os.Worker() and import() */ -JSModuleDef *JS_RunModule(JSContext *ctx, const char *basename, - const char *filename) +static JSValue JS_NewModuleValue(JSContext *ctx, JSModuleDef *m) { + return JS_DupValue(ctx, JS_MKPTR(JS_TAG_MODULE, m)); +} + +static JSValue js_load_module_rejected(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv, int magic, JSValue *func_data) +{ + JSValueConst *resolving_funcs = (JSValueConst *)func_data; + JSValueConst error; + JSValue ret; + + /* XXX: check if the test is necessary */ + if (argc >= 1) + error = argv[0]; + else + error = JS_UNDEFINED; + ret = JS_Call(ctx, resolving_funcs[1], JS_UNDEFINED, + 1, &error); + JS_FreeValue(ctx, ret); + return JS_UNDEFINED; +} + +static JSValue js_load_module_fulfilled(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv, int magic, JSValue *func_data) +{ + JSValueConst *resolving_funcs = (JSValueConst *)func_data; + JSModuleDef *m = JS_VALUE_GET_PTR(func_data[2]); + JSValue ret, ns; + + /* return the module namespace */ + ns = JS_GetModuleNamespace(ctx, m); + if (JS_IsException(ns)) { + JSValue err = JS_GetException(ctx); + js_load_module_rejected(ctx, JS_UNDEFINED, 1, (JSValueConst *)&err, 0, func_data); + return JS_UNDEFINED; + } + ret = JS_Call(ctx, resolving_funcs[0], JS_UNDEFINED, + 1, (JSValueConst *)&ns); + JS_FreeValue(ctx, ret); + JS_FreeValue(ctx, ns); + return JS_UNDEFINED; +} + +static void JS_LoadModuleInternal(JSContext *ctx, const char *basename, + const char *filename, + JSValueConst *resolving_funcs) +{ + JSValue evaluate_promise; JSModuleDef *m; - JSValue ret, func_obj; + JSValue ret, err, func_obj, evaluate_resolving_funcs[2]; + JSValueConst func_data[3]; m = js_host_resolve_imported_module(ctx, basename, filename); if (!m) - return NULL; + goto fail; if (js_resolve_module(ctx, m) < 0) { js_free_modules(ctx, JS_FREE_MODULE_NOT_RESOLVED); - return NULL; + goto fail; } /* Evaluate the module code */ - func_obj = js_dup(JS_MKPTR(JS_TAG_MODULE, m)); - ret = JS_EvalFunction(ctx, func_obj); - if (JS_IsException(ret)) - return NULL; + func_obj = JS_NewModuleValue(ctx, m); + evaluate_promise = JS_EvalFunction(ctx, func_obj); + if (JS_IsException(evaluate_promise)) { + fail: + err = JS_GetException(ctx); + ret = JS_Call(ctx, resolving_funcs[1], JS_UNDEFINED, + 1, (JSValueConst *)&err); + JS_FreeValue(ctx, ret); /* XXX: what to do if exception ? */ + JS_FreeValue(ctx, err); + return; + } + + func_obj = JS_NewModuleValue(ctx, m); + func_data[0] = resolving_funcs[0]; + func_data[1] = resolving_funcs[1]; + func_data[2] = func_obj; + evaluate_resolving_funcs[0] = JS_NewCFunctionData(ctx, js_load_module_fulfilled, 0, 0, 3, func_data); + evaluate_resolving_funcs[1] = JS_NewCFunctionData(ctx, js_load_module_rejected, 0, 0, 3, func_data); + JS_FreeValue(ctx, func_obj); + ret = js_promise_then(ctx, evaluate_promise, 2, (JSValueConst *)evaluate_resolving_funcs); JS_FreeValue(ctx, ret); - return m; + JS_FreeValue(ctx, evaluate_resolving_funcs[0]); + JS_FreeValue(ctx, evaluate_resolving_funcs[1]); + JS_FreeValue(ctx, evaluate_promise); } -static JSValue js_dynamic_import_resolve(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic, JSValue *func_data) +/* Return a promise or an exception in case of memory error. Used by + os.Worker() */ +JSValue JS_LoadModule(JSContext *ctx, const char *basename, + const char *filename) { - return JS_Call(ctx, func_data[0], JS_UNDEFINED, 1, &func_data[2]); -} + JSValue promise, resolving_funcs[2]; -static JSValue js_dynamic_import_reject(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic, JSValue *func_data) -{ - return JS_Call(ctx, func_data[1], JS_UNDEFINED, 1, &argv[0]); + promise = JS_NewPromiseCapability(ctx, resolving_funcs); + if (JS_IsException(promise)) + return JS_EXCEPTION; + JS_LoadModuleInternal(ctx, basename, filename, + (JSValueConst *)resolving_funcs); + JS_FreeValue(ctx, resolving_funcs[0]); + JS_FreeValue(ctx, resolving_funcs[1]); + return promise; } static JSValue js_dynamic_import_job(JSContext *ctx, @@ -26862,7 +27071,7 @@ static JSValue js_dynamic_import_job(JSContext *ctx, JSValue specifier = argv[3]; JSModuleDef *m; const char *basename = NULL, *filename; - JSValue ret, err, ns; + JSValue ret, err; if (!JS_IsString(basename_val)) { JS_ThrowTypeError(ctx, "no function filename for import()"); @@ -26876,39 +27085,12 @@ static JSValue js_dynamic_import_job(JSContext *ctx, if (!filename) goto exception; - m = JS_RunModule(ctx, basename, filename); + JS_LoadModuleInternal(ctx, basename, filename, + resolving_funcs); JS_FreeCString(ctx, filename); - if (!m) - goto exception; - - /* return the module namespace */ - ns = JS_GetModuleNamespace(ctx, m); - if (JS_IsException(ns)) - goto exception; - - if (!JS_IsUndefined(m->promise)) { - JSValue args[] = {argv[0], argv[1], ns}; - JSValue funcs[2]; - funcs[0] = JS_NewCFunctionData(ctx, js_dynamic_import_resolve, 0, 0, 3, args); - funcs[1] = JS_NewCFunctionData(ctx, js_dynamic_import_reject, 0, 0, 3, args); - JS_FreeValue(ctx, js_promise_then(ctx, m->promise, 2, funcs)); - - JS_FreeValue(ctx, funcs[0]); - JS_FreeValue(ctx, funcs[1]); - JS_FreeValue(ctx, ns); - JS_FreeCString(ctx, basename); - - return JS_UNDEFINED; - } - - ret = JS_Call(ctx, resolving_funcs[0], JS_UNDEFINED, - 1, &ns); - JS_FreeValue(ctx, ret); /* XXX: what to do if exception ? */ - JS_FreeValue(ctx, ns); JS_FreeCString(ctx, basename); return JS_UNDEFINED; exception: - err = JS_GetException(ctx); ret = JS_Call(ctx, resolving_funcs[1], JS_UNDEFINED, 1, &err); @@ -26944,6 +27126,8 @@ static JSValue js_dynamic_import(JSContext *ctx, JSValue specifier) args[2] = basename_val; args[3] = specifier; + /* cannot run JS_LoadModuleInternal synchronously because it would + cause an unexpected recursion in js_evaluate_module() */ JS_EnqueueJob(ctx, js_dynamic_import_job, 4, args); JS_FreeValue(ctx, basename_val); @@ -26952,106 +27136,397 @@ static JSValue js_dynamic_import(JSContext *ctx, JSValue specifier) return promise; } -static JSValue js_async_function_call2(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic, JSValue *func_data) +static void js_set_module_evaluated(JSContext *ctx, JSModuleDef *m) { - return js_async_function_call(ctx, func_data[0], this_val, argc, argv, magic); + m->status = JS_MODULE_STATUS_EVALUATED; + if (!JS_IsUndefined(m->promise)) { + JSValue value, ret_val; + assert(m->cycle_root == m); + value = JS_UNDEFINED; + ret_val = JS_Call(ctx, m->resolving_funcs[0], JS_UNDEFINED, + 1, (JSValueConst *)&value); + JS_FreeValue(ctx, ret_val); + } } -/* Run the function of the module and of all its requested - modules. */ -static JSValue js_evaluate_module(JSContext *ctx, JSModuleDef *m) +typedef struct { + JSModuleDef **tab; + int count; + int size; +} ExecModuleList; + +/* XXX: slow. Could use a linked list instead of ExecModuleList */ +static BOOL find_in_exec_module_list(ExecModuleList *exec_list, JSModuleDef *m) +{ + int i; + for(i = 0; i < exec_list->count; i++) { + if (exec_list->tab[i] == m) + return TRUE; + } + return FALSE; +} + +static int gather_available_ancestors(JSContext *ctx, JSModuleDef *module, + ExecModuleList *exec_list) +{ + int i; + + if (js_check_stack_overflow(ctx->rt, 0)) { + JS_ThrowStackOverflow(ctx); + return -1; + } + for(i = 0; i < module->async_parent_modules_count; i++) { + JSModuleDef *m = module->async_parent_modules[i]; + if (!find_in_exec_module_list(exec_list, m) && + !m->cycle_root->eval_has_exception) { + assert(m->status == JS_MODULE_STATUS_EVALUATING_ASYNC); + assert(!m->eval_has_exception); + assert(m->async_evaluation); + assert(m->pending_async_dependencies > 0); + m->pending_async_dependencies--; + if (m->pending_async_dependencies == 0) { + if (js_resize_array(ctx, (void **)&exec_list->tab, sizeof(exec_list->tab[0]), &exec_list->size, exec_list->count + 1)) { + return -1; + } + exec_list->tab[exec_list->count++] = m; + if (!m->has_tla) { + if (gather_available_ancestors(ctx, m, exec_list)) + return -1; + } + } + } + } + return 0; +} + +static int exec_module_list_cmp(const void *p1, const void *p2, void *opaque) +{ + JSModuleDef *m1 = *(JSModuleDef **)p1; + JSModuleDef *m2 = *(JSModuleDef **)p2; + return (m1->async_evaluation_timestamp > m2->async_evaluation_timestamp) - + (m1->async_evaluation_timestamp < m2->async_evaluation_timestamp); +} + +static int js_execute_async_module(JSContext *ctx, JSModuleDef *m); +static int js_execute_sync_module(JSContext *ctx, JSModuleDef *m, + JSValue *pvalue); + +static JSValue js_async_module_execution_rejected(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv, int magic, JSValue *func_data) +{ + JSModuleDef *module = JS_VALUE_GET_PTR(func_data[0]); + JSValueConst error = argv[0]; + int i; + + if (js_check_stack_overflow(ctx->rt, 0)) + return JS_ThrowStackOverflow(ctx); + + if (module->status == JS_MODULE_STATUS_EVALUATED) { + assert(module->eval_has_exception); + return JS_UNDEFINED; + } + + assert(module->status == JS_MODULE_STATUS_EVALUATING_ASYNC); + assert(!module->eval_has_exception); + assert(module->async_evaluation); + + module->eval_has_exception = TRUE; + module->eval_exception = JS_DupValue(ctx, error); + module->status = JS_MODULE_STATUS_EVALUATED; + + for(i = 0; i < module->async_parent_modules_count; i++) { + JSModuleDef *m = module->async_parent_modules[i]; + JSValue m_obj = JS_NewModuleValue(ctx, m); + js_async_module_execution_rejected(ctx, JS_UNDEFINED, 1, &error, 0, + &m_obj); + JS_FreeValue(ctx, m_obj); + } + + if (!JS_IsUndefined(module->promise)) { + JSValue ret_val; + assert(module->cycle_root == module); + ret_val = JS_Call(ctx, module->resolving_funcs[1], JS_UNDEFINED, + 1, &error); + JS_FreeValue(ctx, ret_val); + } + return JS_UNDEFINED; +} + +static JSValue js_async_module_execution_fulfilled(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv, int magic, JSValue *func_data) +{ + JSModuleDef *module = JS_VALUE_GET_PTR(func_data[0]); + ExecModuleList exec_list_s, *exec_list = &exec_list_s; + int i; + + if (module->status == JS_MODULE_STATUS_EVALUATED) { + assert(module->eval_has_exception); + return JS_UNDEFINED; + } + assert(module->status == JS_MODULE_STATUS_EVALUATING_ASYNC); + assert(!module->eval_has_exception); + assert(module->async_evaluation); + module->async_evaluation = FALSE; + js_set_module_evaluated(ctx, module); + + exec_list->tab = NULL; + exec_list->count = 0; + exec_list->size = 0; + + if (gather_available_ancestors(ctx, module, exec_list) < 0) { + js_free(ctx, exec_list->tab); + return JS_EXCEPTION; + } + + /* sort by increasing async_evaluation timestamp */ + rqsort(exec_list->tab, exec_list->count, sizeof(exec_list->tab[0]), + exec_module_list_cmp, NULL); + + for(i = 0; i < exec_list->count; i++) { + JSModuleDef *m = exec_list->tab[i]; + if (m->status == JS_MODULE_STATUS_EVALUATED) { + assert(m->eval_has_exception); + } else if (m->has_tla) { + js_execute_async_module(ctx, m); + } else { + JSValue error; + if (js_execute_sync_module(ctx, m, &error) < 0) { + JSValue m_obj = JS_NewModuleValue(ctx, m); + js_async_module_execution_rejected(ctx, JS_UNDEFINED, + 1, (JSValueConst *)&error, 0, + &m_obj); + JS_FreeValue(ctx, m_obj); + JS_FreeValue(ctx, error); + } else { + js_set_module_evaluated(ctx, m); + } + } + } + js_free(ctx, exec_list->tab); + return JS_UNDEFINED; +} + +static int js_execute_async_module(JSContext *ctx, JSModuleDef *m) +{ + JSValue promise, m_obj; + JSValue resolve_funcs[2], ret_val; + promise = js_async_function_call(ctx, m->func_obj, JS_UNDEFINED, 0, NULL, 0); + if (JS_IsException(promise)) + return -1; + m_obj = JS_NewModuleValue(ctx, m); + resolve_funcs[0] = JS_NewCFunctionData(ctx, js_async_module_execution_fulfilled, 0, 0, 1, (JSValueConst *)&m_obj); + resolve_funcs[1] = JS_NewCFunctionData(ctx, js_async_module_execution_rejected, 0, 0, 1, (JSValueConst *)&m_obj); + ret_val = js_promise_then(ctx, promise, 2, (JSValueConst *)resolve_funcs); + JS_FreeValue(ctx, ret_val); + JS_FreeValue(ctx, m_obj); + JS_FreeValue(ctx, resolve_funcs[0]); + JS_FreeValue(ctx, resolve_funcs[1]); + JS_FreeValue(ctx, promise); + return 0; +} + +/* return < 0 in case of exception. *pvalue contains the exception. */ +static int js_execute_sync_module(JSContext *ctx, JSModuleDef *m, + JSValue *pvalue) +{ + if (m->init_func) { + /* C module init : no asynchronous execution */ + if (m->init_func(ctx, m) < 0) + goto fail; + } else { + JSValue promise; + JSPromiseStateEnum state; + + promise = js_async_function_call(ctx, m->func_obj, JS_UNDEFINED, 0, NULL, 0); + if (JS_IsException(promise)) + goto fail; + state = JS_PromiseState(ctx, promise); + if (state == JS_PROMISE_FULFILLED) { + JS_FreeValue(ctx, promise); + } else if (state == JS_PROMISE_REJECTED) { + *pvalue = JS_PromiseResult(ctx, promise); + JS_FreeValue(ctx, promise); + return -1; + } else { + JS_FreeValue(ctx, promise); + JS_ThrowTypeError(ctx, "promise is pending"); + fail: + *pvalue = JS_GetException(ctx); + return -1; + } + } + *pvalue = JS_UNDEFINED; + return 0; +} + +/* spec: InnerModuleEvaluation. Return (index, JS_UNDEFINED) or (-1, + exception) */ +static int js_inner_module_evaluation(JSContext *ctx, JSModuleDef *m, + int index, JSModuleDef **pstack_top, + JSValue *pvalue) { JSModuleDef *m1; int i; - JSValue ret_val; - if (m->eval_mark) - return JS_UNDEFINED; /* avoid cycles */ - - if (m->evaluated) { - /* if the module was already evaluated, rethrow the exception - it raised */ - if (m->eval_has_exception) { - return JS_Throw(ctx, js_dup(m->eval_exception)); - } else { - return js_dup(m->promise); - } + if (js_check_stack_overflow(ctx->rt, 0)) { + JS_ThrowStackOverflow(ctx); + *pvalue = JS_GetException(ctx); + return -1; } - m->eval_mark = TRUE; +#ifdef DUMP_MODULE_RESOLVE + { + char buf1[ATOM_GET_STR_BUF_SIZE]; + printf("js_inner_module_evaluation '%s':\n", JS_AtomGetStr(ctx, buf1, sizeof(buf1), m->module_name)); + } +#endif - JSValue promises = JS_NewArray(ctx); - if (JS_IsException(promises)) - return JS_EXCEPTION; + if (m->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m->status == JS_MODULE_STATUS_EVALUATED) { + if (m->eval_has_exception) { + *pvalue = JS_DupValue(ctx, m->eval_exception); + return -1; + } else { + *pvalue = JS_UNDEFINED; + return index; + } + } + if (m->status == JS_MODULE_STATUS_EVALUATING) { + *pvalue = JS_UNDEFINED; + return index; + } + assert(m->status == JS_MODULE_STATUS_LINKED); + + m->status = JS_MODULE_STATUS_EVALUATING; + m->dfs_index = index; + m->dfs_ancestor_index = index; + m->pending_async_dependencies = 0; + index++; + /* push 'm' on stack */ + m->stack_prev = *pstack_top; + *pstack_top = m; - BOOL async = FALSE; - JSValue promise = JS_UNDEFINED; for(i = 0; i < m->req_module_entries_count; i++) { JSReqModuleEntry *rme = &m->req_module_entries[i]; m1 = rme->module; - if (!m1->eval_mark) { - ret_val = js_evaluate_module(ctx, m1); - if (JS_IsException(ret_val)) { - m->eval_mark = FALSE; - js_free_modules(ctx, JS_FREE_MODULE_NOT_EVALUATED); - goto clean; + index = js_inner_module_evaluation(ctx, m1, index, pstack_top, pvalue); + if (index < 0) + return -1; + assert(m1->status == JS_MODULE_STATUS_EVALUATING || + m1->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m1->status == JS_MODULE_STATUS_EVALUATED); + if (m1->status == JS_MODULE_STATUS_EVALUATING) { + m->dfs_ancestor_index = min_int(m->dfs_ancestor_index, + m1->dfs_ancestor_index); + } else { + m1 = m1->cycle_root; + assert(m1->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m1->status == JS_MODULE_STATUS_EVALUATED); + if (m1->eval_has_exception) { + *pvalue = JS_DupValue(ctx, m1->eval_exception); + return -1; } - if (!JS_IsUndefined(ret_val)) { - js_array_push(ctx, promises, 1, &ret_val, 0); - JS_FreeValue(ctx, ret_val); - async = TRUE; + } + if (m1->async_evaluation) { + m->pending_async_dependencies++; + if (js_resize_array(ctx, (void **)&m1->async_parent_modules, sizeof(m1->async_parent_modules[0]), &m1->async_parent_modules_size, m1->async_parent_modules_count + 1)) { + *pvalue = JS_GetException(ctx); + return -1; } + m1->async_parent_modules[m1->async_parent_modules_count++] = m; } } - promise = js_promise_all(ctx, ctx->promise_ctor, 1, &promises, 0); - if (JS_IsException(promise)) { - JS_FreeValue(ctx, promises); - return JS_EXCEPTION; - } - - if (m->init_func) { - /* C module init */ - if (m->init_func(ctx, m) < 0) - ret_val = JS_EXCEPTION; - else - ret_val = JS_UNDEFINED; - } else if (!async) { - ret_val = js_async_function_call(ctx, m->func_obj, JS_UNDEFINED, 0, NULL, 0); - JS_FreeValue(ctx, m->func_obj); - m->func_obj = JS_UNDEFINED; - JSPromiseData *s = JS_GetOpaque(ret_val, JS_CLASS_PROMISE); - if (s->promise_state != JS_PROMISE_PENDING) { - JSValue ret_val2 = ret_val; - if (s->promise_state == JS_PROMISE_REJECTED) - ret_val = JS_Throw(ctx, js_dup(s->promise_result)); - else - ret_val = js_dup(s->promise_result); - JS_FreeValue(ctx, ret_val2); - } + if (m->pending_async_dependencies > 0) { + assert(!m->async_evaluation); + m->async_evaluation = TRUE; + m->async_evaluation_timestamp = + ctx->rt->module_async_evaluation_next_timestamp++; + } else if (m->has_tla) { + assert(!m->async_evaluation); + m->async_evaluation = TRUE; + m->async_evaluation_timestamp = + ctx->rt->module_async_evaluation_next_timestamp++; + js_execute_async_module(ctx, m); } else { - JSValue funcs[2]; - funcs[0] = JS_NewCFunctionData(ctx, js_async_function_call2, 0, 0, 1, &m->func_obj); - funcs[1] = JS_UNDEFINED; - ret_val = js_promise_then(ctx, promise, 2, funcs); - JS_FreeValue(ctx, funcs[0]); - JS_FreeValue(ctx, m->func_obj); - m->func_obj = JS_UNDEFINED; + if (js_execute_sync_module(ctx, m, pvalue) < 0) + return -1; } - if (JS_IsException(ret_val)) { - /* save the thrown exception value */ - m->eval_has_exception = TRUE; - m->eval_exception = js_dup(ctx->rt->current_exception); - } else if (!JS_IsUndefined(ret_val)) { - m->promise = js_dup(ret_val); + + assert(m->dfs_ancestor_index <= m->dfs_index); + if (m->dfs_index == m->dfs_ancestor_index) { + for(;;) { + /* pop m1 from stack */ + m1 = *pstack_top; + *pstack_top = m1->stack_prev; + if (!m1->async_evaluation) { + m1->status = JS_MODULE_STATUS_EVALUATED; + } else { + m1->status = JS_MODULE_STATUS_EVALUATING_ASYNC; + } + /* spec bug: cycle_root must be assigned before the test */ + m1->cycle_root = m; + if (m1 == m) + break; + } } - m->eval_mark = FALSE; - m->evaluated = TRUE; -clean: - JS_FreeValue(ctx, promises); - JS_FreeValue(ctx, promise); - return ret_val; + *pvalue = JS_UNDEFINED; + return index; +} + +/* Run the function of the module and of all its requested + modules. Return a promise or an exception. */ +static JSValue js_evaluate_module(JSContext *ctx, JSModuleDef *m) +{ + JSModuleDef *m1, *stack_top; + JSValue ret_val, result; + + assert(m->status == JS_MODULE_STATUS_LINKED || + m->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m->status == JS_MODULE_STATUS_EVALUATED); + if (m->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m->status == JS_MODULE_STATUS_EVALUATED) { + m = m->cycle_root; + } + /* a promise may be created only on the cycle_root of a cycle */ + if (!JS_IsUndefined(m->promise)) + return JS_DupValue(ctx, m->promise); + m->promise = JS_NewPromiseCapability(ctx, m->resolving_funcs); + if (JS_IsException(m->promise)) + return JS_EXCEPTION; + + stack_top = NULL; + if (js_inner_module_evaluation(ctx, m, 0, &stack_top, &result) < 0) { + while (stack_top != NULL) { + m1 = stack_top; + assert(m1->status == JS_MODULE_STATUS_EVALUATING); + m1->status = JS_MODULE_STATUS_EVALUATED; + m1->eval_has_exception = TRUE; + m1->eval_exception = JS_DupValue(ctx, result); + m1->cycle_root = m; /* spec bug: should be present */ + stack_top = m1->stack_prev; + } + JS_FreeValue(ctx, result); + assert(m->status == JS_MODULE_STATUS_EVALUATED); + assert(m->eval_has_exception); + ret_val = JS_Call(ctx, m->resolving_funcs[1], JS_UNDEFINED, + 1, (JSValueConst *)&m->eval_exception); + JS_FreeValue(ctx, ret_val); + } else { + assert(m->status == JS_MODULE_STATUS_EVALUATING_ASYNC || + m->status == JS_MODULE_STATUS_EVALUATED); + assert(!m->eval_has_exception); + if (!m->async_evaluation) { + JSValue value; + assert(m->status == JS_MODULE_STATUS_EVALUATED); + value = JS_UNDEFINED; + ret_val = JS_Call(ctx, m->resolving_funcs[0], JS_UNDEFINED, + 1, (JSValueConst *)&value); + JS_FreeValue(ctx, ret_val); + } + assert(stack_top == NULL); + } + return JS_DupValue(ctx, m->promise); } static __exception JSAtom js_parse_from_clause(JSParseState *s) @@ -32297,10 +32772,22 @@ static __exception int js_parse_program(JSParseState *s) if (!s->is_module) { /* return the value of the hidden variable eval_ret_idx */ - emit_op(s, OP_get_loc); - emit_u16(s, fd->eval_ret_idx); + if (fd->func_kind == JS_FUNC_ASYNC) { + /* wrap the return value in an object so that promises can + be safely returned */ + emit_op(s, OP_object); + emit_op(s, OP_dup); - emit_op(s, OP_return); + emit_op(s, OP_get_loc); + emit_u16(s, fd->eval_ret_idx); + + emit_op(s, OP_put_field); + emit_atom(s, JS_ATOM_value); + } else { + emit_op(s, OP_get_loc); + emit_u16(s, fd->eval_ret_idx); + } + emit_return(s, TRUE); } else { emit_return(s, FALSE); } @@ -32349,7 +32836,6 @@ static JSValue JS_EvalFunctionInternal(JSContext *ctx, JSValue fun_obj, ret_val = js_evaluate_module(ctx, m); if (JS_IsException(ret_val)) { fail: - js_free_modules(ctx, JS_FREE_MODULE_NOT_EVALUATED); return JS_EXCEPTION; } } else { @@ -32414,10 +32900,6 @@ static JSValue __JS_EvalInternal(JSContext *ctx, JSValue this_obj, fd = js_new_function_def(ctx, NULL, TRUE, FALSE, filename, 1, 1); if (!fd) goto fail1; - if (m != NULL) { - fd->in_function_body = TRUE; - fd->func_kind = JS_FUNC_ASYNC; - } s->cur_func = fd; fd->eval_type = eval_type; fd->has_this_binding = (eval_type != JS_EVAL_TYPE_DIRECT); @@ -32440,6 +32922,10 @@ static JSValue __JS_EvalInternal(JSContext *ctx, JSValue this_obj, goto fail; } fd->module = m; + if (m != NULL || (flags & JS_EVAL_FLAG_ASYNC)) { + fd->in_function_body = TRUE; + fd->func_kind = JS_FUNC_ASYNC; + } s->is_module = (m != NULL); s->allow_html_comments = !s->is_module; @@ -32454,6 +32940,9 @@ static JSValue __JS_EvalInternal(JSContext *ctx, JSValue this_obj, goto fail1; } + if (m != NULL) + m->has_tla = fd->has_await; + /* create the function object and all the enclosed functions */ fun_obj = js_create_function(ctx, fd); if (JS_IsException(fun_obj)) @@ -32463,7 +32952,7 @@ static JSValue __JS_EvalInternal(JSContext *ctx, JSValue this_obj, m->func_obj = fun_obj; if (js_resolve_module(ctx, m) < 0) goto fail1; - fun_obj = js_dup(JS_MKPTR(JS_TAG_MODULE, m)); + fun_obj = JS_NewModuleValue(ctx, m); } if (flags & JS_EVAL_FLAG_COMPILE_ONLY) { ret_val = fun_obj; @@ -33159,6 +33648,8 @@ static int JS_WriteModule(BCWriterState *s, JSValue obj) bc_put_leb128(s, mi->req_module_idx); } + bc_put_u8(s, m->has_tla); + if (JS_WriteObjectRec(s, m->func_obj)) goto fail; return 0; @@ -34199,6 +34690,7 @@ static JSValue JS_ReadModule(BCReaderState *s) obj = js_dup(JS_MKPTR(JS_TAG_MODULE, m)); if (bc_get_leb128_int(s, &m->req_module_entries_count)) goto fail; + obj = JS_NewModuleValue(ctx, m); if (m->req_module_entries_count != 0) { m->req_module_entries_size = m->req_module_entries_count; m->req_module_entries = js_mallocz(ctx, sizeof(m->req_module_entries[0]) * m->req_module_entries_size); @@ -34269,6 +34761,10 @@ static JSValue JS_ReadModule(BCReaderState *s) } } + if (bc_get_u8(s, &v8)) + goto fail; + m->has_tla = (v8 != 0); + m->func_obj = JS_ReadObjectRec(s); if (JS_IsException(m->func_obj)) goto fail; @@ -39076,7 +39572,7 @@ static int js_get_radix(JSContext *ctx, JSValue val) if (JS_ToInt32Sat(ctx, &radix, val)) return -1; if (radix < 2 || radix > 36) { - JS_ThrowRangeError(ctx, "radix must be between 2 and 36"); + JS_ThrowRangeError(ctx, "toString() radix argument must be between 2 and 36"); return -1; } return radix; @@ -39101,22 +39597,21 @@ static JSValue js_number_toString(JSContext *ctx, JSValue this_val, base = 10; } else { base = js_get_radix(ctx, argv[0]); - if (base < 0) - goto fail; + if (base < 0) { + JS_FreeValue(ctx, val); + return JS_EXCEPTION; + } } if (JS_VALUE_GET_TAG(val) == JS_TAG_INT) { - size_t len = i64toa_radix(buf, JS_VALUE_GET_INT(val), base); + size_t len = i32toa_radix(buf, JS_VALUE_GET_INT(val), base); return js_new_string8_len(ctx, buf, len); } if (JS_ToFloat64Free(ctx, &d, val)) return JS_EXCEPTION; - if (base != 10 && isfinite(d)) { + if (base != 10) return js_dtoa_radix(ctx, d, base); - } - return js_dtoa(ctx, d, base, 0, JS_DTOA_VAR_FORMAT); - fail: - JS_FreeValue(ctx, val); - return JS_EXCEPTION; + + return js_dtoa(ctx, d, 0, JS_DTOA_TOSTRING); } static JSValue js_number_toFixed(JSContext *ctx, JSValue this_val, @@ -39134,13 +39629,13 @@ static JSValue js_number_toFixed(JSContext *ctx, JSValue this_val, if (JS_ToInt32Sat(ctx, &f, argv[0])) return JS_EXCEPTION; if (f < 0 || f > 100) { - return JS_ThrowRangeError(ctx, "%s() argument must be between 1 and 100", - "toFixed"); + return JS_ThrowRangeError(ctx, "toFixed() digits argument must be between 0 and 100"); } if (fabs(d) >= 1e21) { - return JS_ToStringFree(ctx, js_float64(d)); + // use ToString(d) + return js_dtoa(ctx, d, 0, JS_DTOA_TOSTRING); } else { - return js_dtoa(ctx, d, 10, f, JS_DTOA_FRAC_FORMAT); + return js_dtoa(ctx, d, f, JS_DTOA_FIXED); } } @@ -39148,8 +39643,8 @@ static JSValue js_number_toExponential(JSContext *ctx, JSValue this_val, int argc, JSValue *argv) { JSValue val; - int f, flags; double d; + int f; val = js_thisNumberValue(ctx, this_val); if (JS_IsException(val)) @@ -39158,21 +39653,15 @@ static JSValue js_number_toExponential(JSContext *ctx, JSValue this_val, return JS_EXCEPTION; if (JS_ToInt32Sat(ctx, &f, argv[0])) return JS_EXCEPTION; - if (!isfinite(d)) { - return JS_ToStringFree(ctx, js_float64(d)); - } - if (JS_IsUndefined(argv[0])) { - flags = 0; - f = 0; - } else { + if (!isfinite(d)) + return js_dtoa_infinite(ctx, d); + if (!JS_IsUndefined(argv[0])) { if (f < 0 || f > 100) { - return JS_ThrowRangeError(ctx, "%s() argument must be between 1 and 100", - "toExponential"); + return JS_ThrowRangeError(ctx, "toExponential() argument must be between 0 and 100"); } - f++; - flags = JS_DTOA_FIXED_FORMAT; + f += 1; /* number of significant digits between 1 and 101 */ } - return js_dtoa(ctx, d, 10, f, flags | JS_DTOA_FORCE_EXP); + return js_dtoa(ctx, d, f, JS_DTOA_EXPONENTIAL); } static JSValue js_number_toPrecision(JSContext *ctx, JSValue this_val, @@ -39188,18 +39677,15 @@ static JSValue js_number_toPrecision(JSContext *ctx, JSValue this_val, if (JS_ToFloat64Free(ctx, &d, val)) return JS_EXCEPTION; if (JS_IsUndefined(argv[0])) - goto to_string; + return js_dtoa(ctx, d, 0, JS_DTOA_TOSTRING); if (JS_ToInt32Sat(ctx, &p, argv[0])) return JS_EXCEPTION; - if (!isfinite(d)) { - to_string: - return JS_ToStringFree(ctx, js_float64(d)); - } + if (!isfinite(d)) + return js_dtoa_infinite(ctx, d); if (p < 1 || p > 100) { - return JS_ThrowRangeError(ctx, "%s() argument must be between 1 and 100", - "toPrecision"); + return JS_ThrowRangeError(ctx, "toPrecision() argument must be between 1 and 100"); } - return js_dtoa(ctx, d, 10, p, JS_DTOA_FIXED_FORMAT); + return js_dtoa(ctx, d, p, JS_DTOA_PRECISION); } static const JSCFunctionListEntry js_number_proto_funcs[] = { @@ -39214,25 +39700,24 @@ static const JSCFunctionListEntry js_number_proto_funcs[] = { static JSValue js_parseInt(JSContext *ctx, JSValue this_val, int argc, JSValue *argv) { - const char *str, *p; + const char *str; int radix, flags; JSValue ret; + size_t len; - str = JS_ToCString(ctx, argv[0]); + str = JS_ToCStringLen(ctx, &len, argv[0]); if (!str) return JS_EXCEPTION; if (JS_ToInt32(ctx, &radix, argv[1])) { JS_FreeCString(ctx, str); return JS_EXCEPTION; } - if (radix != 0 && (radix < 2 || radix > 36)) { - ret = JS_NAN; - } else { - p = str; - p += skip_spaces(p); - flags = ATOD_INT_ONLY | ATOD_ACCEPT_PREFIX_AFTER_SIGN; - ret = js_atof(ctx, p, NULL, radix, flags); + flags = ATOD_TRIM_SPACES; + if (radix == 0) { + flags |= ATOD_ACCEPT_HEX_PREFIX; // Only 0x and 0X are supported + radix = 10; } + ret = js_atof(ctx, str, len, NULL, radix, flags); JS_FreeCString(ctx, str); return ret; } @@ -39240,15 +39725,16 @@ static JSValue js_parseInt(JSContext *ctx, JSValue this_val, static JSValue js_parseFloat(JSContext *ctx, JSValue this_val, int argc, JSValue *argv) { - const char *str, *p; + const char *str; JSValue ret; + int flags; + size_t len; - str = JS_ToCString(ctx, argv[0]); + str = JS_ToCStringLen(ctx, &len, argv[0]); if (!str) return JS_EXCEPTION; - p = str; - p += skip_spaces(p); - ret = js_atof(ctx, p, NULL, 10, 0); + flags = ATOD_TRIM_SPACES | ATOD_ACCEPT_FLOAT | ATOD_ACCEPT_INFINITY; + ret = js_atof(ctx, str, len, NULL, 10, flags); JS_FreeCString(ctx, str); return ret; } @@ -45686,6 +46172,14 @@ static const JSCFunctionListEntry js_generator_proto_funcs[] = { /* Promise */ +typedef struct JSPromiseData { + JSPromiseStateEnum promise_state; + /* 0=fulfill, 1=reject, list of JSPromiseReactionData.link */ + struct list_head promise_reactions[2]; + BOOL is_handled; /* Note: only useful to debug */ + JSValue promise_result; +} JSPromiseData; + typedef struct JSPromiseFunctionDataResolved { int ref_count; BOOL already_resolved; @@ -45702,11 +46196,11 @@ typedef struct JSPromiseReactionData { JSValue handler; } JSPromiseReactionData; -JSPromiseStateEnum JS_PromiseState(JSContext *ctx, JSValue promise) + JSPromiseStateEnum JS_PromiseState(JSContext *ctx, JSValue promise) { JSPromiseData *s = JS_GetOpaque(promise, JS_CLASS_PROMISE); if (!s) - return JS_INVALID_PROMISE_STATE; + return -1; return s->promise_state; } @@ -45715,7 +46209,7 @@ JSValue JS_PromiseResult(JSContext *ctx, JSValue promise) JSPromiseData *s = JS_GetOpaque(promise, JS_CLASS_PROMISE); if (!s) return JS_UNDEFINED; - return js_dup(s->promise_result); + return JS_DupValue(ctx, s->promise_result); } static int js_create_resolving_functions(JSContext *ctx, JSValue *args, diff --git a/quickjs.h b/quickjs.h index 7e98628..38129ee 100644 --- a/quickjs.h +++ b/quickjs.h @@ -30,6 +30,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -182,7 +183,7 @@ typedef struct JSValue { #define JS_TAG_IS_FLOAT64(tag) ((unsigned)(tag) == JS_TAG_FLOAT64) -#define JS_NAN (JSValue){ .u.float64 = JS_FLOAT64_NAN, JS_TAG_FLOAT64 } +#define JS_NAN (JSValue){ (JSValueUnion){ .float64 = JS_FLOAT64_NAN }, JS_TAG_FLOAT64 } static inline JSValue __JS_NewFloat64(double d) { @@ -274,6 +275,9 @@ static inline JS_BOOL JS_VALUE_IS_NAN(JSValue v) #define JS_EVAL_FLAG_COMPILE_ONLY (1 << 5) /* don't include the stack frames before this eval in the Error() backtraces */ #define JS_EVAL_FLAG_BACKTRACE_BARRIER (1 << 6) +/* allow top-level await in normal script. JS_Eval() returns a + promise. Only allowed with JS_EVAL_TYPE_GLOBAL */ +#define JS_EVAL_FLAG_ASYNC (1 << 7) typedef JSValue JSCFunction(JSContext *ctx, JSValue this_val, int argc, JSValue *argv); typedef JSValue JSCFunctionMagic(JSContext *ctx, JSValue this_val, int argc, JSValue *argv, int magic); @@ -301,6 +305,7 @@ JS_EXTERN void JS_SetRuntimeInfo(JSRuntime *rt, const char *info); /* use 0 to disable memory limit */ JS_EXTERN void JS_SetMemoryLimit(JSRuntime *rt, size_t limit); JS_EXTERN void JS_SetDumpFlags(JSRuntime *rt, uint64_t flags); +JS_EXTERN size_t JS_GetGCThreshold(JSRuntime *rt); JS_EXTERN void JS_SetGCThreshold(JSRuntime *rt, size_t gc_threshold); JS_EXTERN size_t JS_GetGCThreshold(JSRuntime *rt); JS_EXTERN void JS_SetGCThresholdFixed(JSRuntime *rt, JS_BOOL fixed); @@ -505,9 +510,9 @@ static js_force_inline JSValue JS_NewInt64(JSContext *ctx, int64_t val) { JSValue v; if (val >= INT32_MIN && val <= INT32_MAX) { - v = JS_NewInt32(ctx, val); + v = JS_NewInt32(ctx, (int32_t)val); } else { - v = JS_NewFloat64(ctx, val); + v = JS_NewFloat64(ctx, (double)val); } return v; } @@ -516,9 +521,9 @@ static js_force_inline JSValue JS_NewUint32(JSContext *ctx, uint32_t val) { JSValue v; if (val <= 0x7fffffff) { - v = JS_NewInt32(ctx, val); + v = JS_NewInt32(ctx, (int32_t)val); } else { - v = JS_NewFloat64(ctx, val); + v = JS_NewFloat64(ctx, (double)val); } return v; } @@ -584,6 +589,7 @@ JS_EXTERN JSValue JS_GetException(JSContext *ctx); JS_EXTERN JS_BOOL JS_IsError(JSContext *ctx, JSValue val); JS_EXTERN void JS_ResetUncatchableError(JSContext *ctx); JS_EXTERN JSValue JS_NewError(JSContext *ctx); +JS_EXTERN JSValue __js_printf_like(2, 3) JS_ThrowPlainError(JSContext *ctx, const char *fmt, ...); JS_EXTERN JSValue __js_printf_like(2, 3) JS_ThrowSyntaxError(JSContext *ctx, const char *fmt, ...); JS_EXTERN JSValue __js_printf_like(2, 3) JS_ThrowTypeError(JSContext *ctx, const char *fmt, ...); JS_EXTERN JSValue __js_printf_like(2, 3) JS_ThrowReferenceError(JSContext *ctx, const char *fmt, ...); @@ -641,6 +647,7 @@ JS_EXTERN int JS_ToIndex(JSContext *ctx, uint64_t *plen, JSValue val); JS_EXTERN int JS_ToFloat64(JSContext *ctx, double *pres, JSValue val); /* return an exception if 'val' is a Number */ JS_EXTERN int JS_ToBigInt64(JSContext *ctx, int64_t *pres, JSValue val); +JS_EXTERN int JS_ToBigUint64(JSContext *ctx, uint64_t *pres, JSValue val); /* same as JS_ToInt64() but allow BigInt */ JS_EXTERN int JS_ToInt64Ext(JSContext *ctx, int64_t *pres, JSValue val); @@ -698,6 +705,7 @@ JS_EXTERN int JS_PreventExtensions(JSContext *ctx, JSValue obj); JS_EXTERN int JS_DeleteProperty(JSContext *ctx, JSValue obj, JSAtom prop, int flags); JS_EXTERN int JS_SetPrototype(JSContext *ctx, JSValue obj, JSValue proto_val); JS_EXTERN JSValue JS_GetPrototype(JSContext *ctx, JSValue val); +JS_EXTERN int JS_GetLength(JSContext *ctx, JSValue obj, int64_t *pres); #define JS_GPN_STRING_MASK (1 << 0) #define JS_GPN_SYMBOL_MASK (1 << 1) @@ -711,6 +719,8 @@ JS_EXTERN int JS_GetOwnPropertyNames(JSContext *ctx, JSPropertyEnum **ptab, uint32_t *plen, JSValue obj, int flags); JS_EXTERN int JS_GetOwnProperty(JSContext *ctx, JSPropertyDescriptor *desc, JSValue obj, JSAtom prop); +JS_EXTERN void JS_FreePropertyEnum(JSContext *ctx, JSPropertyEnum *tab, + uint32_t len); JS_EXTERN JSValue JS_Call(JSContext *ctx, JSValue func_obj, JSValue this_obj, int argc, JSValue *argv); @@ -780,7 +790,15 @@ typedef struct { } JSSharedArrayBufferFunctions; JS_EXTERN void JS_SetSharedArrayBufferFunctions(JSRuntime *rt, const JSSharedArrayBufferFunctions *sf); +typedef enum JSPromiseStateEnum { + JS_PROMISE_PENDING, + JS_PROMISE_FULFILLED, + JS_PROMISE_REJECTED, +} JSPromiseStateEnum; + JS_EXTERN JSValue JS_NewPromiseCapability(JSContext *ctx, JSValue *resolving_funcs); +JS_EXTERN JSPromiseStateEnum JS_PromiseState(JSContext *ctx, JSValue promise); +JS_EXTERN JSValue JS_PromiseResult(JSContext *ctx, JSValue promise); JS_EXTERN JSValue JS_NewSymbol(JSContext *ctx, const char *description, JS_BOOL is_global); @@ -852,8 +870,8 @@ JS_EXTERN int JS_ResolveModule(JSContext *ctx, JSValue obj); /* only exported for os.Worker() */ JS_EXTERN JSAtom JS_GetScriptOrModuleName(JSContext *ctx, int n_stack_levels); /* only exported for os.Worker() */ -JS_EXTERN JSModuleDef *JS_RunModule(JSContext *ctx, const char *basename, - const char *filename); +JS_EXTERN JSValue JS_LoadModule(JSContext *ctx, const char *basename, + const char *filename); /* C function definition */ typedef enum JSCFunctionEnum { /* XXX: should rename for namespace isolation */ @@ -956,21 +974,21 @@ typedef struct JSCFunctionListEntry { #define JS_DEF_ALIAS 9 /* Note: c++ does not like nested designators */ -#define JS_CFUNC_DEF(name, length, func1) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, 0, .u = { .func = { length, JS_CFUNC_generic, { .generic = func1 } } } } -#define JS_CFUNC_DEF2(name, length, func1, prop_flags) { name, prop_flags, JS_DEF_CFUNC, 0, .u = { .func = { length, JS_CFUNC_generic, { .generic = func1 } } } } -#define JS_CFUNC_MAGIC_DEF(name, length, func1, magic) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, magic, .u = { .func = { length, JS_CFUNC_generic_magic, { .generic_magic = func1 } } } } -#define JS_CFUNC_SPECIAL_DEF(name, length, cproto, func1) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, 0, .u = { .func = { length, JS_CFUNC_ ## cproto, { .cproto = func1 } } } } -#define JS_ITERATOR_NEXT_DEF(name, length, func1, magic) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, magic, .u = { .func = { length, JS_CFUNC_iterator_next, { .iterator_next = func1 } } } } -#define JS_CGETSET_DEF(name, fgetter, fsetter) { name, JS_PROP_CONFIGURABLE, JS_DEF_CGETSET, 0, .u = { .getset = { .get = { .getter = fgetter }, .set = { .setter = fsetter } } } } -#define JS_CGETSET_MAGIC_DEF(name, fgetter, fsetter, magic) { name, JS_PROP_CONFIGURABLE, JS_DEF_CGETSET_MAGIC, magic, .u = { .getset = { .get = { .getter_magic = fgetter }, .set = { .setter_magic = fsetter } } } } -#define JS_PROP_STRING_DEF(name, cstr, prop_flags) { name, prop_flags, JS_DEF_PROP_STRING, 0, .u = { .str = cstr } } -#define JS_PROP_INT32_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_INT32, 0, .u = { .i32 = val } } -#define JS_PROP_INT64_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_INT64, 0, .u = { .i64 = val } } -#define JS_PROP_DOUBLE_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_DOUBLE, 0, .u = { .f64 = val } } -#define JS_PROP_UNDEFINED_DEF(name, prop_flags) { name, prop_flags, JS_DEF_PROP_UNDEFINED, 0, .u = { .i32 = 0 } } -#define JS_OBJECT_DEF(name, tab, len, prop_flags) { name, prop_flags, JS_DEF_OBJECT, 0, .u = { .prop_list = { tab, len } } } -#define JS_ALIAS_DEF(name, from) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_ALIAS, 0, .u = { .alias = { from, -1 } } } -#define JS_ALIAS_BASE_DEF(name, from, base) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_ALIAS, 0, .u = { .alias = { from, base } } } +#define JS_CFUNC_DEF(name, length, func1) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, 0, { .func = { length, JS_CFUNC_generic, { .generic = func1 } } } } +#define JS_CFUNC_DEF2(name, length, func1, prop_flags) { name, prop_flags, JS_DEF_CFUNC, 0, { .func = { length, JS_CFUNC_generic, { .generic = func1 } } } } +#define JS_CFUNC_MAGIC_DEF(name, length, func1, magic) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, magic, { .func = { length, JS_CFUNC_generic_magic, { .generic_magic = func1 } } } } +#define JS_CFUNC_SPECIAL_DEF(name, length, cproto, func1) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, 0, { .func = { length, JS_CFUNC_ ## cproto, { .cproto = func1 } } } } +#define JS_ITERATOR_NEXT_DEF(name, length, func1, magic) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, magic, { .func = { length, JS_CFUNC_iterator_next, { .iterator_next = func1 } } } } +#define JS_CGETSET_DEF(name, fgetter, fsetter) { name, JS_PROP_CONFIGURABLE, JS_DEF_CGETSET, 0, { .getset = { .get = { .getter = fgetter }, .set = { .setter = fsetter } } } } +#define JS_CGETSET_MAGIC_DEF(name, fgetter, fsetter, magic) { name, JS_PROP_CONFIGURABLE, JS_DEF_CGETSET_MAGIC, magic, { .getset = { .get = { .getter_magic = fgetter }, .set = { .setter_magic = fsetter } } } } +#define JS_PROP_STRING_DEF(name, cstr, prop_flags) { name, prop_flags, JS_DEF_PROP_STRING, 0, { .str = cstr } } +#define JS_PROP_INT32_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_INT32, 0, { .i32 = val } } +#define JS_PROP_INT64_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_INT64, 0, { .i64 = val } } +#define JS_PROP_DOUBLE_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_DOUBLE, 0, { .f64 = val } } +#define JS_PROP_UNDEFINED_DEF(name, prop_flags) { name, prop_flags, JS_DEF_PROP_UNDEFINED, 0, { .i32 = 0 } } +#define JS_OBJECT_DEF(name, tab, len, prop_flags) { name, prop_flags, JS_DEF_OBJECT, 0, { .prop_list = { tab, len } } } +#define JS_ALIAS_DEF(name, from) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_ALIAS, 0, { .alias = { from, -1 } } } +#define JS_ALIAS_BASE_DEF(name, from, base) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_ALIAS, 0, { .alias = { from, base } } } JS_EXTERN void JS_SetPropertyFunctionList(JSContext *ctx, JSValue obj, const JSCFunctionListEntry *tab, @@ -992,25 +1010,10 @@ JS_EXTERN int JS_SetModuleExport(JSContext *ctx, JSModuleDef *m, const char *exp JS_EXTERN int JS_SetModuleExportList(JSContext *ctx, JSModuleDef *m, const JSCFunctionListEntry *tab, int len); -/* Promise */ - -#define JS_INVALID_PROMISE_STATE (-1) - -typedef enum JSPromiseStateEnum { - JS_PROMISE_PENDING, - JS_PROMISE_FULFILLED, - JS_PROMISE_REJECTED, -} JSPromiseStateEnum; - -/* Returns JSPromiseReactionEnum for the promise or JS_INVALID_PROMISE_STATE if the value is not a promise. */ -JS_EXTERN JSPromiseStateEnum JS_PromiseState(JSContext *ctx, JSValue promise); -/* Return the result of the promise if the promise's state is in the FULFILLED or REJECTED state. Otherwise returns JS_UNDEFINED. */ -JS_EXTERN JSValue JS_PromiseResult(JSContext *ctx, JSValue promise); - /* Version */ #define QJS_VERSION_MAJOR 0 -#define QJS_VERSION_MINOR 5 +#define QJS_VERSION_MINOR 6 #define QJS_VERSION_PATCH 0 #define QJS_VERSION_SUFFIX "dev" diff --git a/repl.js b/repl.js index fcb38c7..3074819 100644 --- a/repl.js +++ b/repl.js @@ -129,6 +129,7 @@ import * as os from "os"; var plen = 0; var ps1 = "qjs > "; var ps2 = " ... "; + var eval_start_time; var eval_time = 0; var mexpr = ""; var level = 0; @@ -838,10 +839,8 @@ import * as os from "os"; prompt += ps2; } else { if (show_time) { - var t = Math.round(eval_time) + " "; - eval_time = 0; - t = dupstr("0", 5 - t.length) + t; - prompt += t.substring(0, t.length - 4) + "." + t.substring(t.length - 4); + var t = eval_time / 1000; + prompt += t.toFixed(6) + " "; } plen = prompt.length; prompt += ps1; @@ -1507,34 +1506,6 @@ import * as os from "os"; "quit": () => { exit(0); }, }, null); - function eval_and_print(expr) { - var result; - - try { - if (use_strict) - expr = '"use strict"; void 0;' + expr; - var now = Date.now(); - /* eval as a script */ - result = std.evalScript(expr, { backtrace_barrier: true }); - eval_time = Date.now() - now; - print(result); - /* set the last result */ - g._ = result; - } catch (error) { - std.puts(colors[styles.error]); - if (error instanceof Error) { - console.log(error); - if (error.stack) { - std.puts(error.stack); - } - } else { - std.puts("Throw: "); - console.log(error); - } - std.puts(colors.none); - } - } - function cmd_start() { std.puts('QuickJS-ng - Type ".help" for help\n'); cmd_readline_start(); @@ -1545,33 +1516,88 @@ import * as os from "os"; } function readline_handle_cmd(expr) { - handle_cmd(expr); - cmd_readline_start(); + if (!handle_cmd(expr)) { + cmd_readline_start(); + } } + /* return true if async termination */ function handle_cmd(expr) { if (!expr) - return; + return false; if (mexpr) { expr = mexpr + '\n' + expr; } else { if (handle_directive(expr)) - return; + return false; } var colorstate = colorize_js(expr); pstate = colorstate[0]; level = colorstate[1]; if (pstate) { mexpr = expr; - return; + return false; } mexpr = ""; - eval_and_print(expr); + eval_and_print_start(expr, true); + + return true; + } + + function eval_and_print_start(expr, is_async) { + var result; + + try { + if (use_strict) + expr = '"use strict"; void 0;' + expr; + eval_start_time = os.now(); + /* eval as a script */ + result = std.evalScript(expr, { backtrace_barrier: true, async: is_async }); + if (is_async) { + /* result is a promise */ + result.then(print_eval_result, print_eval_error); + } else { + print_eval_result({ value: result }); + } + } catch (error) { + print_eval_error(error); + } + } + + function print_eval_result(result) { + result = result.value; + eval_time = os.now() - eval_start_time; + print(result); + /* set the last result */ + g._ = result; + + handle_cmd_end(); + } + + function print_eval_error(error) { + std.puts(colors[styles.error]); + if (error instanceof Error) { + console.log(error); + if (error.stack) { + std.puts(error.stack); + } + } else { + std.puts("Throw: "); + console.log(error); + } + std.puts(colors.none); + + handle_cmd_end(); + } + + function handle_cmd_end() { level = 0; /* run the garbage collector after each command */ std.gc(); + + cmd_readline_start(); } function colorize_js(str) { diff --git a/run-test262.c b/run-test262.c index be4ed4d..2e60bbc 100644 --- a/run-test262.c +++ b/run-test262.c @@ -1198,7 +1198,7 @@ static int eval_buf(JSContext *ctx, const char *buf, size_t buf_len, { JSValue res_val, exception_val; int ret, error_line, pos, pos_line; - BOOL is_error, has_error_line; + BOOL is_error, has_error_line, ret_promise; const char *error_name; pos = skip_comments(buf, 1, &pos_line); @@ -1207,12 +1207,19 @@ static int eval_buf(JSContext *ctx, const char *buf, size_t buf_len, exception_val = JS_UNDEFINED; error_name = NULL; + /* a module evaluation returns a promise */ + ret_promise = ((eval_flags & JS_EVAL_TYPE_MODULE) != 0); async_done = 0; /* counter of "Test262:AsyncTestComplete" messages */ res_val = JS_Eval(ctx, buf, buf_len, filename, eval_flags); - if (is_async && !JS_IsException(res_val)) { - JS_FreeValue(ctx, res_val); + if ((is_async || ret_promise) && !JS_IsException(res_val)) { + JSValue promise = JS_UNDEFINED; + if (ret_promise) { + promise = res_val; + } else { + JS_FreeValue(ctx, res_val); + } for(;;) { JSContext *ctx1; ret = JS_ExecutePendingJob(JS_GetRuntime(ctx), &ctx1); @@ -1220,37 +1227,26 @@ static int eval_buf(JSContext *ctx, const char *buf, size_t buf_len, res_val = JS_EXCEPTION; break; } else if (ret == 0) { - /* test if the test called $DONE() once */ - if (async_done != 1) { - res_val = JS_ThrowTypeError(ctx, "$DONE() not called"); + if (is_async) { + /* test if the test called $DONE() once */ + if (async_done != 1) { + res_val = JS_ThrowTypeError(ctx, "$DONE() not called"); + } else { + res_val = JS_UNDEFINED; + } } else { - res_val = JS_UNDEFINED; + /* check that the returned promise is fulfilled */ + JSPromiseStateEnum state = JS_PromiseState(ctx, promise); + if (state == JS_PROMISE_FULFILLED) + res_val = JS_UNDEFINED; + else if (state == JS_PROMISE_REJECTED) + res_val = JS_Throw(ctx, JS_PromiseResult(ctx, promise)); + else + res_val = JS_ThrowTypeError(ctx, "promise is pending"); } break; } } - } else if ((eval_flags & JS_EVAL_TYPE_MODULE) && - !JS_IsUndefined(res_val) && - !JS_IsException(res_val)) { - JSValue promise = res_val; - for(;;) { - JSContext *ctx1; - ret = JS_ExecutePendingJob(JS_GetRuntime(ctx), &ctx1); - if (ret < 0) { - res_val = JS_EXCEPTION; - break; - } - if (ret == 0) { - JSPromiseStateEnum s = JS_PromiseState(ctx, promise); - if (s == JS_PROMISE_FULFILLED) - res_val = JS_UNDEFINED; - else if (s == JS_PROMISE_REJECTED) - res_val = JS_Throw(ctx, JS_PromiseResult(ctx, promise)); - else - res_val = JS_EXCEPTION; - break; - } - } JS_FreeValue(ctx, promise); } @@ -1887,17 +1883,32 @@ int run_test262_harness_test(const char *filename, BOOL is_module) js_std_dump_error(ctx); ret_code = 1; } else { - JS_FreeValue(ctx, res_val); + JSValue promise = JS_UNDEFINED; + if (is_module) { + promise = res_val; + } else { + JS_FreeValue(ctx, res_val); + } for(;;) { JSContext *ctx1; ret = JS_ExecutePendingJob(JS_GetRuntime(ctx), &ctx1); if (ret < 0) { - js_std_dump_error(ctx1); - ret_code = 1; + js_std_dump_error(ctx1); + ret_code = 1; } else if (ret == 0) { - break; + break; } - } + } + /* dump the error if the module returned an error. */ + if (is_module) { + JSPromiseStateEnum state = JS_PromiseState(ctx, promise); + if (state == JS_PROMISE_REJECTED) { + JS_Throw(ctx, JS_PromiseResult(ctx, promise)); + js_std_dump_error(ctx); + ret_code = 1; + } + } + JS_FreeValue(ctx, promise); } free(buf); #ifdef CONFIG_AGENT diff --git a/tests/microbench.js b/tests/microbench.js index f07305e..c8cb4c7 100644 --- a/tests/microbench.js +++ b/tests/microbench.js @@ -919,6 +919,42 @@ function float_toString(n) return n * 3; } +function float_toFixed(n) +{ + var s, r, j; + r = 0; + for(j = 0; j < n; j++) { + s = (j % 10 + 0.1).toFixed(j % 16); + s = (j + 0.1).toFixed(j % 16); + s = (j * 12345678 + 0.1).toFixed(j % 16); + } + return n * 3; +} + +function float_toPrecision(n) +{ + var s, r, j; + r = 0; + for(j = 0; j < n; j++) { + s = (j % 10 + 0.1).toPrecision(j % 16 + 1); + s = (j + 0.1).toPrecision(j % 16 + 1); + s = (j * 12345678 + 0.1).toPrecision(j % 16 + 1); + } + return n * 3; +} + +function float_toExponential(n) +{ + var s, r, j; + r = 0; + for(j = 0; j < n; j++) { + s = (j % 10 + 0.1).toExponential(j % 16); + s = (j + 0.1).toExponential(j % 16); + s = (j * 12345678 + 0.1).toExponential(j % 16); + } + return n * 3; +} + function string_to_int(n) { var s, r, j; @@ -1014,11 +1050,14 @@ function main(argc, argv, g) int_toString, float_to_string, float_toString, + float_toFixed, + float_toPrecision, + float_toExponential, string_to_int, string_to_float, ]; var tests = []; - var i, j, n, f, name; + var i, j, n, f, name, found; if (typeof BigInt == "function") { /* BigInt test */ @@ -1045,14 +1084,14 @@ function main(argc, argv, g) sort_bench.array_size = +argv[i++]; continue; } - for (j = 0; j < test_list.length; j++) { + for (j = 0, found = false; j < test_list.length; j++) { f = test_list[j]; - if (name === f.name) { + if (f.name.startsWith(name)) { tests.push(f); - break; + found = true; } } - if (j == test_list.length) { + if (!found) { console.log("unknown benchmark: " + name); return 1; } @@ -1080,6 +1119,9 @@ function main(argc, argv, g) save_result("microbench-new.txt", log_data); } -if (!scriptArgs) +if (typeof scriptArgs === "undefined") { scriptArgs = []; + if (typeof process.argv === "object") + scriptArgs = process.argv.slice(1); +} main(scriptArgs.length, scriptArgs, this); diff --git a/tests/test_builtin.js b/tests/test_builtin.js index 5a28e6e..d4b04bd 100644 --- a/tests/test_builtin.js +++ b/tests/test_builtin.js @@ -434,18 +434,17 @@ function test_number() assert(Number.isNaN(Number("-"))); assert(Number.isNaN(Number("\x00a"))); - // TODO: Fix rounding errors on Windows/Cygwin. - if (['win32', 'cygwin'].includes(os.platform)) { - return; - } - assert((1-2**-53).toString(12), "0.bbbbbbbbbbbbbba"); + assert((1000000000000000128).toString(), "1000000000000000100"); + assert((1000000000000000128).toFixed(0), "1000000000000000128"); assert((25).toExponential(0), "3e+1"); assert((-25).toExponential(0), "-3e+1"); assert((2.5).toPrecision(1), "3"); assert((-2.5).toPrecision(1), "-3"); assert((1.125).toFixed(2), "1.13"); assert((-1.125).toFixed(2), "-1.13"); + assert((0.5).toFixed(0), "1"); + assert((-0.5).toFixed(0), "-1"); } function test_eval2() diff --git a/tests/test_conv.c b/tests/test_conv.c index bb12a51..9761b30 100644 --- a/tests/test_conv.c +++ b/tests/test_conv.c @@ -864,6 +864,8 @@ static uint8_t const radix_shift[64] = { size_t u32toa_radix_length(char buf[minimum_length(33)], uint32_t n, unsigned base) { + int shift; + #ifdef USE_SPECIAL_RADIX_10 if (likely(base == 10)) return u32toa_length_loop(buf, n); @@ -873,13 +875,13 @@ size_t u32toa_radix_length(char buf[minimum_length(33)], uint32_t n, unsigned ba buf[1] = '\0'; return 1; } - int shift = radix_shift[base & 63]; + shift = radix_shift[base & 63]; if (shift) { uint32_t mask = (1 << shift) - 1; size_t len = (32 - clz32(n) + shift - 1) / shift; size_t last = n & mask; - n /= base; char *end = buf + len; + n >>= shift; *end-- = '\0'; *end-- = digits36[last]; while (n >= base) { @@ -913,11 +915,13 @@ size_t u32toa_radix_length(char buf[minimum_length(33)], uint32_t n, unsigned ba size_t u64toa_radix_length(char buf[minimum_length(65)], uint64_t n, unsigned base) { + int shift; + #ifdef USE_SPECIAL_RADIX_10 if (likely(base == 10)) return u64toa_length_loop(buf, n); #endif - int shift = radix_shift[base & 63]; + shift = radix_shift[base & 63]; if (shift) { if (n < base) { buf[0] = digits36[n]; @@ -927,8 +931,8 @@ size_t u64toa_radix_length(char buf[minimum_length(65)], uint64_t n, unsigned ba uint64_t mask = (1 << shift) - 1; size_t len = (64 - clz64(n) + shift - 1) / shift; size_t last = n & mask; - n /= base; char *end = buf + len; + n >>= shift; *end-- = '\0'; *end-- = digits36[last]; while (n >= base) { @@ -1511,6 +1515,9 @@ int main(int argc, char *argv[]) { clock_t times1[countof(impl1)][4][37]; char buf[100]; uint64_t bases = 0; +#define set_base(bases, b) (*(bases) |= (1ULL << (b))) +#define has_base(bases, b) ((bases) & (1ULL << (b))) +#define single_base(bases) (!((bases) & ((bases) - 1))) int verbose = 0; int average = 1; int enabled = 3; @@ -1521,14 +1528,13 @@ int main(int argc, char *argv[]) { for (int a = 1; a < argc; a++) { char *arg = argv[a]; if (isdigit((unsigned char)*arg)) { - verbose = 1; while (isdigit((unsigned char)*arg)) { int b1 = strtol(arg, &arg, 10); - bases |= (1ULL << b1); + set_base(&bases, b1); if (*arg == '-') { - int b2 = strtol(arg, &arg, 10); + int b2 = strtol(arg + 1, &arg, 10); while (++b1 <= b2) - bases |= (1ULL << b1); + set_base(&bases, b1); } if (*arg == ',') { arg++; @@ -1539,10 +1545,6 @@ int main(int argc, char *argv[]) { fprintf(stderr, "invalid option syntax: %s\n", argv[a]); return 2; } - if (!(bases & (bases - 1))) { /* single base */ - average = 0; - verbose = 1; - } continue; } else if (!strcmp(arg, "-t") || !strcmp(arg, "--terse")) { verbose = 0; @@ -1578,14 +1580,19 @@ int main(int argc, char *argv[]) { } if (!bases) bases = -1; - if (bases & (bases - 1)) /* multiple bases */ + if (single_base(bases)) { + average = 0; + verbose = 1; + } else { average = 1; + } int numvariant = 0; int numvariant1 = 0; int nerrors = 0; - if (bases & (1ULL << 10)) { + /* Checking for correctness */ + if (has_base(bases, 10)) { for (size_t i = 0; i < countof(impl); i++) { unsigned base = 10; if (impl[i].enabled & enabled) { @@ -1599,7 +1606,7 @@ int main(int argc, char *argv[]) { for (size_t i = 0; i < countof(impl1); i++) { if (impl1[i].enabled & enabled) { for (unsigned base = 2; base <= 36; base++) { - if (bases & (1ULL << base)) { + if (has_base(bases, base)) { CHECK(impl1[i], 1000, 0, 32, u32toa_radix(buf, x, base), strtoull(buf, NULL, base)); CHECK(impl1[i], 1000, 1, 32, i32toa_radix(buf, x, base), strtoll(buf, NULL, base)); CHECK(impl1[i], 1000, 0, 64, u64toa_radix(buf, x, base), strtoull(buf, NULL, base)); @@ -1611,13 +1618,14 @@ int main(int argc, char *argv[]) { if (nerrors) return 1; - if (bases & (1ULL << 10)) { + /* Timing conversions */ + if (has_base(bases, 10)) { for (int rep = 0; rep < 100; rep++) { for (size_t i = 0; i < countof(impl); i++) { if (impl[i].enabled & enabled) { numvariant++; #ifdef TEST_SNPRINTF - if (strstr(impl[i].name, "snprintf")) { // avoid function call overhead + if (strstr(impl[i].name, "snprintf")) { // avoid wrapper overhead TIME(times[i][0], 1000, 0, 32, snprintf(buf, 11, "%"PRIu32, x)); TIME(times[i][1], 1000, 1, 32, snprintf(buf, 12, "%"PRIi32, x)); TIME(times[i][2], 1000, 0, 64, snprintf(buf, 21, "%"PRIu64, x)); @@ -1639,42 +1647,42 @@ int main(int argc, char *argv[]) { if (impl1[i].enabled & enabled) { numvariant1++; #ifdef TEST_SNPRINTF - if (strstr(impl[i].name, "snprintf")) { // avoid function call overhead + if (strstr(impl[i].name, "snprintf")) { // avoid wrapper overhead #ifdef PRIb32 - if (bases & (1ULL << 1)) { + if (has_base(bases, 2)) { unsigned base = 2; - TIME(times1[i][0][2], 1000, 0, 32, snprintf(buf, 33, "%"PRIb32, x)); + TIME(times1[i][0][base], 1000, 0, 32, snprintf(buf, 33, "%"PRIb32, x)); TIME(times1[i][1][base], 1000, 1, 32, impl1[i].i32toa_radix(buf, x, base)); - TIME(times1[i][2][2], 1000, 0, 64, snprintf(buf, 65, "%"PRIb64, x)); + TIME(times1[i][2][base], 1000, 0, 64, snprintf(buf, 65, "%"PRIb64, x)); TIME(times1[i][3][base], 1000, 1, 64, impl1[i].i64toa_radix(buf, x, base)); } #endif - if (bases & (1ULL << 8)) { + if (has_base(bases, 8)) { unsigned base = 8; - TIME(times1[i][0][8], 1000, 0, 32, snprintf(buf, 33, "%"PRIo32, x)); + TIME(times1[i][0][base], 1000, 0, 32, snprintf(buf, 33, "%"PRIo32, x)); TIME(times1[i][1][base], 1000, 1, 32, impl1[i].i32toa_radix(buf, x, base)); - TIME(times1[i][2][8], 1000, 0, 64, snprintf(buf, 65, "%"PRIo64, x)); + TIME(times1[i][2][base], 1000, 0, 64, snprintf(buf, 65, "%"PRIo64, x)); TIME(times1[i][3][base], 1000, 1, 64, impl1[i].i64toa_radix(buf, x, base)); } - if (bases & (1ULL << 10)) { + if (has_base(bases, 10)) { unsigned base = 10; - TIME(times1[i][0][10], 1000, 0, 32, snprintf(buf, 33, "%"PRIu32, x)); - TIME(times1[i][1][10], 1000, 1, 32, snprintf(buf, 34, "%"PRIi32, x)); - TIME(times1[i][2][10], 1000, 0, 64, snprintf(buf, 64, "%"PRIu64, x)); - TIME(times1[i][3][10], 1000, 1, 64, snprintf(buf, 65, "%"PRIi64, x)); + TIME(times1[i][0][base], 1000, 0, 32, snprintf(buf, 33, "%"PRIu32, x)); + TIME(times1[i][1][base], 1000, 1, 32, snprintf(buf, 34, "%"PRIi32, x)); + TIME(times1[i][2][base], 1000, 0, 64, snprintf(buf, 64, "%"PRIu64, x)); + TIME(times1[i][3][base], 1000, 1, 64, snprintf(buf, 65, "%"PRIi64, x)); } - if (bases & (1ULL << 16)) { + if (has_base(bases, 16)) { unsigned base = 16; - TIME(times1[i][0][16], 1000, 0, 32, snprintf(buf, 33, "%"PRIx32, x)); + TIME(times1[i][0][base], 1000, 0, 32, snprintf(buf, 33, "%"PRIx32, x)); TIME(times1[i][1][base], 1000, 1, 32, impl1[i].i32toa_radix(buf, x, base)); - TIME(times1[i][2][16], 1000, 0, 64, snprintf(buf, 65, "%"PRIx64, x)); + TIME(times1[i][2][base], 1000, 0, 64, snprintf(buf, 65, "%"PRIx64, x)); TIME(times1[i][3][base], 1000, 1, 64, impl1[i].i64toa_radix(buf, x, base)); } } else #endif { for (unsigned base = 2; base <= 36; base++) { - if (bases & (1ULL << base)) { + if (has_base(bases, base)) { TIME(times1[i][0][base], 1000, 0, 32, impl1[i].u32toa_radix(buf, x, base)); TIME(times1[i][1][base], 1000, 1, 32, impl1[i].i32toa_radix(buf, x, base)); TIME(times1[i][2][base], 1000, 0, 64, impl1[i].u64toa_radix(buf, x, base)); @@ -1704,7 +1712,7 @@ int main(int argc, char *argv[]) { for (size_t i = 0; i < countof(impl1); i++) { int numbases = 0; for (unsigned base = 2; base <= 36; base++) { - if (bases & (1ULL << base)) { + if (has_base(bases, base)) { if (times1[i][0][base]) { numbases++; for (int j = 0; j < 4; j++) diff --git a/tests/test_language.js b/tests/test_language.js index 92cd03c..eea0161 100644 --- a/tests/test_language.js +++ b/tests/test_language.js @@ -5,6 +5,10 @@ function assert(actual, expected, message) { if (actual === expected) return; + if (typeof actual == 'number' && isNaN(actual) + && typeof expected == 'number' && isNaN(expected)) + return; + if (actual !== null && expected !== null && typeof actual == 'object' && typeof expected == 'object' && actual.toString() === expected.toString()) @@ -343,10 +347,13 @@ function test_class() assert(S.x === 42); assert(S.y === 42); assert(S.z === 42); + class P { - get = () => "123" + get = () => "123"; + static() { return 42; } } assert(new P().get() === "123"); + assert(new P().static() === 42); }; function test_template() @@ -613,6 +620,23 @@ function test_number_literals() assert(01.a, undefined); assert(0o1.a, undefined); test_expr('0.a', SyntaxError); + assert(parseInt("0_1"), 0); + assert(parseInt("1_0"), 1); + assert(parseInt("0_1", 8), 0); + assert(parseInt("1_0", 8), 1); + assert(parseFloat("0_1"), 0); + assert(parseFloat("1_0"), 1); + assert(1_0, 10); + assert(parseInt("Infinity"), NaN); + assert(parseFloat("Infinity"), Infinity); + assert(parseFloat("Infinity1"), Infinity); + assert(parseFloat("Infinity_"), Infinity); + assert(parseFloat("Infinity."), Infinity); + test_expr('0_0', SyntaxError); + test_expr('00_0', SyntaxError); + test_expr('01_0', SyntaxError); + test_expr('08_0', SyntaxError); + test_expr('09_0', SyntaxError); } function test_syntax()