From e03f3088d2b660fc92283d21120585d568430d0c Mon Sep 17 00:00:00 2001 From: Julius de Jeu Date: Fri, 8 Jul 2022 12:10:55 +0200 Subject: [PATCH] Try to get lwb-parser to work --- Cargo.lock | 504 +++++++++++++++++++++++++++- Cargo.toml | 5 + lwb.toml | 9 + src/build.rs | 6 + src/main.rs | 135 +++++++- src/sunflower.syntax | 60 ++++ src/sunflower/ast.rs | 93 ++++++ src/sunflower/ast_impls.rs | 278 ++++++++++++++++ src/sunflower/from_pairs.rs | 581 +++++++++++++++++++++++++++++++++ src/sunflower/mod.rs | 21 ++ src/sunflower/parser.rs | 631 ++++++++++++++++++++++++++++++++++++ 11 files changed, 2307 insertions(+), 16 deletions(-) create mode 100644 lwb.toml create mode 100644 src/build.rs create mode 100644 src/sunflower.syntax create mode 100644 src/sunflower/ast.rs create mode 100644 src/sunflower/ast_impls.rs create mode 100644 src/sunflower/from_pairs.rs create mode 100644 src/sunflower/mod.rs create mode 100644 src/sunflower/parser.rs diff --git a/Cargo.lock b/Cargo.lock index 2f4df9b..27ee228 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,71 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "block-buffer" version = "0.7.3" @@ -23,6 +88,12 @@ dependencies = [ "byte-tools", ] +[[package]] +name = "by_address" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e245704f60eb4eb45810d65cf14eb54d2eb50a6f3715fe2d7cd01ee905c2944f" + [[package]] name = "byte-tools" version = "0.3.1" @@ -35,6 +106,56 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "cc" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8" + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version", + "syn", +] + [[package]] name = "digest" version = "0.8.1" @@ -50,6 +171,32 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "140206b78fb2bc3edbcfc9b5ccbd0b30699cfe8d348b8b31b330e47df5291a5a" +[[package]] +name = "either" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" + +[[package]] +name = "enum-iterator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "fake-simd" version = "0.1.2" @@ -65,18 +212,168 @@ dependencies = [ "typenum", ] +[[package]] +name = "gimli" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "is_ci" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb" + +[[package]] +name = "itertools" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +dependencies = [ + "either", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" + +[[package]] +name = "lwb-parser" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2979cd39b4c303b9943535680650d59a1b940212e69ad26b97e3e675cc6f308d" +dependencies = [ + "bincode", + "by_address", + "chrono", + "convert_case 0.5.0", + "derive_more", + "enum-iterator", + "itertools", + "lazy_static", + "miette", + "proc-macro2", + "quote", + "serde", + "thiserror", + "toml", + "typed-arena", +] + [[package]] name = "maplit" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "miette" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd2adcfcced5d625bf90a958a82ae5b93231f57f3df1383fee28c9b5096d35ed" +dependencies = [ + "atty", + "backtrace", + "miette-derive", + "once_cell", + "owo-colors", + "supports-color", + "supports-hyperlinks", + "supports-unicode", + "terminal_size", + "textwrap", + "thiserror", +] + +[[package]] +name = "miette-derive" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c01a8b61312d367ce87956bb686731f87e4c6dd5dbc550e8f06e3c24fb1f67f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "miniz_oxide" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" +dependencies = [ + "adler", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "object" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" + [[package]] name = "opaque-debug" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +[[package]] +name = "owo-colors" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "decf7381921fea4dcb2549c5667eda59b3ec297ab7e2b5fc33eac69d2e7da87b" + [[package]] name = "pest" version = "2.1.3" @@ -138,6 +435,64 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "regex" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" + +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "semver" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1" + +[[package]] +name = "serde" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "sha-1" version = "0.8.2" @@ -150,15 +505,50 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "smawk" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043" + [[package]] name = "sunflower" version = "0.1.0" dependencies = [ "dyn-clone", + "lwb-parser", "pest", "pest_derive", ] +[[package]] +name = "supports-color" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4872ced36b91d47bae8a214a683fe54e7078875b399dfa251df346c9b547d1f9" +dependencies = [ + "atty", + "is_ci", +] + +[[package]] +name = "supports-hyperlinks" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590b34f7c5f01ecc9d78dba4b3f445f31df750a67621cf31626f3b7441ce6406" +dependencies = [ + "atty", +] + +[[package]] +name = "supports-unicode" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8b945e45b417b125a8ec51f1b7df2f8df7920367700d1f98aedd21e5735f8b2" +dependencies = [ + "atty", +] + [[package]] name = "syn" version = "1.0.98" @@ -170,6 +560,73 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "terminal_size" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "textwrap" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + +[[package]] +name = "toml" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +dependencies = [ + "serde", +] + +[[package]] +name = "typed-arena" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0685c84d5d54d1c26f7d3eb96cd41550adb97baed141a761cf335d3d33bcd0ae" + [[package]] name = "typenum" version = "1.15.0" @@ -178,12 +635,55 @@ checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "ucd-trie" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c" [[package]] name = "unicode-ident" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + +[[package]] +name = "unicode-linebreak" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f" +dependencies = [ + "regex", +] + +[[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index e490796..6df76a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,11 +2,16 @@ name = "sunflower" version = "0.1.0" edition = "2021" +build = "src/build.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] dyn-clone = "1.0.6" +lwb-parser = "0.1.3" pest = "2.1.3" pest_derive = "2.1.0" + +[build-dependencies] +lwb-parser = "0.1.3" diff --git a/lwb.toml b/lwb.toml new file mode 100644 index 0000000..b1fcbb5 --- /dev/null +++ b/lwb.toml @@ -0,0 +1,9 @@ + +[syntax] +definition = "src/sunflower.syntax" +destination = "src/sunflower" +serde = true + +[language] +name = "Sunflower" +extensions = ["sunflower", "sfl"] \ No newline at end of file diff --git a/src/build.rs b/src/build.rs new file mode 100644 index 0000000..494606b --- /dev/null +++ b/src/build.rs @@ -0,0 +1,6 @@ +use lwb_parser::codegen::manager::Codegen; + +fn main() { + let m = Codegen::new(); + m.codegen(); +} diff --git a/src/main.rs b/src/main.rs index e40ff50..9ae8f74 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,9 @@ -use std::{ - any::Any, - fs::read_to_string, -}; +use std::{any::Any, fs::read_to_string}; use env::Env; +use expression::Expression; use function::FunctionMap; +use lwb_parser::{codegen_prelude::AstInfo, language::Language, sources::source_file::SourceFile}; use statement::Statement; use value::{custom::CustomValue, Value}; @@ -18,6 +17,10 @@ mod value; // mod parser; mod pest_parser; +#[rustfmt::skip] +mod sunflower; +lwb_parser::language!(SFL at mod sunflower); + fn run(functions: &FunctionMap, statement: &Statement) { let env = Env::new(); statement.eval(&env, functions); @@ -69,16 +72,120 @@ impl CustomValue for Foo { } fn main() { - let f = read_to_string("./test.foo").unwrap(); - let (res, funcs) = pest_parser::parse(&f); + // let f = read_to_string("./test.foo").unwrap(); + // let (res, funcs) = pest_parser::parse(&f); let mut m = FunctionMap::new(); - m.insert_holder(funcs); - m.insert_native("print", |a: &Value| { - println!("{}", a); - }); - m.insert_native("waluigi", || "Waluigi"); - m.insert_native("native_test", || Foo { x: 41 }); - m.insert_native("other_foo", || Foo { x: 1 }); + // m.insert_holder(funcs); + // m.insert_native("print", |a: &Value| { + // println!("{}", a); + // }); + // m.insert_native("waluigi", || "Waluigi"); + // m.insert_native("native_test", || Foo { x: 41 }); + // m.insert_native("other_foo", || Foo { x: 1 }); - run(&m, &res); + // run(&m, &res); + let res = SFL::try_parse(&SourceFile::new( + " + 10 / 2 + 3 * 4; + ", + "based.sfl", + )) + .unwrap(); + // println!("{:?}", res); + for r in res.1 { + if let sunflower::Statement::Expression(_, e) = r { + println!("{}", e.eval()) + } + } + // for r in res.1 { + // r.eval(&Env::new(), &m) + // } +} + +impl sunflower::Expression { + fn eval(&self) -> Value { + self.1.eval() + } +} + +impl sunflower::Equality { + fn eval(&self) -> Value { + match self { + sunflower::Equality::Equal(_, lhs, rhs) => (lhs.eval() == rhs.eval()).into(), + sunflower::Equality::NotEqual(_, rhs, lhs) => (lhs.eval() != rhs.eval()).into(), + sunflower::Equality::Inequality(_, all) => all.eval(), + } + } +} + +impl sunflower::Inequality { + fn eval(&self) -> Value { + match self { + sunflower::Inequality::LessThan(_, lhs, rhs) => (lhs.eval() < rhs.eval()).into(), + sunflower::Inequality::LessThanOrEqual(_, lhs, rhs) => { + (lhs.eval() <= rhs.eval()).into() + } + sunflower::Inequality::GreaterThan(_, lhs, rhs) => (lhs.eval() > rhs.eval()).into(), + sunflower::Inequality::GreaterThanOrEqual(_, lhs, rhs) => { + (lhs.eval() >= rhs.eval()).into() + } + sunflower::Inequality::Plus(_, all) => all.eval(), + } + } +} +impl sunflower::Plus { + fn eval(&self) -> Value { + match self { + sunflower::Plus::Plus(_, lhs, rhs) => { + println!("doing plus"); + (lhs.eval() + rhs.eval()).into() + } + sunflower::Plus::Minus(_, lhs, rhs) => (lhs.eval() - rhs.eval()).into(), + sunflower::Plus::Times(_, all) => all.eval(), + } + } +} + +impl sunflower::Times { + fn eval(&self) -> Value { + match self { + sunflower::Times::Times(_, lhs, rhs) => { + println!("doing times"); + (lhs.eval() * rhs.eval()).into() + } + sunflower::Times::Divide(_, lhs, rhs) => { + println!("doing divide"); + (lhs.eval() / rhs.eval()).into() + } + sunflower::Times::Value(_, all) => all.eval(), + } + } +} + +impl sunflower::Value { + fn eval(&self) -> Value { + match self { + sunflower::Value::Const(_, c) => { + println!("doing const"); + c.eval() + } + sunflower::Value::Call(_, _) => todo!(), + sunflower::Value::Identifier(_, _) => todo!(), + sunflower::Value::Parens(_, inner) => inner.eval(), + } + } +} + +impl sunflower::ConstValue { + fn eval(&self) -> Value { + match self { + sunflower::ConstValue::Int(_, i) => i.1.parse::().unwrap().into(), + sunflower::ConstValue::Bool(_, b) => match b { + sunflower::Bool::True(_) => true.into(), + sunflower::Bool::False(_) => false.into(), + }, + sunflower::ConstValue::String(_, _) => todo!(), + sunflower::ConstValue::Char(_, _) => todo!(), + } + } } diff --git a/src/sunflower.syntax b/src/sunflower.syntax new file mode 100644 index 0000000..398c69b --- /dev/null +++ b/src/sunflower.syntax @@ -0,0 +1,60 @@ + +identifier = [A-Za-z_][A-Za-z0-9-_]*; {single-string, no-layout} + +string = "\"" [^\"]* "\""; {single-string, no-layout} + +char = "'" [^\'] "'"; {single-string, no-layout} + +int = [0-9]+; {single-string, no-layout} + +bool: + true = "true"; + false = "false"; + +const_value: + int = int; + bool = bool; + string = string; + char = char; + +call = identifier "(" delimited(expression, ",", *) ")"; + +value: + const = const_value; + call = call; + identifier = identifier; + parens = "(" expression ")"; + +equality: + equal = inequality "==" expression; + not_equal = inequality "!=" expression; + inequality = inequality; + +inequality: + less_than = plus "<" expression; + less_than_or_equal = plus "<=" expression; + greater_than = plus ">" expression; + greater_than_or_equal = plus ">=" expression; + plus = plus; + +expression: + equality = equality; + +plus: + plus = times "+" times; + minus = times "-" times; + times = times; + +times: + times = value "*" expression; + divide = value "/" expression; + value = value; + +statement: + expression = expression ";"; + let = "let" identifier "=" expression ";"; + +program = statement*; + +start at program; +layout = [\r\n\t ]; \ No newline at end of file diff --git a/src/sunflower/ast.rs b/src/sunflower/ast.rs new file mode 100644 index 0000000..11ed2c6 --- /dev/null +++ b/src/sunflower/ast.rs @@ -0,0 +1,93 @@ +#![allow(unused)] +#![allow(non_snake_case)] +#![allow(non_camel_case_types)] +#![allow(clippy::all)] +// |==========================================================| +// | WARNING: THIS FILE IS AUTOMATICALLY GENERATED. | +// | CHANGES TO IT WILL BE DELETED WHEN REGENERATED. | +// | IN GENERAL, THIS FILE SHOULD NOT BE MODIFIED IN ANY WAY. | +// |==========================================================| +use super::prelude::*; +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub struct Program(pub M, pub Vec>); +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub enum Statement { + Expression(M, Expression), + Let(M, Identifier, Expression), +} +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub struct Expression(pub M, pub Equality); +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub struct Identifier(pub M, pub std::string::String); +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub enum Equality { + Equal(M, Inequality, Box>), + NotEqual(M, Inequality, Box>), + Inequality(M, Inequality), +} +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub enum Inequality { + LessThan(M, Plus, Box>), + LessThanOrEqual(M, Plus, Box>), + GreaterThan(M, Plus, Box>), + GreaterThanOrEqual(M, Plus, Box>), + Plus(M, Plus), +} +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub enum Plus { + Plus(M, Times, Times), + Minus(M, Times, Times), + Times(M, Times), +} +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub enum Times { + Times(M, Value, Box>), + Divide(M, Value, Box>), + Value(M, Value), +} +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub enum Value { + Const(M, ConstValue), + Call(M, Call), + Identifier(M, Identifier), + Parens(M, Box>), +} +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub enum ConstValue { + Int(M, Int), + Bool(M, Bool), + String(M, String), + Char(M, Char), +} +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub struct Call(pub M, pub Identifier, pub Vec>>); +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub struct Int(pub M, pub std::string::String); +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub enum Bool { + True(M), + False(M), +} +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub struct String(pub M, pub std::string::String); +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub struct Char(pub M, pub std::string::String); +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(crate = "self::serde")] +pub struct Layout(pub M, pub std::string::String); +pub type AST_ROOT = Program; diff --git a/src/sunflower/ast_impls.rs b/src/sunflower/ast_impls.rs new file mode 100644 index 0000000..99a1edf --- /dev/null +++ b/src/sunflower/ast_impls.rs @@ -0,0 +1,278 @@ +#![allow(unused)] +#![allow(non_snake_case)] +#![allow(non_camel_case_types)] +#![allow(clippy::all)] +// |==========================================================| +// | WARNING: THIS FILE IS AUTOMATICALLY GENERATED. | +// | CHANGES TO IT WILL BE DELETED WHEN REGENERATED. | +// | IN GENERAL, THIS FILE SHOULD NOT BE MODIFIED IN ANY WAY. | +// |==========================================================| +use super::prelude::*; +impl AstNode for Identifier { + fn ast_info(&self) -> &M { + let Self(meta, ..) = self; + meta + } + fn constructor(&self) -> &'static str { + "identifier" + } + fn sort(&self) -> &'static str { + "identifier" + } +} +impl AstNode for Times { + fn ast_info(&self) -> &M { + match self { + Self::Times(meta, ..) => meta, + Self::Divide(meta, ..) => meta, + Self::Value(meta, ..) => meta, + _ => unreachable!(), + } + } + fn constructor(&self) -> &'static str { + match self { + Self::Times(..) => "times", + Self::Divide(..) => "divide", + Self::Value(..) => "value", + _ => unreachable!(), + } + } + fn sort(&self) -> &'static str { + "times" + } +} +impl AstNode for Equality { + fn ast_info(&self) -> &M { + match self { + Self::Equal(meta, ..) => meta, + Self::NotEqual(meta, ..) => meta, + Self::Inequality(meta, ..) => meta, + _ => unreachable!(), + } + } + fn constructor(&self) -> &'static str { + match self { + Self::Equal(..) => "equal", + Self::NotEqual(..) => "not_equal", + Self::Inequality(..) => "inequality", + _ => unreachable!(), + } + } + fn sort(&self) -> &'static str { + "equality" + } +} +impl AstNode for Program { + fn ast_info(&self) -> &M { + let Self(meta, ..) = self; + meta + } + fn constructor(&self) -> &'static str { + "program" + } + fn sort(&self) -> &'static str { + "program" + } +} +impl AstNode for Int { + fn ast_info(&self) -> &M { + let Self(meta, ..) = self; + meta + } + fn constructor(&self) -> &'static str { + "int" + } + fn sort(&self) -> &'static str { + "int" + } +} +impl AstNode for Statement { + fn ast_info(&self) -> &M { + match self { + Self::Expression(meta, ..) => meta, + Self::Let(meta, ..) => meta, + _ => unreachable!(), + } + } + fn constructor(&self) -> &'static str { + match self { + Self::Expression(..) => "expression", + Self::Let(..) => "let", + _ => unreachable!(), + } + } + fn sort(&self) -> &'static str { + "statement" + } +} +impl AstNode for Bool { + fn ast_info(&self) -> &M { + match self { + Self::True(meta, ..) => meta, + Self::False(meta, ..) => meta, + _ => unreachable!(), + } + } + fn constructor(&self) -> &'static str { + match self { + Self::True(..) => "true", + Self::False(..) => "false", + _ => unreachable!(), + } + } + fn sort(&self) -> &'static str { + "bool" + } +} +impl AstNode for Value { + fn ast_info(&self) -> &M { + match self { + Self::Const(meta, ..) => meta, + Self::Call(meta, ..) => meta, + Self::Identifier(meta, ..) => meta, + Self::Parens(meta, ..) => meta, + _ => unreachable!(), + } + } + fn constructor(&self) -> &'static str { + match self { + Self::Const(..) => "const", + Self::Call(..) => "call", + Self::Identifier(..) => "identifier", + Self::Parens(..) => "parens", + _ => unreachable!(), + } + } + fn sort(&self) -> &'static str { + "value" + } +} +impl AstNode for Char { + fn ast_info(&self) -> &M { + let Self(meta, ..) = self; + meta + } + fn constructor(&self) -> &'static str { + "char" + } + fn sort(&self) -> &'static str { + "char" + } +} +impl AstNode for Inequality { + fn ast_info(&self) -> &M { + match self { + Self::LessThan(meta, ..) => meta, + Self::LessThanOrEqual(meta, ..) => meta, + Self::GreaterThan(meta, ..) => meta, + Self::GreaterThanOrEqual(meta, ..) => meta, + Self::Plus(meta, ..) => meta, + _ => unreachable!(), + } + } + fn constructor(&self) -> &'static str { + match self { + Self::LessThan(..) => "less_than", + Self::LessThanOrEqual(..) => "less_than_or_equal", + Self::GreaterThan(..) => "greater_than", + Self::GreaterThanOrEqual(..) => "greater_than_or_equal", + Self::Plus(..) => "plus", + _ => unreachable!(), + } + } + fn sort(&self) -> &'static str { + "inequality" + } +} +impl AstNode for Expression { + fn ast_info(&self) -> &M { + let Self(meta, ..) = self; + meta + } + fn constructor(&self) -> &'static str { + "equality" + } + fn sort(&self) -> &'static str { + "expression" + } +} +impl AstNode for Call { + fn ast_info(&self) -> &M { + let Self(meta, ..) = self; + meta + } + fn constructor(&self) -> &'static str { + "call" + } + fn sort(&self) -> &'static str { + "call" + } +} +impl AstNode for String { + fn ast_info(&self) -> &M { + let Self(meta, ..) = self; + meta + } + fn constructor(&self) -> &'static str { + "string" + } + fn sort(&self) -> &'static str { + "string" + } +} +impl AstNode for Plus { + fn ast_info(&self) -> &M { + match self { + Self::Plus(meta, ..) => meta, + Self::Minus(meta, ..) => meta, + Self::Times(meta, ..) => meta, + _ => unreachable!(), + } + } + fn constructor(&self) -> &'static str { + match self { + Self::Plus(..) => "plus", + Self::Minus(..) => "minus", + Self::Times(..) => "times", + _ => unreachable!(), + } + } + fn sort(&self) -> &'static str { + "plus" + } +} +impl AstNode for Layout { + fn ast_info(&self) -> &M { + let Self(meta, ..) = self; + meta + } + fn constructor(&self) -> &'static str { + "layout" + } + fn sort(&self) -> &'static str { + "layout" + } +} +impl AstNode for ConstValue { + fn ast_info(&self) -> &M { + match self { + Self::Int(meta, ..) => meta, + Self::Bool(meta, ..) => meta, + Self::String(meta, ..) => meta, + Self::Char(meta, ..) => meta, + _ => unreachable!(), + } + } + fn constructor(&self) -> &'static str { + match self { + Self::Int(..) => "int", + Self::Bool(..) => "bool", + Self::String(..) => "string", + Self::Char(..) => "char", + _ => unreachable!(), + } + } + fn sort(&self) -> &'static str { + "const_value" + } +} diff --git a/src/sunflower/from_pairs.rs b/src/sunflower/from_pairs.rs new file mode 100644 index 0000000..3b4c052 --- /dev/null +++ b/src/sunflower/from_pairs.rs @@ -0,0 +1,581 @@ +#![allow(unused)] +#![allow(non_snake_case)] +#![allow(non_camel_case_types)] +#![allow(clippy::all)] +// |==========================================================| +// | WARNING: THIS FILE IS AUTOMATICALLY GENERATED. | +// | CHANGES TO IT WILL BE DELETED WHEN REGENERATED. | +// | IN GENERAL, THIS FILE SHOULD NOT BE MODIFIED IN ANY WAY. | +// |==========================================================| +use super::prelude::*; +impl FromPairs for Program { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "program"); + let info = generator.generate(&pair); + Self( + info, + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + l . iter () . map (| x | if let ParsePairExpression :: Sort (_ , ref s) = x { Statement :: from_pairs (s , generator) } else { unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "program") ; }) . collect () + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "program" + ); + }, + ) + } +} +impl FromPairs for Statement { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "statement"); + let info = generator.generate(&pair); + match pair.constructor_name { + "expression" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::Expression( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Expression::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "statement"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "statement" + ); + } + } + "let" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::Let( + info, + if let ParsePairExpression::Sort(_, ref s) = l[1usize] { + Identifier::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "statement"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[3usize] { + Expression::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "statement"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "statement" + ); + } + } + a => unreachable!("{}", a), + } + } +} +impl FromPairs for Expression { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "expression"); + let info = generator.generate(&pair); + Self( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Equality::from_pairs(s, generator) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "expression" + ); + }, + ) + } +} +impl FromPairs for Identifier { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "identifier"); + let info = generator.generate(&pair); + return Self(info, pair.constructor_value.span().as_str().to_string()); + } +} +impl FromPairs for Equality { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "equality"); + let info = generator.generate(&pair); + match pair.constructor_name { + "equal" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::Equal( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Inequality::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "equality"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Box::new(Expression::from_pairs(s, generator)) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "equality"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "equality" + ); + } + } + "not_equal" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::NotEqual( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Inequality::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "equality"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Box::new(Expression::from_pairs(s, generator)) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "equality"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "equality" + ); + } + } + "inequality" => { + Self::Inequality( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Inequality::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "equality"); + }, + ) + } + a => unreachable!("{}", a), + } + } +} +impl FromPairs for Inequality { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "inequality"); + let info = generator.generate(&pair); + match pair.constructor_name { + "less_than" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::LessThan( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Plus::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "inequality"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Box::new(Expression::from_pairs(s, generator)) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "inequality"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "inequality" + ); + } + } + "less_than_or_equal" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::LessThanOrEqual( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Plus::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "inequality"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Box::new(Expression::from_pairs(s, generator)) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "inequality"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "inequality" + ); + } + } + "greater_than" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::GreaterThan( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Plus::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "inequality"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Box::new(Expression::from_pairs(s, generator)) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "inequality"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "inequality" + ); + } + } + "greater_than_or_equal" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::GreaterThanOrEqual( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Plus::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "inequality"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Box::new(Expression::from_pairs(s, generator)) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "inequality"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "inequality" + ); + } + } + "plus" => { + Self::Plus( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Plus::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "inequality"); + }, + ) + } + a => unreachable!("{}", a), + } + } +} +impl FromPairs for Plus { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "plus"); + let info = generator.generate(&pair); + match pair.constructor_name { + "plus" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::Plus( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Times::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "plus"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Times::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "plus"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "plus" + ); + } + } + "minus" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::Minus( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Times::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "plus"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Times::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "plus"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "plus" + ); + } + } + "times" => { + Self::Times( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Times::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "plus"); + }, + ) + } + a => unreachable!("{}", a), + } + } +} +impl FromPairs for Times { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "times"); + let info = generator.generate(&pair); + match pair.constructor_name { + "times" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::Times( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Value::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "times"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Box::new(Expression::from_pairs(s, generator)) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "times"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "times" + ); + } + } + "divide" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::Divide( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Value::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "times"); + }, + if let ParsePairExpression::Sort(_, ref s) = l[2usize] { + Box::new(Expression::from_pairs(s, generator)) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "times"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "times" + ); + } + } + "value" => { + Self::Value( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Value::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "times"); + }, + ) + } + a => unreachable!("{}", a), + } + } +} +impl FromPairs for Value { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "value"); + let info = generator.generate(&pair); + match pair.constructor_name { + "const" => { + Self::Const( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + ConstValue::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "value"); + }, + ) + } + "call" => { + Self::Call( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Call::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "value"); + }, + ) + } + "identifier" => { + Self::Identifier( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Identifier::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "value"); + }, + ) + } + "parens" => { + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self::Parens( + info, + if let ParsePairExpression::Sort(_, ref s) = l[1usize] { + Box::new(Expression::from_pairs(s, generator)) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "value"); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "value" + ); + } + } + a => unreachable!("{}", a), + } + } +} +impl FromPairs for ConstValue { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "const_value"); + let info = generator.generate(&pair); + match pair.constructor_name { + "int" => { + Self::Int( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Int::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "const_value"); + }, + ) + } + "bool" => { + Self::Bool( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Bool::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "const_value"); + }, + ) + } + "string" => { + Self::String( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + String::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "const_value"); + }, + ) + } + "char" => { + Self::Char( + info, + if let ParsePairExpression::Sort(_, ref s) = pair.constructor_value { + Char::from_pairs(s, generator) + } else { + unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "const_value"); + }, + ) + } + a => unreachable!("{}", a), + } + } +} +impl FromPairs for Call { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "call"); + let info = generator.generate(&pair); + if let ParsePairExpression::List(_, ref l) = pair.constructor_value { + Self( + info, + if let ParsePairExpression::Sort(_, ref s) = l[0usize] { + Identifier::from_pairs(s, generator) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "call" + ); + }, + if let ParsePairExpression::List(_, ref l) = l[2usize] { + l . iter () . map (| x | if let ParsePairExpression :: Sort (_ , ref s) = x { Box :: new (Expression :: from_pairs (s , generator)) } else { unreachable ! ("expected different parse pair expression in pair to ast conversion of {}" , "call") ; }) . collect () + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "call" + ); + }, + ) + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "call" + ); + } + } +} +impl FromPairs for Int { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "int"); + let info = generator.generate(&pair); + return Self(info, pair.constructor_value.span().as_str().to_string()); + } +} +impl FromPairs for Bool { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "bool"); + let info = generator.generate(&pair); + match pair.constructor_name { + "true" => Self::True(info), + "false" => Self::False(info), + a => unreachable!("{}", a), + } + } +} +impl FromPairs for String { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "string"); + let info = generator.generate(&pair); + return Self(info, pair.constructor_value.span().as_str().to_string()); + } +} +impl FromPairs for Char { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "char"); + let info = generator.generate(&pair); + return Self(info, pair.constructor_value.span().as_str().to_string()); + } +} +impl FromPairs for Layout { + fn from_pairs>(pair: &ParsePairSort, generator: &mut G) -> Self { + assert_eq!(pair.sort, "layout"); + let info = generator.generate(&pair); + Self( + info, + if let ParsePairExpression::Empty(ref span) = pair.constructor_value { + span.as_str().to_string() + } else { + unreachable!( + "expected different parse pair expression in pair to ast conversion of {}", + "layout" + ); + }, + ) + } +} diff --git a/src/sunflower/mod.rs b/src/sunflower/mod.rs new file mode 100644 index 0000000..b0be56b --- /dev/null +++ b/src/sunflower/mod.rs @@ -0,0 +1,21 @@ +#![allow(unused)] +#![allow(non_snake_case)] +#![allow(non_camel_case_types)] +#![allow(clippy::all)] +// |==========================================================| +// | WARNING: THIS FILE IS AUTOMATICALLY GENERATED. | +// | CHANGES TO IT WILL BE DELETED WHEN REGENERATED. | +// | IN GENERAL, THIS FILE SHOULD NOT BE MODIFIED IN ANY WAY. | +// |==========================================================| +mod ast; +pub use ast::*; +mod from_pairs; +pub use from_pairs::*; +mod ast_impls; +pub use ast_impls::*; +mod parser; +pub use parser::*; +mod prelude { + pub use super::*; + pub use lwb_parser::codegen_prelude::*; +} diff --git a/src/sunflower/parser.rs b/src/sunflower/parser.rs new file mode 100644 index 0000000..f274976 --- /dev/null +++ b/src/sunflower/parser.rs @@ -0,0 +1,631 @@ +#![allow(unused)] +#![allow(non_snake_case)] +#![allow(non_camel_case_types)] +#![allow(clippy::all)] +// |==========================================================| +// | WARNING: THIS FILE IS AUTOMATICALLY GENERATED. | +// | CHANGES TO IT WILL BE DELETED WHEN REGENERATED. | +// | IN GENERAL, THIS FILE SHOULD NOT BE MODIFIED IN ANY WAY. | +// |==========================================================| +pub const PARSER: &[u8] = &[ + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 187u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 17u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 64u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 64u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 100u8, 101u8, 110u8, 116u8, 105u8, 102u8, + 105u8, 101u8, 114u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 14u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 14u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 15u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 15u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 7u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 65u8, 1u8, 0u8, 0u8, 0u8, 17u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 8u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 90u8, 0u8, 0u8, 0u8, 0u8, 18u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 18u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 97u8, 1u8, 0u8, 0u8, + 0u8, 20u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 11u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 122u8, 1u8, 0u8, + 0u8, 0u8, 21u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 12u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 21u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 13u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 95u8, 0u8, 0u8, 0u8, 0u8, 23u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 14u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 14u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 10u8, 0u8, 0u8, 0u8, 23u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 13u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 15u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 23u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 13u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 16u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 24u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 17u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 24u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 18u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 65u8, 1u8, 0u8, 0u8, + 0u8, 26u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 19u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 90u8, 0u8, 0u8, 0u8, + 0u8, 27u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 20u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 27u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 21u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 97u8, 1u8, 0u8, 0u8, 0u8, 29u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 22u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 122u8, 0u8, 0u8, 0u8, 0u8, 30u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 23u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 30u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 24u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 48u8, 1u8, 0u8, 0u8, + 0u8, 32u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 25u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 57u8, 1u8, 0u8, 0u8, + 0u8, 33u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 26u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 33u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 27u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 45u8, 1u8, 0u8, 0u8, 0u8, 34u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 28u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 34u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 29u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 95u8, 1u8, 39u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 26u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 30u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 40u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 13u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 31u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 13u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 115u8, 105u8, 110u8, 103u8, 108u8, 101u8, 45u8, 115u8, + 116u8, 114u8, 105u8, 110u8, 103u8, 55u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 32u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 110u8, 111u8, 45u8, 108u8, 97u8, 121u8, 111u8, 117u8, 116u8, 1u8, 0u8, 0u8, 0u8, 67u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 53u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 33u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 67u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 53u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 34u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 67u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 35u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 115u8, 116u8, 114u8, 105u8, 110u8, 103u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 76u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 36u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 77u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 37u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 34u8, 0u8, 0u8, 0u8, 0u8, 81u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 38u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, + 0u8, 81u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 39u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 81u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 40u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 83u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 41u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 83u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 42u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 92u8, 1u8, 0u8, 0u8, 0u8, 84u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 43u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 84u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 44u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 34u8, 6u8, 0u8, 0u8, 0u8, 88u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 45u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 89u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 46u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 34u8, + 1u8, 94u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 26u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 47u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 95u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 13u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 48u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 13u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 115u8, 105u8, 110u8, 103u8, 108u8, 101u8, + 45u8, 115u8, 116u8, 114u8, 105u8, 110u8, 103u8, 110u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 49u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 110u8, 111u8, 45u8, 108u8, 97u8, 121u8, 111u8, 117u8, 116u8, 1u8, 0u8, 0u8, + 0u8, 122u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 48u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 50u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 122u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 48u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 51u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 122u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 52u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 99u8, 104u8, 97u8, 114u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 129u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 53u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 130u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 54u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 39u8, 10u8, 0u8, 0u8, 0u8, 133u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 55u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 133u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 56u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 1u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 135u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 57u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 135u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 58u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 92u8, 1u8, 0u8, 0u8, 0u8, 136u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 59u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 136u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 60u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 39u8, 6u8, 0u8, 0u8, 0u8, 139u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 61u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 140u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 62u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 39u8, 1u8, 144u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 26u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 63u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 145u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 13u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 64u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 13u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 115u8, 105u8, 110u8, 103u8, 108u8, 101u8, 45u8, 115u8, 116u8, 114u8, 105u8, + 110u8, 103u8, 160u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 65u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 110u8, 111u8, + 45u8, 108u8, 97u8, 121u8, 111u8, 117u8, 116u8, 1u8, 0u8, 0u8, 0u8, 172u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 40u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 66u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 2u8, 0u8, 0u8, 0u8, 172u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 40u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 67u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 172u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 68u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 110u8, 116u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 178u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 69u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 178u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 70u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 178u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 71u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 179u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 72u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 179u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 73u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 48u8, 1u8, 0u8, 0u8, 0u8, 181u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 74u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 57u8, 1u8, 186u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 26u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 75u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 187u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 13u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 76u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 13u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 115u8, 105u8, + 110u8, 103u8, 108u8, 101u8, 45u8, 115u8, 116u8, 114u8, 105u8, 110u8, 103u8, 202u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 77u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 110u8, 111u8, 45u8, 108u8, 97u8, 121u8, + 111u8, 117u8, 116u8, 1u8, 0u8, 0u8, 0u8, 214u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 46u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 78u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 214u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 46u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 79u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 214u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 80u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 98u8, 111u8, 111u8, 108u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 220u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 19u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 81u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 224u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 82u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 116u8, 114u8, 117u8, 101u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, + 231u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 83u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 232u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 84u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 1u8, 0u8, 0u8, + 0u8, 233u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 85u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 114u8, 1u8, 0u8, + 0u8, 0u8, 234u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 86u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 117u8, 1u8, + 0u8, 0u8, 0u8, 235u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 87u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 239u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 21u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 88u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 243u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 89u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 102u8, 97u8, 108u8, 115u8, 101u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 251u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 7u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 90u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 252u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 91u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 102u8, 1u8, 0u8, 0u8, 0u8, 253u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 92u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 97u8, 1u8, 0u8, 0u8, 0u8, 254u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 93u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 108u8, 1u8, 0u8, 0u8, 0u8, 255u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 94u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 115u8, 1u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 95u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 101u8, 0u8, 1u8, 0u8, 0u8, 0u8, 5u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 83u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 96u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 5u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 83u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 97u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 5u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 11u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 98u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 11u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 99u8, 111u8, + 110u8, 115u8, 116u8, 95u8, 118u8, 97u8, 108u8, 117u8, 101u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 18u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 15u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 99u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 22u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 100u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 110u8, 116u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 9u8, 0u8, 0u8, 0u8, 28u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 101u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 28u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 102u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 110u8, 116u8, 0u8, 1u8, 0u8, 0u8, 0u8, 33u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 17u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 103u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 37u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 104u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 98u8, 111u8, + 111u8, 108u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 44u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 44u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 106u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 98u8, 111u8, + 111u8, 108u8, 0u8, 1u8, 0u8, 0u8, 0u8, 50u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 21u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 107u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 54u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 108u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 115u8, 116u8, 114u8, 105u8, 110u8, 103u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 63u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 109u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 63u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 110u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 115u8, 116u8, 114u8, 105u8, 110u8, + 103u8, 0u8, 1u8, 0u8, 0u8, 0u8, 71u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 17u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 111u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 75u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 112u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 99u8, 104u8, 97u8, 114u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 82u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 113u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 82u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 114u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 99u8, 104u8, 97u8, 114u8, 0u8, 1u8, 0u8, 0u8, 0u8, 89u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 56u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 115u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 89u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 56u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 89u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 117u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 99u8, 97u8, 108u8, 108u8, 4u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 96u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 118u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 96u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 119u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 100u8, 101u8, 110u8, 116u8, + 105u8, 102u8, 105u8, 101u8, 114u8, 6u8, 0u8, 0u8, 0u8, 107u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 120u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 108u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 121u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 40u8, 8u8, 0u8, 0u8, 0u8, 111u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 29u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 122u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 9u8, 0u8, 0u8, 0u8, 121u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 123u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 121u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 124u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, 105u8, 111u8, + 110u8, 6u8, 0u8, 0u8, 0u8, 133u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 125u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 134u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 126u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 44u8, 3u8, 0u8, 0u8, 0u8, 138u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 127u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 141u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 128u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 142u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 129u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 41u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 147u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 111u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 130u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 147u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 111u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 131u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 147u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 132u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 118u8, 97u8, 108u8, 117u8, 101u8, + 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 154u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 25u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 133u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 158u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 134u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 99u8, 111u8, 110u8, + 115u8, 116u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 166u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 11u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 135u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 166u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 11u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 136u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 11u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 99u8, 111u8, + 110u8, 115u8, 116u8, 95u8, 118u8, 97u8, 108u8, 117u8, 101u8, 0u8, 1u8, 0u8, 0u8, 0u8, 179u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 17u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 137u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 183u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 138u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 99u8, 97u8, 108u8, 108u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, + 190u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 139u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 190u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 140u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 99u8, 97u8, 108u8, 108u8, 0u8, 1u8, 0u8, 0u8, 0u8, 196u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 29u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 141u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 200u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 142u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 100u8, 101u8, + 110u8, 116u8, 105u8, 102u8, 105u8, 101u8, 114u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, + 0u8, 0u8, 0u8, 213u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 143u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 213u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 144u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 100u8, 101u8, 110u8, 116u8, 105u8, 102u8, 105u8, 101u8, 114u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 225u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 33u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 145u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 229u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 146u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 112u8, 97u8, 114u8, 101u8, 110u8, 115u8, 3u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 238u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 147u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 239u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 148u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 40u8, 9u8, 0u8, 0u8, 0u8, 242u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 149u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 242u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 150u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, + 115u8, 115u8, 105u8, 111u8, 110u8, 6u8, 0u8, 0u8, 0u8, 253u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 151u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 254u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 152u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 41u8, 0u8, 1u8, 0u8, 0u8, 0u8, 3u8, 2u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 123u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 153u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 3u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 123u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 154u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 8u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 155u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 8u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 113u8, 117u8, 97u8, 108u8, 105u8, 116u8, 121u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 13u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 40u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 156u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 17u8, 2u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 157u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 113u8, 117u8, 97u8, 108u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 25u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 158u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 25u8, + 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 159u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 110u8, 101u8, 113u8, + 117u8, 97u8, 108u8, 105u8, 116u8, 121u8, 6u8, 0u8, 0u8, 0u8, 36u8, 2u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 160u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 37u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 161u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 61u8, 1u8, 0u8, 0u8, 0u8, 38u8, 2u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 162u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 61u8, 9u8, 0u8, 0u8, 0u8, 41u8, 2u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 163u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 41u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 164u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, + 112u8, 114u8, 101u8, 115u8, 115u8, 105u8, 111u8, 110u8, 0u8, 1u8, 0u8, 0u8, 0u8, 53u8, 2u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 44u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 165u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 57u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 166u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 110u8, + 111u8, 116u8, 95u8, 101u8, 113u8, 117u8, 97u8, 108u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 9u8, 0u8, 0u8, 0u8, 69u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 167u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 69u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 168u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 110u8, 101u8, 113u8, 117u8, 97u8, 108u8, 105u8, 116u8, + 121u8, 6u8, 0u8, 0u8, 0u8, 80u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 169u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 81u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 170u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 33u8, 1u8, 0u8, 0u8, 0u8, 82u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 171u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 61u8, 9u8, 0u8, 0u8, 0u8, 85u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 172u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 85u8, 2u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 173u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, + 105u8, 111u8, 110u8, 0u8, 1u8, 0u8, 0u8, 0u8, 97u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 29u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 174u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 2u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 175u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 110u8, 101u8, 113u8, 117u8, + 97u8, 108u8, 105u8, 116u8, 121u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, + 114u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 176u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 114u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 177u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 105u8, 110u8, 101u8, 113u8, 117u8, 97u8, 108u8, 105u8, 116u8, 121u8, 0u8, 1u8, 0u8, + 0u8, 0u8, 127u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 203u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 178u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 127u8, 2u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 203u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 179u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 127u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 180u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 110u8, 101u8, + 113u8, 117u8, 97u8, 108u8, 105u8, 116u8, 121u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 139u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 37u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 181u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 143u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 182u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 108u8, 101u8, 115u8, 115u8, 95u8, 116u8, 104u8, 97u8, 110u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 155u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 183u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 155u8, 2u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 184u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 112u8, 108u8, 117u8, 115u8, 6u8, + 0u8, 0u8, 0u8, 160u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 185u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 161u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 186u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 60u8, + 9u8, 0u8, 0u8, 0u8, 164u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 187u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 164u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 188u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, 105u8, 111u8, + 110u8, 0u8, 1u8, 0u8, 0u8, 0u8, 176u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 47u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 189u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 180u8, 2u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 18u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 190u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 18u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 108u8, 101u8, 115u8, 115u8, 95u8, 116u8, 104u8, 97u8, + 110u8, 95u8, 111u8, 114u8, 95u8, 101u8, 113u8, 117u8, 97u8, 108u8, 3u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 201u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 191u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 201u8, 2u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 192u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 112u8, 108u8, 117u8, 115u8, 6u8, 0u8, 0u8, 0u8, + 206u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 193u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 207u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 194u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 60u8, 1u8, 0u8, 0u8, 0u8, + 208u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 195u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 61u8, 9u8, 0u8, 0u8, 0u8, + 211u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 196u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 211u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 197u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, 105u8, 111u8, 110u8, 0u8, 1u8, 0u8, + 0u8, 0u8, 223u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 40u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 198u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 227u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 12u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 199u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 12u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 103u8, 114u8, 101u8, 97u8, 116u8, 101u8, 114u8, 95u8, 116u8, 104u8, 97u8, + 110u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 242u8, 2u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 200u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 242u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 201u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 112u8, 108u8, 117u8, + 115u8, 6u8, 0u8, 0u8, 0u8, 247u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 202u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 248u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 203u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 62u8, 9u8, 0u8, 0u8, 0u8, 251u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 204u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 251u8, 2u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 205u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, + 105u8, 111u8, 110u8, 0u8, 1u8, 0u8, 0u8, 0u8, 7u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 50u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 206u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 11u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 21u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 207u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 21u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 103u8, 114u8, 101u8, 97u8, 116u8, + 101u8, 114u8, 95u8, 116u8, 104u8, 97u8, 110u8, 95u8, 111u8, 114u8, 95u8, 101u8, 113u8, 117u8, + 97u8, 108u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 35u8, 3u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 208u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 35u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 209u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 112u8, 108u8, + 117u8, 115u8, 6u8, 0u8, 0u8, 0u8, 40u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 210u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 41u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 211u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 62u8, 1u8, 0u8, 0u8, 0u8, 42u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 212u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 61u8, 9u8, 0u8, 0u8, 0u8, 45u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 213u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 45u8, 3u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 214u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, + 105u8, 111u8, 110u8, 0u8, 1u8, 0u8, 0u8, 0u8, 57u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 17u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 215u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 61u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 216u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 112u8, 108u8, 117u8, 115u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 68u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 217u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 68u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 218u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 112u8, 108u8, 117u8, 115u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 75u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 37u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 219u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 75u8, 3u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 37u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 220u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 75u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 221u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, + 112u8, 114u8, 101u8, 115u8, 115u8, 105u8, 111u8, 110u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 87u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 25u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 222u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 91u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 8u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 223u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 8u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 113u8, 117u8, 97u8, 108u8, 105u8, 116u8, 121u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 102u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 8u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 224u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 102u8, 3u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 8u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 225u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 8u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 113u8, 117u8, 97u8, 108u8, + 105u8, 116u8, 121u8, 0u8, 1u8, 0u8, 0u8, 0u8, 113u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 82u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 226u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 113u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 82u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 227u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 113u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 228u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 112u8, 108u8, 117u8, 115u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, + 0u8, 0u8, 119u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 28u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 229u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 123u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 230u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 112u8, 108u8, 117u8, 115u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, + 0u8, 0u8, 0u8, 130u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 231u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 130u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 232u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 105u8, 109u8, 101u8, 115u8, 6u8, 0u8, 0u8, 0u8, 136u8, 3u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 233u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 137u8, 3u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 234u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 43u8, 9u8, 0u8, 0u8, 0u8, 140u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 235u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 140u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 236u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 116u8, 105u8, 109u8, 101u8, 115u8, 0u8, 1u8, 0u8, 0u8, 0u8, 147u8, 3u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 29u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 237u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 151u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 238u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 109u8, 105u8, 110u8, + 117u8, 115u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 159u8, 3u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 239u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 159u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 240u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 105u8, + 109u8, 101u8, 115u8, 6u8, 0u8, 0u8, 0u8, 165u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 241u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 166u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 242u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 45u8, 9u8, 0u8, 0u8, 0u8, 169u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 243u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 169u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 244u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 105u8, 109u8, 101u8, 115u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 176u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 19u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 245u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 180u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 246u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 105u8, 109u8, 101u8, 115u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 188u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 247u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 188u8, 3u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 248u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 105u8, 109u8, 101u8, 115u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 196u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 95u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 249u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 196u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 95u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 250u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 196u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 251u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 105u8, 109u8, 101u8, + 115u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 203u8, 3u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 34u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 252u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 207u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 253u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 105u8, 109u8, + 101u8, 115u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 215u8, 3u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 254u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 215u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 255u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 118u8, 97u8, + 108u8, 117u8, 101u8, 6u8, 0u8, 0u8, 0u8, 221u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 222u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 42u8, 9u8, 0u8, 0u8, 0u8, 225u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 225u8, 3u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, + 105u8, 111u8, 110u8, 0u8, 1u8, 0u8, 0u8, 0u8, 237u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 35u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 241u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 100u8, 105u8, 118u8, 105u8, 100u8, 101u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 250u8, 3u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 250u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 7u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 118u8, 97u8, 108u8, + 117u8, 101u8, 6u8, 0u8, 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 8u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 1u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 9u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 47u8, + 9u8, 0u8, 0u8, 0u8, 4u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 10u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 11u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, 105u8, 111u8, 110u8, + 0u8, 1u8, 0u8, 0u8, 0u8, 16u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 19u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 12u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 20u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 13u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 118u8, 97u8, 108u8, 117u8, 101u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 28u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 14u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 28u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 15u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 118u8, 97u8, 108u8, 117u8, 101u8, 0u8, 1u8, 0u8, 0u8, 0u8, 36u8, + 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 91u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 16u8, 1u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 36u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 91u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 17u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 36u8, 4u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 18u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 115u8, 116u8, 97u8, 116u8, 101u8, 109u8, + 101u8, 110u8, 116u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 47u8, 4u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 33u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 19u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 51u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 20u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, 105u8, 111u8, 110u8, 2u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 64u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 21u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 64u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 22u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, + 105u8, 111u8, 110u8, 6u8, 0u8, 0u8, 0u8, 75u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 23u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 76u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 24u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 59u8, 0u8, 1u8, 0u8, 0u8, 0u8, 80u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 47u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 25u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 84u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 26u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 108u8, 101u8, 116u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 6u8, 0u8, 0u8, 0u8, 90u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 5u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 27u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 91u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 28u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 108u8, 1u8, + 0u8, 0u8, 0u8, 92u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 29u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 1u8, + 0u8, 0u8, 0u8, 93u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 30u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 116u8, 9u8, + 0u8, 0u8, 0u8, 96u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 31u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 96u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 32u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 105u8, 100u8, 101u8, 110u8, 116u8, 105u8, 102u8, 105u8, 101u8, 114u8, + 6u8, 0u8, 0u8, 0u8, 107u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 33u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + 0u8, 0u8, 0u8, 108u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 34u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 61u8, + 9u8, 0u8, 0u8, 0u8, 111u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 35u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 111u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 36u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 101u8, 120u8, 112u8, 114u8, 101u8, 115u8, 115u8, 105u8, 111u8, + 110u8, 6u8, 0u8, 0u8, 0u8, 122u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 3u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 37u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 1u8, 0u8, 0u8, 0u8, 123u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 38u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 59u8, 0u8, 1u8, 0u8, 0u8, 0u8, 128u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 21u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 39u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 128u8, 4u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 21u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 40u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 128u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 7u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 41u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 7u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 112u8, 114u8, 111u8, 103u8, 114u8, 97u8, 109u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 138u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 42u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 138u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 43u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 138u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 44u8, 1u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 115u8, 116u8, 97u8, + 116u8, 101u8, 109u8, 101u8, 110u8, 116u8, 0u8, 0u8, 0u8, 0u8, 0u8, 151u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 17u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 45u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 151u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 17u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 46u8, + 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 160u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 7u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 47u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 7u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 112u8, 114u8, 111u8, 103u8, 114u8, 97u8, 109u8, 1u8, 0u8, 0u8, 0u8, 169u8, 4u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 19u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 48u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 169u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 19u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 49u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 169u8, 4u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 50u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 6u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 108u8, 97u8, 121u8, 111u8, 117u8, 116u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 10u8, 0u8, 0u8, 0u8, 178u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 51u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 178u8, 4u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 9u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 52u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 179u8, 4u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 53u8, 1u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 179u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 54u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 114u8, 1u8, 0u8, 0u8, 0u8, 181u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 55u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 181u8, 4u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 56u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 110u8, 1u8, 0u8, 0u8, 0u8, 183u8, 4u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 57u8, 1u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 183u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 58u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 116u8, 1u8, 0u8, 0u8, 0u8, 185u8, 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 59u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 185u8, + 4u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 60u8, 1u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 32u8, 0u8, +];