diff --git a/.clj-kondo/.cache/v1/clj/user.transit.json b/.clj-kondo/.cache/v1/clj/user.transit.json new file mode 100644 index 0000000..8a41995 --- /dev/null +++ b/.clj-kondo/.cache/v1/clj/user.transit.json @@ -0,0 +1 @@ +["^ ","~$eval-list",["^ ","~:fixed-arities",["~#set",[3]],"~:private",true,"~:ns","~$user","~:name","^0","~:type","~:fn","~:col",1,"~:top-ns",null,"~:row",195],"~$resolve-var",["^ ","^;",57,"^9",1,"^1",["^2",[3]],"^6","^<","^4","^5","^:",null,"^7","^8"],"~$syntax-quote*",["^ ","^1",["^2",[3]],"^3",true,"^4","^5","^6","^=","^7","^8","^9",1,"^:",null,"^;",22],"~$new-v",["^ ","^;",398,"^9",18,"^6","^>","^4","^5","^:",null],"~$ctor",["^ ","^;",472,"^9",17,"~:varargs-min-arity",0,"^6","^?","^4","^5","^:",null,"^7","^8"],"~$v",["^ ","^;",251,"^9",20,"^6","~$v","^4","^5","^:",null],"~$resolve-sym",["^ ","^1",["^2",[3]],"^3",true,"^4","^5","^6","^A","^7","^8","^9",1,"^:",null,"^;",95],"~$first-form",["^ ","^;",197,"^9",3,"^6","^B","^4","^5","^:",null,"^7","~:any"],"~$run-finally",["^ ","^;",368,"^9",13,"^1",["^2",[1]],"^6","^D","^4","^5","^:",null,"^7","^8"],"~$eval-require",["^ ","^1",["^2",[2]],"^3",true,"^4","^5","^6","^E","^7","^8","^9",1,"^:",null,"~:arities",["^ ","~i2",["^ ","~:ret","~:nil","~:arglist-str","[ctx spec]"]],"^;",74],"~$alias-sym",["^ ","^;",85,"^9",15,"^6","^J","^4","^5","^:",null],"~$name",["^ ","^;",199,"^9",3,"^6","^K","^4","^5","^:",null,"^7",["^2",[["^ ","~:call",["^ ","~:filename","/Users/yogthos/src/jolt/src/jolt/evaluator.janet","^7","^L","~:lang","~:clj","~:base-lang","^O","~:resolved-ns","^5","^4","^5","^6","^B","~:arity",1],"^;",200,"^9",15,"~:end-row",200,"~:end-col",33],["^ ","~:tag","^H","^;",201,"^9",15,"^S",201,"^T",18]]]],"^M","/Users/yogthos/src/jolt/src/jolt/evaluator.janet","~$macro-fn",["^ ","^1",["^2",[]],"^4","^5","^6","^V","^7","^8","^9",18,"^:",null,"^@",0,"^;",235],"~$parse-arg-names",["^ ","^1",["^2",[1]],"^3",true,"^4","^5","^6","^W","^7","^8","^9",1,"^:",null,"^F",["^ ","~i1",["^ ","^G",["^ ","^7","~:map","~:val",["^ ","~:fixed",["^ ","^;",181,"^S",546,"^9",11,"^T",13]]],"^I","[args-form]"]],"^;",135],"~$special-symbol?",["^ ","^1",["^2",[1]],"^3",true,"^4","^5","^6","^[","^7","^8","^9",1,"^:",null,"^F",["^ ","~i1",["^ ","^G",["^2",["~:boolean"]],"^I","[name]"]],"^;",10],"~$sym-name?",["^ ","^1",["^2",[2]],"^3",true,"^4","^5","^6","^11","^7","^8","^9",1,"^:",null,"^;",6],"~$inner",["^ ","^;",159,"^9",17,"^6","^12","^4","^5","^:",null],"~$sym-name-str",["^ ","^1",["^2",[1]],"^3",true,"^4","^5","^6","^13","^7","^8","^9",1,"^:",null,"^;",70],"~$unwrap-meta-name",["^ ","^1",["^2",[1]],"^3",true,"^4","^5","^6","^14","^7","^8","^9",1,"^:",null,"^;",184]] \ No newline at end of file diff --git a/.clj-kondo/.cache/v1/lock b/.clj-kondo/.cache/v1/lock new file mode 100644 index 0000000..e69de29 diff --git a/.dirge/memory/.cross_session_state b/.dirge/memory/.cross_session_state new file mode 100644 index 0000000..ae9f153 --- /dev/null +++ b/.dirge/memory/.cross_session_state @@ -0,0 +1,5 @@ +{ + "last_run": 1780347402, + "first_check": 1780347402, + "last_scanned_watermark": "" +} \ No newline at end of file diff --git a/.dirge/memory/.curator_state b/.dirge/memory/.curator_state new file mode 100644 index 0000000..61ec00e --- /dev/null +++ b/.dirge/memory/.curator_state @@ -0,0 +1,4 @@ +{ + "last_run": 1780347402, + "first_check": 1780347402 +} \ No newline at end of file diff --git a/.dirge/memory/MEMORY.md b/.dirge/memory/MEMORY.md new file mode 100644 index 0000000..64e0739 --- /dev/null +++ b/.dirge/memory/MEMORY.md @@ -0,0 +1,9 @@ +`defmacro` supports optional docstring: `(defmacro name [args] body)` or `(defmacro name \"doc\" [args] body)`. Implementation: slice rest-form from form index 2, check if first is string, adjust args-form and body start accordingly. Implicit `&env` binding injected as `(put new-bindings "&env" @{'ns nil})` — must use `@{}` not `(struct …)` because nil values get dropped from structs. `fn*` uses same `parse-arg-names` helper for `& rest` args. +§ +Jolt bootstrap: `core-bindings` (def- map) maps symbol strings → Janet functions. `init-core!` interns them into clojure.core ns. Macros (when, defn, declare) are registered in `core-macro-names` which returns `@{"when" true "defn" true "declare" true}`. `init-core!` checks this table and sets `:macro true` on the var for macro bindings. Order matters: `core-when` and `core-defn` must be defined BEFORE `core-bindings` map literal references them, otherwise compile error. +§ +Reader comments (`;`) return `{:jolt/type :jolt/skip}` sentinel; `parse-next`/`parse-string` skip past it. Closing `)`, `]`, `}` produce explicit "Unmatched" errors. `unwrap-meta-name` recursively unwraps `(with-meta sym meta)` to raw symbol — used in def, ns, deftype, defmethod. `resolve-sym` does class-name lookup: `Foo.Bar.Baz` → ns "Foo.Bar" name "Baz". Janet `(set [a b] tuple)` doesn't work — use explicit indexing. `comment` must be a macro (registered in core-macro-names) to avoid evaluating body. +§ +Sci bootstrap order: macros(4/4)→protocols(15/17)→utils(39/47)→types(22/27)→unrestrict(2/2)→vars(28/28)→lang(10/10)→ctx-store(6/6)→namespaces(93/98)→core(60/69). All .cljc; #?(:clj) resolved at read time, #?(:cljs)→nil. +§ +Janet `last` works only on indexed types (tuple, array). On strings it returns nil. Use `(s (- (length s) 1))` to get the last character of a string, or `(string/slice s (- (length s) 1))` for the last char as string. `(last "hello")` → nil, not `\o`. diff --git a/.dirge/memory/PITFALLS.md b/.dirge/memory/PITFALLS.md new file mode 100644 index 0000000..9bcebeb --- /dev/null +++ b/.dirge/memory/PITFALLS.md @@ -0,0 +1,3 @@ +Janet `apply` requires a function/cfunction. When tables/structs are used as lookup maps (like deftype fields, multimethod dispatch tables), they get called via `(get f key)` not `(apply f args)`. The evaluator's default call path checks `(function? f)` before `apply`, falling back to `(get f (first args))` for single-arg table/struct calls. +§ +Janet structs silently omit entries with nil values: `(struct ;[:x nil :y 1])` → `{:y 1}`. The `:x` key is completely dropped from the struct, not just set to nil. Use `@{}` (mutable table) when map needs nil-valued entries. This caused the `&env` implicit binding to fail — `(put new-bindings "&env" {'ns nil})` created a struct that became empty `{}`, so `(:ns &env)` failed with unknown method. Fix: use `@{}` table for bindings that may contain nil values, or use a non-nil sentinel. diff --git a/.dirge/skills/.curator_state b/.dirge/skills/.curator_state new file mode 100644 index 0000000..61ec00e --- /dev/null +++ b/.dirge/skills/.curator_state @@ -0,0 +1,4 @@ +{ + "last_run": 1780347402, + "first_check": 1780347402 +} \ No newline at end of file diff --git a/.dirge/skills/.usage.json b/.dirge/skills/.usage.json new file mode 100644 index 0000000..11a18ea --- /dev/null +++ b/.dirge/skills/.usage.json @@ -0,0 +1,36 @@ +{ + "jolt-dev": { + "created_by": "agent", + "use_count": 6, + "view_count": 15, + "patch_count": 12, + "last_used_at": "2026-06-02T03:23:57.409721+00:00", + "last_viewed_at": "2026-06-02T03:23:57.400994+00:00", + "last_patched_at": "2026-06-02T02:52:21.531624+00:00", + "created_at": "2026-06-01T21:26:06.614465+00:00", + "state": "active", + "pinned": false + }, + "jpm-build": { + "created_by": "agent", + "use_count": 0, + "view_count": 9, + "patch_count": 0, + "last_viewed_at": "2026-06-02T02:26:40.592223+00:00", + "created_at": "2026-06-01T20:56:39.144222+00:00", + "state": "active", + "pinned": false + }, + "jolt-bootstrap": { + "created_by": "agent", + "use_count": 5, + "view_count": 14, + "patch_count": 7, + "last_used_at": "2026-06-02T03:23:57.420498+00:00", + "last_viewed_at": "2026-06-02T03:23:57.415106+00:00", + "last_patched_at": "2026-06-02T02:51:30.047986+00:00", + "created_at": "2026-06-01T21:49:51.101718+00:00", + "state": "active", + "pinned": false + } +} \ No newline at end of file diff --git a/.dirge/skills/jolt-bootstrap/SKILL.md b/.dirge/skills/jolt-bootstrap/SKILL.md new file mode 100644 index 0000000..b6ffae5 --- /dev/null +++ b/.dirge/skills/jolt-bootstrap/SKILL.md @@ -0,0 +1,82 @@ +--- +name: jolt-bootstrap +description: TDD workflow for bootstrapping a Clojure interpreter on Janet +--- + +# Bootstrapping a Clojure interpreter on Janet + +## Prerequisites +- Janet ≥ 1.36, jpm +- Target Clojure sources (e.g. sci) to load +- Jolt sources in `src/jolt/`, tests in `test/` + +## TDD Loop +1. Write a failing test in `test/-test.janet` using `(use ../src/jolt/...)` relative paths +2. Run with `janet test/.janet` (faster than `jpm test` for iteration) +3. If test involves `init` (which loads clojure.core), also `(use ../src/jolt/api)` +4. Implement in `src/jolt/.janet` +5. Run test → see failure message → fix → repeat +6. After passing: `jpm test` to ensure no regressions + +## Current bootstrap progress + +**Loaded (all .cljc, #? resolved at read time):** +- `sci.impl.macros` — 4/4 (ns, defmacro deftime, defmacro usetime, deftime(? macro)) +- `sci.impl.protocols` — 15/17 +- `sci.impl.utils` — 39/47 +- `sci.impl.types` — 22/27 +- `sci.impl.unrestrict` — 2/2 +- `sci.impl.vars` — 28/28 (comment block parses via :jolt/skip sentinel) +- `sci.lang` — 10/10 (IVar resolves via class-name pattern lookup) +- `sci.ctx-store` — 6/6 +- `sci.impl.namespaces` — 93/98 (parse crash at unmatched brace) +- `sci.core` — 60/69 (namespaces/*1/*2/*3/*e unresolved) + +**Special forms (22):** quote, syntax-quote, unquote, unquote-splicing, do, if, def, defmacro, fn*, let*, loop*, recur, throw, try, set!, var, locking, instance?, defmulti, defmethod, deftype, new, . + +**Reader:** `#?(:clj ...)`, `#?@(:clj ...)` with splicing, `#_` discard (returns :jolt/skip sentinel), `#\` var-quote, `^` metadata. Comments `;` skip via :jolt/skip. Closing delimiters `)`, `]`, `}` produce explicit "Unmatched" errors. + +**Core macros:** when, defn (with docstring), defn-, declare, fn (wraps fn*), defprotocol, extend-type, extend-protocol, extend, reify, proxy, definterface, comment (ignores body), prefer-method (stub) + +**Key utilities:** `unwrap-meta-name` — recursively unwraps `(with-meta sym meta)` to extract raw symbol. Used in def, ns, deftype, defmethod. + +**Class-name resolution:** unqualified symbols with dots (`Foo.Bar.Baz`) are resolved by splitting at last dot into ns+name. + +## Key patterns + +### Symbol structs +```janet +{:jolt/type :symbol :ns :name } +``` + +### Macro intern marks var +```janet +(def v (ns-intern ns name macro-fn)) +(put v :macro true) +``` + +### Reader conditional `#?` +Resolves at read time: scans for `:clj` keyword, picks next form. +`#?@` wraps resolved form in `:jolt/splice` struct for list/vec/set splicing. + +### Callable forms check +```janet +(if (function? f) + (apply f args) + (get f (first args))) ; table/struct lookup +``` + +## Pitfalls +- Janet `let` can't bind to nil; use `(var x nil)` then `(set x val)` +- `(get table)` with 1 arg = compile error, use `(table :key)` shorthand +- `(put fn :key val)` fails on functions; stash metadata on vars instead +- `deftype` field names must be keywords (not strings) for `(inst :field)` access +- `defn` placed after `core-bindings` that reference it → compile error; order matters +- Janet's `try` macro: `(try body ([err] handler))` — catch clause is tuple `[binding body...]` +- **`core-macro-names`** is a zero-arg fn returning a table: `(get (core-macro-names) name)`. Don't call it as `(core-macro-names name)` — that's arity mismatch +- **Janet `#{}` sets** can cause parse issues — use `@[]` instead for stub collections +- **`break` in `while`** doesn't return a value in Janet — use `(var done nil)` + `(while (and cond (not done)) ... (set done result))` pattern instead +- **`read-reader-conditional`** for `#?(:cljs X)` with no `:clj` branch returns `[nil new-pos]`. For `#?@(:cljs X)` wrapping, nil gets wrapped in splice struct with `@[nil]` items +- **`#_` discard** now works in lists, vectors, and sets — wraps the skipped form in `{:jolt/type :jolt/skip}` and readers check for this +- **`read-regex`** now works with `(var done nil)` pattern to return value from while loop +- **`#?@` splicing inside vectors** — if the resolved :clj branch is itself a vector, items are extracted and spliced. Works for both lists and vectors. diff --git a/.dirge/skills/jolt-dev/SKILL.md b/.dirge/skills/jolt-dev/SKILL.md new file mode 100644 index 0000000..42f1f50 --- /dev/null +++ b/.dirge/skills/jolt-dev/SKILL.md @@ -0,0 +1,180 @@ +--- +description: Jolt development workflow — build, test, special form patterns, Janet gotchas +--- + +# Jolt Development + +## Build & Test + +```bash +cd /Users/yogthos/src/jolt +jpm build # produces build/jolt +jpm test # runs all tests +janet test/foo.janet # run a single test file from project root +``` + +## Special Form Checklist + +To add a new special form to the evaluator: + +1. Add the name to `special-symbol?` in `src/jolt/evaluator.janet` +2. Add a match arm in `eval-list` (the match on `name`) +3. Add tests in `test/evaluator-test.janet` + +The match arm receives `ctx`, `bindings`, and `form` (the full list). Use `(in form 1)` for first arg, etc. + +**Non-symbol heads** (keywords, etc.): `eval-list` first checks `(and (struct? first-form) (= :symbol (...)))` before extracting `name`. If not a symbol, falls through to default function application. This means `(:ns &env)` works because the head `:ns` is a keyword, not a symbol, so it's evaluated and called as a lookup. + +### Current special forms (22): +`quote`, `syntax-quote`, `unquote`, `unquote-splicing`, `do`, `if`, `def`, `defmacro`, `fn*`, `let*`, `loop*`, `recur`, `throw`, `try`, `set!`, `var`, `locking`, `instance?`, `defmulti`, `defmethod`, `deftype`, `new`, `.` + +### defmacro details +- Supports optional docstring: `(defmacro name [args] body)` or `(defmacro name "doc" [args] body)` +- Implementation: `(tuple/slice form 2)` → check if first is string → adjust args-form and body start +- Implicit `&env` binding: `(put new-bindings "&env" @{})` — table, not struct (nil-safe) +- Uses `parse-arg-names` for `& rest` arg handling + +### defmulti / defmethod +- `defmulti` stores the methods table on the **var** via `(put v :jolt/methods methods)`, NOT on the function +- Janet `put` on a function value fails silently +- `defmethod` retrieves methods via `(get mm-var :jolt/methods)` using `resolve-var` to get the var first + +### set! +- If var doesn't exist, auto-creates it (`ns-intern`) rather than erroring +- Needed for sci's `(set! *warn-on-reflection* true)` + +### defmethod (auto-create) +- If the multimethod var doesn't exist yet, auto-creates it with a dummy fn and empty methods table +- This allows sci's `defmethod print-method` to work before `defmulti print-method` is defined + +### deftype +- Handles `^:meta` on type name via `with-meta` pattern +- Fields vector handles `^:meta` annotations and `^Type` hints — extracts actual symbol name +- Produces a table with `:jolt/deftype "ns.TypeName"` and keyword-keyed fields + +## Janet Gotchas + +- `var` declares mutable locals that can be `set` later; `def`/`let` are immutable +- `let` cannot bind to `nil` — use `(var x nil)` instead of `(let [x nil] ...)` +- `(get table key)` needs 2 args minimum — for single-arg checks use `(table :key)` +- Functions are not tables — `(put fn :prop val)` fails. Stash properties on vars +- `match` is Janet's pattern matching — no `case` or `cond` needed for simple dispatch +- Janet structs silently **drop entries with nil values**: `(struct ;[:x nil :y 1])` → `{:y 1}`. Use `@{}` mutable tables when nil-valued entries are needed (e.g., `&env` binding `@{}` for macro bodies) +- `match` with string patterns returns **nil** (not error) when no pattern matches. Used in `eval-list` to handle non-symbol heads cleanly — keyword heads like `:ns` fall through to default function application +- `break` in `while` does NOT return a value in Janet. Use `(var done nil)` + `(set done val)` + check pattern instead +- Janet `#{}` set literals can cause parse issues in some contexts — use `@[]` as fallback +- `(first struct)` calls `:jolt/type` method — use `(get struct :key)` instead of positional access +- Janet `(struct ;[:x nil])` silently drops the nil entry — the map becomes `{}`. Use `@{}` tables for nil-safe entries +- `(length struct)` counts key-value pairs, not keys. Use `(length (keys struct))` for key count + +## Comment Handling + +Comments `;` in `read-form` return `{:jolt/type :jolt/skip}` sentinel: +```janet +(= c 59) # ; +[{:jolt/type :jolt/skip} line-end]) +``` + +`parse-next` and `parse-string` both skip over `:jolt/skip` results: +- `parse-next` uses inner `parse-next-loop` that recurses on skip +- `parse-string` recurses on skip to return next non-comment form + +`read-map` checks both key AND value positions for `:jolt/skip` to skip `#_`-discarded entries. + +Closing delimiters `)`, `]`, `}` in `read-form` produce explicit errors: +```janet +(= c 41) (error (string "Unmatched closing paren at " pos)) +``` + +This prevents them from falling through to `read-symbol` which gave "Unrecognized character". + +## `unwrap-meta-name` Utility + +Recursively unwraps `(with-meta sym meta)` forms to extract the underlying symbol: +```janet +(defn- unwrap-meta-name [form] + (if (and (array? form) (> (length form) 0) + (struct? (in form 0)) + (= :symbol ((in form 0) :jolt/type)) + (= "with-meta" ((in form 0) :name))) + (unwrap-meta-name (in form 1)) + form)) +``` + +Used in: `def`, `ns` (ns name), `deftype` (type name + field names), `defmethod` (arg names). +Replaced duplicated `with-meta` unwrapping code in each of these forms. + +## Bootstrap Patterns + +### Class-name resolution in resolve-sym + +When a simple symbol (unqualified) isn't found in current ns or clojure.core, checks for dotted class-name pattern: +`Foo.Bar.Baz` → finds last dot → ns "Foo.Bar", name "Baz" → tries ns-resolve. +This resolves symbols like `IVar` that are interned in `sci.impl.vars` but referred to unqualified from `sci.lang`. + +### Reader conditionals +- `#?(:clj expr :cljs expr2)` — resolved at read time by `read-reader-conditional` +- `#?@(:clj expr :cljs expr2)` — splicing variant, wraps resolved items in `{:jolt/type :jolt/splice :items ...}` +- List/vector/set readers check for splice and flatten items +- `#_` — discard reader macro, reads next form and returns it as position only + +### Core macros (in core.janet) +- `core-macro-names` returns `@{"when" true "defn" true "declare" true "defprotocol" true "extend-type" true "reify" true "fn" true "proxy" true "definterface" true "defn-" true}` — a table +- `init-core!` calls `(get (core-macro-names) name)` to check, then `(put v :macro true)` +- Order matters: macro functions must be defined BEFORE `core-bindings` map references them + +### Core stubs for sci bootstrap +- `core-derive`, `core-isa?`, `core-ancestors`, `core-descendants` — minimal hierarchy +- `core-Object`, `core-Thread`, `core-ThreadLocal`, `core-IllegalStateException` — JVM class stubs +- `core-volatile!`, `core-vswap!`, `core-vreset!` — volatile (atom-like table with :val key) +- `core-defprotocol` emits `(do (def name @{}) (def method fn) ...)` — macro, returns do form +- `core-extend-type`, `core-extend-protocol`, `core-extend`, `core-reify`, `core-satisfies?`, `core-extends?`, `core-implements?`, `core-type->str` — protocol stubs + +### Namespace handling +- `ns` form handles `^:meta` on ns name via `with-meta` pattern +- `def` form also handles `^:meta` on def name (extracts name-sym from `(with-meta Name meta)`) +- `require` clause in `ns` wraps each spec in `(when s ...)` for nil-safety +- `resolve-var` falls back to checking clojure.core namespace if var not found in current ns + +### Bootstrap loading order +``` +sci.impl.macros (4/4 ok) +sci.impl.protocols (15/17 ok) +sci.impl.utils (39/47 ok) +sci.impl.types (22/27 ok) +sci.impl.unrestrict (2/2 ok) +sci.impl.vars (28/28 ok — comment block parsed as skip) +sci.lang (10/10 ok — IVar via class-name resolve) +sci.ctx-store (6/6 ok) +sci.impl.namespaces (93/98 ok — parse crash at unmatched brace) +sci.core (60/69 ok — namespaces/*1/*2/*3/*e fail) +``` +All .cljc files. #?(:clj ...) resolved at read time. #?(:cljs ...) returns nil. + +### parse-arg-names +- Handles `& rest` args AND nested destructuring vectors +- When an arg is a vector (not a symbol), recurses to extract nested symbol names + +## Project Structure + +``` +src/jolt/ + types.janet — Var, Namespace, Context, symbol helpers + reader.janet — recursive descent parser for Clojure syntax + evaluator.janet — tree-walking interpreter (eval-form, eval-list, syntax-quote*) + core.janet — 95+ clojure.core functions (map, filter, reduce, etc.) + api.janet — public API: init, eval-string, eval-string* + main.janet — REPL entry point with (defn main [&]) + +test/ + evaluator-test.janet — special form tests (22 forms tested) + reader-test.janet — parser tests (includes #?, #?@, #_) + core-test.janet — core library tests + macro-test.janet — syntax-quote and macro tests + namespace-test.janet — ns, require, in-ns tests + types-test.janet — Var and Namespace tests + api-test.janet — public API tests + bootstrap-test.janet — loads sci.impl.macros (deftime, usetime, ?) + test-load-sci.janet — loads all sci files, counts ok/fail + test-eval.janet — end-to-end sci.core/eval-string test +``` diff --git a/.dirge/skills/jpm-build/SKILL.md b/.dirge/skills/jpm-build/SKILL.md new file mode 100644 index 0000000..f9a23be --- /dev/null +++ b/.dirge/skills/jpm-build/SKILL.md @@ -0,0 +1,56 @@ +--- +name: jpm-build +description: Build and debug Janet projects using jpm. Covers project.janet structure, common build errors, and native compilation with create-executable. +--- + +# JPM Build & Debug + +## Build Commands + +```bash +jpm build # Compile and link executable → build/jolt +jpm test # Run all tests +jpm deps # Show dependencies +``` + +## project.janet Structure + +```janet +(declare-project + :name "jolt" + :description "...") + +(declare-source + :source @["src"]) # Source directories + +(declare-executable + :name "jolt" # Output binary name + :entry "src/jolt/main.janet") # RELATIVE TO PROJECT ROOT, not source dirs +``` + +## Common Pitfalls + +### Entry path is relative to project root +Even though `declare-source` lists `@["src"]`, the `:entry` in `declare-executable` must include `src/` prefix. jpm's `create-executable` calls `dofile source` with the raw entry string. + +### main function required for native compilation +`create-executable` extracts a `main` function from the entry file's environment. Top-level code runs during `dofile` and interferes with image generation. Error: "expected integer key for keyword in range [0, 5), got nil". + +**Fix:** Wrap startup code in `(defn main [&] ...)`. + +```janet +(defn main [&] + (print "REPL started") + ;; ... REPL loop ... +) +``` + +### LSP false positives +Clojure LSP misidentifies `.janet` files. Ignore all diagnostics — they don't affect build or test results. + +## Debugging Build Failures + +1. Check entry path includes `src/` prefix +2. Check entry file has `(defn main [&] ...)` wrapping top-level code +3. Run `jpm test` to verify code works before native compilation +4. `jpm build` produces no output on success — check exit code only \ No newline at end of file diff --git a/.lsp/.cache/db.transit.json b/.lsp/.cache/db.transit.json new file mode 100644 index 0000000..12d0a9f --- /dev/null +++ b/.lsp/.cache/db.transit.json @@ -0,0 +1 @@ +["^ ","~:classpath",["~#set",[]],"~:project-hash","","~:project-root","/Users/yogthos/src/jolt","~:settings-hash","99914b932bd37a50b983c5e7c90ae93b","~:kondo-config-hash","27a3c23c420a83acd89ff94549b361473c4d3692a23b8eddd2f8916a26ba427c","~:dependency-scheme","zipfile","~:analysis",null,"~:analysis-checksums",["^ "],"~:project-analysis-type","~:project-and-full-dependencies","~:version",13,"~:stubs-generation-namespaces",["^1",[]]] \ No newline at end of file diff --git a/build/build___jolt.o b/build/build___jolt.o new file mode 100644 index 0000000..38c009c Binary files /dev/null and b/build/build___jolt.o differ diff --git a/build/jolt b/build/jolt new file mode 100755 index 0000000..b0c5252 Binary files /dev/null and b/build/jolt differ diff --git a/build/jolt.c b/build/jolt.c new file mode 100644 index 0000000..7a53c80 --- /dev/null +++ b/build/jolt.c @@ -0,0 +1,84 @@ +#include +static const unsigned char bytes[] = {215, 0, 205, 2, 254, 0, 0, 5, 0, 0, 205, 127, 255, 255, 255, 18, 12, 0, 2, 2, 206, 4, 109, 97, 105, 110, 206, 19, 115, 114, 99, 47, 106, 111, 108, 116, 47, 109, 97, 105, 110, 46, 106, 97, 110, 101, 116, 206, 25, 74, 111, 108, 116, 32, 226, 128, 148, 32, 67, 108, 111, 106, 117, 114, 101, 32, 111, 110, 32, 74, 97, 110, 101, 116, 216, 5, 112, 114, 105, 110, 116, 206, 21, 84, 121, 112, 101, 32, 40, 101, 120, 105, 116, 41, 32, 116, 111, 32, 113, 117, 105, 116, 46, 10, 213, 2, 208, 9, 106, 111, 108, 116, 47, 116, 121, 112, 101, 208, 12, 106, 111, 108, 116, 47, 99, 111, 110, 116, 101, 120, 116, 208, 3, 101, 110, 118, 211, 3, 208, 10, 99, 117, 114, 114, 101, 110, 116, 45, 110, 115, 206, 4, 117, 115, 101, 114, 208, 11, 99, 108, 97, 115, 115, 45, 62, 111, 112, 116, 115, 211, 0, 208, 10, 110, 97, 109, 101, 115, 112, 97, 99, 101, 115, 211, 2, 218, 11, 213, 5, 208, 7, 97, 108, 105, 97, 115, 101, 115, 211, 0, 218, 6, 208, 14, 106, 111, 108, 116, 47, 110, 97, 109, 101, 115, 112, 97, 99, 101, 208, 8, 109, 97, 112, 112, 105, 110, 103, 115, 211, 0, 208, 4, 110, 97, 109, 101, 218, 11, 208, 7, 105, 109, 112, 111, 114, 116, 115, 211, 0, 206, 12, 99, 108, 111, 106, 117, 114, 101, 46, 99, 111, 114, 101, 213, 5, 218, 16, 211, 0, 218, 6, 218, 18, 218, 19, 211, 98, 206, 5, 115, 119, 97, 112, 33, 211, 5, 208, 2, 110, 115, 213, 5, 218, 16, 218, 26, 218, 6, 218, 18, 218, 19, 218, 27, 218, 21, 218, 25, 218, 22, 211, 0, 218, 6, 208, 8, 106, 111, 108, 116, 47, 118, 97, 114, 208, 4, 109, 101, 116, 97, 213, 2, 218, 30, 218, 32, 218, 21, 218, 28, 218, 21, 218, 28, 208, 4, 114, 111, 111, 116, 215, 0, 205, 0, 221, 0, 0, 6, 2, 2, 205, 127, 255, 255, 255, 1, 10, 0, 5, 206, 10, 99, 111, 114, 101, 45, 115, 119, 97, 112, 33, 206, 19, 115, 114, 99, 47, 106, 111, 108, 116, 47, 99, 111, 114, 101, 46, 106, 97, 110, 101, 116, 208, 5, 118, 97, 108, 117, 101, 0, 10, 0, 207, 3, 97, 116, 109, 0, 10, 1, 207, 1, 102, 0, 10, 2, 207, 4, 97, 114, 103, 115, 0, 10, 3, 207, 10, 99, 111, 114, 101, 45, 115, 119, 97, 112, 33, 6, 10, 4, 207, 7, 110, 101, 119, 45, 118, 97, 108, 44, 4, 0, 0, 49, 4, 0, 0, 53, 4, 0, 0, 49, 4, 0, 0, 52, 2, 0, 0, 53, 5, 1, 0, 27, 4, 5, 0, 44, 5, 0, 0, 60, 0, 5, 4, 3, 4, 0, 0, 130, 69, 26, 0, 26, 0, 26, 0, 17, 0, 17, 0, 17, 0, 3, 1, 5, 0, 5, 191, 255, 3, 206, 3, 115, 116, 114, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 46, 218, 21, 218, 46, 218, 36, 215, 0, 205, 0, 221, 0, 0, 11, 0, 0, 205, 127, 255, 255, 255, 6, 38, 0, 6, 206, 8, 99, 111, 114, 101, 45, 115, 116, 114, 218, 39, 206, 0, 216, 4, 110, 105, 108, 63, 216, 7, 115, 116, 114, 105, 110, 103, 63, 216, 6, 115, 116, 114, 105, 110, 103, 216, 10, 97, 114, 114, 97, 121, 47, 112, 117, 115, 104, 216, 11, 115, 116, 114, 105, 110, 103, 47, 106, 111, 105, 110, 0, 38, 0, 207, 2, 120, 115, 0, 38, 1, 207, 8, 99, 111, 114, 101, 45, 115, 116, 114, 7, 38, 4, 207, 6, 114, 101, 115, 117, 108, 116, 7, 34, 0, 207, 7, 95, 48, 48, 48, 48, 105, 122, 10, 34, 5, 207, 7, 95, 48, 48, 48, 48, 105, 121, 13, 34, 6, 207, 1, 120, 63, 2, 0, 0, 43, 4, 0, 0, 37, 3, 4, 2, 30, 3, 3, 0, 44, 2, 0, 0, 3, 2, 0, 0, 64, 2, 0, 0, 27, 4, 2, 0, 40, 5, 0, 0, 73, 2, 0, 5, 27, 5, 2, 0, 31, 5, 23, 0, 58, 2, 0, 5, 27, 6, 2, 0, 49, 6, 0, 0, 44, 7, 1, 0, 53, 2, 7, 0, 30, 2, 2, 0, 28, 14, 0, 0, 49, 6, 0, 0, 44, 9, 2, 0, 53, 8, 9, 0, 30, 8, 3, 0, 27, 7, 6, 0, 28, 5, 0, 0, 49, 6, 0, 0, 44, 10, 3, 0, 53, 9, 10, 0, 27, 7, 9, 0, 50, 4, 7, 0, 44, 9, 4, 0, 53, 8, 9, 0, 73, 5, 0, 5, 28, 234, 255, 255, 44, 2, 0, 0, 50, 4, 2, 0, 44, 2, 5, 0, 54, 2, 0, 0, 130, 8, 12, 0, 7, 0, 7, 0, 3, 0, 3, 0, 3, 2, 7, 0, 7, 1, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 1, 13, 0, 13, 0, 13, 0, 9, 0, 9, 1, 34, 0, 34, 0, 34, 0, 30, 0, 30, 0, 30, 0, 48, 0, 48, 0, 48, 0, 30, 0, 11, 0, 11, 0, 11, 191, 254, 7, 0, 7, 3, 7, 0, 7, 0, 7, 0, 7, 206, 4, 110, 105, 108, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 63, 218, 21, 218, 63, 218, 36, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 3, 0, 2, 206, 9, 99, 111, 114, 101, 45, 110, 105, 108, 63, 218, 39, 218, 52, 0, 3, 0, 218, 62, 0, 3, 1, 207, 9, 99, 111, 114, 101, 45, 110, 105, 108, 63, 49, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 10, 21, 0, 21, 0, 21, 206, 4, 100, 114, 111, 112, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 69, 218, 21, 218, 69, 218, 36, 215, 0, 205, 0, 220, 0, 0, 7, 2, 2, 2, 4, 18, 0, 3, 206, 9, 99, 111, 114, 101, 45, 100, 114, 111, 112, 218, 39, 216, 6, 116, 117, 112, 108, 101, 63, 216, 3, 109, 105, 110, 216, 11, 116, 117, 112, 108, 101, 47, 115, 108, 105, 99, 101, 216, 11, 97, 114, 114, 97, 121, 47, 115, 108, 105, 99, 101, 0, 18, 0, 207, 1, 110, 0, 18, 1, 207, 4, 99, 111, 108, 108, 0, 18, 2, 207, 9, 99, 111, 114, 101, 45, 100, 114, 111, 112, 49, 1, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 30, 3, 8, 0, 63, 4, 1, 0, 50, 0, 4, 0, 44, 6, 1, 0, 53, 5, 6, 0, 50, 1, 5, 0, 44, 4, 2, 0, 54, 4, 0, 0, 63, 4, 1, 0, 50, 0, 4, 0, 44, 6, 1, 0, 53, 5, 6, 0, 50, 1, 5, 0, 44, 4, 3, 0, 54, 4, 0, 0, 129, 61, 7, 0, 7, 0, 7, 0, 3, 1, 30, 0, 23, 0, 23, 0, 23, 0, 5, 0, 5, 0, 5, 1, 30, 0, 23, 0, 23, 0, 23, 0, 5, 0, 5, 0, 5, 206, 11, 115, 101, 108, 101, 99, 116, 45, 107, 101, 121, 115, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 81, 218, 21, 218, 81, 218, 36, 215, 0, 205, 0, 220, 0, 0, 11, 2, 2, 2, 5, 30, 0, 8, 206, 16, 99, 111, 114, 101, 45, 115, 101, 108, 101, 99, 116, 45, 107, 101, 121, 115, 218, 39, 215, 0, 205, 0, 220, 0, 0, 19, 3, 2, 3, 6, 68, 0, 11, 206, 8, 99, 111, 114, 101, 45, 103, 101, 116, 218, 39, 218, 52, 216, 7, 115, 116, 114, 117, 99, 116, 63, 216, 6, 116, 97, 98, 108, 101, 63, 218, 74, 216, 6, 97, 114, 114, 97, 121, 63, 216, 7, 110, 117, 109, 98, 101, 114, 63, 0, 68, 0, 207, 1, 109, 0, 68, 1, 207, 1, 107, 0, 68, 2, 207, 7, 100, 101, 102, 97, 117, 108, 116, 0, 68, 3, 207, 8, 99, 111, 114, 101, 45, 103, 101, 116, 4, 68, 5, 218, 94, 13, 21, 8, 207, 7, 95, 48, 48, 48, 48, 104, 71, 24, 31, 9, 207, 1, 118, 34, 42, 10, 207, 7, 95, 48, 48, 48, 48, 104, 75, 42, 64, 10, 207, 7, 95, 48, 48, 48, 48, 104, 74, 47, 61, 13, 207, 7, 95, 48, 48, 48, 48, 104, 73, 51, 58, 16, 207, 7, 95, 48, 48, 48, 48, 104, 72, 32, 2, 3, 0, 40, 4, 0, 0, 28, 2, 0, 0, 27, 4, 2, 0, 27, 5, 4, 0, 49, 0, 0, 0, 44, 7, 0, 0, 53, 6, 7, 0, 30, 6, 2, 0, 3, 5, 0, 0, 49, 0, 0, 0, 44, 8, 1, 0, 53, 7, 8, 0, 27, 8, 7, 0, 30, 8, 3, 0, 27, 7, 8, 0, 28, 5, 0, 0, 49, 0, 0, 0, 44, 10, 2, 0, 53, 9, 10, 0, 27, 7, 9, 0, 30, 7, 10, 0, 49, 1, 0, 0, 53, 8, 0, 0, 27, 9, 8, 0, 49, 9, 0, 0, 44, 10, 0, 0, 53, 8, 10, 0, 30, 8, 2, 0, 3, 5, 0, 0, 3, 9, 0, 0, 49, 0, 0, 0, 44, 10, 3, 0, 53, 9, 10, 0, 27, 10, 9, 0, 30, 10, 3, 0, 27, 9, 10, 0, 28, 5, 0, 0, 49, 0, 0, 0, 44, 12, 4, 0, 53, 11, 12, 0, 27, 9, 11, 0, 27, 10, 9, 0, 30, 9, 20, 0, 49, 1, 0, 0, 44, 13, 5, 0, 53, 12, 13, 0, 27, 13, 12, 0, 30, 12, 12, 0, 43, 16, 0, 0, 71, 15, 1, 16, 27, 16, 15, 0, 30, 15, 5, 0, 63, 17, 0, 0, 35, 18, 1, 17, 27, 14, 18, 0, 28, 2, 0, 0, 27, 14, 16, 0, 27, 11, 14, 0, 28, 2, 0, 0, 27, 11, 13, 0, 27, 8, 11, 0, 28, 2, 0, 0, 27, 8, 10, 0, 30, 8, 3, 0, 58, 9, 0, 1, 3, 9, 0, 0, 3, 5, 0, 0, 128, 138, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 7, 0, 7, 0, 7, 0, 3, 0, 3, 1, 13, 0, 13, 0, 13, 0, 9, 0, 9, 0, 9, 0, 9, 0, 25, 0, 25, 0, 25, 0, 9, 0, 5, 1, 15, 0, 15, 0, 7, 1, 13, 0, 13, 0, 13, 0, 9, 0, 9, 0, 9, 1, 20, 0, 20, 0, 20, 0, 16, 0, 16, 0, 16, 0, 16, 0, 31, 0, 31, 0, 31, 0, 16, 0, 11, 0, 11, 0, 43, 0, 43, 0, 43, 0, 11, 0, 11, 0, 55, 0, 55, 0, 11, 0, 11, 0, 69, 0, 64, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 7, 1, 9, 0, 9, 191, 255, 7, 218, 52, 216, 3, 110, 111, 116, 218, 88, 216, 15, 116, 97, 98, 108, 101, 47, 116, 111, 45, 115, 116, 114, 117, 99, 116, 0, 30, 0, 218, 92, 0, 30, 1, 207, 2, 107, 115, 0, 30, 2, 207, 16, 99, 111, 114, 101, 45, 115, 101, 108, 101, 99, 116, 45, 107, 101, 121, 115, 1, 30, 4, 218, 59, 1, 22, 1, 207, 7, 95, 48, 48, 48, 48, 105, 53, 4, 22, 6, 207, 7, 95, 48, 48, 48, 48, 105, 52, 7, 22, 7, 218, 93, 11, 20, 8, 218, 97, 68, 3, 0, 0, 27, 4, 3, 0, 40, 6, 0, 0, 73, 5, 1, 6, 27, 6, 5, 0, 31, 6, 17, 0, 58, 5, 1, 6, 27, 7, 5, 0, 50, 0, 7, 0, 44, 8, 0, 0, 53, 5, 8, 0, 27, 8, 5, 0, 49, 8, 0, 0, 44, 9, 1, 0, 53, 5, 9, 0, 49, 5, 0, 0, 44, 10, 2, 0, 53, 9, 10, 0, 30, 9, 2, 0, 60, 4, 7, 8, 73, 6, 1, 6, 28, 240, 255, 255, 49, 0, 0, 0, 44, 6, 3, 0, 53, 5, 6, 0, 30, 5, 4, 0, 49, 4, 0, 0, 44, 6, 4, 0, 54, 6, 0, 0, 3, 4, 0, 0, 128, 236, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 13, 0, 13, 0, 13, 0, 5, 1, 16, 0, 16, 0, 16, 0, 11, 0, 11, 0, 11, 0, 7, 0, 26, 191, 254, 3, 0, 3, 3, 7, 0, 7, 0, 7, 0, 3, 0, 19, 0, 19, 0, 19, 0, 3, 206, 7, 112, 114, 105, 110, 116, 108, 110, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 108, 218, 21, 218, 108, 218, 36, 215, 0, 205, 0, 213, 0, 0, 4, 0, 0, 205, 127, 255, 255, 255, 2, 8, 0, 1, 218, 39, 218, 4, 206, 1, 10, 0, 8, 0, 218, 57, 52, 0, 0, 0, 44, 2, 0, 0, 53, 1, 2, 0, 44, 2, 1, 0, 49, 2, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 4, 0, 0, 0, 130, 28, 30, 0, 30, 0, 30, 0, 47, 0, 47, 0, 47, 0, 47, 0, 19, 206, 2, 112, 114, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 113, 218, 21, 218, 113, 218, 36, 215, 0, 205, 0, 221, 0, 0, 7, 0, 0, 205, 127, 255, 255, 255, 2, 18, 0, 3, 206, 7, 99, 111, 114, 101, 45, 112, 114, 218, 39, 206, 1, 32, 216, 4, 112, 114, 105, 110, 0, 18, 0, 218, 57, 0, 18, 1, 207, 7, 99, 111, 114, 101, 45, 112, 114, 0, 18, 2, 207, 1, 105, 43, 2, 0, 0, 63, 3, 0, 0, 35, 4, 2, 3, 30, 4, 14, 0, 34, 3, 2, 0, 30, 3, 5, 0, 44, 5, 0, 0, 49, 5, 0, 0, 44, 6, 1, 0, 53, 5, 6, 0, 49, 2, 0, 0, 53, 3, 0, 0, 49, 3, 0, 0, 44, 6, 1, 0, 53, 5, 6, 0, 5, 2, 2, 1, 28, 241, 255, 255, 4, 0, 0, 0, 130, 31, 3, 1, 15, 0, 10, 0, 3, 1, 9, 0, 5, 0, 17, 0, 17, 0, 17, 0, 17, 1, 11, 0, 11, 0, 5, 0, 5, 0, 5, 1, 5, 191, 253, 3, 191, 254, 1, 206, 9, 112, 97, 114, 116, 105, 116, 105, 111, 110, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 122, 218, 21, 218, 122, 218, 36, 215, 0, 205, 0, 220, 0, 0, 15, 2, 2, 2, 3, 42, 0, 8, 206, 14, 99, 111, 114, 101, 45, 112, 97, 114, 116, 105, 116, 105, 111, 110, 218, 39, 218, 55, 216, 5, 116, 117, 112, 108, 101, 218, 76, 0, 42, 0, 218, 78, 0, 42, 1, 218, 79, 0, 42, 2, 207, 14, 99, 111, 114, 101, 45, 112, 97, 114, 116, 105, 116, 105, 111, 110, 1, 42, 4, 218, 59, 2, 42, 5, 218, 121, 7, 41, 8, 207, 4, 112, 97, 114, 116, 8, 41, 6, 207, 1, 106, 10, 18, 11, 207, 7, 95, 48, 48, 48, 48, 105, 113, 64, 3, 0, 0, 27, 4, 3, 0, 43, 5, 0, 0, 63, 6, 1, 0, 35, 7, 5, 6, 30, 7, 36, 0, 64, 6, 0, 0, 27, 8, 6, 0, 43, 6, 0, 0, 35, 10, 6, 0, 27, 11, 10, 0, 30, 10, 6, 0, 6, 12, 5, 6, 63, 13, 1, 0, 35, 14, 12, 13, 27, 9, 14, 0, 28, 2, 0, 0, 27, 9, 11, 0, 30, 9, 9, 0, 6, 10, 5, 6, 49, 10, 0, 0, 53, 11, 1, 0, 50, 8, 11, 0, 44, 12, 0, 0, 53, 10, 12, 0, 5, 6, 6, 1, 28, 239, 255, 255, 63, 9, 8, 0, 37, 10, 9, 0, 30, 10, 10, 0, 52, 8, 0, 0, 44, 11, 1, 0, 53, 9, 11, 0, 49, 9, 0, 0, 44, 12, 2, 0, 53, 11, 12, 0, 50, 4, 11, 0, 44, 12, 0, 0, 53, 9, 12, 0, 6, 5, 5, 0, 28, 219, 255, 255, 3, 4, 0, 0, 129, 124, 3, 0, 3, 1, 3, 1, 15, 0, 10, 0, 3, 1, 5, 0, 5, 1, 5, 1, 17, 0, 12, 0, 12, 0, 28, 0, 36, 0, 25, 0, 12, 0, 12, 0, 12, 0, 5, 1, 30, 0, 24, 0, 24, 0, 7, 0, 7, 0, 7, 1, 7, 191, 254, 5, 3, 12, 0, 9, 0, 5, 0, 61, 0, 61, 0, 61, 0, 48, 0, 48, 0, 48, 0, 29, 0, 29, 0, 29, 1, 5, 191, 249, 3, 191, 253, 1, 206, 4, 110, 101, 120, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 132, 218, 21, 218, 128, 132, 218, 36, 215, 0, 205, 0, 220, 0, 0, 6, 1, 1, 1, 1, 10, 0, 3, 206, 9, 99, 111, 114, 101, 45, 110, 101, 120, 116, 218, 39, 215, 0, 205, 0, 220, 0, 0, 7, 1, 1, 1, 4, 26, 0, 3, 206, 9, 99, 111, 114, 101, 45, 114, 101, 115, 116, 218, 39, 218, 52, 218, 74, 218, 76, 218, 77, 0, 26, 0, 218, 79, 0, 26, 1, 207, 9, 99, 111, 114, 101, 45, 114, 101, 115, 116, 3, 11, 3, 207, 7, 95, 48, 48, 48, 48, 104, 80, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 3, 3, 0, 27, 2, 3, 0, 28, 5, 0, 0, 63, 4, 0, 0, 43, 6, 0, 0, 37, 5, 6, 4, 27, 2, 5, 0, 30, 2, 3, 0, 64, 3, 0, 0, 3, 3, 0, 0, 49, 0, 0, 0, 44, 4, 1, 0, 53, 3, 4, 0, 30, 3, 5, 0, 43, 4, 1, 0, 50, 0, 4, 0, 44, 4, 2, 0, 54, 4, 0, 0, 43, 4, 1, 0, 50, 0, 4, 0, 44, 4, 3, 0, 54, 4, 0, 0, 128, 171, 11, 0, 11, 0, 11, 0, 7, 0, 7, 0, 7, 0, 7, 0, 28, 0, 23, 0, 23, 0, 7, 0, 3, 0, 3, 0, 3, 2, 9, 0, 9, 0, 9, 0, 5, 1, 7, 0, 7, 0, 7, 0, 7, 1, 7, 0, 7, 0, 7, 0, 7, 0, 10, 0, 218, 79, 0, 10, 1, 207, 9, 99, 111, 114, 101, 45, 110, 101, 120, 116, 3, 10, 3, 207, 1, 114, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 63, 2, 3, 0, 43, 5, 0, 0, 37, 4, 5, 2, 30, 4, 2, 0, 4, 0, 0, 0, 3, 3, 0, 0, 128, 178, 11, 0, 11, 0, 11, 0, 3, 1, 14, 0, 9, 0, 9, 0, 5, 0, 5, 0, 5, 206, 7, 112, 97, 114, 116, 105, 97, 108, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 143, 218, 21, 218, 128, 143, 218, 36, 215, 0, 205, 2, 255, 0, 0, 4, 1, 1, 205, 127, 255, 255, 255, 0, 2, 0, 1, 3, 206, 12, 99, 111, 114, 101, 45, 112, 97, 114, 116, 105, 97, 108, 218, 39, 0, 2, 0, 218, 42, 0, 2, 1, 218, 43, 0, 2, 2, 207, 12, 99, 111, 114, 101, 45, 112, 97, 114, 116, 105, 97, 108, 48, 3, 0, 0, 3, 3, 0, 0, 205, 0, 213, 0, 0, 4, 0, 0, 205, 127, 255, 255, 255, 2, 10, 1, 4, 218, 39, 218, 77, 216, 12, 97, 114, 114, 97, 121, 47, 99, 111, 110, 99, 97, 116, 191, 255, 0, 0, 218, 42, 191, 255, 0, 1, 218, 43, 191, 255, 0, 2, 218, 128, 148, 0, 10, 0, 207, 4, 109, 111, 114, 101, 45, 1, 0, 1, 49, 1, 0, 0, 44, 2, 0, 0, 53, 1, 2, 0, 50, 1, 0, 0, 44, 3, 1, 0, 53, 2, 3, 0, 52, 2, 0, 0, 45, 1, 0, 0, 54, 1, 0, 0, 191, 255, 129, 211, 39, 0, 39, 0, 39, 0, 39, 0, 25, 0, 25, 0, 25, 0, 16, 0, 16, 0, 16, 129, 211, 3, 0, 3, 3, 0, 0, 0, 206, 4, 105, 110, 116, 111, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 151, 218, 21, 218, 128, 151, 218, 36, 215, 0, 205, 0, 220, 0, 0, 13, 2, 2, 2, 9, 60, 0, 8, 206, 9, 99, 111, 114, 101, 45, 105, 110, 116, 111, 218, 39, 218, 74, 218, 77, 218, 128, 149, 218, 127, 218, 76, 218, 90, 218, 88, 216, 5, 112, 97, 105, 114, 115, 216, 5, 109, 101, 114, 103, 101, 0, 60, 0, 207, 2, 116, 111, 0, 60, 1, 207, 4, 102, 114, 111, 109, 0, 60, 2, 207, 9, 99, 111, 114, 101, 45, 105, 110, 116, 111, 37, 59, 6, 218, 59, 41, 58, 8, 207, 7, 95, 48, 48, 48, 48, 104, 87, 44, 58, 9, 207, 7, 95, 48, 48, 48, 48, 104, 86, 48, 58, 11, 218, 93, 50, 58, 12, 218, 97, 49, 0, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 30, 3, 23, 0, 49, 0, 0, 0, 44, 5, 1, 0, 53, 4, 5, 0, 49, 1, 0, 0, 44, 7, 0, 0, 53, 6, 7, 0, 30, 6, 3, 0, 27, 5, 1, 0, 28, 5, 0, 0, 49, 1, 0, 0, 44, 8, 1, 0, 53, 7, 8, 0, 27, 5, 7, 0, 50, 4, 5, 0, 44, 7, 2, 0, 53, 6, 7, 0, 52, 6, 0, 0, 44, 5, 3, 0, 53, 4, 5, 0, 49, 4, 0, 0, 44, 5, 4, 0, 54, 5, 0, 0, 49, 0, 0, 0, 44, 5, 5, 0, 53, 4, 5, 0, 30, 4, 4, 0, 50, 0, 1, 0, 44, 5, 2, 0, 54, 5, 0, 0, 49, 0, 0, 0, 44, 6, 6, 0, 53, 5, 6, 0, 30, 5, 23, 0, 27, 6, 0, 0, 49, 1, 0, 0, 44, 8, 7, 0, 53, 7, 8, 0, 27, 8, 7, 0, 40, 9, 0, 0, 73, 7, 8, 9, 27, 9, 7, 0, 31, 9, 13, 0, 58, 7, 8, 9, 61, 10, 7, 0, 27, 11, 10, 0, 61, 10, 7, 1, 27, 12, 10, 0, 50, 11, 12, 0, 67, 7, 0, 0, 50, 6, 7, 0, 44, 10, 8, 0, 53, 6, 10, 0, 73, 9, 8, 9, 28, 244, 255, 255, 3, 6, 0, 0, 3, 0, 0, 0, 128, 203, 7, 0, 7, 0, 7, 0, 3, 1, 40, 0, 40, 0, 40, 0, 61, 0, 61, 0, 61, 0, 57, 0, 57, 0, 57, 0, 80, 0, 80, 0, 80, 0, 57, 0, 26, 0, 26, 0, 26, 0, 18, 0, 18, 0, 18, 0, 5, 0, 5, 0, 5, 1, 9, 0, 9, 0, 9, 0, 5, 1, 7, 0, 7, 0, 7, 1, 11, 0, 11, 0, 11, 0, 7, 2, 11, 1, 23, 0, 23, 0, 23, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 1, 25, 0, 25, 0, 25, 0, 25, 0, 25, 191, 255, 11, 0, 11, 191, 254, 9, 191, 255, 7, 206, 8, 100, 105, 115, 116, 105, 110, 99, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 163, 218, 21, 218, 128, 163, 218, 36, 215, 0, 205, 0, 220, 0, 0, 11, 1, 1, 1, 5, 34, 0, 7, 206, 13, 99, 111, 114, 101, 45, 100, 105, 115, 116, 105, 110, 99, 116, 218, 39, 218, 52, 218, 55, 218, 74, 218, 127, 218, 76, 0, 34, 0, 218, 79, 0, 34, 1, 207, 13, 99, 111, 114, 101, 45, 100, 105, 115, 116, 105, 110, 99, 116, 1, 34, 3, 207, 4, 115, 101, 101, 110, 3, 34, 5, 218, 59, 3, 23, 0, 207, 7, 95, 48, 48, 48, 48, 105, 110, 6, 23, 7, 207, 7, 95, 48, 48, 48, 48, 105, 109, 9, 23, 8, 218, 62, 68, 2, 0, 0, 27, 3, 2, 0, 64, 4, 0, 0, 27, 5, 4, 0, 40, 7, 0, 0, 73, 6, 0, 7, 27, 7, 6, 0, 31, 7, 16, 0, 58, 6, 0, 7, 27, 8, 6, 0, 49, 8, 0, 0, 53, 6, 3, 0, 49, 6, 0, 0, 44, 10, 0, 0, 53, 9, 10, 0, 30, 9, 6, 0, 41, 6, 0, 0, 60, 3, 8, 6, 50, 5, 8, 0, 44, 10, 1, 0, 53, 6, 10, 0, 73, 7, 0, 7, 28, 241, 255, 255, 49, 0, 0, 0, 44, 7, 2, 0, 53, 6, 7, 0, 30, 6, 7, 0, 52, 5, 0, 0, 44, 8, 3, 0, 53, 7, 8, 0, 49, 7, 0, 0, 44, 8, 4, 0, 54, 8, 0, 0, 3, 5, 0, 0, 129, 104, 3, 0, 3, 1, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 15, 0, 15, 0, 9, 0, 9, 0, 9, 0, 5, 2, 9, 0, 9, 1, 9, 0, 9, 0, 9, 191, 252, 3, 0, 3, 5, 7, 0, 7, 0, 7, 0, 3, 0, 34, 0, 34, 0, 34, 0, 21, 0, 21, 0, 21, 0, 3, 206, 6, 114, 101, 100, 117, 99, 101, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 172, 218, 21, 218, 128, 172, 218, 36, 215, 0, 205, 0, 213, 0, 0, 11, 0, 0, 205, 127, 255, 255, 255, 1, 61, 0, 13, 218, 39, 206, 38, 87, 114, 111, 110, 103, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 97, 114, 103, 115, 32, 112, 97, 115, 115, 101, 100, 32, 116, 111, 58, 32, 114, 101, 100, 117, 99, 101, 0, 61, 0, 218, 43, 1, 61, 2, 207, 7, 95, 48, 48, 48, 48, 105, 98, 7, 32, 4, 218, 42, 11, 32, 5, 218, 79, 20, 32, 7, 207, 3, 97, 99, 99, 21, 32, 3, 218, 121, 37, 58, 5, 218, 42, 41, 58, 6, 207, 3, 118, 97, 108, 45, 58, 7, 218, 79, 46, 58, 4, 218, 128, 178, 46, 57, 7, 207, 7, 95, 48, 48, 48, 48, 105, 100, 49, 57, 9, 207, 7, 95, 48, 48, 48, 48, 105, 99, 52, 57, 10, 218, 62, 63, 1, 0, 0, 27, 2, 1, 0, 38, 1, 2, 2, 30, 1, 29, 0, 43, 3, 0, 0, 49, 3, 0, 0, 53, 3, 0, 0, 27, 4, 3, 0, 43, 3, 1, 0, 49, 3, 0, 0, 53, 3, 0, 0, 27, 5, 3, 0, 63, 3, 5, 0, 43, 7, 0, 0, 37, 6, 7, 3, 30, 6, 2, 0, 54, 4, 0, 0, 43, 3, 0, 0, 49, 3, 0, 0, 53, 3, 5, 0, 27, 7, 3, 0, 43, 3, 1, 0, 63, 8, 5, 0, 35, 9, 3, 8, 30, 9, 7, 0, 49, 3, 0, 0, 53, 8, 5, 0, 50, 7, 8, 0, 53, 7, 4, 0, 5, 3, 3, 1, 28, 248, 255, 255, 3, 7, 0, 0, 38, 3, 2, 3, 30, 3, 25, 0, 43, 4, 0, 0, 49, 4, 0, 0, 53, 4, 0, 0, 27, 5, 4, 0, 43, 4, 1, 0, 49, 4, 0, 0, 53, 4, 0, 0, 27, 6, 4, 0, 43, 4, 2, 0, 49, 4, 0, 0, 53, 4, 0, 0, 27, 7, 4, 0, 27, 4, 6, 0, 40, 9, 0, 0, 73, 8, 7, 9, 27, 9, 8, 0, 31, 9, 7, 0, 58, 8, 7, 9, 27, 10, 8, 0, 50, 4, 10, 0, 53, 4, 5, 0, 73, 9, 7, 9, 28, 250, 255, 255, 3, 4, 0, 0, 44, 4, 0, 0, 1, 4, 0, 0, 4, 0, 0, 0, 129, 35, 11, 0, 5, 0, 5, 0, 5, 1, 17, 0, 17, 0, 17, 0, 9, 0, 31, 0, 31, 0, 31, 0, 9, 1, 20, 0, 15, 0, 15, 0, 11, 1, 13, 2, 24, 0, 24, 0, 24, 0, 15, 1, 15, 1, 27, 0, 22, 0, 15, 1, 33, 0, 33, 0, 26, 0, 26, 1, 17, 191, 254, 15, 191, 253, 13, 191, 252, 5, 0, 5, 11, 17, 0, 17, 0, 17, 0, 9, 0, 30, 0, 30, 0, 30, 0, 9, 0, 44, 0, 44, 0, 44, 0, 9, 1, 11, 1, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 33, 0, 33, 0, 11, 0, 11, 191, 254, 9, 4, 7, 0, 7, 0, 7, 206, 6, 114, 101, 112, 101, 97, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 182, 218, 21, 218, 128, 182, 218, 36, 215, 0, 205, 0, 212, 0, 0, 8, 2, 2, 2, 1, 11, 0, 4, 218, 39, 218, 55, 0, 11, 0, 218, 78, 0, 11, 1, 218, 62, 1, 11, 3, 218, 59, 2, 11, 4, 218, 121, 64, 2, 0, 0, 27, 3, 2, 0, 43, 4, 0, 0, 35, 5, 4, 0, 30, 5, 6, 0, 50, 3, 1, 0, 44, 7, 0, 0, 53, 6, 7, 0, 5, 4, 4, 1, 28, 250, 255, 255, 3, 3, 0, 0, 129, 168, 3, 0, 3, 1, 3, 1, 10, 0, 3, 1, 5, 0, 5, 0, 5, 1, 5, 191, 254, 3, 191, 253, 18, 206, 6, 114, 101, 109, 111, 118, 101, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 186, 218, 21, 218, 128, 186, 218, 36, 215, 0, 205, 2, 254, 0, 0, 5, 2, 2, 2, 1, 4, 0, 1, 3, 206, 11, 99, 111, 114, 101, 45, 114, 101, 109, 111, 118, 101, 218, 39, 215, 0, 205, 0, 220, 0, 0, 10, 2, 2, 2, 4, 27, 0, 7, 206, 11, 99, 111, 114, 101, 45, 102, 105, 108, 116, 101, 114, 218, 39, 218, 55, 218, 74, 218, 127, 218, 76, 0, 27, 0, 207, 4, 112, 114, 101, 100, 0, 27, 1, 218, 79, 0, 27, 2, 207, 11, 99, 111, 114, 101, 45, 102, 105, 108, 116, 101, 114, 1, 27, 4, 218, 59, 1, 16, 1, 207, 7, 95, 48, 48, 48, 48, 105, 97, 4, 16, 6, 207, 7, 95, 48, 48, 48, 48, 105, 57, 7, 16, 7, 218, 62, 64, 3, 0, 0, 27, 4, 3, 0, 40, 6, 0, 0, 73, 5, 1, 6, 27, 6, 5, 0, 31, 6, 11, 0, 58, 5, 1, 6, 27, 7, 5, 0, 49, 7, 0, 0, 53, 5, 0, 0, 30, 5, 4, 0, 50, 4, 7, 0, 44, 9, 0, 0, 53, 8, 9, 0, 73, 6, 1, 6, 28, 246, 255, 255, 49, 1, 0, 0, 44, 6, 1, 0, 53, 5, 6, 0, 30, 5, 7, 0, 52, 4, 0, 0, 44, 7, 2, 0, 53, 6, 7, 0, 49, 6, 0, 0, 44, 7, 3, 0, 54, 7, 0, 0, 3, 4, 0, 0, 129, 25, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 9, 0, 9, 0, 5, 0, 18, 0, 18, 0, 18, 191, 255, 3, 0, 3, 2, 7, 0, 7, 0, 7, 0, 3, 0, 34, 0, 34, 0, 34, 0, 21, 0, 21, 0, 21, 0, 3, 0, 4, 0, 218, 128, 193, 0, 4, 1, 218, 79, 0, 4, 2, 207, 11, 99, 111, 114, 101, 45, 114, 101, 109, 111, 118, 101, 48, 3, 0, 0, 50, 3, 1, 0, 44, 4, 0, 0, 54, 4, 0, 0, 205, 0, 212, 0, 0, 3, 1, 1, 1, 1, 6, 1, 4, 218, 39, 218, 102, 191, 255, 0, 0, 218, 128, 193, 191, 255, 0, 1, 218, 79, 191, 255, 0, 2, 218, 128, 197, 0, 6, 0, 218, 62, 49, 0, 0, 0, 45, 2, 0, 0, 53, 1, 2, 0, 49, 1, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 191, 255, 129, 31, 29, 0, 29, 0, 29, 0, 24, 0, 24, 0, 24, 129, 31, 16, 0, 3, 0, 3, 0, 3, 1, 0, 0, 0, 206, 4, 106, 117, 120, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 198, 218, 21, 218, 128, 198, 218, 36, 215, 0, 205, 2, 255, 0, 0, 3, 0, 0, 205, 127, 255, 255, 255, 0, 2, 0, 1, 2, 206, 9, 99, 111, 114, 101, 45, 106, 117, 120, 116, 218, 39, 0, 2, 0, 207, 2, 102, 115, 0, 2, 1, 207, 9, 99, 111, 114, 101, 45, 106, 117, 120, 116, 48, 2, 0, 0, 3, 2, 0, 0, 205, 2, 247, 0, 0, 4, 0, 0, 205, 127, 255, 255, 255, 2, 8, 1, 1, 3, 218, 39, 216, 3, 109, 97, 112, 218, 127, 191, 255, 0, 0, 218, 128, 203, 191, 255, 0, 1, 218, 128, 204, 0, 8, 0, 218, 43, 48, 1, 0, 0, 45, 2, 0, 0, 50, 1, 2, 0, 44, 3, 0, 0, 53, 2, 3, 0, 52, 2, 0, 0, 44, 1, 1, 0, 54, 1, 0, 0, 191, 255, 205, 0, 220, 0, 0, 2, 1, 1, 1, 0, 3, 1, 2, 206, 8, 115, 104, 111, 114, 116, 45, 102, 110, 218, 39, 191, 255, 0, 0, 218, 43, 0, 3, 0, 207, 9, 95, 48, 48, 48, 48, 105, 118, 36, 48, 45, 1, 0, 0, 52, 1, 0, 0, 54, 0, 0, 0, 191, 255, 129, 215, 19, 0, 19, 0, 19, 129, 215, 18, 0, 13, 0, 13, 0, 13, 0, 13, 0, 5, 0, 5, 0, 5, 1, 0, 0, 0, 129, 214, 3, 0, 3, 1, 0, 0, 0, 206, 5, 97, 115, 115, 111, 99, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 208, 218, 21, 218, 128, 208, 218, 36, 215, 0, 205, 0, 221, 0, 0, 10, 1, 1, 205, 127, 255, 255, 255, 5, 55, 0, 10, 206, 10, 99, 111, 114, 101, 45, 97, 115, 115, 111, 99, 218, 39, 218, 88, 216, 4, 107, 101, 121, 115, 218, 128, 156, 216, 5, 116, 97, 98, 108, 101, 218, 103, 0, 55, 0, 218, 92, 0, 55, 1, 207, 3, 107, 118, 115, 0, 55, 2, 207, 10, 99, 111, 114, 101, 45, 97, 115, 115, 111, 99, 1, 55, 4, 218, 59, 22, 33, 6, 207, 7, 95, 48, 48, 48, 48, 104, 66, 25, 33, 7, 207, 7, 95, 48, 48, 48, 48, 104, 65, 28, 33, 8, 218, 93, 33, 55, 5, 218, 121, 39, 46, 8, 218, 93, 43, 46, 6, 218, 97, 68, 3, 0, 0, 27, 4, 3, 0, 30, 0, 31, 0, 49, 0, 0, 0, 44, 7, 0, 0, 53, 6, 7, 0, 30, 6, 6, 0, 49, 0, 0, 0, 44, 8, 1, 0, 53, 7, 8, 0, 27, 5, 7, 0, 28, 11, 0, 0, 49, 0, 0, 0, 44, 8, 2, 0, 53, 7, 8, 0, 52, 7, 0, 0, 44, 9, 3, 0, 53, 8, 9, 0, 49, 8, 0, 0, 44, 9, 1, 0, 53, 7, 9, 0, 27, 5, 7, 0, 27, 6, 5, 0, 40, 7, 0, 0, 73, 5, 6, 7, 27, 7, 5, 0, 31, 7, 7, 0, 58, 5, 6, 7, 27, 8, 5, 0, 59, 5, 0, 8, 60, 4, 8, 5, 73, 7, 6, 7, 28, 250, 255, 255, 43, 5, 0, 0, 63, 6, 1, 0, 35, 7, 5, 6, 30, 7, 11, 0, 49, 5, 0, 0, 53, 6, 1, 0, 27, 8, 6, 0, 5, 6, 5, 1, 49, 6, 0, 0, 53, 9, 1, 0, 27, 6, 9, 0, 60, 4, 8, 6, 5, 5, 5, 2, 28, 244, 255, 255, 49, 0, 0, 0, 44, 7, 0, 0, 53, 6, 7, 0, 30, 6, 4, 0, 49, 4, 0, 0, 44, 7, 4, 0, 54, 7, 0, 0, 3, 4, 0, 0, 117, 3, 0, 3, 1, 3, 1, 17, 0, 17, 0, 17, 0, 13, 0, 29, 0, 29, 0, 29, 0, 13, 0, 13, 0, 52, 0, 52, 0, 52, 0, 44, 0, 44, 0, 44, 0, 38, 0, 38, 0, 38, 0, 13, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 1, 21, 0, 7, 191, 255, 5, 0, 5, 2, 3, 1, 15, 0, 10, 0, 3, 1, 13, 0, 13, 0, 5, 0, 28, 0, 23, 0, 23, 0, 5, 1, 7, 1, 7, 191, 253, 3, 4, 7, 0, 7, 0, 7, 0, 3, 0, 19, 0, 19, 0, 19, 0, 3, 206, 4, 112, 111, 115, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 219, 218, 21, 218, 128, 219, 218, 36, 215, 0, 205, 0, 220, 0, 0, 5, 1, 1, 1, 1, 8, 0, 3, 206, 9, 99, 111, 114, 101, 45, 112, 111, 115, 63, 218, 39, 218, 91, 0, 8, 0, 218, 62, 0, 8, 1, 207, 9, 99, 111, 114, 101, 45, 112, 111, 115, 63, 3, 8, 3, 207, 7, 95, 48, 48, 48, 48, 104, 117, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 2, 3, 0, 34, 4, 0, 0, 3, 4, 0, 0, 3, 3, 0, 0, 27, 26, 0, 26, 0, 26, 0, 21, 0, 21, 0, 38, 0, 38, 0, 21, 206, 5, 116, 114, 117, 101, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 226, 218, 21, 218, 128, 226, 218, 36, 215, 0, 205, 0, 220, 0, 0, 4, 1, 1, 1, 0, 3, 0, 2, 206, 10, 99, 111, 114, 101, 45, 116, 114, 117, 101, 63, 218, 39, 0, 3, 0, 218, 62, 0, 3, 1, 207, 10, 99, 111, 114, 101, 45, 116, 114, 117, 101, 63, 41, 3, 0, 0, 37, 2, 3, 0, 3, 2, 0, 0, 22, 22, 0, 22, 0, 22, 206, 4, 114, 101, 115, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 232, 218, 21, 218, 128, 232, 218, 36, 218, 128, 137, 206, 4, 115, 111, 114, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 235, 218, 21, 218, 128, 235, 218, 36, 215, 0, 205, 0, 220, 0, 0, 7, 1, 1, 1, 5, 26, 0, 4, 206, 9, 99, 111, 114, 101, 45, 115, 111, 114, 116, 218, 39, 218, 74, 218, 77, 216, 4, 115, 111, 114, 116, 218, 127, 218, 76, 0, 26, 0, 218, 79, 0, 26, 1, 207, 9, 99, 111, 114, 101, 45, 115, 111, 114, 116, 10, 26, 3, 207, 3, 97, 114, 114, 14, 26, 4, 207, 6, 115, 111, 114, 116, 101, 100, 49, 0, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 30, 3, 6, 0, 49, 0, 0, 0, 44, 5, 1, 0, 53, 4, 5, 0, 27, 2, 4, 0, 28, 2, 0, 0, 27, 2, 0, 0, 27, 3, 2, 0, 49, 3, 0, 0, 44, 4, 2, 0, 53, 2, 4, 0, 27, 4, 2, 0, 49, 0, 0, 0, 44, 5, 0, 0, 53, 2, 5, 0, 30, 2, 7, 0, 52, 4, 0, 0, 44, 6, 3, 0, 53, 5, 6, 0, 49, 5, 0, 0, 44, 6, 4, 0, 54, 6, 0, 0, 3, 4, 0, 0, 129, 94, 17, 0, 17, 0, 17, 0, 13, 0, 31, 0, 31, 0, 31, 0, 13, 0, 13, 0, 13, 0, 3, 1, 16, 0, 16, 0, 16, 191, 255, 3, 2, 9, 0, 9, 0, 9, 0, 5, 0, 36, 0, 36, 0, 36, 0, 23, 0, 23, 0, 23, 0, 5, 206, 9, 97, 114, 114, 97, 121, 45, 109, 97, 112, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 244, 218, 21, 218, 128, 244, 218, 36, 215, 0, 205, 0, 221, 0, 0, 9, 0, 0, 205, 127, 255, 255, 255, 1, 17, 0, 4, 206, 14, 99, 111, 114, 101, 45, 97, 114, 114, 97, 121, 45, 109, 97, 112, 218, 39, 218, 103, 0, 17, 0, 218, 128, 215, 0, 17, 1, 207, 14, 99, 111, 114, 101, 45, 97, 114, 114, 97, 121, 45, 109, 97, 112, 1, 17, 3, 218, 59, 2, 17, 4, 218, 121, 68, 2, 0, 0, 27, 3, 2, 0, 43, 4, 0, 0, 63, 5, 0, 0, 35, 6, 4, 5, 30, 6, 9, 0, 49, 4, 0, 0, 53, 5, 0, 0, 5, 7, 4, 1, 49, 7, 0, 0, 53, 8, 0, 0, 60, 3, 5, 8, 5, 4, 4, 2, 28, 246, 255, 255, 49, 3, 0, 0, 44, 5, 0, 0, 54, 5, 0, 0, 129, 241, 3, 0, 3, 1, 3, 1, 15, 0, 10, 0, 3, 1, 17, 0, 17, 0, 30, 0, 25, 0, 25, 0, 5, 1, 5, 191, 254, 3, 3, 3, 0, 3, 0, 3, 206, 5, 122, 101, 114, 111, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 128, 250, 218, 21, 218, 128, 250, 218, 36, 215, 0, 205, 0, 220, 0, 0, 5, 1, 1, 1, 1, 8, 0, 3, 206, 10, 99, 111, 114, 101, 45, 122, 101, 114, 111, 63, 218, 39, 218, 91, 0, 8, 0, 218, 62, 0, 8, 1, 207, 10, 99, 111, 114, 101, 45, 122, 101, 114, 111, 63, 3, 8, 3, 207, 7, 95, 48, 48, 48, 48, 104, 116, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 2, 3, 0, 38, 4, 0, 0, 3, 4, 0, 0, 3, 3, 0, 0, 26, 27, 0, 27, 0, 27, 0, 22, 0, 22, 0, 39, 0, 39, 0, 22, 206, 4, 115, 101, 113, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 1, 218, 21, 218, 129, 1, 218, 36, 215, 0, 205, 0, 220, 0, 0, 4, 1, 1, 1, 2, 9, 0, 3, 206, 9, 99, 111, 114, 101, 45, 115, 101, 113, 63, 218, 39, 218, 90, 218, 74, 0, 9, 0, 218, 62, 0, 9, 1, 207, 9, 99, 111, 114, 101, 45, 115, 101, 113, 63, 3, 9, 3, 207, 7, 95, 48, 48, 48, 48, 104, 113, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 3, 2, 0, 3, 3, 0, 0, 49, 0, 0, 0, 44, 2, 1, 0, 54, 2, 0, 0, 19, 25, 0, 25, 0, 25, 0, 21, 0, 21, 0, 21, 0, 36, 0, 36, 0, 36, 206, 3, 115, 101, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 8, 218, 21, 218, 129, 8, 218, 36, 215, 0, 205, 0, 220, 0, 0, 6, 1, 1, 1, 3, 13, 0, 2, 206, 8, 99, 111, 114, 101, 45, 115, 101, 116, 218, 39, 218, 74, 218, 77, 215, 0, 205, 0, 221, 0, 0, 8, 0, 0, 205, 127, 255, 255, 255, 5, 25, 0, 6, 206, 13, 99, 111, 114, 101, 45, 104, 97, 115, 104, 45, 115, 101, 116, 218, 39, 218, 128, 213, 218, 127, 218, 6, 208, 8, 106, 111, 108, 116, 47, 115, 101, 116, 218, 40, 0, 25, 0, 218, 57, 0, 25, 1, 207, 13, 99, 111, 114, 101, 45, 104, 97, 115, 104, 45, 115, 101, 116, 1, 25, 3, 218, 59, 1, 12, 0, 207, 7, 95, 48, 48, 48, 48, 105, 120, 4, 12, 5, 207, 7, 95, 48, 48, 48, 48, 105, 119, 7, 12, 6, 218, 62, 68, 2, 0, 0, 27, 3, 2, 0, 40, 5, 0, 0, 73, 4, 0, 5, 27, 5, 4, 0, 31, 5, 7, 0, 58, 4, 0, 5, 27, 6, 4, 0, 41, 4, 0, 0, 60, 3, 6, 4, 73, 5, 0, 5, 28, 250, 255, 255, 49, 3, 0, 0, 44, 5, 0, 0, 53, 4, 5, 0, 52, 4, 0, 0, 44, 6, 1, 0, 53, 5, 6, 0, 44, 4, 2, 0, 44, 6, 3, 0, 44, 7, 4, 0, 51, 4, 6, 7, 49, 5, 0, 0, 67, 4, 0, 0, 3, 4, 0, 0, 129, 249, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 14, 0, 14, 0, 3, 0, 3, 1, 40, 0, 40, 0, 40, 0, 32, 0, 32, 0, 32, 191, 253, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 13, 0, 218, 79, 0, 13, 1, 207, 8, 99, 111, 114, 101, 45, 115, 101, 116, 49, 0, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 30, 3, 6, 0, 49, 0, 0, 0, 44, 5, 1, 0, 53, 4, 5, 0, 27, 2, 4, 0, 28, 2, 0, 0, 27, 2, 0, 0, 52, 2, 0, 0, 44, 3, 2, 0, 54, 3, 0, 0, 129, 254, 28, 0, 28, 0, 28, 0, 24, 0, 42, 0, 42, 0, 42, 0, 24, 0, 24, 0, 24, 0, 3, 0, 3, 0, 3, 206, 6, 102, 97, 108, 115, 101, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 20, 218, 21, 218, 129, 20, 218, 36, 215, 0, 205, 0, 220, 0, 0, 4, 1, 1, 1, 0, 3, 0, 2, 206, 11, 99, 111, 114, 101, 45, 102, 97, 108, 115, 101, 63, 218, 39, 0, 3, 0, 218, 62, 0, 3, 1, 207, 11, 99, 111, 114, 101, 45, 102, 97, 108, 115, 101, 63, 42, 3, 0, 0, 37, 2, 3, 0, 3, 2, 0, 0, 23, 23, 0, 23, 0, 23, 206, 7, 114, 101, 118, 101, 114, 115, 101, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 26, 218, 21, 218, 129, 26, 218, 36, 215, 0, 205, 0, 220, 0, 0, 10, 1, 1, 1, 5, 28, 0, 4, 206, 12, 99, 111, 114, 101, 45, 114, 101, 118, 101, 114, 115, 101, 218, 39, 216, 3, 100, 101, 99, 218, 55, 218, 74, 218, 127, 218, 76, 0, 28, 0, 218, 79, 0, 28, 1, 207, 12, 99, 111, 114, 101, 45, 114, 101, 118, 101, 114, 115, 101, 1, 28, 3, 218, 59, 6, 28, 4, 218, 121, 64, 2, 0, 0, 27, 3, 2, 0, 63, 4, 0, 0, 49, 4, 0, 0, 44, 6, 0, 0, 53, 5, 6, 0, 27, 4, 5, 0, 43, 7, 0, 0, 71, 6, 4, 7, 30, 6, 8, 0, 49, 4, 0, 0, 53, 7, 0, 0, 50, 3, 7, 0, 44, 9, 1, 0, 53, 8, 9, 0, 7, 4, 4, 1, 28, 247, 255, 255, 49, 0, 0, 0, 44, 7, 2, 0, 53, 6, 7, 0, 30, 6, 7, 0, 52, 3, 0, 0, 44, 8, 3, 0, 53, 7, 8, 0, 49, 7, 0, 0, 44, 8, 4, 0, 54, 8, 0, 0, 3, 3, 0, 0, 129, 86, 3, 0, 3, 1, 15, 0, 10, 0, 10, 0, 10, 0, 3, 1, 10, 0, 10, 0, 3, 1, 24, 0, 24, 0, 5, 0, 5, 0, 5, 1, 5, 191, 254, 3, 3, 7, 0, 7, 0, 7, 0, 3, 0, 34, 0, 34, 0, 34, 0, 21, 0, 21, 0, 21, 0, 3, 206, 10, 99, 111, 110, 115, 116, 97, 110, 116, 108, 121, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 33, 218, 21, 218, 129, 33, 218, 36, 215, 0, 205, 2, 246, 0, 0, 2, 1, 1, 1, 0, 2, 0, 1, 1, 218, 39, 0, 2, 0, 218, 62, 48, 1, 0, 0, 3, 1, 0, 0, 205, 0, 213, 0, 0, 2, 0, 0, 205, 127, 255, 255, 255, 0, 2, 1, 2, 218, 39, 191, 255, 0, 0, 218, 62, 0, 2, 0, 207, 1, 95, 45, 1, 0, 0, 3, 1, 0, 0, 191, 255, 129, 189, 30, 0, 30, 129, 189, 30, 0, 30, 1, 0, 0, 0, 206, 6, 101, 118, 101, 114, 121, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 38, 218, 21, 218, 129, 38, 218, 36, 215, 0, 205, 0, 220, 0, 0, 9, 2, 2, 2, 1, 18, 0, 7, 206, 11, 99, 111, 114, 101, 45, 101, 118, 101, 114, 121, 63, 218, 39, 218, 102, 0, 18, 0, 218, 128, 193, 0, 18, 1, 218, 79, 0, 18, 2, 207, 11, 99, 111, 114, 101, 45, 101, 118, 101, 114, 121, 63, 0, 18, 3, 218, 59, 0, 17, 1, 207, 7, 95, 48, 48, 48, 48, 104, 120, 3, 17, 5, 207, 7, 95, 48, 48, 48, 48, 104, 119, 6, 17, 6, 218, 62, 41, 3, 0, 0, 40, 5, 0, 0, 73, 4, 1, 5, 27, 5, 4, 0, 31, 5, 13, 0, 58, 4, 1, 5, 27, 6, 4, 0, 49, 6, 0, 0, 53, 4, 0, 0, 49, 4, 0, 0, 44, 8, 0, 0, 53, 7, 8, 0, 30, 7, 3, 0, 42, 3, 0, 0, 28, 3, 0, 0, 73, 5, 1, 5, 28, 244, 255, 255, 3, 3, 0, 0, 38, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 25, 0, 25, 0, 20, 0, 20, 0, 20, 0, 16, 0, 39, 0, 58, 0, 3, 0, 3, 191, 254, 1, 206, 5, 112, 114, 105, 110, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 46, 218, 21, 218, 129, 46, 218, 36, 218, 4, 206, 1, 47, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 49, 218, 21, 218, 129, 49, 218, 36, 215, 0, 205, 0, 213, 0, 0, 7, 0, 0, 205, 127, 255, 255, 255, 2, 18, 0, 2, 218, 39, 206, 37, 87, 114, 111, 110, 103, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 97, 114, 103, 115, 32, 40, 48, 41, 32, 112, 97, 115, 115, 101, 100, 32, 116, 111, 58, 32, 47, 216, 1, 47, 0, 18, 0, 218, 43, 1, 18, 2, 207, 7, 95, 48, 48, 48, 48, 104, 121, 63, 1, 0, 0, 27, 2, 1, 0, 38, 1, 2, 0, 30, 1, 4, 0, 44, 3, 0, 0, 1, 3, 0, 0, 4, 0, 0, 0, 38, 3, 2, 1, 30, 3, 7, 0, 43, 4, 0, 0, 49, 4, 0, 0, 53, 4, 0, 0, 43, 6, 1, 0, 12, 5, 6, 4, 3, 5, 0, 0, 52, 0, 0, 0, 44, 4, 1, 0, 54, 4, 0, 0, 58, 11, 0, 5, 0, 5, 0, 5, 1, 9, 0, 9, 0, 9, 191, 255, 5, 0, 5, 2, 14, 0, 14, 0, 14, 0, 9, 0, 9, 0, 9, 1, 7, 0, 7, 0, 7, 206, 4, 99, 111, 109, 112, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 56, 218, 21, 218, 129, 56, 218, 36, 215, 0, 205, 2, 247, 0, 0, 11, 0, 0, 205, 127, 255, 255, 255, 4, 38, 0, 2, 2, 218, 39, 216, 8, 105, 100, 101, 110, 116, 105, 116, 121, 216, 4, 108, 97, 115, 116, 218, 129, 31, 218, 77, 0, 38, 0, 218, 128, 203, 1, 38, 2, 207, 7, 95, 48, 48, 48, 48, 105, 117, 63, 1, 0, 0, 27, 2, 1, 0, 38, 1, 2, 0, 30, 1, 3, 0, 44, 3, 0, 0, 3, 3, 0, 0, 38, 3, 2, 1, 30, 3, 4, 0, 43, 4, 0, 0, 49, 4, 0, 0, 54, 0, 0, 0, 38, 4, 2, 2, 30, 4, 11, 0, 43, 5, 0, 0, 49, 5, 0, 0, 53, 5, 0, 0, 27, 6, 5, 0, 43, 5, 1, 0, 49, 5, 0, 0, 53, 5, 0, 0, 27, 7, 5, 0, 48, 5, 0, 0, 3, 5, 0, 0, 49, 0, 0, 0, 44, 8, 1, 0, 53, 5, 8, 0, 27, 8, 5, 0, 63, 5, 0, 0, 49, 5, 0, 0, 44, 10, 2, 0, 53, 9, 10, 0, 43, 5, 0, 0, 51, 0, 5, 9, 44, 10, 3, 0, 53, 5, 10, 0, 27, 9, 5, 0, 48, 5, 1, 0, 3, 5, 0, 0, 205, 0, 213, 0, 0, 3, 0, 0, 205, 127, 255, 255, 255, 0, 6, 1, 3, 218, 39, 191, 255, 0, 6, 218, 42, 191, 255, 0, 7, 207, 1, 103, 0, 6, 0, 218, 43, 52, 0, 0, 0, 45, 2, 0, 7, 53, 1, 2, 0, 49, 1, 0, 0, 45, 2, 0, 6, 54, 2, 0, 0, 191, 255, 129, 199, 50, 0, 50, 0, 50, 0, 47, 0, 47, 0, 47, 205, 0, 213, 0, 0, 8, 0, 0, 205, 127, 255, 255, 255, 1, 24, 1, 5, 218, 39, 218, 129, 61, 191, 255, 0, 8, 218, 42, 191, 255, 0, 9, 207, 2, 103, 115, 0, 24, 0, 218, 43, 6, 24, 1, 218, 59, 10, 24, 3, 218, 121, 45, 1, 0, 9, 49, 1, 0, 0, 44, 2, 0, 0, 53, 1, 2, 0, 52, 0, 0, 0, 53, 2, 1, 0, 27, 1, 2, 0, 45, 4, 0, 9, 63, 3, 4, 0, 7, 4, 3, 2, 27, 3, 4, 0, 43, 6, 0, 0, 71, 5, 3, 6, 30, 5, 8, 0, 49, 3, 0, 0, 45, 7, 0, 9, 53, 6, 7, 0, 49, 1, 0, 0, 53, 1, 6, 0, 7, 3, 3, 1, 28, 247, 255, 255, 49, 1, 0, 0, 45, 5, 0, 8, 54, 5, 0, 0, 191, 255, 129, 203, 30, 0, 30, 0, 30, 0, 30, 0, 23, 0, 23, 0, 11, 1, 21, 0, 21, 0, 18, 0, 11, 1, 18, 0, 18, 0, 11, 1, 26, 0, 26, 0, 26, 0, 25, 0, 25, 1, 13, 191, 254, 11, 3, 11, 0, 11, 0, 11, 129, 196, 11, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 2, 9, 0, 9, 0, 9, 191, 254, 5, 0, 5, 3, 17, 0, 17, 0, 17, 0, 9, 0, 26, 0, 26, 0, 26, 0, 9, 0, 34, 0, 34, 1, 15, 0, 15, 0, 15, 0, 7, 1, 39, 0, 34, 0, 34, 0, 34, 0, 16, 0, 16, 0, 16, 0, 16, 191, 255, 7, 2, 9, 0, 9, 192, 3, 0, 0, 206, 5, 101, 118, 101, 110, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 65, 218, 21, 218, 129, 65, 218, 36, 215, 0, 205, 0, 220, 0, 0, 5, 1, 1, 1, 0, 5, 0, 2, 206, 10, 99, 111, 114, 101, 45, 101, 118, 101, 110, 63, 218, 39, 0, 5, 0, 218, 78, 0, 5, 1, 207, 10, 99, 111, 114, 101, 45, 101, 118, 101, 110, 63, 43, 3, 2, 0, 15, 2, 0, 3, 43, 4, 0, 0, 37, 3, 4, 2, 3, 3, 0, 0, 29, 27, 0, 27, 0, 22, 0, 22, 0, 22, 206, 5, 100, 101, 114, 101, 102, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 71, 218, 21, 218, 129, 71, 218, 36, 215, 0, 205, 0, 220, 0, 0, 9, 1, 1, 1, 6, 35, 0, 4, 206, 10, 99, 111, 114, 101, 45, 100, 101, 114, 101, 102, 218, 39, 218, 89, 218, 6, 208, 9, 106, 111, 108, 116, 47, 97, 116, 111, 109, 218, 40, 218, 33, 218, 36, 0, 35, 0, 207, 3, 114, 101, 102, 0, 35, 1, 207, 10, 99, 111, 114, 101, 45, 100, 101, 114, 101, 102, 3, 13, 4, 207, 7, 95, 48, 48, 48, 48, 105, 67, 20, 30, 5, 207, 7, 95, 48, 48, 48, 48, 105, 68, 49, 0, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 27, 4, 3, 0, 30, 3, 8, 0, 44, 5, 1, 0, 49, 5, 0, 0, 53, 5, 0, 0, 44, 7, 2, 0, 37, 6, 7, 5, 27, 2, 6, 0, 28, 2, 0, 0, 27, 2, 4, 0, 30, 2, 4, 0, 44, 3, 3, 0, 49, 3, 0, 0, 54, 0, 0, 0, 49, 0, 0, 0, 44, 5, 0, 0, 53, 4, 5, 0, 27, 5, 4, 0, 30, 4, 8, 0, 44, 6, 1, 0, 49, 6, 0, 0, 53, 6, 0, 0, 44, 8, 4, 0, 37, 7, 8, 6, 27, 3, 7, 0, 28, 2, 0, 0, 27, 3, 5, 0, 30, 3, 4, 0, 44, 4, 5, 0, 49, 4, 0, 0, 54, 0, 0, 0, 3, 0, 0, 0, 130, 56, 10, 0, 10, 0, 10, 0, 5, 0, 5, 0, 37, 0, 37, 0, 37, 0, 23, 0, 23, 0, 5, 0, 5, 0, 5, 191, 254, 3, 3, 5, 0, 5, 0, 5, 2, 10, 0, 10, 0, 10, 0, 5, 0, 5, 0, 36, 0, 36, 0, 36, 0, 23, 0, 23, 0, 5, 0, 5, 0, 5, 191, 251, 3, 6, 5, 0, 5, 0, 5, 191, 250, 3, 206, 10, 116, 97, 107, 101, 45, 119, 104, 105, 108, 101, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 81, 218, 21, 218, 129, 81, 218, 36, 215, 0, 205, 0, 220, 0, 0, 10, 2, 2, 2, 4, 29, 0, 7, 206, 15, 99, 111, 114, 101, 45, 116, 97, 107, 101, 45, 119, 104, 105, 108, 101, 218, 39, 218, 55, 218, 74, 218, 127, 218, 76, 0, 29, 0, 218, 128, 193, 0, 29, 1, 218, 79, 0, 29, 2, 207, 15, 99, 111, 114, 101, 45, 116, 97, 107, 101, 45, 119, 104, 105, 108, 101, 1, 29, 4, 218, 59, 1, 18, 1, 207, 7, 95, 48, 48, 48, 48, 105, 103, 4, 18, 6, 207, 7, 95, 48, 48, 48, 48, 105, 102, 7, 18, 7, 218, 62, 64, 3, 0, 0, 27, 4, 3, 0, 40, 6, 0, 0, 73, 5, 1, 6, 27, 6, 5, 0, 31, 6, 13, 0, 58, 5, 1, 6, 27, 7, 5, 0, 49, 7, 0, 0, 53, 5, 0, 0, 30, 5, 5, 0, 50, 4, 7, 0, 44, 9, 0, 0, 53, 8, 9, 0, 28, 2, 0, 0, 28, 3, 0, 0, 73, 6, 1, 6, 28, 244, 255, 255, 49, 1, 0, 0, 44, 6, 1, 0, 53, 5, 6, 0, 30, 5, 7, 0, 52, 4, 0, 0, 44, 7, 2, 0, 53, 6, 7, 0, 49, 6, 0, 0, 44, 7, 3, 0, 54, 7, 0, 0, 3, 4, 0, 0, 129, 66, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 9, 0, 9, 0, 5, 0, 18, 0, 18, 0, 18, 0, 5, 0, 40, 191, 255, 3, 0, 3, 2, 7, 0, 7, 0, 7, 0, 3, 0, 34, 0, 34, 0, 34, 0, 21, 0, 21, 0, 21, 0, 3, 206, 3, 100, 101, 99, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 89, 218, 21, 218, 129, 89, 218, 36, 218, 129, 31, 206, 3, 102, 110, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 92, 218, 21, 218, 129, 92, 218, 36, 215, 0, 205, 0, 220, 0, 0, 4, 1, 1, 1, 2, 9, 0, 3, 206, 8, 99, 111, 114, 101, 45, 102, 110, 63, 218, 39, 216, 9, 102, 117, 110, 99, 116, 105, 111, 110, 63, 216, 10, 99, 102, 117, 110, 99, 116, 105, 111, 110, 63, 0, 9, 0, 218, 62, 0, 9, 1, 207, 8, 99, 111, 114, 101, 45, 102, 110, 63, 3, 9, 3, 207, 7, 95, 48, 48, 48, 48, 104, 111, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 3, 2, 0, 3, 3, 0, 0, 49, 0, 0, 0, 44, 2, 1, 0, 54, 2, 0, 0, 14, 24, 0, 24, 0, 24, 0, 20, 0, 20, 0, 20, 0, 38, 0, 38, 0, 38, 206, 5, 115, 111, 109, 101, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 101, 218, 21, 218, 129, 101, 218, 36, 215, 0, 205, 0, 220, 0, 0, 4, 1, 1, 1, 2, 6, 0, 2, 206, 10, 99, 111, 114, 101, 45, 115, 111, 109, 101, 63, 218, 39, 218, 52, 218, 102, 0, 6, 0, 218, 62, 0, 6, 1, 207, 10, 99, 111, 114, 101, 45, 115, 111, 109, 101, 63, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 49, 2, 0, 0, 44, 3, 1, 0, 54, 3, 0, 0, 11, 27, 0, 27, 0, 27, 0, 22, 0, 22, 0, 22, 206, 10, 109, 101, 114, 103, 101, 45, 119, 105, 116, 104, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 107, 218, 21, 218, 129, 107, 218, 36, 215, 0, 205, 0, 221, 0, 0, 15, 1, 1, 205, 127, 255, 255, 255, 3, 42, 0, 11, 206, 15, 99, 111, 114, 101, 45, 109, 101, 114, 103, 101, 45, 119, 105, 116, 104, 218, 39, 218, 128, 213, 218, 52, 218, 103, 0, 42, 0, 218, 42, 0, 42, 1, 207, 4, 109, 97, 112, 115, 0, 42, 2, 207, 15, 99, 111, 114, 101, 45, 109, 101, 114, 103, 101, 45, 119, 105, 116, 104, 1, 42, 4, 218, 59, 1, 39, 1, 207, 7, 95, 48, 48, 48, 48, 105, 48, 4, 39, 6, 207, 7, 95, 48, 48, 48, 48, 104, 90, 7, 39, 7, 218, 92, 11, 37, 8, 207, 7, 95, 48, 48, 48, 48, 105, 50, 14, 37, 9, 207, 7, 95, 48, 48, 48, 48, 105, 49, 17, 37, 10, 218, 93, 20, 35, 11, 207, 8, 101, 120, 105, 115, 116, 105, 110, 103, 68, 3, 0, 0, 27, 4, 3, 0, 40, 6, 0, 0, 73, 5, 1, 6, 27, 6, 5, 0, 31, 6, 34, 0, 58, 5, 1, 6, 27, 7, 5, 0, 49, 7, 0, 0, 44, 8, 0, 0, 53, 5, 8, 0, 27, 8, 5, 0, 40, 9, 0, 0, 73, 5, 8, 9, 27, 9, 5, 0, 31, 9, 22, 0, 58, 5, 8, 9, 27, 10, 5, 0, 49, 10, 0, 0, 53, 5, 4, 0, 27, 11, 5, 0, 49, 11, 0, 0, 44, 13, 1, 0, 53, 12, 13, 0, 30, 12, 5, 0, 49, 10, 0, 0, 53, 13, 7, 0, 27, 5, 13, 0, 28, 6, 0, 0, 49, 10, 0, 0, 53, 13, 7, 0, 50, 11, 13, 0, 53, 14, 0, 0, 27, 5, 14, 0, 60, 4, 10, 5, 73, 9, 8, 9, 28, 235, 255, 255, 73, 6, 1, 6, 28, 223, 255, 255, 49, 4, 0, 0, 44, 5, 2, 0, 54, 5, 0, 0, 128, 222, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 13, 0, 13, 0, 13, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 1, 22, 0, 22, 0, 7, 1, 27, 0, 27, 0, 27, 0, 23, 0, 43, 0, 43, 0, 23, 0, 23, 0, 61, 0, 61, 0, 49, 0, 49, 0, 23, 0, 9, 191, 254, 5, 0, 5, 191, 255, 3, 0, 3, 4, 3, 0, 3, 0, 3, 206, 7, 110, 117, 109, 98, 101, 114, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 119, 218, 21, 218, 129, 119, 218, 36, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 3, 0, 2, 206, 12, 99, 111, 114, 101, 45, 110, 117, 109, 98, 101, 114, 63, 218, 39, 218, 91, 0, 3, 0, 218, 62, 0, 3, 1, 207, 12, 99, 111, 114, 101, 45, 110, 117, 109, 98, 101, 114, 63, 49, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 13, 24, 0, 24, 0, 24, 206, 10, 99, 111, 109, 112, 108, 101, 109, 101, 110, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 125, 218, 21, 218, 129, 125, 218, 36, 215, 0, 205, 2, 254, 0, 0, 3, 1, 1, 1, 0, 2, 0, 1, 2, 206, 15, 99, 111, 114, 101, 45, 99, 111, 109, 112, 108, 101, 109, 101, 110, 116, 218, 39, 0, 2, 0, 218, 42, 0, 2, 1, 207, 15, 99, 111, 114, 101, 45, 99, 111, 109, 112, 108, 101, 109, 101, 110, 116, 48, 2, 0, 0, 3, 2, 0, 0, 205, 0, 213, 0, 0, 3, 0, 0, 205, 127, 255, 255, 255, 1, 6, 1, 3, 218, 39, 218, 102, 191, 255, 0, 0, 218, 42, 191, 255, 0, 1, 218, 129, 130, 0, 6, 0, 218, 43, 52, 0, 0, 0, 45, 2, 0, 0, 53, 1, 2, 0, 49, 1, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 191, 255, 129, 192, 21, 0, 21, 0, 21, 0, 16, 0, 16, 0, 16, 129, 192, 3, 0, 3, 1, 0, 0, 0, 206, 5, 114, 97, 110, 103, 101, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 131, 218, 21, 218, 129, 131, 218, 36, 215, 0, 205, 0, 213, 0, 0, 9, 0, 0, 205, 127, 255, 255, 255, 4, 57, 0, 6, 218, 39, 216, 4, 112, 111, 115, 63, 218, 55, 218, 127, 218, 76, 0, 57, 0, 218, 43, 9, 57, 2, 207, 5, 115, 116, 97, 114, 116, 22, 57, 3, 207, 3, 101, 110, 100, 32, 57, 4, 207, 4, 115, 116, 101, 112, 34, 57, 5, 218, 59, 35, 57, 1, 218, 121, 63, 2, 0, 0, 34, 3, 2, 1, 30, 3, 6, 0, 43, 2, 0, 0, 49, 2, 0, 0, 53, 2, 0, 0, 27, 1, 2, 0, 28, 2, 0, 0, 43, 1, 0, 0, 27, 2, 1, 0, 63, 3, 0, 0, 34, 4, 3, 1, 30, 4, 6, 0, 43, 3, 1, 0, 49, 3, 0, 0, 53, 3, 0, 0, 27, 1, 3, 0, 28, 5, 0, 0, 43, 3, 0, 0, 49, 3, 0, 0, 53, 3, 0, 0, 27, 1, 3, 0, 27, 3, 1, 0, 63, 4, 0, 0, 34, 5, 4, 2, 30, 5, 6, 0, 43, 4, 2, 0, 49, 4, 0, 0, 53, 4, 0, 0, 27, 1, 4, 0, 28, 2, 0, 0, 43, 1, 1, 0, 27, 4, 1, 0, 64, 1, 0, 0, 27, 5, 1, 0, 27, 1, 2, 0, 49, 4, 0, 0, 44, 8, 0, 0, 53, 7, 8, 0, 30, 7, 4, 0, 35, 8, 1, 3, 27, 6, 8, 0, 28, 3, 0, 0, 33, 8, 1, 3, 27, 6, 8, 0, 30, 6, 6, 0, 50, 5, 1, 0, 44, 8, 1, 0, 53, 7, 8, 0, 6, 1, 1, 4, 28, 242, 255, 255, 52, 5, 0, 0, 44, 7, 2, 0, 53, 6, 7, 0, 49, 6, 0, 0, 44, 7, 3, 0, 54, 7, 0, 0, 129, 157, 24, 0, 21, 0, 17, 0, 41, 0, 41, 0, 41, 0, 17, 0, 17, 0, 17, 0, 5, 1, 22, 0, 19, 0, 15, 0, 39, 0, 39, 0, 39, 0, 15, 0, 15, 0, 48, 0, 48, 0, 48, 0, 15, 191, 255, 5, 2, 23, 0, 20, 0, 16, 0, 40, 0, 40, 0, 40, 0, 16, 0, 16, 0, 16, 191, 254, 5, 3, 7, 0, 7, 1, 7, 1, 18, 0, 18, 0, 18, 0, 14, 0, 30, 0, 14, 0, 14, 0, 40, 0, 14, 0, 7, 1, 9, 0, 9, 0, 9, 1, 9, 191, 254, 7, 3, 20, 0, 20, 0, 20, 0, 7, 0, 7, 0, 7, 206, 10, 114, 101, 112, 101, 97, 116, 101, 100, 108, 121, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 139, 218, 21, 218, 129, 139, 218, 36, 215, 0, 205, 0, 220, 0, 0, 10, 2, 2, 2, 1, 12, 0, 5, 206, 15, 99, 111, 114, 101, 45, 114, 101, 112, 101, 97, 116, 101, 100, 108, 121, 218, 39, 218, 55, 0, 12, 0, 218, 78, 0, 12, 1, 218, 42, 0, 12, 2, 207, 15, 99, 111, 114, 101, 45, 114, 101, 112, 101, 97, 116, 101, 100, 108, 121, 1, 12, 4, 218, 59, 2, 12, 5, 218, 121, 64, 3, 0, 0, 27, 4, 3, 0, 43, 5, 0, 0, 35, 6, 5, 0, 30, 6, 7, 0, 53, 7, 1, 0, 50, 4, 7, 0, 44, 9, 0, 0, 53, 8, 9, 0, 5, 5, 5, 1, 28, 249, 255, 255, 3, 4, 0, 0, 129, 176, 3, 0, 3, 1, 3, 1, 10, 0, 3, 1, 24, 0, 5, 0, 5, 0, 5, 1, 5, 191, 254, 3, 191, 253, 1, 206, 6, 118, 101, 99, 116, 111, 114, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 145, 218, 21, 218, 129, 145, 218, 36, 215, 0, 205, 0, 221, 0, 0, 3, 0, 0, 205, 127, 255, 255, 255, 1, 3, 0, 2, 206, 11, 99, 111, 114, 101, 45, 118, 101, 99, 116, 111, 114, 218, 39, 218, 127, 0, 3, 0, 218, 57, 0, 3, 1, 207, 11, 99, 111, 114, 101, 45, 118, 101, 99, 116, 111, 114, 52, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 129, 231, 26, 0, 26, 0, 26, 206, 1, 42, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 151, 218, 21, 218, 129, 151, 218, 36, 215, 0, 205, 0, 213, 0, 0, 4, 0, 0, 205, 127, 255, 255, 255, 1, 9, 0, 1, 218, 39, 216, 1, 42, 0, 9, 0, 218, 43, 63, 1, 0, 0, 43, 3, 0, 0, 37, 2, 3, 1, 30, 2, 3, 0, 43, 1, 1, 0, 3, 1, 0, 0, 52, 0, 0, 0, 44, 1, 0, 0, 54, 1, 0, 0, 54, 35, 0, 30, 0, 30, 0, 26, 0, 26, 0, 26, 0, 52, 0, 52, 0, 52, 206, 5, 102, 105, 114, 115, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 156, 218, 21, 218, 129, 156, 218, 36, 215, 0, 205, 0, 220, 0, 0, 7, 1, 1, 1, 1, 16, 0, 3, 206, 10, 99, 111, 114, 101, 45, 102, 105, 114, 115, 116, 218, 39, 218, 52, 0, 16, 0, 218, 79, 0, 16, 1, 207, 10, 99, 111, 114, 101, 45, 102, 105, 114, 115, 116, 3, 11, 3, 207, 7, 95, 48, 48, 48, 48, 104, 79, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 3, 3, 0, 27, 2, 3, 0, 28, 5, 0, 0, 63, 4, 0, 0, 43, 6, 0, 0, 37, 5, 6, 4, 27, 2, 5, 0, 30, 2, 2, 0, 4, 0, 0, 0, 43, 4, 0, 0, 58, 3, 0, 4, 3, 3, 0, 0, 128, 167, 11, 0, 11, 0, 11, 0, 7, 0, 7, 0, 7, 0, 7, 0, 28, 0, 23, 0, 23, 0, 7, 0, 3, 0, 3, 1, 5, 0, 5, 0, 5, 206, 5, 109, 101, 114, 103, 101, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 163, 218, 21, 218, 129, 163, 218, 36, 215, 0, 205, 0, 221, 0, 0, 7, 0, 0, 205, 127, 255, 255, 255, 2, 15, 0, 6, 206, 10, 99, 111, 114, 101, 45, 109, 101, 114, 103, 101, 218, 39, 216, 6, 115, 116, 114, 117, 99, 116, 218, 128, 157, 0, 15, 0, 218, 129, 112, 0, 15, 1, 207, 10, 99, 111, 114, 101, 45, 109, 101, 114, 103, 101, 2, 15, 3, 218, 59, 2, 14, 0, 207, 7, 95, 48, 48, 48, 48, 104, 89, 5, 14, 5, 207, 7, 95, 48, 48, 48, 48, 104, 88, 8, 14, 6, 218, 92, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 40, 5, 0, 0, 73, 4, 0, 5, 27, 5, 4, 0, 31, 5, 8, 0, 58, 4, 0, 5, 27, 6, 4, 0, 50, 3, 6, 0, 44, 4, 1, 0, 53, 3, 4, 0, 73, 5, 0, 5, 28, 249, 255, 255, 3, 3, 0, 0, 128, 216, 15, 0, 15, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 17, 0, 17, 0, 17, 191, 255, 3, 0, 3, 191, 254, 1, 206, 6, 100, 105, 115, 115, 111, 99, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 172, 218, 21, 218, 129, 172, 218, 36, 215, 0, 205, 0, 221, 0, 0, 13, 1, 1, 205, 127, 255, 255, 255, 5, 44, 0, 11, 206, 11, 99, 111, 114, 101, 45, 100, 105, 115, 115, 111, 99, 218, 39, 218, 128, 213, 216, 5, 100, 101, 101, 112, 61, 218, 102, 218, 88, 218, 103, 0, 44, 0, 218, 92, 0, 44, 1, 218, 104, 0, 44, 2, 207, 11, 99, 111, 114, 101, 45, 100, 105, 115, 115, 111, 99, 1, 44, 4, 218, 59, 5, 36, 6, 207, 7, 95, 48, 48, 48, 48, 104, 68, 8, 36, 7, 207, 7, 95, 48, 48, 48, 48, 104, 67, 11, 36, 8, 218, 93, 12, 36, 5, 207, 5, 105, 110, 45, 107, 115, 12, 27, 1, 207, 7, 95, 48, 48, 48, 48, 104, 70, 15, 27, 10, 207, 7, 95, 48, 48, 48, 48, 104, 69, 18, 27, 11, 207, 2, 107, 50, 68, 3, 0, 0, 27, 4, 3, 0, 49, 0, 0, 0, 44, 6, 0, 0, 53, 5, 6, 0, 27, 6, 5, 0, 40, 7, 0, 0, 73, 5, 6, 7, 27, 7, 5, 0, 31, 7, 27, 0, 58, 5, 6, 7, 27, 8, 5, 0, 42, 5, 0, 0, 40, 10, 0, 0, 73, 9, 1, 10, 27, 10, 9, 0, 31, 10, 11, 0, 58, 9, 1, 10, 27, 11, 9, 0, 50, 8, 11, 0, 44, 12, 1, 0, 53, 9, 12, 0, 30, 9, 3, 0, 41, 5, 0, 0, 28, 3, 0, 0, 73, 10, 1, 10, 28, 246, 255, 255, 49, 5, 0, 0, 44, 10, 2, 0, 53, 9, 10, 0, 30, 9, 4, 0, 49, 8, 0, 0, 53, 10, 0, 0, 60, 4, 8, 10, 73, 7, 6, 7, 28, 230, 255, 255, 49, 0, 0, 0, 44, 6, 3, 0, 53, 5, 6, 0, 30, 5, 4, 0, 49, 4, 0, 0, 44, 6, 4, 0, 54, 6, 0, 0, 3, 4, 0, 0, 128, 129, 3, 0, 3, 1, 11, 0, 11, 0, 11, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 5, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 1, 11, 0, 11, 0, 11, 0, 7, 0, 28, 0, 45, 191, 255, 5, 0, 5, 2, 9, 0, 9, 0, 9, 0, 5, 0, 35, 0, 35, 0, 21, 191, 252, 3, 0, 3, 5, 7, 0, 7, 0, 7, 0, 3, 0, 19, 0, 19, 0, 19, 0, 3, 206, 4, 115, 117, 98, 115, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 185, 218, 21, 218, 129, 185, 218, 36, 215, 0, 205, 0, 213, 0, 0, 8, 0, 0, 205, 127, 255, 255, 255, 2, 30, 0, 2, 218, 39, 216, 12, 115, 116, 114, 105, 110, 103, 47, 115, 108, 105, 99, 101, 206, 36, 87, 114, 111, 110, 103, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 97, 114, 103, 115, 32, 112, 97, 115, 115, 101, 100, 32, 116, 111, 58, 32, 115, 117, 98, 115, 0, 30, 0, 218, 43, 1, 30, 2, 207, 7, 95, 48, 48, 48, 48, 105, 65, 63, 1, 0, 0, 27, 2, 1, 0, 38, 1, 2, 2, 30, 1, 10, 0, 43, 3, 0, 0, 49, 3, 0, 0, 53, 3, 0, 0, 43, 4, 1, 0, 49, 4, 0, 0, 53, 4, 0, 0, 50, 3, 4, 0, 44, 5, 0, 0, 54, 5, 0, 0, 38, 3, 2, 3, 30, 3, 13, 0, 43, 4, 0, 0, 49, 4, 0, 0, 53, 4, 0, 0, 43, 5, 1, 0, 49, 5, 0, 0, 53, 5, 0, 0, 43, 6, 2, 0, 49, 6, 0, 0, 53, 6, 0, 0, 51, 4, 5, 6, 44, 7, 0, 0, 54, 7, 0, 0, 44, 4, 1, 0, 1, 4, 0, 0, 4, 0, 0, 0, 130, 18, 11, 0, 5, 0, 5, 0, 5, 1, 23, 0, 23, 0, 23, 0, 32, 0, 32, 0, 32, 0, 9, 0, 9, 0, 9, 191, 255, 5, 0, 5, 2, 23, 0, 23, 0, 23, 0, 32, 0, 32, 0, 32, 0, 41, 0, 41, 0, 41, 0, 9, 0, 9, 0, 9, 1, 7, 0, 7, 0, 7, 206, 3, 109, 111, 100, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 192, 218, 21, 218, 129, 192, 218, 36, 216, 1, 37, 206, 8, 104, 97, 115, 104, 45, 109, 97, 112, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 196, 218, 21, 218, 129, 196, 218, 36, 215, 0, 205, 0, 221, 0, 0, 9, 0, 0, 205, 127, 255, 255, 255, 1, 17, 0, 4, 206, 13, 99, 111, 114, 101, 45, 104, 97, 115, 104, 45, 109, 97, 112, 218, 39, 218, 103, 0, 17, 0, 218, 128, 215, 0, 17, 1, 207, 13, 99, 111, 114, 101, 45, 104, 97, 115, 104, 45, 109, 97, 112, 1, 17, 3, 218, 59, 2, 17, 4, 218, 121, 68, 2, 0, 0, 27, 3, 2, 0, 43, 4, 0, 0, 63, 5, 0, 0, 35, 6, 4, 5, 30, 6, 9, 0, 49, 4, 0, 0, 53, 5, 0, 0, 5, 7, 4, 1, 49, 7, 0, 0, 53, 8, 0, 0, 60, 3, 5, 8, 5, 4, 4, 2, 28, 246, 255, 255, 49, 3, 0, 0, 44, 5, 0, 0, 54, 5, 0, 0, 129, 233, 3, 0, 3, 1, 3, 1, 15, 0, 10, 0, 3, 1, 17, 0, 17, 0, 30, 0, 25, 0, 25, 0, 5, 1, 5, 191, 254, 3, 3, 3, 0, 3, 0, 3, 206, 4, 110, 101, 103, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 202, 218, 21, 218, 129, 202, 218, 36, 215, 0, 205, 0, 220, 0, 0, 5, 1, 1, 1, 1, 8, 0, 3, 206, 9, 99, 111, 114, 101, 45, 110, 101, 103, 63, 218, 39, 218, 91, 0, 8, 0, 218, 62, 0, 8, 1, 207, 9, 99, 111, 114, 101, 45, 110, 101, 103, 63, 3, 8, 3, 207, 7, 95, 48, 48, 48, 48, 104, 118, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 2, 3, 0, 36, 4, 0, 0, 3, 4, 0, 0, 3, 3, 0, 0, 28, 26, 0, 26, 0, 26, 0, 21, 0, 21, 0, 38, 0, 38, 0, 21, 206, 12, 112, 97, 114, 116, 105, 116, 105, 111, 110, 45, 98, 121, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 209, 218, 21, 218, 129, 209, 218, 36, 215, 0, 205, 0, 220, 0, 0, 16, 2, 2, 2, 4, 57, 0, 11, 206, 17, 99, 111, 114, 101, 45, 112, 97, 114, 116, 105, 116, 105, 111, 110, 45, 98, 121, 218, 39, 218, 129, 177, 218, 55, 218, 127, 218, 76, 0, 57, 0, 218, 42, 0, 57, 1, 218, 79, 0, 57, 2, 207, 17, 99, 111, 114, 101, 45, 112, 97, 114, 116, 105, 116, 105, 111, 110, 45, 98, 121, 1, 57, 4, 218, 59, 3, 57, 6, 218, 128, 129, 4, 57, 7, 207, 6, 108, 97, 115, 116, 45, 107, 4, 44, 1, 207, 7, 95, 48, 48, 48, 48, 105, 115, 7, 44, 9, 207, 7, 95, 48, 48, 48, 48, 105, 114, 10, 44, 10, 218, 62, 13, 42, 11, 218, 93, 14, 22, 12, 207, 7, 95, 48, 48, 48, 48, 105, 116, 64, 3, 0, 0, 27, 4, 3, 0, 64, 5, 0, 0, 27, 6, 5, 0, 40, 7, 0, 0, 40, 9, 0, 0, 73, 8, 1, 9, 27, 9, 8, 0, 31, 9, 36, 0, 58, 8, 1, 9, 27, 10, 8, 0, 49, 10, 0, 0, 53, 8, 0, 0, 27, 11, 8, 0, 27, 12, 7, 0, 30, 7, 6, 0, 50, 11, 7, 0, 44, 14, 0, 0, 53, 13, 14, 0, 27, 8, 13, 0, 28, 2, 0, 0, 27, 8, 12, 0, 30, 8, 5, 0, 50, 6, 10, 0, 44, 13, 1, 0, 53, 12, 13, 0, 28, 16, 0, 0, 63, 12, 6, 0, 34, 13, 12, 0, 30, 13, 10, 0, 52, 6, 0, 0, 44, 14, 2, 0, 53, 12, 14, 0, 49, 12, 0, 0, 44, 15, 3, 0, 53, 14, 15, 0, 50, 4, 14, 0, 44, 15, 1, 0, 53, 12, 15, 0, 49, 10, 0, 0, 64, 6, 0, 0, 27, 7, 11, 0, 73, 9, 1, 9, 28, 221, 255, 255, 63, 8, 6, 0, 34, 9, 8, 0, 30, 9, 10, 0, 52, 6, 0, 0, 44, 10, 2, 0, 53, 8, 10, 0, 49, 8, 0, 0, 44, 11, 3, 0, 53, 10, 11, 0, 50, 4, 10, 0, 44, 11, 1, 0, 53, 8, 11, 0, 3, 4, 0, 0, 129, 137, 3, 0, 3, 1, 3, 0, 3, 1, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 13, 0, 13, 0, 5, 1, 11, 0, 11, 0, 23, 0, 23, 0, 23, 0, 11, 0, 11, 0, 11, 0, 7, 1, 9, 0, 9, 0, 9, 191, 255, 7, 3, 18, 0, 15, 0, 11, 0, 67, 0, 67, 0, 67, 0, 54, 0, 54, 0, 54, 0, 35, 0, 35, 0, 35, 1, 11, 0, 11, 1, 11, 191, 249, 3, 0, 3, 8, 10, 0, 7, 0, 3, 0, 59, 0, 59, 0, 59, 0, 46, 0, 46, 0, 46, 0, 27, 0, 27, 0, 27, 191, 244, 1, 206, 6, 122, 105, 112, 109, 97, 112, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 219, 218, 21, 218, 129, 219, 218, 36, 215, 0, 205, 0, 220, 0, 0, 11, 2, 2, 2, 1, 23, 0, 6, 206, 11, 99, 111, 114, 101, 45, 122, 105, 112, 109, 97, 112, 218, 39, 218, 103, 0, 23, 0, 218, 104, 0, 23, 1, 207, 2, 118, 115, 0, 23, 2, 207, 11, 99, 111, 114, 101, 45, 122, 105, 112, 109, 97, 112, 1, 23, 4, 218, 59, 2, 23, 5, 218, 121, 5, 12, 7, 207, 7, 95, 48, 48, 48, 48, 105, 54, 68, 3, 0, 0, 27, 4, 3, 0, 43, 5, 0, 0, 63, 7, 0, 0, 35, 8, 5, 7, 27, 7, 8, 0, 30, 8, 5, 0, 63, 9, 1, 0, 35, 10, 5, 9, 27, 6, 10, 0, 28, 2, 0, 0, 27, 6, 7, 0, 30, 6, 8, 0, 49, 5, 0, 0, 53, 7, 0, 0, 49, 5, 0, 0, 53, 8, 1, 0, 60, 4, 7, 8, 5, 5, 5, 1, 28, 240, 255, 255, 49, 4, 0, 0, 44, 6, 0, 0, 54, 6, 0, 0, 128, 243, 3, 0, 3, 1, 3, 1, 20, 0, 15, 0, 10, 0, 10, 0, 38, 0, 33, 0, 10, 0, 10, 0, 10, 0, 3, 1, 17, 0, 17, 0, 24, 0, 24, 0, 5, 1, 5, 191, 254, 3, 3, 3, 0, 3, 0, 3, 206, 5, 97, 116, 111, 109, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 227, 218, 21, 218, 129, 227, 218, 36, 215, 0, 205, 0, 220, 0, 0, 7, 1, 1, 1, 3, 12, 0, 3, 206, 10, 99, 111, 114, 101, 45, 97, 116, 111, 109, 63, 218, 39, 218, 89, 218, 6, 218, 129, 76, 0, 12, 0, 218, 62, 0, 12, 1, 207, 10, 99, 111, 114, 101, 45, 97, 116, 111, 109, 63, 3, 12, 3, 207, 7, 95, 48, 48, 48, 48, 105, 66, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 2, 7, 0, 44, 4, 1, 0, 49, 4, 0, 0, 53, 4, 0, 0, 44, 6, 2, 0, 37, 5, 6, 4, 3, 5, 0, 0, 3, 3, 0, 0, 130, 51, 8, 0, 8, 0, 8, 0, 3, 0, 3, 0, 33, 0, 33, 0, 33, 0, 19, 0, 19, 0, 19, 0, 3, 206, 6, 114, 101, 115, 101, 116, 33, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 234, 218, 21, 218, 129, 234, 218, 36, 215, 0, 205, 0, 220, 0, 0, 4, 2, 2, 2, 1, 3, 0, 3, 206, 11, 99, 111, 114, 101, 45, 114, 101, 115, 101, 116, 33, 218, 39, 218, 40, 0, 3, 0, 218, 41, 0, 3, 1, 218, 128, 179, 0, 3, 2, 207, 11, 99, 111, 114, 101, 45, 114, 101, 115, 101, 116, 33, 44, 3, 0, 0, 60, 0, 3, 1, 3, 1, 0, 0, 130, 65, 3, 0, 3, 191, 255, 1, 206, 7, 109, 101, 109, 111, 105, 122, 101, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 240, 218, 21, 218, 129, 240, 218, 36, 215, 0, 205, 2, 254, 0, 0, 5, 1, 1, 1, 0, 4, 0, 1, 3, 206, 12, 99, 111, 114, 101, 45, 109, 101, 109, 111, 105, 122, 101, 218, 39, 0, 4, 0, 218, 42, 0, 4, 1, 207, 12, 99, 111, 114, 101, 45, 109, 101, 109, 111, 105, 122, 101, 1, 4, 3, 207, 5, 99, 97, 99, 104, 101, 68, 2, 0, 0, 27, 3, 2, 0, 48, 4, 0, 0, 3, 4, 0, 0, 205, 0, 213, 0, 0, 6, 0, 0, 205, 127, 255, 255, 255, 1, 16, 1, 7, 218, 39, 218, 127, 191, 255, 0, 0, 218, 42, 191, 255, 0, 1, 218, 129, 245, 191, 255, 0, 3, 218, 129, 246, 0, 16, 0, 218, 43, 3, 16, 2, 207, 3, 107, 101, 121, 6, 16, 3, 218, 97, 12, 16, 5, 218, 59, 52, 0, 0, 0, 44, 2, 0, 0, 53, 1, 2, 0, 27, 2, 1, 0, 45, 3, 0, 3, 59, 1, 3, 2, 27, 3, 1, 0, 30, 1, 2, 0, 3, 3, 0, 0, 52, 0, 0, 0, 45, 5, 0, 0, 53, 4, 5, 0, 27, 5, 4, 0, 45, 4, 0, 3, 60, 4, 2, 5, 3, 5, 0, 0, 191, 255, 129, 220, 15, 0, 15, 0, 15, 0, 5, 1, 18, 0, 18, 0, 7, 0, 7, 0, 7, 2, 22, 0, 22, 0, 22, 191, 254, 7, 3, 11, 0, 11, 191, 253, 7, 129, 218, 3, 0, 3, 1, 3, 0, 3, 9, 0, 0, 0, 206, 5, 99, 111, 117, 110, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 248, 218, 21, 218, 129, 248, 218, 36, 216, 6, 108, 101, 110, 103, 116, 104, 206, 3, 103, 101, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 252, 218, 21, 218, 129, 252, 218, 36, 218, 86, 206, 4, 116, 97, 107, 101, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 129, 255, 218, 21, 218, 129, 255, 218, 36, 215, 0, 205, 0, 220, 0, 0, 11, 2, 2, 2, 4, 30, 0, 6, 206, 9, 99, 111, 114, 101, 45, 116, 97, 107, 101, 218, 39, 218, 55, 218, 74, 218, 127, 218, 76, 0, 30, 0, 218, 78, 0, 30, 1, 218, 79, 0, 30, 2, 207, 9, 99, 111, 114, 101, 45, 116, 97, 107, 101, 1, 30, 4, 218, 59, 2, 30, 5, 218, 121, 4, 11, 8, 207, 7, 95, 48, 48, 48, 48, 105, 101, 64, 3, 0, 0, 27, 4, 3, 0, 43, 5, 0, 0, 35, 7, 5, 0, 27, 8, 7, 0, 30, 7, 5, 0, 63, 9, 1, 0, 35, 10, 5, 9, 27, 6, 10, 0, 28, 2, 0, 0, 27, 6, 8, 0, 30, 6, 8, 0, 49, 5, 0, 0, 53, 7, 1, 0, 50, 4, 7, 0, 44, 9, 0, 0, 53, 8, 9, 0, 5, 5, 5, 1, 28, 241, 255, 255, 49, 1, 0, 0, 44, 7, 1, 0, 53, 6, 7, 0, 30, 6, 7, 0, 52, 4, 0, 0, 44, 8, 2, 0, 53, 7, 8, 0, 49, 7, 0, 0, 44, 8, 3, 0, 54, 8, 0, 0, 3, 4, 0, 0, 129, 53, 3, 0, 3, 1, 3, 1, 15, 0, 10, 0, 10, 0, 28, 0, 23, 0, 10, 0, 10, 0, 10, 0, 3, 1, 24, 0, 24, 0, 5, 0, 5, 0, 5, 1, 5, 191, 254, 3, 3, 7, 0, 7, 0, 7, 0, 3, 0, 34, 0, 34, 0, 34, 0, 21, 0, 21, 0, 21, 0, 3, 206, 4, 109, 97, 112, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 6, 218, 21, 218, 130, 6, 218, 36, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 3, 0, 2, 206, 9, 99, 111, 114, 101, 45, 109, 97, 112, 63, 218, 39, 218, 88, 0, 3, 0, 218, 62, 0, 3, 1, 207, 9, 99, 111, 114, 101, 45, 109, 97, 112, 63, 49, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 18, 21, 0, 21, 0, 21, 206, 7, 115, 121, 109, 98, 111, 108, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 12, 218, 21, 218, 130, 12, 218, 36, 215, 0, 205, 0, 220, 0, 0, 7, 1, 1, 1, 3, 12, 0, 3, 206, 12, 99, 111, 114, 101, 45, 115, 121, 109, 98, 111, 108, 63, 218, 39, 218, 88, 218, 6, 208, 6, 115, 121, 109, 98, 111, 108, 0, 12, 0, 218, 62, 0, 12, 1, 207, 12, 99, 111, 114, 101, 45, 115, 121, 109, 98, 111, 108, 63, 3, 12, 3, 207, 7, 95, 48, 48, 48, 48, 104, 112, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 2, 7, 0, 44, 4, 1, 0, 49, 4, 0, 0, 53, 4, 0, 0, 44, 6, 2, 0, 37, 5, 6, 4, 3, 5, 0, 0, 3, 3, 0, 0, 16, 29, 0, 29, 0, 29, 0, 24, 0, 24, 0, 52, 0, 52, 0, 52, 0, 41, 0, 41, 0, 41, 0, 24, 206, 10, 105, 100, 101, 110, 116, 105, 99, 97, 108, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 20, 218, 21, 218, 130, 20, 218, 36, 215, 0, 205, 0, 220, 0, 0, 4, 2, 2, 2, 0, 2, 0, 3, 206, 15, 99, 111, 114, 101, 45, 105, 100, 101, 110, 116, 105, 99, 97, 108, 63, 218, 39, 0, 2, 0, 207, 1, 97, 0, 2, 1, 207, 1, 98, 0, 2, 2, 207, 15, 99, 111, 114, 101, 45, 105, 100, 101, 110, 116, 105, 99, 97, 108, 63, 37, 3, 0, 1, 3, 3, 0, 0, 24, 29, 0, 29, 206, 8, 105, 100, 101, 110, 116, 105, 116, 121, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 28, 218, 21, 218, 130, 28, 218, 36, 215, 0, 205, 0, 212, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 218, 39, 0, 1, 0, 218, 62, 3, 0, 0, 0, 129, 187, 20, 206, 4, 118, 97, 108, 115, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 32, 218, 21, 218, 130, 32, 218, 36, 215, 0, 205, 2, 254, 0, 0, 6, 1, 1, 1, 3, 10, 0, 1, 2, 206, 9, 99, 111, 114, 101, 45, 118, 97, 108, 115, 218, 39, 218, 128, 213, 218, 128, 205, 218, 127, 0, 10, 0, 218, 92, 0, 10, 1, 207, 9, 99, 111, 114, 101, 45, 118, 97, 108, 115, 48, 2, 0, 0, 49, 0, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 50, 2, 3, 0, 44, 5, 1, 0, 53, 4, 5, 0, 52, 4, 0, 0, 44, 2, 2, 0, 54, 2, 0, 0, 205, 0, 220, 0, 0, 2, 1, 1, 1, 0, 3, 1, 3, 218, 128, 206, 218, 39, 191, 255, 0, 0, 218, 92, 191, 255, 0, 1, 218, 130, 37, 0, 3, 0, 207, 9, 95, 48, 48, 48, 48, 105, 51, 36, 48, 49, 0, 0, 0, 45, 1, 0, 0, 54, 1, 0, 0, 191, 255, 128, 233, 17, 0, 17, 0, 17, 128, 233, 16, 0, 23, 0, 23, 0, 23, 0, 11, 0, 11, 0, 11, 0, 3, 0, 3, 0, 3, 1, 0, 0, 0, 206, 4, 110, 111, 116, 61, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 39, 218, 21, 218, 130, 39, 218, 36, 215, 0, 205, 0, 221, 0, 0, 4, 0, 0, 205, 127, 255, 255, 255, 2, 6, 0, 2, 206, 9, 99, 111, 114, 101, 45, 110, 111, 116, 61, 218, 39, 215, 0, 205, 0, 221, 0, 0, 10, 0, 0, 205, 127, 255, 255, 255, 3, 34, 0, 5, 206, 6, 99, 111, 114, 101, 45, 61, 218, 39, 218, 129, 31, 218, 129, 177, 218, 102, 0, 34, 0, 218, 43, 0, 34, 1, 207, 6, 99, 111, 114, 101, 45, 61, 5, 34, 2, 207, 2, 111, 107, 6, 34, 4, 218, 121, 7, 17, 6, 207, 7, 95, 48, 48, 48, 48, 104, 122, 63, 2, 0, 0, 36, 3, 2, 2, 30, 3, 3, 0, 41, 2, 0, 0, 3, 2, 0, 0, 41, 2, 0, 0, 43, 4, 0, 0, 27, 6, 2, 0, 30, 2, 8, 0, 63, 7, 0, 0, 49, 7, 0, 0, 44, 9, 0, 0, 53, 8, 9, 0, 35, 7, 4, 8, 27, 5, 7, 0, 28, 2, 0, 0, 27, 5, 6, 0, 30, 5, 16, 0, 49, 4, 0, 0, 53, 6, 0, 0, 5, 7, 4, 1, 49, 7, 0, 0, 53, 8, 0, 0, 50, 6, 8, 0, 44, 9, 1, 0, 53, 7, 9, 0, 49, 7, 0, 0, 44, 8, 2, 0, 53, 6, 8, 0, 30, 6, 2, 0, 42, 2, 0, 0, 5, 4, 4, 1, 28, 231, 255, 255, 3, 2, 0, 0, 77, 10, 0, 7, 0, 3, 0, 3, 0, 3, 2, 7, 1, 7, 1, 14, 0, 14, 0, 32, 0, 27, 0, 27, 0, 27, 0, 22, 0, 14, 0, 14, 0, 14, 0, 7, 1, 25, 0, 25, 0, 40, 0, 34, 0, 34, 0, 18, 0, 18, 0, 18, 0, 13, 0, 13, 0, 13, 0, 9, 1, 11, 1, 9, 191, 253, 7, 191, 253, 5, 218, 102, 0, 6, 0, 218, 43, 0, 6, 1, 207, 9, 99, 111, 114, 101, 45, 110, 111, 116, 61, 52, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 49, 2, 0, 0, 44, 3, 1, 0, 54, 3, 0, 0, 87, 31, 0, 31, 0, 31, 0, 26, 0, 26, 0, 26, 206, 6, 101, 109, 112, 116, 121, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 50, 218, 21, 218, 130, 50, 218, 36, 215, 0, 205, 0, 220, 0, 0, 7, 1, 1, 1, 3, 21, 0, 2, 206, 11, 99, 111, 114, 101, 45, 101, 109, 112, 116, 121, 63, 218, 39, 218, 52, 218, 88, 218, 128, 213, 0, 21, 0, 218, 79, 0, 21, 1, 207, 11, 99, 111, 114, 101, 45, 101, 109, 112, 116, 121, 63, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 30, 2, 3, 0, 41, 3, 0, 0, 3, 3, 0, 0, 49, 0, 0, 0, 44, 4, 1, 0, 53, 3, 4, 0, 30, 3, 8, 0, 49, 0, 0, 0, 44, 5, 2, 0, 53, 4, 5, 0, 63, 5, 4, 0, 43, 6, 0, 0, 37, 4, 6, 5, 3, 4, 0, 0, 63, 4, 0, 0, 43, 6, 0, 0, 37, 5, 6, 4, 3, 5, 0, 0, 33, 7, 0, 7, 0, 7, 0, 3, 0, 3, 0, 3, 1, 9, 0, 9, 0, 9, 0, 5, 0, 37, 0, 37, 0, 37, 0, 29, 0, 24, 0, 24, 0, 24, 1, 12, 0, 7, 0, 7, 0, 7, 206, 4, 97, 116, 111, 109, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 56, 218, 21, 218, 130, 56, 218, 36, 215, 0, 205, 0, 220, 0, 0, 6, 1, 1, 1, 4, 9, 0, 2, 206, 9, 99, 111, 114, 101, 45, 97, 116, 111, 109, 218, 39, 218, 6, 218, 129, 76, 218, 40, 208, 7, 119, 97, 116, 99, 104, 101, 115, 0, 9, 0, 218, 128, 179, 0, 9, 1, 207, 9, 99, 111, 114, 101, 45, 97, 116, 111, 109, 68, 2, 0, 0, 44, 3, 0, 0, 44, 4, 1, 0, 44, 5, 2, 0, 51, 3, 4, 5, 44, 3, 3, 0, 51, 0, 3, 2, 68, 2, 0, 0, 3, 2, 0, 0, 130, 47, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 206, 8, 104, 97, 115, 104, 45, 115, 101, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 63, 218, 21, 218, 130, 63, 218, 36, 218, 129, 13, 206, 4, 113, 117, 111, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 66, 218, 21, 218, 130, 66, 218, 36, 215, 0, 205, 0, 212, 0, 0, 4, 2, 2, 2, 1, 4, 0, 2, 218, 39, 216, 10, 109, 97, 116, 104, 47, 102, 108, 111, 111, 114, 0, 4, 0, 218, 78, 0, 4, 1, 207, 1, 100, 12, 2, 0, 1, 49, 2, 0, 0, 44, 3, 0, 0, 54, 3, 0, 0, 67, 38, 0, 26, 0, 26, 0, 26, 206, 4, 99, 111, 110, 115, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 72, 218, 21, 218, 130, 72, 218, 36, 215, 0, 205, 0, 220, 0, 0, 8, 2, 2, 2, 6, 28, 0, 3, 206, 9, 99, 111, 114, 101, 45, 99, 111, 110, 115, 218, 39, 218, 52, 218, 74, 218, 77, 216, 12, 97, 114, 114, 97, 121, 47, 105, 110, 115, 101, 114, 116, 218, 127, 218, 76, 0, 28, 0, 218, 62, 0, 28, 1, 218, 79, 0, 28, 2, 207, 9, 99, 111, 114, 101, 45, 99, 111, 110, 115, 49, 1, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 30, 3, 4, 0, 49, 0, 0, 0, 64, 4, 0, 0, 3, 4, 0, 0, 49, 1, 0, 0, 44, 5, 1, 0, 53, 4, 5, 0, 30, 4, 14, 0, 49, 1, 0, 0, 44, 6, 2, 0, 53, 5, 6, 0, 43, 6, 0, 0, 51, 5, 6, 0, 44, 7, 3, 0, 53, 6, 7, 0, 52, 6, 0, 0, 44, 7, 4, 0, 53, 5, 7, 0, 49, 5, 0, 0, 44, 6, 5, 0, 54, 6, 0, 0, 43, 5, 0, 0, 51, 1, 5, 0, 44, 5, 3, 0, 54, 5, 0, 0, 128, 182, 7, 0, 7, 0, 7, 0, 3, 0, 3, 0, 3, 0, 3, 2, 9, 0, 9, 0, 9, 0, 5, 1, 42, 0, 42, 0, 42, 0, 28, 0, 28, 0, 28, 0, 28, 0, 20, 0, 20, 0, 20, 0, 7, 0, 7, 0, 7, 1, 7, 0, 7, 0, 7, 0, 7, 206, 10, 100, 114, 111, 112, 45, 119, 104, 105, 108, 101, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 79, 218, 21, 218, 130, 79, 218, 36, 215, 0, 205, 0, 220, 0, 0, 9, 2, 2, 2, 3, 25, 0, 5, 206, 15, 99, 111, 114, 101, 45, 100, 114, 111, 112, 45, 119, 104, 105, 108, 101, 218, 39, 218, 74, 218, 76, 218, 77, 0, 25, 0, 218, 128, 193, 0, 25, 1, 218, 79, 0, 25, 2, 207, 15, 99, 111, 114, 101, 45, 100, 114, 111, 112, 45, 119, 104, 105, 108, 101, 0, 25, 3, 218, 129, 136, 3, 12, 5, 207, 7, 95, 48, 48, 48, 48, 105, 104, 43, 3, 0, 0, 63, 5, 1, 0, 35, 6, 3, 5, 27, 5, 6, 0, 30, 6, 7, 0, 49, 3, 0, 0, 53, 7, 1, 0, 49, 7, 0, 0, 53, 8, 0, 0, 27, 4, 8, 0, 28, 2, 0, 0, 27, 4, 5, 0, 30, 4, 3, 0, 5, 3, 3, 1, 28, 243, 255, 255, 49, 1, 0, 0, 44, 5, 0, 0, 53, 4, 5, 0, 30, 4, 4, 0, 50, 1, 3, 0, 44, 5, 1, 0, 54, 5, 0, 0, 50, 1, 3, 0, 44, 5, 2, 0, 54, 5, 0, 0, 129, 72, 3, 1, 24, 0, 15, 0, 10, 0, 10, 0, 45, 0, 45, 0, 39, 0, 39, 0, 10, 0, 10, 0, 10, 0, 3, 1, 5, 191, 255, 3, 2, 7, 0, 7, 0, 7, 0, 3, 1, 5, 0, 5, 0, 5, 1, 5, 0, 5, 0, 5, 206, 4, 108, 105, 115, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 86, 218, 21, 218, 130, 86, 218, 36, 215, 0, 205, 0, 221, 0, 0, 3, 0, 0, 205, 127, 255, 255, 255, 1, 3, 0, 2, 206, 9, 99, 111, 114, 101, 45, 108, 105, 115, 116, 218, 39, 216, 5, 97, 114, 114, 97, 121, 0, 3, 0, 218, 57, 0, 3, 1, 207, 9, 99, 111, 114, 101, 45, 108, 105, 115, 116, 52, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 130, 1, 3, 0, 3, 0, 3, 206, 4, 111, 100, 100, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 93, 218, 21, 218, 130, 93, 218, 36, 215, 0, 205, 0, 220, 0, 0, 5, 1, 1, 1, 0, 5, 0, 2, 206, 9, 99, 111, 114, 101, 45, 111, 100, 100, 63, 218, 39, 0, 5, 0, 218, 78, 0, 5, 1, 207, 9, 99, 111, 114, 101, 45, 111, 100, 100, 63, 43, 3, 2, 0, 15, 2, 0, 3, 43, 4, 0, 0, 74, 3, 4, 2, 3, 3, 0, 0, 30, 29, 0, 29, 0, 21, 0, 21, 0, 21, 206, 3, 114, 101, 109, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 99, 218, 21, 218, 130, 99, 218, 36, 218, 129, 195, 206, 11, 102, 114, 101, 113, 117, 101, 110, 99, 105, 101, 115, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 102, 218, 21, 218, 130, 102, 218, 36, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 2, 4, 0, 2, 206, 16, 99, 111, 114, 101, 45, 102, 114, 101, 113, 117, 101, 110, 99, 105, 101, 115, 218, 39, 218, 129, 60, 215, 0, 205, 0, 220, 0, 0, 11, 2, 2, 2, 2, 22, 0, 8, 206, 13, 99, 111, 114, 101, 45, 103, 114, 111, 117, 112, 45, 98, 121, 218, 39, 218, 86, 218, 55, 0, 22, 0, 218, 42, 0, 22, 1, 218, 79, 0, 22, 2, 207, 13, 99, 111, 114, 101, 45, 103, 114, 111, 117, 112, 45, 98, 121, 1, 22, 4, 218, 59, 1, 21, 1, 207, 7, 95, 48, 48, 48, 48, 105, 112, 4, 21, 6, 207, 7, 95, 48, 48, 48, 48, 105, 111, 7, 21, 7, 218, 62, 10, 19, 8, 218, 93, 68, 3, 0, 0, 27, 4, 3, 0, 40, 6, 0, 0, 73, 5, 1, 6, 27, 6, 5, 0, 31, 6, 16, 0, 58, 5, 1, 6, 27, 7, 5, 0, 49, 7, 0, 0, 53, 5, 0, 0, 27, 8, 5, 0, 64, 5, 0, 0, 51, 4, 8, 5, 44, 10, 0, 0, 53, 9, 10, 0, 50, 9, 7, 0, 44, 10, 1, 0, 53, 5, 10, 0, 60, 4, 8, 5, 73, 6, 1, 6, 28, 241, 255, 255, 3, 4, 0, 0, 129, 114, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 13, 0, 13, 0, 5, 1, 33, 0, 33, 0, 33, 0, 33, 0, 21, 0, 21, 0, 21, 0, 7, 191, 254, 3, 0, 3, 191, 254, 1, 0, 4, 0, 218, 79, 0, 4, 1, 207, 16, 99, 111, 114, 101, 45, 102, 114, 101, 113, 117, 101, 110, 99, 105, 101, 115, 44, 2, 0, 0, 50, 2, 0, 0, 44, 2, 1, 0, 54, 2, 0, 0, 129, 121, 3, 0, 3, 0, 3, 0, 3, 206, 1, 61, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 113, 218, 21, 218, 130, 113, 218, 36, 218, 130, 44, 206, 3, 105, 110, 99, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 116, 218, 21, 218, 130, 116, 218, 36, 216, 3, 105, 110, 99, 206, 3, 109, 105, 110, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 120, 218, 21, 218, 130, 120, 218, 36, 215, 0, 205, 0, 221, 0, 0, 3, 0, 0, 205, 127, 255, 255, 255, 1, 3, 0, 2, 206, 8, 99, 111, 114, 101, 45, 109, 105, 110, 218, 39, 218, 75, 0, 3, 0, 218, 43, 0, 3, 1, 207, 8, 99, 111, 114, 101, 45, 109, 105, 110, 52, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 70, 25, 0, 25, 0, 25, 206, 5, 99, 111, 108, 108, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 126, 218, 21, 218, 130, 126, 218, 36, 215, 0, 205, 0, 220, 0, 0, 5, 1, 1, 1, 3, 15, 0, 4, 206, 10, 99, 111, 114, 101, 45, 99, 111, 108, 108, 63, 218, 39, 218, 90, 218, 74, 218, 88, 0, 15, 0, 218, 62, 0, 15, 1, 207, 10, 99, 111, 114, 101, 45, 99, 111, 108, 108, 63, 3, 15, 3, 207, 7, 95, 48, 48, 48, 48, 104, 115, 9, 15, 4, 207, 7, 95, 48, 48, 48, 48, 104, 114, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 3, 2, 0, 3, 3, 0, 0, 49, 0, 0, 0, 44, 4, 1, 0, 53, 2, 4, 0, 27, 4, 2, 0, 30, 4, 2, 0, 3, 4, 0, 0, 49, 0, 0, 0, 44, 2, 2, 0, 54, 2, 0, 0, 20, 26, 0, 26, 0, 26, 0, 22, 0, 22, 0, 22, 0, 37, 0, 37, 0, 37, 0, 22, 0, 22, 0, 22, 0, 48, 0, 48, 0, 48, 206, 7, 118, 101, 99, 116, 111, 114, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 134, 218, 21, 218, 130, 134, 218, 36, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 3, 0, 2, 206, 12, 99, 111, 114, 101, 45, 118, 101, 99, 116, 111, 114, 63, 218, 39, 218, 74, 0, 3, 0, 218, 62, 0, 3, 1, 207, 12, 99, 111, 114, 101, 45, 118, 101, 99, 116, 111, 114, 63, 49, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 17, 24, 0, 24, 0, 24, 206, 3, 109, 97, 112, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 140, 218, 21, 218, 130, 140, 218, 36, 215, 0, 205, 0, 221, 0, 0, 19, 1, 1, 205, 127, 255, 255, 255, 7, 95, 0, 16, 206, 8, 99, 111, 114, 101, 45, 109, 97, 112, 218, 39, 218, 128, 205, 218, 130, 91, 218, 55, 218, 102, 218, 74, 218, 127, 218, 76, 0, 95, 0, 218, 42, 0, 95, 1, 207, 5, 99, 111, 108, 108, 115, 0, 95, 2, 207, 8, 99, 111, 114, 101, 45, 109, 97, 112, 3, 95, 4, 207, 10, 102, 105, 114, 115, 116, 45, 99, 111, 108, 108, 17, 82, 7, 207, 3, 114, 101, 115, 19, 82, 8, 207, 4, 105, 100, 120, 115, 19, 32, 4, 207, 7, 95, 48, 48, 48, 48, 105, 56, 22, 32, 9, 207, 7, 95, 48, 48, 48, 48, 105, 55, 25, 32, 10, 218, 129, 37, 32, 82, 5, 207, 4, 100, 111, 110, 101, 38, 82, 11, 218, 43, 39, 82, 10, 218, 121, 45, 60, 14, 207, 1, 99, 48, 60, 15, 218, 128, 130, 71, 82, 12, 218, 93, 83, 95, 5, 218, 59, 43, 3, 0, 0, 49, 3, 0, 0, 53, 3, 1, 0, 27, 4, 3, 0, 63, 5, 1, 0, 43, 7, 1, 0, 37, 6, 7, 5, 30, 6, 9, 0, 50, 0, 4, 0, 44, 7, 0, 0, 53, 5, 7, 0, 52, 5, 0, 0, 44, 8, 1, 0, 53, 7, 8, 0, 27, 3, 7, 0, 28, 68, 0, 0, 64, 5, 0, 0, 27, 7, 5, 0, 68, 5, 0, 0, 27, 8, 5, 0, 40, 9, 0, 0, 73, 5, 4, 9, 27, 9, 5, 0, 31, 9, 9, 0, 58, 5, 4, 9, 27, 10, 5, 0, 43, 5, 0, 0, 50, 8, 5, 0, 44, 11, 2, 0, 53, 5, 11, 0, 73, 9, 4, 9, 28, 248, 255, 255, 42, 5, 0, 0, 49, 5, 0, 0, 44, 10, 3, 0, 53, 9, 10, 0, 30, 9, 46, 0, 64, 10, 0, 0, 27, 11, 10, 0, 43, 10, 0, 0, 63, 12, 1, 0, 35, 13, 10, 12, 30, 13, 20, 0, 49, 10, 0, 0, 53, 12, 1, 0, 27, 14, 12, 0, 49, 10, 0, 0, 53, 12, 8, 0, 27, 15, 12, 0, 63, 12, 14, 0, 71, 16, 15, 12, 30, 16, 4, 0, 41, 5, 0, 0, 28, 9, 0, 0, 28, 6, 0, 0, 49, 15, 0, 0, 53, 12, 14, 0, 50, 11, 12, 0, 44, 18, 2, 0, 53, 17, 18, 0, 5, 10, 10, 1, 28, 235, 255, 255, 49, 5, 0, 0, 44, 13, 3, 0, 53, 12, 13, 0, 30, 12, 6, 0, 52, 11, 0, 0, 53, 13, 0, 0, 50, 7, 13, 0, 44, 15, 2, 0, 53, 14, 15, 0, 43, 12, 0, 0, 63, 13, 1, 0, 35, 14, 12, 13, 30, 14, 7, 0, 49, 12, 0, 0, 53, 13, 8, 0, 5, 15, 13, 1, 60, 8, 12, 15, 5, 12, 12, 1, 28, 248, 255, 255, 28, 208, 255, 255, 27, 3, 7, 0, 27, 5, 3, 0, 49, 4, 0, 0, 44, 6, 4, 0, 53, 3, 6, 0, 30, 3, 7, 0, 52, 5, 0, 0, 44, 7, 5, 0, 53, 6, 7, 0, 49, 6, 0, 0, 44, 7, 6, 0, 54, 7, 0, 0, 3, 5, 0, 0, 128, 255, 20, 0, 20, 0, 20, 0, 3, 1, 25, 0, 20, 0, 20, 0, 16, 1, 26, 0, 26, 0, 26, 0, 18, 0, 18, 0, 18, 191, 255, 16, 0, 16, 3, 20, 0, 20, 1, 20, 0, 20, 1, 20, 0, 20, 0, 20, 0, 20, 0, 20, 0, 20, 0, 39, 0, 39, 0, 39, 0, 39, 0, 20, 0, 20, 1, 20, 1, 27, 0, 27, 0, 27, 0, 20, 1, 22, 0, 22, 1, 22, 1, 34, 0, 29, 0, 22, 1, 32, 0, 32, 0, 24, 0, 44, 0, 44, 0, 24, 1, 36, 0, 30, 0, 26, 1, 32, 0, 48, 191, 255, 26, 2, 45, 0, 45, 0, 28, 0, 28, 0, 28, 1, 24, 191, 251, 22, 6, 26, 0, 26, 0, 26, 0, 22, 0, 53, 0, 53, 0, 37, 0, 37, 0, 37, 1, 22, 1, 34, 0, 29, 0, 22, 1, 41, 0, 41, 0, 38, 0, 24, 1, 24, 191, 254, 22, 191, 245, 20, 191, 249, 16, 191, 255, 3, 23, 9, 0, 9, 0, 9, 0, 5, 0, 42, 0, 42, 0, 42, 0, 29, 0, 29, 0, 29, 0, 5, 206, 1, 43, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 154, 218, 21, 218, 130, 154, 218, 36, 215, 0, 205, 0, 213, 0, 0, 4, 0, 0, 205, 127, 255, 255, 255, 1, 9, 0, 1, 218, 39, 216, 1, 43, 0, 9, 0, 218, 43, 63, 1, 0, 0, 43, 3, 0, 0, 37, 2, 3, 1, 30, 2, 3, 0, 43, 1, 0, 0, 3, 1, 0, 0, 52, 0, 0, 0, 44, 1, 0, 0, 54, 1, 0, 0, 46, 35, 0, 30, 0, 30, 0, 26, 0, 26, 0, 26, 0, 52, 0, 52, 0, 52, 206, 4, 107, 101, 121, 115, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 159, 218, 21, 218, 130, 159, 218, 36, 215, 0, 205, 0, 220, 0, 0, 4, 1, 1, 1, 2, 6, 0, 2, 206, 9, 99, 111, 114, 101, 45, 107, 101, 121, 115, 218, 39, 218, 128, 213, 218, 127, 0, 6, 0, 218, 92, 0, 6, 1, 207, 9, 99, 111, 114, 101, 45, 107, 101, 121, 115, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 52, 2, 0, 0, 44, 3, 1, 0, 54, 3, 0, 0, 128, 230, 11, 0, 11, 0, 11, 0, 3, 0, 3, 0, 3, 206, 8, 103, 114, 111, 117, 112, 45, 98, 121, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 165, 218, 21, 218, 130, 165, 218, 36, 218, 130, 107, 206, 8, 107, 101, 121, 119, 111, 114, 100, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 168, 218, 21, 218, 130, 168, 218, 36, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 3, 0, 2, 206, 13, 99, 111, 114, 101, 45, 107, 101, 121, 119, 111, 114, 100, 63, 218, 39, 216, 8, 107, 101, 121, 119, 111, 114, 100, 63, 0, 3, 0, 218, 62, 0, 3, 1, 207, 13, 99, 111, 114, 101, 45, 107, 101, 121, 119, 111, 114, 100, 63, 49, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 15, 25, 0, 25, 0, 25, 206, 6, 102, 105, 108, 116, 101, 114, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 175, 218, 21, 218, 130, 175, 218, 36, 218, 128, 191, 206, 6, 99, 111, 110, 99, 97, 116, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 178, 218, 21, 218, 130, 178, 218, 36, 215, 0, 205, 0, 221, 0, 0, 10, 0, 0, 205, 127, 255, 255, 255, 1, 22, 0, 9, 206, 11, 99, 111, 114, 101, 45, 99, 111, 110, 99, 97, 116, 218, 39, 218, 55, 0, 22, 0, 218, 130, 145, 0, 22, 1, 207, 11, 99, 111, 114, 101, 45, 99, 111, 110, 99, 97, 116, 1, 22, 3, 218, 59, 1, 21, 0, 207, 7, 95, 48, 48, 48, 48, 105, 106, 4, 21, 5, 207, 7, 95, 48, 48, 48, 48, 105, 105, 7, 21, 6, 218, 130, 153, 7, 19, 6, 207, 7, 95, 48, 48, 48, 48, 105, 108, 10, 19, 7, 207, 7, 95, 48, 48, 48, 48, 105, 107, 13, 19, 8, 218, 62, 64, 2, 0, 0, 27, 3, 2, 0, 40, 5, 0, 0, 73, 4, 0, 5, 27, 5, 4, 0, 31, 5, 16, 0, 58, 4, 0, 5, 27, 6, 4, 0, 40, 7, 0, 0, 73, 4, 6, 7, 27, 7, 4, 0, 31, 7, 8, 0, 58, 4, 6, 7, 27, 8, 4, 0, 50, 3, 8, 0, 44, 9, 0, 0, 53, 4, 9, 0, 73, 7, 6, 7, 28, 249, 255, 255, 73, 5, 0, 5, 28, 241, 255, 255, 3, 3, 0, 0, 129, 80, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 15, 0, 15, 0, 15, 0, 5, 0, 5, 191, 255, 3, 0, 3, 191, 254, 1, 206, 4, 99, 111, 110, 106, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 188, 218, 21, 218, 130, 188, 218, 36, 215, 0, 205, 0, 221, 0, 0, 11, 1, 1, 205, 127, 255, 255, 255, 8, 56, 0, 8, 206, 9, 99, 111, 114, 101, 45, 99, 111, 110, 106, 218, 39, 218, 74, 218, 77, 218, 128, 149, 218, 127, 218, 76, 218, 90, 218, 130, 77, 218, 128, 157, 0, 56, 0, 218, 79, 0, 56, 1, 218, 57, 0, 56, 2, 207, 9, 99, 111, 114, 101, 45, 99, 111, 110, 106, 20, 34, 5, 218, 59, 21, 34, 6, 218, 121, 34, 56, 5, 218, 59, 35, 56, 6, 218, 121, 41, 53, 9, 207, 4, 112, 97, 105, 114, 49, 0, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 30, 3, 13, 0, 49, 0, 0, 0, 44, 5, 1, 0, 53, 4, 5, 0, 50, 4, 1, 0, 44, 6, 2, 0, 53, 5, 6, 0, 52, 5, 0, 0, 44, 6, 3, 0, 53, 4, 6, 0, 49, 4, 0, 0, 44, 5, 4, 0, 54, 5, 0, 0, 49, 0, 0, 0, 44, 5, 5, 0, 53, 4, 5, 0, 30, 4, 15, 0, 27, 5, 0, 0, 43, 6, 0, 0, 63, 7, 1, 0, 35, 8, 6, 7, 30, 8, 9, 0, 49, 6, 0, 0, 53, 7, 1, 0, 43, 9, 0, 0, 51, 5, 9, 7, 44, 9, 6, 0, 53, 5, 9, 0, 5, 6, 6, 1, 28, 246, 255, 255, 3, 5, 0, 0, 27, 5, 0, 0, 43, 6, 0, 0, 63, 7, 1, 0, 35, 8, 6, 7, 30, 8, 17, 0, 49, 6, 0, 0, 53, 7, 1, 0, 27, 9, 7, 0, 43, 7, 0, 0, 49, 7, 0, 0, 53, 7, 9, 0, 43, 10, 1, 0, 49, 10, 0, 0, 53, 10, 9, 0, 50, 7, 10, 0, 67, 7, 0, 0, 50, 5, 7, 0, 44, 10, 7, 0, 53, 5, 10, 0, 5, 6, 6, 1, 28, 238, 255, 255, 3, 5, 0, 0, 94, 7, 0, 7, 0, 7, 0, 3, 2, 40, 0, 40, 0, 40, 0, 26, 0, 26, 0, 26, 0, 18, 0, 18, 0, 18, 0, 5, 0, 5, 0, 5, 1, 9, 0, 9, 0, 9, 0, 5, 3, 9, 1, 9, 1, 21, 0, 16, 0, 9, 1, 46, 0, 46, 0, 23, 0, 23, 0, 23, 0, 23, 1, 11, 191, 254, 9, 191, 253, 7, 9, 9, 1, 9, 1, 21, 0, 16, 0, 9, 1, 22, 0, 22, 0, 11, 1, 40, 0, 40, 0, 40, 0, 49, 0, 49, 0, 49, 0, 25, 0, 25, 0, 25, 0, 25, 0, 25, 1, 11, 191, 253, 9, 191, 253, 7, 206, 3, 109, 97, 120, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 195, 218, 21, 218, 130, 195, 218, 36, 215, 0, 205, 0, 221, 0, 0, 3, 0, 0, 205, 127, 255, 255, 255, 1, 3, 0, 2, 206, 8, 99, 111, 114, 101, 45, 109, 97, 120, 218, 39, 216, 3, 109, 97, 120, 0, 3, 0, 218, 43, 0, 3, 1, 207, 8, 99, 111, 114, 101, 45, 109, 97, 120, 52, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 69, 25, 0, 25, 0, 25, 206, 6, 103, 101, 116, 45, 105, 110, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 202, 218, 21, 218, 130, 202, 218, 36, 215, 0, 205, 0, 220, 0, 0, 11, 3, 2, 3, 2, 28, 0, 7, 206, 11, 99, 111, 114, 101, 45, 103, 101, 116, 45, 105, 110, 218, 39, 218, 52, 218, 86, 0, 28, 0, 218, 92, 0, 28, 1, 218, 104, 0, 28, 2, 218, 94, 0, 28, 3, 207, 11, 99, 111, 114, 101, 45, 103, 101, 116, 45, 105, 110, 4, 28, 5, 218, 94, 5, 28, 6, 207, 7, 99, 117, 114, 114, 101, 110, 116, 6, 28, 7, 218, 121, 32, 2, 3, 0, 40, 4, 0, 0, 28, 2, 0, 0, 27, 4, 2, 0, 27, 5, 4, 0, 27, 6, 0, 0, 43, 7, 0, 0, 63, 8, 1, 0, 35, 9, 7, 8, 30, 9, 13, 0, 49, 6, 0, 0, 44, 10, 0, 0, 53, 8, 10, 0, 30, 8, 2, 0, 28, 8, 0, 0, 49, 7, 0, 0, 53, 8, 1, 0, 50, 6, 8, 0, 44, 10, 1, 0, 53, 6, 10, 0, 5, 7, 7, 1, 28, 242, 255, 255, 49, 6, 0, 0, 44, 9, 0, 0, 53, 8, 9, 0, 30, 8, 2, 0, 3, 5, 0, 0, 3, 6, 0, 0, 128, 148, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 3, 1, 3, 1, 15, 0, 10, 0, 3, 1, 9, 0, 9, 0, 9, 0, 5, 0, 24, 1, 36, 0, 36, 0, 18, 0, 18, 0, 18, 1, 5, 191, 253, 3, 4, 7, 0, 7, 0, 7, 0, 3, 0, 3, 0, 3, 206, 7, 115, 111, 114, 116, 45, 98, 121, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 209, 218, 21, 218, 130, 209, 218, 36, 215, 0, 205, 0, 220, 0, 0, 8, 2, 2, 2, 5, 26, 0, 5, 206, 12, 99, 111, 114, 101, 45, 115, 111, 114, 116, 45, 98, 121, 218, 39, 218, 74, 218, 77, 216, 7, 115, 111, 114, 116, 45, 98, 121, 218, 127, 218, 76, 0, 26, 0, 207, 5, 107, 101, 121, 102, 110, 0, 26, 1, 218, 79, 0, 26, 2, 207, 12, 99, 111, 114, 101, 45, 115, 111, 114, 116, 45, 98, 121, 10, 26, 4, 218, 128, 242, 14, 26, 5, 218, 128, 243, 49, 1, 0, 0, 44, 5, 0, 0, 53, 4, 5, 0, 30, 4, 6, 0, 49, 1, 0, 0, 44, 6, 1, 0, 53, 5, 6, 0, 27, 3, 5, 0, 28, 2, 0, 0, 27, 3, 1, 0, 27, 4, 3, 0, 50, 0, 4, 0, 44, 5, 2, 0, 53, 3, 5, 0, 27, 5, 3, 0, 49, 1, 0, 0, 44, 6, 0, 0, 53, 3, 6, 0, 30, 3, 7, 0, 52, 5, 0, 0, 44, 7, 3, 0, 53, 6, 7, 0, 49, 6, 0, 0, 44, 7, 4, 0, 54, 7, 0, 0, 3, 5, 0, 0, 129, 99, 17, 0, 17, 0, 17, 0, 13, 0, 31, 0, 31, 0, 31, 0, 13, 0, 13, 0, 13, 0, 3, 1, 16, 0, 16, 0, 16, 191, 255, 3, 2, 9, 0, 9, 0, 9, 0, 5, 0, 36, 0, 36, 0, 36, 0, 23, 0, 23, 0, 23, 0, 5, 206, 9, 99, 111, 110, 116, 97, 105, 110, 115, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 217, 218, 21, 218, 130, 217, 218, 36, 215, 0, 205, 0, 220, 0, 0, 12, 2, 2, 2, 7, 52, 0, 6, 206, 14, 99, 111, 114, 101, 45, 99, 111, 110, 116, 97, 105, 110, 115, 63, 218, 39, 218, 88, 218, 52, 218, 102, 218, 89, 218, 74, 218, 90, 218, 91, 0, 52, 0, 218, 79, 0, 52, 1, 218, 129, 247, 0, 52, 2, 207, 14, 99, 111, 114, 101, 45, 99, 111, 110, 116, 97, 105, 110, 115, 63, 27, 35, 6, 207, 7, 95, 48, 48, 48, 48, 104, 76, 39, 50, 7, 207, 7, 95, 48, 48, 48, 48, 104, 78, 43, 49, 9, 207, 7, 95, 48, 48, 48, 48, 104, 77, 49, 0, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 30, 3, 9, 0, 49, 1, 0, 0, 53, 4, 0, 0, 49, 4, 0, 0, 44, 6, 1, 0, 53, 5, 6, 0, 49, 5, 0, 0, 44, 4, 2, 0, 54, 4, 0, 0, 49, 0, 0, 0, 44, 5, 3, 0, 53, 4, 5, 0, 30, 4, 9, 0, 49, 1, 0, 0, 53, 5, 0, 0, 49, 5, 0, 0, 44, 7, 1, 0, 53, 6, 7, 0, 49, 6, 0, 0, 44, 5, 2, 0, 54, 5, 0, 0, 49, 0, 0, 0, 44, 6, 4, 0, 53, 5, 6, 0, 27, 6, 5, 0, 30, 6, 3, 0, 27, 5, 6, 0, 28, 5, 0, 0, 49, 0, 0, 0, 44, 8, 5, 0, 53, 7, 8, 0, 27, 5, 7, 0, 30, 5, 15, 0, 49, 1, 0, 0, 44, 7, 6, 0, 53, 6, 7, 0, 27, 7, 6, 0, 30, 6, 9, 0, 43, 9, 0, 0, 71, 8, 1, 9, 27, 9, 8, 0, 30, 8, 4, 0, 63, 10, 0, 0, 35, 11, 1, 10, 3, 11, 0, 0, 3, 9, 0, 0, 3, 7, 0, 0, 42, 6, 0, 0, 3, 6, 0, 0, 128, 158, 7, 0, 7, 0, 7, 0, 3, 0, 33, 0, 33, 0, 27, 0, 27, 0, 27, 0, 22, 0, 22, 0, 22, 1, 9, 0, 9, 0, 9, 0, 5, 0, 34, 0, 34, 0, 28, 0, 28, 0, 28, 0, 23, 0, 23, 0, 23, 1, 15, 0, 15, 0, 15, 0, 11, 0, 11, 0, 11, 0, 11, 0, 29, 0, 29, 0, 29, 0, 11, 0, 7, 1, 14, 0, 14, 0, 14, 0, 9, 0, 9, 0, 28, 0, 28, 0, 9, 0, 9, 0, 46, 0, 39, 0, 39, 0, 9, 0, 9, 191, 255, 7, 0, 7, 206, 3, 112, 114, 110, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 226, 218, 21, 218, 130, 226, 218, 36, 215, 0, 205, 0, 221, 0, 0, 5, 0, 0, 205, 127, 255, 255, 255, 3, 8, 0, 2, 206, 8, 99, 111, 114, 101, 45, 112, 114, 110, 218, 39, 218, 116, 218, 112, 218, 4, 0, 8, 0, 218, 57, 0, 8, 1, 207, 8, 99, 111, 114, 101, 45, 112, 114, 110, 52, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 44, 3, 1, 0, 49, 3, 0, 0, 44, 4, 2, 0, 53, 3, 4, 0, 4, 0, 0, 0, 130, 39, 3, 0, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 191, 254, 1, 206, 3, 115, 101, 113, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 232, 218, 21, 218, 130, 232, 218, 36, 215, 0, 205, 0, 252, 0, 0, 10, 1, 1, 1, 10, 58, 0, 1, 5, 206, 8, 99, 111, 114, 101, 45, 115, 101, 113, 218, 39, 218, 52, 218, 74, 218, 90, 218, 76, 218, 53, 216, 12, 115, 116, 114, 105, 110, 103, 47, 98, 121, 116, 101, 115, 218, 128, 205, 218, 88, 218, 128, 213, 218, 127, 0, 58, 0, 218, 79, 0, 58, 1, 207, 8, 99, 111, 114, 101, 45, 115, 101, 113, 3, 27, 3, 207, 7, 95, 48, 48, 48, 48, 104, 81, 10, 18, 6, 207, 7, 95, 48, 48, 48, 48, 104, 83, 18, 26, 6, 207, 7, 95, 48, 48, 48, 48, 104, 82, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 3, 3, 0, 27, 2, 3, 0, 28, 21, 0, 0, 49, 0, 0, 0, 44, 6, 1, 0, 53, 5, 6, 0, 27, 6, 5, 0, 30, 6, 3, 0, 27, 5, 6, 0, 28, 5, 0, 0, 49, 0, 0, 0, 44, 8, 2, 0, 53, 7, 8, 0, 27, 5, 7, 0, 27, 6, 5, 0, 30, 5, 6, 0, 63, 7, 0, 0, 43, 9, 0, 0, 37, 8, 9, 7, 27, 4, 8, 0, 28, 2, 0, 0, 27, 4, 6, 0, 27, 2, 4, 0, 30, 2, 2, 0, 4, 0, 0, 0, 49, 0, 0, 0, 44, 4, 1, 0, 53, 3, 4, 0, 30, 3, 4, 0, 49, 0, 0, 0, 44, 4, 3, 0, 54, 4, 0, 0, 49, 0, 0, 0, 44, 5, 4, 0, 53, 4, 5, 0, 30, 4, 8, 0, 48, 5, 0, 0, 49, 0, 0, 0, 44, 7, 5, 0, 53, 6, 7, 0, 50, 5, 6, 0, 44, 7, 6, 0, 54, 7, 0, 0, 49, 0, 0, 0, 44, 6, 7, 0, 53, 5, 6, 0, 30, 5, 7, 0, 49, 0, 0, 0, 44, 7, 8, 0, 53, 6, 7, 0, 52, 6, 0, 0, 44, 7, 9, 0, 54, 7, 0, 0, 3, 0, 0, 0, 205, 0, 220, 0, 0, 2, 1, 1, 1, 1, 3, 0, 1, 218, 128, 206, 218, 39, 216, 17, 115, 116, 114, 105, 110, 103, 47, 102, 114, 111, 109, 45, 98, 121, 116, 101, 115, 0, 3, 0, 207, 9, 95, 48, 48, 48, 48, 104, 84, 36, 48, 49, 0, 0, 0, 44, 1, 0, 0, 54, 1, 0, 0, 128, 192, 32, 0, 32, 0, 32, 128, 189, 11, 0, 11, 0, 11, 0, 7, 0, 7, 0, 7, 0, 7, 0, 32, 0, 32, 0, 32, 0, 28, 0, 28, 0, 28, 0, 28, 0, 46, 0, 46, 0, 46, 0, 28, 0, 23, 0, 23, 0, 66, 0, 61, 0, 61, 0, 23, 0, 23, 0, 23, 0, 7, 0, 3, 0, 3, 2, 9, 0, 9, 0, 9, 0, 5, 0, 23, 0, 23, 0, 23, 1, 11, 0, 11, 0, 11, 0, 7, 0, 31, 0, 54, 0, 54, 0, 54, 0, 26, 0, 26, 0, 26, 1, 13, 0, 13, 0, 13, 0, 9, 0, 36, 0, 36, 0, 36, 0, 28, 0, 28, 0, 28, 0, 9, 206, 7, 115, 116, 114, 105, 110, 103, 63, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 244, 218, 21, 218, 130, 244, 218, 36, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 3, 0, 2, 206, 12, 99, 111, 114, 101, 45, 115, 116, 114, 105, 110, 103, 63, 218, 39, 218, 53, 0, 3, 0, 218, 62, 0, 3, 1, 207, 12, 99, 111, 114, 101, 45, 115, 116, 114, 105, 110, 103, 63, 49, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 12, 24, 0, 24, 0, 24, 206, 1, 45, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 130, 250, 218, 21, 218, 130, 250, 218, 36, 215, 0, 205, 0, 213, 0, 0, 4, 0, 0, 205, 127, 255, 255, 255, 2, 10, 0, 1, 218, 39, 206, 37, 87, 114, 111, 110, 103, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 97, 114, 103, 115, 32, 40, 48, 41, 32, 112, 97, 115, 115, 101, 100, 32, 116, 111, 58, 32, 45, 216, 1, 45, 0, 10, 0, 218, 43, 63, 1, 0, 0, 43, 3, 0, 0, 37, 2, 3, 1, 30, 2, 4, 0, 44, 1, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 52, 0, 0, 0, 44, 1, 1, 0, 54, 1, 0, 0, 50, 14, 0, 9, 0, 9, 0, 5, 1, 7, 0, 7, 0, 7, 1, 7, 0, 7, 0, 7, 206, 3, 118, 101, 99, 211, 5, 218, 30, 218, 32, 218, 6, 218, 33, 218, 34, 213, 2, 218, 30, 218, 32, 218, 21, 218, 131, 0, 218, 21, 218, 131, 0, 218, 36, 215, 0, 205, 2, 254, 0, 0, 9, 1, 1, 1, 7, 33, 0, 1, 2, 206, 8, 99, 111, 114, 101, 45, 118, 101, 99, 218, 39, 218, 74, 218, 90, 218, 127, 218, 88, 216, 3, 107, 118, 115, 216, 5, 114, 97, 110, 103, 101, 218, 128, 205, 0, 33, 0, 218, 79, 0, 33, 1, 207, 8, 99, 111, 114, 101, 45, 118, 101, 99, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 30, 2, 2, 0, 3, 0, 0, 0, 49, 0, 0, 0, 44, 4, 1, 0, 53, 3, 4, 0, 30, 3, 4, 0, 52, 0, 0, 0, 44, 4, 2, 0, 54, 4, 0, 0, 49, 0, 0, 0, 44, 5, 3, 0, 53, 4, 5, 0, 30, 4, 16, 0, 48, 5, 0, 0, 49, 0, 0, 0, 44, 7, 4, 0, 53, 6, 7, 0, 63, 7, 6, 0, 11, 6, 7, 2, 49, 6, 0, 0, 44, 8, 5, 0, 53, 7, 8, 0, 50, 5, 7, 0, 44, 8, 6, 0, 53, 6, 8, 0, 52, 6, 0, 0, 44, 5, 2, 0, 54, 5, 0, 0, 44, 5, 2, 0, 54, 5, 0, 0, 205, 0, 220, 0, 0, 4, 1, 1, 1, 1, 8, 1, 3, 218, 128, 206, 218, 39, 218, 131, 5, 191, 255, 0, 0, 218, 79, 191, 255, 0, 1, 218, 131, 7, 0, 8, 0, 207, 9, 95, 48, 48, 48, 48, 104, 85, 36, 48, 45, 1, 0, 0, 49, 1, 0, 0, 44, 2, 0, 0, 53, 1, 2, 0, 9, 2, 0, 2, 5, 3, 2, 1, 58, 2, 1, 3, 3, 2, 0, 0, 191, 255, 128, 199, 44, 0, 44, 0, 44, 0, 44, 0, 58, 0, 55, 0, 40, 0, 40, 128, 197, 7, 0, 7, 0, 7, 0, 3, 0, 3, 1, 9, 0, 9, 0, 9, 0, 5, 0, 23, 0, 23, 0, 23, 1, 11, 0, 11, 0, 11, 0, 7, 0, 39, 0, 88, 0, 88, 0, 88, 0, 80, 0, 77, 0, 70, 0, 70, 0, 70, 0, 34, 0, 34, 0, 34, 0, 26, 0, 26, 0, 26, 1, 9, 0, 9, 1, 0, 0, 0, 218, 21, 218, 25, 218, 22, 218, 31, 215, 0, 205, 0, 220, 0, 0, 5, 1, 1, 1, 2, 6, 0, 2, 206, 14, 99, 116, 120, 45, 99, 117, 114, 114, 101, 110, 116, 45, 110, 115, 206, 20, 115, 114, 99, 47, 106, 111, 108, 116, 47, 116, 121, 112, 101, 115, 46, 106, 97, 110, 101, 116, 218, 8, 218, 10, 0, 6, 0, 207, 3, 99, 116, 120, 0, 6, 1, 207, 14, 99, 116, 120, 45, 99, 117, 114, 114, 101, 110, 116, 45, 110, 115, 44, 2, 0, 0, 49, 2, 0, 0, 53, 2, 0, 0, 44, 4, 1, 0, 59, 3, 2, 4, 3, 3, 0, 0, 129, 15, 8, 0, 8, 0, 8, 0, 3, 0, 3, 0, 3, 206, 3, 61, 62, 32, 218, 54, 215, 0, 205, 0, 220, 0, 0, 6, 1, 1, 1, 6, 16, 0, 3, 206, 9, 114, 101, 97, 100, 45, 108, 105, 110, 101, 218, 2, 218, 119, 216, 5, 102, 108, 117, 115, 104, 216, 5, 115, 116, 100, 105, 110, 208, 4, 108, 105, 110, 101, 216, 9, 102, 105, 108, 101, 47, 114, 101, 97, 100, 216, 11, 115, 116, 114, 105, 110, 103, 47, 116, 114, 105, 109, 0, 16, 0, 207, 6, 112, 114, 111, 109, 112, 116, 0, 16, 1, 207, 9, 114, 101, 97, 100, 45, 108, 105, 110, 101, 10, 16, 5, 207, 4, 108, 105, 110, 101, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 44, 4, 1, 0, 53, 3, 4, 0, 44, 4, 2, 0, 44, 5, 3, 0, 50, 4, 5, 0, 44, 5, 4, 0, 53, 4, 5, 0, 27, 5, 4, 0, 30, 5, 4, 0, 49, 5, 0, 0, 44, 4, 5, 0, 54, 4, 0, 0, 4, 0, 0, 0, 10, 3, 0, 3, 0, 3, 1, 3, 0, 3, 1, 14, 0, 14, 0, 14, 0, 14, 0, 14, 0, 3, 1, 5, 0, 14, 0, 14, 0, 14, 0, 5, 218, 52, 206, 6, 40, 101, 120, 105, 116, 41, 218, 51, 218, 102, 208, 2, 105, 101, 216, 9, 102, 105, 98, 101, 114, 47, 110, 101, 119, 216, 12, 102, 105, 98, 101, 114, 47, 115, 116, 97, 116, 117, 115, 208, 5, 101, 114, 114, 111, 114, 206, 7, 69, 114, 114, 111, 114, 58, 32, 216, 6, 101, 112, 114, 105, 110, 116, 0, 12, 0, 207, 4, 109, 97, 105, 110, 8, 12, 3, 207, 7, 114, 117, 110, 110, 105, 110, 103, 44, 1, 0, 0, 49, 1, 0, 0, 44, 2, 1, 0, 53, 1, 2, 0, 44, 2, 2, 0, 49, 2, 0, 0, 44, 3, 1, 0, 53, 2, 3, 0, 41, 3, 0, 0, 48, 4, 1, 0, 53, 4, 4, 0, 4, 0, 0, 0, 205, 0, 220, 0, 0, 2, 0, 0, 0, 3, 8, 1, 1, 206, 3, 116, 114, 121, 218, 2, 218, 131, 10, 215, 0, 205, 0, 220, 0, 0, 6, 2, 2, 2, 2, 9, 0, 4, 206, 11, 101, 118, 97, 108, 45, 115, 116, 114, 105, 110, 103, 206, 18, 115, 114, 99, 47, 106, 111, 108, 116, 47, 97, 112, 105, 46, 106, 97, 110, 101, 116, 215, 0, 205, 0, 220, 0, 0, 6, 1, 1, 1, 1, 9, 0, 4, 206, 12, 112, 97, 114, 115, 101, 45, 115, 116, 114, 105, 110, 103, 206, 21, 115, 114, 99, 47, 106, 111, 108, 116, 47, 114, 101, 97, 100, 101, 114, 46, 106, 97, 110, 101, 116, 209, 1, 215, 0, 205, 0, 212, 0, 0, 31, 2, 2, 2, 21, 128, 190, 0, 12, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 9, 2, 2, 2, 1, 18, 0, 4, 206, 15, 115, 107, 105, 112, 45, 119, 104, 105, 116, 101, 115, 112, 97, 99, 101, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 7, 1, 1, 1, 0, 18, 0, 6, 206, 11, 119, 104, 105, 116, 101, 115, 112, 97, 99, 101, 63, 218, 131, 42, 0, 18, 0, 218, 130, 153, 0, 18, 1, 207, 11, 119, 104, 105, 116, 101, 115, 112, 97, 99, 101, 63, 1, 18, 3, 207, 7, 95, 48, 48, 48, 48, 102, 69, 5, 18, 4, 207, 7, 95, 48, 48, 48, 48, 102, 68, 9, 18, 5, 207, 7, 95, 48, 48, 48, 48, 102, 67, 13, 18, 6, 207, 7, 95, 48, 48, 48, 48, 102, 66, 38, 2, 0, 32, 27, 3, 2, 0, 30, 3, 2, 0, 3, 3, 0, 0, 38, 2, 0, 10, 27, 4, 2, 0, 30, 4, 2, 0, 3, 4, 0, 0, 38, 2, 0, 9, 27, 5, 2, 0, 30, 5, 2, 0, 3, 5, 0, 0, 38, 2, 0, 13, 27, 6, 2, 0, 30, 6, 2, 0, 3, 6, 0, 0, 38, 2, 0, 44, 3, 2, 0, 0, 17, 7, 0, 3, 0, 3, 0, 3, 1, 7, 191, 255, 3, 0, 3, 0, 3, 2, 7, 191, 254, 3, 0, 3, 0, 3, 3, 7, 191, 253, 3, 0, 3, 0, 3, 4, 7, 0, 7, 0, 18, 0, 207, 1, 115, 0, 18, 1, 207, 3, 112, 111, 115, 0, 18, 2, 207, 15, 115, 107, 105, 112, 45, 119, 104, 105, 116, 101, 115, 112, 97, 99, 101, 3, 13, 4, 207, 7, 95, 48, 48, 48, 48, 102, 70, 46, 2, 0, 0, 63, 4, 0, 0, 35, 5, 1, 4, 27, 4, 5, 0, 30, 5, 8, 0, 49, 1, 0, 0, 53, 6, 0, 0, 49, 6, 0, 0, 44, 8, 0, 0, 53, 7, 8, 0, 27, 3, 7, 0, 28, 2, 0, 0, 27, 3, 4, 0, 30, 3, 4, 0, 5, 4, 1, 1, 50, 0, 4, 0, 54, 2, 0, 0, 3, 1, 0, 0, 23, 1, 1, 19, 0, 12, 0, 7, 0, 7, 1, 25, 0, 25, 0, 12, 0, 12, 0, 12, 191, 255, 7, 0, 7, 0, 7, 0, 3, 2, 24, 0, 5, 0, 5, 191, 254, 3, 215, 0, 205, 0, 220, 0, 0, 7, 2, 2, 2, 0, 16, 0, 4, 206, 18, 114, 101, 97, 100, 45, 117, 110, 116, 105, 108, 45, 110, 101, 119, 108, 105, 110, 101, 218, 131, 42, 0, 16, 0, 218, 131, 54, 0, 16, 1, 218, 131, 55, 0, 16, 2, 207, 18, 114, 101, 97, 100, 45, 117, 110, 116, 105, 108, 45, 110, 101, 119, 108, 105, 110, 101, 3, 11, 3, 207, 7, 95, 48, 48, 48, 48, 103, 107, 46, 2, 0, 0, 63, 3, 0, 0, 71, 4, 1, 3, 27, 3, 4, 0, 30, 3, 3, 0, 27, 4, 3, 0, 28, 5, 0, 0, 49, 1, 0, 0, 53, 5, 0, 0, 38, 6, 5, 10, 27, 4, 6, 0, 30, 4, 2, 0, 3, 1, 0, 0, 5, 3, 1, 1, 50, 0, 3, 0, 54, 2, 0, 0, 129, 44, 1, 1, 19, 0, 11, 0, 7, 0, 7, 0, 7, 0, 7, 0, 34, 0, 34, 0, 31, 0, 7, 0, 3, 0, 3, 2, 27, 0, 5, 0, 5, 218, 131, 43, 215, 0, 205, 0, 220, 0, 0, 16, 2, 2, 2, 13, 74, 0, 10, 206, 13, 114, 101, 97, 100, 45, 100, 105, 115, 112, 97, 116, 99, 104, 218, 131, 42, 206, 22, 85, 110, 101, 120, 112, 101, 99, 116, 101, 100, 32, 101, 110, 100, 32, 97, 102, 116, 101, 114, 32, 35, 215, 0, 205, 0, 252, 0, 0, 7, 2, 2, 2, 0, 6, 0, 1, 4, 206, 8, 114, 101, 97, 100, 45, 115, 101, 116, 218, 131, 42, 0, 6, 0, 218, 131, 54, 0, 6, 1, 218, 131, 55, 0, 6, 2, 207, 8, 114, 101, 97, 100, 45, 115, 101, 116, 1, 6, 4, 207, 14, 114, 101, 97, 100, 45, 115, 101, 116, 45, 105, 116, 101, 109, 115, 48, 3, 0, 0, 27, 4, 3, 0, 5, 5, 1, 2, 64, 6, 0, 0, 51, 0, 5, 6, 54, 4, 0, 0, 205, 0, 220, 0, 0, 10, 3, 3, 3, 9, 43, 0, 7, 206, 14, 114, 101, 97, 100, 45, 115, 101, 116, 45, 105, 116, 101, 109, 115, 218, 131, 42, 218, 131, 45, 206, 16, 85, 110, 116, 101, 114, 109, 105, 110, 97, 116, 101, 100, 32, 115, 101, 116, 218, 127, 218, 76, 218, 6, 218, 129, 15, 218, 40, 218, 131, 43, 218, 55, 0, 43, 0, 218, 131, 54, 0, 43, 1, 218, 131, 55, 0, 43, 2, 207, 5, 105, 116, 101, 109, 115, 0, 43, 3, 218, 131, 68, 4, 43, 5, 218, 131, 55, 35, 43, 8, 207, 4, 102, 111, 114, 109, 37, 43, 9, 207, 7, 110, 101, 119, 45, 112, 111, 115, 46, 3, 0, 0, 50, 0, 1, 0, 44, 5, 0, 0, 53, 4, 5, 0, 27, 5, 4, 0, 63, 4, 0, 0, 71, 6, 5, 4, 30, 6, 3, 0, 44, 4, 1, 0, 1, 4, 0, 0, 49, 5, 0, 0, 53, 4, 0, 0, 38, 6, 4, 125, 30, 6, 17, 0, 52, 2, 0, 0, 44, 7, 2, 0, 53, 4, 7, 0, 49, 4, 0, 0, 44, 8, 3, 0, 53, 7, 8, 0, 44, 4, 4, 0, 44, 8, 5, 0, 44, 9, 6, 0, 51, 4, 8, 9, 49, 7, 0, 0, 67, 4, 0, 0, 5, 7, 5, 1, 50, 4, 7, 0, 69, 4, 0, 0, 3, 4, 0, 0, 50, 0, 5, 0, 44, 7, 7, 0, 61, 7, 7, 0, 53, 4, 7, 0, 61, 7, 4, 0, 27, 8, 7, 0, 61, 7, 4, 1, 27, 9, 7, 0, 50, 2, 8, 0, 44, 7, 8, 0, 53, 4, 7, 0, 51, 0, 9, 4, 54, 3, 0, 0, 128, 236, 3, 1, 15, 0, 15, 0, 15, 0, 5, 1, 19, 0, 11, 0, 7, 1, 9, 0, 9, 1, 14, 0, 14, 0, 11, 0, 7, 1, 52, 0, 52, 0, 52, 0, 39, 0, 39, 0, 39, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 69, 0, 9, 0, 9, 0, 9, 1, 30, 0, 30, 0, 30, 0, 30, 0, 9, 0, 9, 0, 9, 0, 9, 1, 37, 0, 37, 0, 37, 0, 11, 0, 11, 128, 236, 3, 0, 3, 8, 21, 0, 3, 0, 3, 0, 3, 215, 0, 205, 0, 220, 0, 0, 8, 2, 2, 2, 4, 20, 0, 5, 206, 12, 114, 101, 97, 100, 45, 97, 110, 111, 110, 45, 102, 110, 218, 131, 42, 218, 131, 43, 206, 3, 102, 110, 42, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 3, 0, 2, 206, 3, 115, 121, 109, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 8, 1, 1, 1, 7, 29, 0, 3, 206, 11, 109, 97, 107, 101, 45, 115, 121, 109, 98, 111, 108, 218, 131, 42, 218, 129, 49, 216, 11, 115, 116, 114, 105, 110, 103, 47, 102, 105, 110, 100, 218, 129, 189, 218, 6, 218, 130, 17, 218, 21, 218, 30, 0, 29, 0, 207, 4, 110, 97, 109, 101, 0, 29, 1, 207, 11, 109, 97, 107, 101, 45, 115, 121, 109, 98, 111, 108, 4, 29, 3, 207, 5, 115, 108, 97, 115, 104, 44, 2, 0, 0, 50, 2, 0, 0, 44, 3, 1, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 3, 17, 0, 5, 2, 3, 1, 50, 0, 2, 0, 44, 5, 2, 0, 53, 4, 5, 0, 43, 2, 0, 0, 51, 0, 2, 3, 44, 5, 2, 0, 53, 2, 5, 0, 44, 5, 3, 0, 44, 6, 4, 0, 44, 7, 5, 0, 51, 5, 6, 7, 44, 5, 6, 0, 51, 4, 5, 2, 67, 2, 0, 0, 3, 2, 0, 0, 44, 2, 3, 0, 44, 4, 4, 0, 44, 5, 5, 0, 51, 2, 4, 5, 49, 0, 0, 0, 67, 2, 0, 0, 3, 2, 0, 0, 72, 15, 0, 15, 0, 15, 0, 15, 0, 3, 1, 5, 3, 33, 0, 14, 0, 14, 0, 14, 191, 255, 12, 0, 12, 0, 12, 0, 12, 191, 254, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 3, 0, 218, 131, 82, 0, 3, 1, 207, 3, 115, 121, 109, 49, 0, 0, 0, 44, 2, 0, 0, 54, 2, 0, 0, 84, 3, 0, 3, 0, 3, 218, 130, 77, 0, 20, 0, 218, 131, 54, 0, 20, 1, 218, 131, 55, 0, 20, 2, 207, 12, 114, 101, 97, 100, 45, 97, 110, 111, 110, 45, 102, 110, 6, 20, 5, 218, 131, 72, 8, 20, 6, 218, 131, 73, 5, 3, 1, 1, 50, 0, 3, 0, 44, 5, 0, 0, 61, 5, 5, 0, 53, 4, 5, 0, 61, 3, 4, 0, 27, 5, 3, 0, 61, 3, 4, 1, 27, 6, 3, 0, 44, 3, 1, 0, 49, 3, 0, 0, 44, 4, 2, 0, 53, 3, 4, 0, 43, 4, 0, 0, 51, 5, 4, 3, 44, 7, 3, 0, 53, 4, 7, 0, 50, 4, 6, 0, 69, 3, 0, 0, 3, 3, 0, 0, 129, 3, 37, 0, 24, 0, 24, 0, 24, 0, 24, 0, 3, 0, 3, 0, 3, 0, 3, 1, 27, 0, 27, 0, 27, 0, 27, 0, 6, 0, 6, 0, 6, 0, 6, 0, 5, 0, 5, 0, 5, 215, 0, 205, 0, 220, 0, 0, 7, 2, 2, 2, 4, 18, 0, 5, 206, 23, 114, 101, 97, 100, 45, 114, 101, 97, 100, 101, 114, 45, 99, 111, 110, 100, 105, 116, 105, 111, 110, 97, 108, 218, 131, 42, 218, 131, 43, 208, 7, 99, 108, 97, 117, 115, 101, 115, 218, 6, 208, 23, 106, 111, 108, 116, 47, 114, 101, 97, 100, 101, 114, 45, 99, 111, 110, 100, 105, 116, 105, 111, 110, 97, 108, 0, 18, 0, 218, 131, 54, 0, 18, 1, 218, 131, 55, 0, 18, 2, 207, 23, 114, 101, 97, 100, 45, 114, 101, 97, 100, 101, 114, 45, 99, 111, 110, 100, 105, 116, 105, 111, 110, 97, 108, 6, 18, 5, 218, 131, 72, 8, 18, 6, 218, 131, 73, 5, 3, 1, 2, 50, 0, 3, 0, 44, 5, 0, 0, 61, 5, 5, 0, 53, 4, 5, 0, 61, 3, 4, 0, 27, 5, 3, 0, 61, 3, 4, 1, 27, 6, 3, 0, 44, 3, 1, 0, 44, 4, 2, 0, 51, 3, 5, 4, 44, 3, 3, 0, 49, 3, 0, 0, 67, 3, 0, 0, 50, 3, 6, 0, 69, 3, 0, 0, 3, 3, 0, 0, 129, 8, 37, 0, 24, 0, 24, 0, 24, 0, 24, 0, 3, 0, 3, 0, 3, 0, 3, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 218, 131, 43, 215, 0, 205, 0, 220, 0, 0, 8, 2, 2, 2, 4, 19, 0, 5, 206, 14, 114, 101, 97, 100, 45, 118, 97, 114, 45, 113, 117, 111, 116, 101, 218, 131, 42, 218, 131, 43, 206, 3, 118, 97, 114, 218, 131, 77, 218, 130, 91, 0, 19, 0, 218, 131, 54, 0, 19, 1, 218, 131, 55, 0, 19, 2, 207, 14, 114, 101, 97, 100, 45, 118, 97, 114, 45, 113, 117, 111, 116, 101, 6, 19, 5, 218, 131, 72, 8, 19, 6, 218, 131, 73, 5, 3, 1, 2, 50, 0, 3, 0, 44, 5, 0, 0, 61, 5, 5, 0, 53, 4, 5, 0, 61, 3, 4, 0, 27, 5, 3, 0, 61, 3, 4, 1, 27, 6, 3, 0, 44, 3, 1, 0, 49, 3, 0, 0, 44, 4, 2, 0, 53, 3, 4, 0, 50, 3, 5, 0, 44, 7, 3, 0, 53, 4, 7, 0, 50, 4, 6, 0, 69, 3, 0, 0, 3, 3, 0, 0, 129, 13, 37, 0, 24, 0, 24, 0, 24, 0, 24, 0, 3, 0, 3, 0, 3, 0, 3, 1, 13, 0, 13, 0, 13, 0, 13, 0, 6, 0, 6, 0, 6, 0, 5, 0, 5, 0, 5, 215, 0, 205, 0, 220, 0, 0, 10, 3, 3, 3, 1, 18, 0, 5, 206, 16, 114, 101, 97, 100, 45, 115, 121, 109, 98, 111, 108, 45, 110, 97, 109, 101, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 7, 1, 1, 1, 2, 22, 0, 6, 206, 12, 115, 121, 109, 98, 111, 108, 45, 99, 104, 97, 114, 63, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 19, 1, 1, 1, 0, 82, 0, 20, 206, 13, 115, 121, 109, 98, 111, 108, 45, 115, 116, 97, 114, 116, 63, 218, 131, 42, 0, 82, 0, 218, 130, 153, 0, 82, 1, 207, 13, 115, 121, 109, 98, 111, 108, 45, 115, 116, 97, 114, 116, 63, 2, 9, 4, 207, 7, 95, 48, 48, 48, 48, 103, 50, 9, 82, 3, 207, 7, 95, 48, 48, 48, 48, 103, 49, 14, 21, 5, 207, 7, 95, 48, 48, 48, 48, 103, 51, 21, 82, 4, 207, 7, 95, 48, 48, 48, 48, 103, 48, 25, 82, 5, 207, 7, 95, 48, 48, 48, 48, 102, 90, 29, 82, 6, 207, 7, 95, 48, 48, 48, 48, 102, 89, 33, 82, 7, 207, 7, 95, 48, 48, 48, 48, 102, 88, 37, 82, 8, 207, 7, 95, 48, 48, 48, 48, 102, 87, 41, 82, 9, 207, 7, 95, 48, 48, 48, 48, 102, 86, 45, 82, 10, 207, 7, 95, 48, 48, 48, 48, 102, 85, 49, 82, 11, 207, 7, 95, 48, 48, 48, 48, 102, 84, 53, 82, 12, 207, 7, 95, 48, 48, 48, 48, 102, 83, 57, 82, 13, 207, 7, 95, 48, 48, 48, 48, 102, 82, 61, 82, 14, 207, 7, 95, 48, 48, 48, 48, 102, 81, 65, 82, 15, 207, 7, 95, 48, 48, 48, 48, 102, 80, 69, 82, 16, 207, 7, 95, 48, 48, 48, 48, 102, 79, 73, 82, 17, 207, 7, 95, 48, 48, 48, 48, 102, 78, 77, 82, 18, 207, 7, 95, 48, 48, 48, 48, 102, 77, 43, 4, 65, 0, 71, 3, 0, 4, 27, 4, 3, 0, 30, 3, 5, 0, 43, 6, 90, 0, 72, 5, 0, 6, 27, 2, 5, 0, 28, 2, 0, 0, 27, 2, 4, 0, 27, 3, 2, 0, 30, 3, 2, 0, 3, 3, 0, 0, 43, 5, 97, 0, 71, 4, 0, 5, 27, 5, 4, 0, 30, 4, 5, 0, 43, 7, 122, 0, 72, 6, 0, 7, 27, 2, 6, 0, 28, 2, 0, 0, 27, 2, 5, 0, 27, 4, 2, 0, 30, 4, 2, 0, 3, 4, 0, 0, 38, 2, 0, 42, 27, 5, 2, 0, 30, 5, 2, 0, 3, 5, 0, 0, 38, 2, 0, 43, 27, 6, 2, 0, 30, 6, 2, 0, 3, 6, 0, 0, 38, 2, 0, 33, 27, 7, 2, 0, 30, 7, 2, 0, 3, 7, 0, 0, 38, 2, 0, 95, 27, 8, 2, 0, 30, 8, 2, 0, 3, 8, 0, 0, 38, 2, 0, 45, 27, 9, 2, 0, 30, 9, 2, 0, 3, 9, 0, 0, 38, 2, 0, 63, 27, 10, 2, 0, 30, 10, 2, 0, 3, 10, 0, 0, 38, 2, 0, 46, 27, 11, 2, 0, 30, 11, 2, 0, 3, 11, 0, 0, 38, 2, 0, 60, 27, 12, 2, 0, 30, 12, 2, 0, 3, 12, 0, 0, 38, 2, 0, 62, 27, 13, 2, 0, 30, 13, 2, 0, 3, 13, 0, 0, 38, 2, 0, 61, 27, 14, 2, 0, 30, 14, 2, 0, 3, 14, 0, 0, 38, 2, 0, 38, 27, 15, 2, 0, 30, 15, 2, 0, 3, 15, 0, 0, 38, 2, 0, 124, 27, 16, 2, 0, 30, 16, 2, 0, 3, 16, 0, 0, 38, 2, 0, 36, 27, 17, 2, 0, 30, 17, 2, 0, 3, 17, 0, 0, 38, 2, 0, 37, 27, 18, 2, 0, 30, 18, 2, 0, 3, 18, 0, 0, 38, 2, 0, 47, 3, 2, 0, 0, 38, 12, 0, 12, 0, 7, 0, 7, 0, 22, 0, 22, 0, 7, 0, 7, 0, 7, 0, 3, 0, 3, 0, 3, 1, 12, 0, 12, 0, 7, 0, 7, 0, 22, 0, 22, 0, 7, 0, 7, 0, 7, 191, 255, 3, 0, 3, 0, 3, 2, 7, 191, 254, 3, 0, 3, 0, 3, 3, 7, 191, 253, 3, 0, 3, 0, 3, 4, 7, 191, 252, 3, 0, 3, 0, 3, 5, 7, 191, 251, 3, 0, 3, 0, 3, 6, 7, 191, 250, 3, 0, 3, 0, 3, 7, 7, 191, 249, 3, 0, 3, 0, 3, 8, 7, 191, 248, 3, 0, 3, 0, 3, 9, 7, 191, 247, 3, 0, 3, 0, 3, 10, 7, 191, 246, 3, 0, 3, 0, 3, 11, 7, 191, 245, 3, 0, 3, 0, 3, 12, 7, 191, 244, 3, 0, 3, 0, 3, 13, 7, 191, 243, 3, 0, 3, 0, 3, 14, 7, 191, 242, 3, 0, 3, 0, 3, 15, 7, 191, 241, 3, 0, 3, 0, 3, 16, 7, 0, 7, 215, 0, 205, 0, 220, 0, 0, 6, 1, 1, 1, 0, 8, 0, 3, 206, 6, 100, 105, 103, 105, 116, 63, 218, 131, 42, 0, 8, 0, 218, 130, 153, 0, 8, 1, 207, 6, 100, 105, 103, 105, 116, 63, 2, 8, 3, 207, 7, 95, 48, 48, 48, 48, 102, 71, 43, 3, 48, 0, 71, 2, 0, 3, 27, 3, 2, 0, 30, 2, 4, 0, 43, 5, 57, 0, 72, 4, 0, 5, 3, 4, 0, 0, 3, 3, 0, 0, 30, 8, 0, 8, 0, 3, 0, 3, 0, 18, 0, 18, 0, 18, 0, 3, 0, 22, 0, 218, 130, 153, 0, 22, 1, 207, 12, 115, 121, 109, 98, 111, 108, 45, 99, 104, 97, 114, 63, 3, 22, 3, 207, 7, 95, 48, 48, 48, 48, 103, 55, 9, 22, 4, 207, 7, 95, 48, 48, 48, 48, 103, 54, 13, 22, 5, 207, 7, 95, 48, 48, 48, 48, 103, 53, 17, 22, 6, 207, 7, 95, 48, 48, 48, 48, 103, 52, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 3, 2, 0, 3, 3, 0, 0, 49, 0, 0, 0, 44, 4, 1, 0, 53, 2, 4, 0, 27, 4, 2, 0, 30, 4, 2, 0, 3, 4, 0, 0, 38, 2, 0, 35, 27, 5, 2, 0, 30, 5, 2, 0, 3, 5, 0, 0, 38, 2, 0, 39, 27, 6, 2, 0, 30, 6, 2, 0, 3, 6, 0, 0, 38, 2, 0, 58, 3, 2, 0, 0, 57, 7, 0, 7, 0, 7, 0, 3, 0, 3, 0, 3, 1, 7, 0, 7, 0, 7, 191, 255, 3, 0, 3, 0, 3, 2, 7, 191, 254, 3, 0, 3, 0, 3, 3, 7, 191, 253, 3, 0, 3, 0, 3, 4, 7, 0, 7, 0, 18, 0, 218, 131, 54, 0, 18, 1, 218, 131, 55, 0, 18, 2, 218, 129, 137, 0, 18, 3, 207, 16, 114, 101, 97, 100, 45, 115, 121, 109, 98, 111, 108, 45, 110, 97, 109, 101, 3, 13, 5, 207, 7, 95, 48, 48, 48, 48, 103, 56, 46, 3, 0, 0, 63, 5, 0, 0, 35, 6, 2, 5, 27, 5, 6, 0, 30, 6, 8, 0, 49, 2, 0, 0, 53, 7, 0, 0, 49, 7, 0, 0, 44, 9, 0, 0, 53, 8, 9, 0, 27, 4, 8, 0, 28, 2, 0, 0, 27, 4, 5, 0, 30, 4, 4, 0, 5, 5, 2, 1, 51, 0, 1, 5, 54, 3, 0, 0, 3, 2, 0, 0, 63, 1, 1, 19, 0, 12, 0, 7, 0, 7, 1, 26, 0, 26, 0, 12, 0, 12, 0, 12, 191, 255, 7, 0, 7, 0, 7, 0, 3, 2, 29, 0, 5, 0, 5, 191, 254, 3, 218, 129, 189, 216, 7, 107, 101, 121, 119, 111, 114, 100, 208, 4, 102, 111, 114, 109, 218, 6, 208, 11, 106, 111, 108, 116, 47, 116, 97, 103, 103, 101, 100, 208, 3, 116, 97, 103, 0, 74, 0, 218, 131, 54, 0, 74, 1, 218, 131, 55, 0, 74, 2, 207, 13, 114, 101, 97, 100, 45, 100, 105, 115, 112, 97, 116, 99, 104, 9, 74, 3, 218, 130, 153, 33, 40, 10, 218, 129, 37, 35, 40, 11, 218, 131, 73, 48, 74, 10, 218, 129, 137, 52, 74, 11, 207, 3, 116, 97, 103, 58, 74, 13, 218, 131, 72, 60, 74, 14, 218, 131, 73, 5, 3, 1, 1, 63, 4, 0, 0, 71, 5, 3, 4, 30, 5, 3, 0, 44, 3, 0, 0, 1, 3, 0, 0, 5, 3, 1, 1, 49, 3, 0, 0, 53, 4, 0, 0, 27, 3, 4, 0, 38, 4, 3, 123, 30, 4, 4, 0, 50, 0, 1, 0, 44, 5, 1, 0, 54, 5, 0, 0, 38, 5, 3, 40, 30, 5, 4, 0, 50, 0, 1, 0, 44, 6, 2, 0, 54, 6, 0, 0, 38, 6, 3, 63, 30, 6, 4, 0, 50, 0, 1, 0, 44, 7, 3, 0, 54, 7, 0, 0, 38, 7, 3, 95, 30, 7, 14, 0, 5, 8, 1, 2, 50, 0, 8, 0, 44, 10, 4, 0, 61, 10, 10, 0, 53, 9, 10, 0, 61, 8, 9, 0, 27, 10, 8, 0, 61, 8, 9, 1, 27, 11, 8, 0, 50, 0, 11, 0, 44, 8, 4, 0, 61, 8, 8, 0, 54, 8, 0, 0, 38, 8, 3, 39, 30, 8, 4, 0, 50, 0, 1, 0, 44, 9, 5, 0, 54, 9, 0, 0, 51, 0, 1, 1, 44, 10, 6, 0, 53, 9, 10, 0, 27, 10, 9, 0, 51, 0, 1, 10, 44, 11, 7, 0, 53, 9, 11, 0, 27, 11, 9, 0, 50, 0, 10, 0, 44, 12, 4, 0, 61, 12, 12, 0, 53, 9, 12, 0, 61, 12, 9, 0, 27, 13, 12, 0, 61, 12, 9, 1, 27, 14, 12, 0, 49, 11, 0, 0, 44, 12, 8, 0, 53, 9, 12, 0, 44, 12, 9, 0, 44, 15, 10, 0, 51, 12, 13, 15, 44, 12, 11, 0, 44, 15, 12, 0, 51, 12, 15, 9, 67, 9, 0, 0, 50, 9, 14, 0, 69, 9, 0, 0, 3, 9, 0, 0, 129, 18, 11, 0, 21, 0, 7, 0, 3, 1, 5, 0, 5, 1, 14, 0, 11, 0, 11, 0, 3, 2, 7, 191, 255, 5, 1, 17, 0, 17, 0, 17, 1, 7, 191, 254, 5, 2, 16, 0, 16, 0, 16, 1, 7, 191, 253, 5, 3, 16, 0, 16, 0, 16, 1, 7, 191, 252, 5, 4, 47, 0, 34, 0, 34, 0, 34, 0, 34, 0, 16, 0, 16, 0, 16, 0, 16, 1, 19, 0, 19, 0, 19, 0, 19, 1, 7, 191, 250, 5, 6, 16, 0, 16, 0, 16, 2, 17, 0, 17, 0, 17, 0, 7, 1, 17, 0, 17, 0, 17, 191, 255, 7, 2, 28, 0, 28, 0, 28, 0, 28, 191, 254, 7, 0, 7, 0, 7, 0, 7, 3, 40, 0, 40, 0, 40, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 215, 0, 205, 0, 220, 0, 0, 8, 2, 2, 2, 3, 20, 0, 6, 206, 11, 114, 101, 97, 100, 45, 115, 116, 114, 105, 110, 103, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 14, 4, 4, 4, 5, 45, 0, 7, 206, 17, 114, 101, 97, 100, 45, 115, 116, 114, 105, 110, 103, 45, 99, 104, 97, 114, 115, 218, 131, 42, 206, 19, 85, 110, 116, 101, 114, 109, 105, 110, 97, 116, 101, 100, 32, 115, 116, 114, 105, 110, 103, 206, 19, 85, 110, 116, 101, 114, 109, 105, 110, 97, 116, 101, 100, 32, 101, 115, 99, 97, 112, 101, 215, 0, 205, 0, 220, 0, 0, 8, 1, 1, 1, 6, 23, 0, 2, 206, 11, 101, 115, 99, 97, 112, 101, 45, 99, 104, 97, 114, 218, 131, 42, 218, 112, 206, 1, 9, 206, 1, 13, 206, 1, 92, 206, 1, 34, 218, 130, 242, 0, 23, 0, 218, 130, 153, 0, 23, 1, 207, 11, 101, 115, 99, 97, 112, 101, 45, 99, 104, 97, 114, 38, 2, 0, 110, 30, 2, 3, 0, 44, 3, 0, 0, 3, 3, 0, 0, 38, 3, 0, 116, 30, 3, 3, 0, 44, 4, 1, 0, 3, 4, 0, 0, 38, 4, 0, 114, 30, 4, 3, 0, 44, 5, 2, 0, 3, 5, 0, 0, 38, 5, 0, 92, 30, 5, 3, 0, 44, 6, 3, 0, 3, 6, 0, 0, 38, 6, 0, 34, 30, 6, 3, 0, 44, 7, 4, 0, 3, 7, 0, 0, 49, 0, 0, 0, 44, 7, 5, 0, 54, 7, 0, 0, 117, 7, 0, 3, 0, 3, 0, 3, 1, 9, 0, 5, 0, 5, 0, 5, 1, 11, 0, 7, 0, 7, 0, 7, 1, 13, 0, 9, 0, 9, 0, 9, 1, 15, 0, 11, 0, 11, 0, 11, 1, 13, 0, 13, 0, 13, 218, 55, 218, 130, 242, 0, 45, 0, 218, 131, 54, 0, 45, 1, 218, 131, 55, 0, 45, 2, 218, 129, 137, 0, 45, 3, 207, 5, 99, 104, 97, 114, 115, 0, 45, 4, 207, 17, 114, 101, 97, 100, 45, 115, 116, 114, 105, 110, 103, 45, 99, 104, 97, 114, 115, 8, 45, 7, 218, 130, 153, 12, 30, 9, 207, 8, 110, 101, 120, 116, 45, 112, 111, 115, 46, 4, 0, 0, 71, 5, 1, 2, 30, 5, 4, 0, 44, 6, 0, 0, 1, 6, 0, 0, 4, 0, 0, 0, 49, 1, 0, 0, 53, 6, 0, 0, 27, 7, 6, 0, 38, 6, 7, 92, 30, 6, 20, 0, 5, 8, 1, 1, 27, 9, 8, 0, 71, 8, 9, 2, 30, 8, 4, 0, 44, 10, 1, 0, 1, 10, 0, 0, 4, 0, 0, 0, 5, 10, 1, 2, 49, 9, 0, 0, 53, 11, 0, 0, 49, 11, 0, 0, 44, 13, 2, 0, 53, 12, 13, 0, 50, 3, 12, 0, 44, 13, 3, 0, 53, 11, 13, 0, 51, 0, 10, 2, 49, 11, 0, 0, 54, 4, 0, 0, 38, 8, 7, 34, 30, 8, 4, 0, 50, 1, 3, 0, 69, 9, 0, 0, 3, 9, 0, 0, 5, 9, 1, 1, 49, 7, 0, 0, 44, 11, 4, 0, 53, 10, 11, 0, 50, 3, 10, 0, 44, 12, 3, 0, 53, 11, 12, 0, 51, 0, 9, 2, 49, 11, 0, 0, 54, 4, 0, 0, 124, 1, 1, 7, 0, 3, 1, 5, 0, 5, 0, 5, 1, 13, 0, 13, 0, 5, 1, 11, 0, 7, 1, 24, 0, 9, 1, 15, 0, 11, 1, 13, 0, 13, 0, 13, 1, 34, 1, 46, 0, 46, 0, 33, 0, 33, 0, 33, 0, 15, 0, 15, 0, 15, 191, 255, 13, 0, 13, 0, 13, 2, 13, 0, 9, 1, 11, 0, 11, 0, 11, 1, 32, 1, 31, 0, 31, 0, 31, 0, 13, 0, 13, 0, 13, 191, 255, 11, 0, 11, 0, 11, 218, 51, 218, 56, 0, 20, 0, 218, 131, 54, 0, 20, 1, 218, 131, 55, 0, 20, 2, 207, 11, 114, 101, 97, 100, 45, 115, 116, 114, 105, 110, 103, 1, 20, 4, 218, 129, 137, 9, 20, 5, 218, 131, 73, 11, 20, 7, 218, 131, 151, 63, 3, 0, 0, 27, 4, 3, 0, 5, 3, 1, 1, 64, 5, 0, 0, 51, 0, 3, 4, 49, 5, 0, 0, 44, 7, 0, 0, 53, 6, 7, 0, 61, 3, 6, 0, 27, 5, 3, 0, 61, 3, 6, 1, 27, 7, 3, 0, 44, 3, 1, 0, 50, 7, 3, 0, 44, 6, 2, 0, 53, 3, 6, 0, 5, 6, 5, 1, 50, 3, 6, 0, 69, 3, 0, 0, 3, 3, 0, 0, 128, 141, 13, 0, 3, 1, 46, 0, 25, 0, 25, 0, 25, 0, 25, 0, 25, 191, 255, 3, 0, 3, 0, 3, 0, 3, 2, 6, 0, 6, 0, 6, 0, 6, 0, 29, 0, 5, 0, 5, 0, 5, 215, 0, 205, 0, 252, 0, 0, 7, 2, 2, 2, 0, 6, 0, 1, 4, 206, 9, 114, 101, 97, 100, 45, 108, 105, 115, 116, 218, 131, 42, 0, 6, 0, 218, 131, 54, 0, 6, 1, 218, 131, 55, 0, 6, 2, 207, 9, 114, 101, 97, 100, 45, 108, 105, 115, 116, 1, 6, 4, 207, 15, 114, 101, 97, 100, 45, 108, 105, 115, 116, 45, 105, 116, 101, 109, 115, 48, 3, 0, 0, 27, 4, 3, 0, 5, 5, 1, 1, 64, 6, 0, 0, 51, 0, 5, 6, 54, 4, 0, 0, 205, 0, 220, 0, 0, 10, 3, 3, 3, 4, 31, 0, 7, 206, 15, 114, 101, 97, 100, 45, 108, 105, 115, 116, 45, 105, 116, 101, 109, 115, 218, 131, 42, 218, 131, 45, 206, 17, 85, 110, 116, 101, 114, 109, 105, 110, 97, 116, 101, 100, 32, 108, 105, 115, 116, 218, 131, 43, 218, 55, 0, 31, 0, 218, 131, 54, 0, 31, 1, 218, 131, 55, 0, 31, 2, 218, 131, 71, 0, 31, 3, 218, 131, 158, 4, 31, 5, 218, 131, 55, 23, 31, 8, 218, 131, 72, 25, 31, 9, 218, 131, 73, 46, 3, 0, 0, 50, 0, 1, 0, 44, 5, 0, 0, 53, 4, 5, 0, 27, 5, 4, 0, 63, 4, 0, 0, 71, 6, 5, 4, 30, 6, 3, 0, 44, 4, 1, 0, 1, 4, 0, 0, 49, 5, 0, 0, 53, 4, 0, 0, 38, 6, 4, 41, 30, 6, 5, 0, 5, 4, 5, 1, 50, 2, 4, 0, 69, 4, 0, 0, 3, 4, 0, 0, 50, 0, 5, 0, 44, 7, 2, 0, 61, 7, 7, 0, 53, 4, 7, 0, 61, 7, 4, 0, 27, 8, 7, 0, 61, 7, 4, 1, 27, 9, 7, 0, 50, 2, 8, 0, 44, 7, 3, 0, 53, 4, 7, 0, 51, 0, 9, 4, 54, 3, 0, 0, 128, 198, 3, 1, 15, 0, 15, 0, 15, 0, 5, 1, 19, 0, 11, 0, 7, 1, 9, 0, 9, 1, 14, 0, 14, 0, 11, 0, 7, 1, 16, 0, 9, 0, 9, 0, 9, 1, 30, 0, 30, 0, 30, 0, 30, 0, 9, 0, 9, 0, 9, 0, 9, 1, 38, 0, 38, 0, 38, 0, 11, 0, 11, 128, 198, 3, 0, 3, 8, 22, 0, 3, 0, 3, 0, 3, 215, 0, 205, 0, 252, 0, 0, 7, 2, 2, 2, 0, 6, 0, 1, 4, 206, 11, 114, 101, 97, 100, 45, 118, 101, 99, 116, 111, 114, 218, 131, 42, 0, 6, 0, 218, 131, 54, 0, 6, 1, 218, 131, 55, 0, 6, 2, 207, 11, 114, 101, 97, 100, 45, 118, 101, 99, 116, 111, 114, 1, 6, 4, 207, 14, 114, 101, 97, 100, 45, 118, 101, 99, 45, 105, 116, 101, 109, 115, 48, 3, 0, 0, 27, 4, 3, 0, 5, 5, 1, 1, 64, 6, 0, 0, 51, 0, 5, 6, 54, 4, 0, 0, 205, 0, 220, 0, 0, 10, 3, 3, 3, 6, 37, 0, 7, 206, 14, 114, 101, 97, 100, 45, 118, 101, 99, 45, 105, 116, 101, 109, 115, 218, 131, 42, 218, 131, 45, 206, 19, 85, 110, 116, 101, 114, 109, 105, 110, 97, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 218, 127, 218, 76, 218, 131, 43, 218, 55, 0, 37, 0, 218, 131, 54, 0, 37, 1, 218, 131, 55, 0, 37, 2, 218, 131, 71, 0, 37, 3, 218, 131, 164, 4, 37, 5, 218, 131, 55, 29, 37, 8, 218, 131, 72, 31, 37, 9, 218, 131, 73, 46, 3, 0, 0, 50, 0, 1, 0, 44, 5, 0, 0, 53, 4, 5, 0, 27, 5, 4, 0, 63, 4, 0, 0, 71, 6, 5, 4, 30, 6, 3, 0, 44, 4, 1, 0, 1, 4, 0, 0, 49, 5, 0, 0, 53, 4, 0, 0, 38, 6, 4, 93, 30, 6, 11, 0, 52, 2, 0, 0, 44, 7, 2, 0, 53, 4, 7, 0, 49, 4, 0, 0, 44, 8, 3, 0, 53, 7, 8, 0, 5, 4, 5, 1, 50, 7, 4, 0, 69, 4, 0, 0, 3, 4, 0, 0, 50, 0, 5, 0, 44, 7, 4, 0, 61, 7, 7, 0, 53, 4, 7, 0, 61, 7, 4, 0, 27, 8, 7, 0, 61, 7, 4, 1, 27, 9, 7, 0, 50, 2, 8, 0, 44, 7, 5, 0, 53, 4, 7, 0, 51, 0, 9, 4, 54, 3, 0, 0, 128, 210, 3, 1, 15, 0, 15, 0, 15, 0, 5, 1, 19, 0, 11, 0, 7, 1, 9, 0, 9, 1, 14, 0, 14, 0, 11, 0, 7, 1, 23, 0, 23, 0, 23, 0, 10, 0, 10, 0, 10, 0, 39, 0, 9, 0, 9, 0, 9, 1, 30, 0, 30, 0, 30, 0, 30, 0, 9, 0, 9, 0, 9, 0, 9, 1, 37, 0, 37, 0, 37, 0, 11, 0, 11, 128, 210, 3, 0, 3, 8, 21, 0, 3, 0, 3, 0, 3, 215, 0, 205, 0, 252, 0, 0, 7, 2, 2, 2, 0, 6, 0, 1, 4, 206, 8, 114, 101, 97, 100, 45, 109, 97, 112, 218, 131, 42, 0, 6, 0, 218, 131, 54, 0, 6, 1, 218, 131, 55, 0, 6, 2, 207, 8, 114, 101, 97, 100, 45, 109, 97, 112, 1, 6, 4, 207, 8, 114, 101, 97, 100, 45, 107, 118, 115, 48, 3, 0, 0, 27, 4, 3, 0, 5, 5, 1, 1, 64, 6, 0, 0, 51, 0, 5, 6, 54, 4, 0, 0, 205, 0, 220, 0, 0, 14, 3, 3, 3, 5, 49, 0, 10, 206, 8, 114, 101, 97, 100, 45, 107, 118, 115, 218, 131, 42, 218, 131, 45, 206, 16, 85, 110, 116, 101, 114, 109, 105, 110, 97, 116, 101, 100, 32, 109, 97, 112, 218, 129, 168, 218, 131, 43, 218, 55, 0, 49, 0, 218, 131, 54, 0, 49, 1, 218, 131, 55, 0, 49, 2, 218, 128, 215, 0, 49, 3, 218, 131, 170, 4, 49, 5, 218, 131, 55, 26, 49, 8, 218, 129, 247, 28, 49, 9, 218, 131, 73, 32, 49, 7, 218, 131, 55, 38, 49, 11, 218, 128, 179, 40, 49, 12, 207, 8, 110, 101, 119, 45, 112, 111, 115, 50, 46, 3, 0, 0, 50, 0, 1, 0, 44, 5, 0, 0, 53, 4, 5, 0, 27, 5, 4, 0, 63, 4, 0, 0, 71, 6, 5, 4, 30, 6, 3, 0, 44, 4, 1, 0, 1, 4, 0, 0, 49, 5, 0, 0, 53, 4, 0, 0, 38, 6, 4, 125, 30, 6, 8, 0, 52, 2, 0, 0, 44, 7, 2, 0, 53, 4, 7, 0, 5, 7, 5, 1, 50, 4, 7, 0, 69, 4, 0, 0, 3, 4, 0, 0, 50, 0, 5, 0, 44, 7, 3, 0, 61, 7, 7, 0, 53, 4, 7, 0, 61, 7, 4, 0, 27, 8, 7, 0, 61, 7, 4, 1, 27, 9, 7, 0, 50, 0, 9, 0, 44, 7, 0, 0, 53, 4, 7, 0, 27, 7, 4, 0, 50, 0, 7, 0, 44, 10, 3, 0, 61, 10, 10, 0, 53, 4, 10, 0, 61, 10, 4, 0, 27, 11, 10, 0, 61, 10, 4, 1, 27, 12, 10, 0, 50, 2, 8, 0, 44, 10, 4, 0, 53, 4, 10, 0, 50, 4, 11, 0, 44, 13, 4, 0, 53, 10, 13, 0, 51, 0, 12, 10, 54, 3, 0, 0, 128, 222, 3, 1, 15, 0, 15, 0, 15, 0, 5, 1, 19, 0, 11, 0, 7, 1, 9, 0, 9, 1, 14, 0, 14, 0, 11, 0, 7, 1, 10, 0, 10, 0, 10, 0, 24, 0, 9, 0, 9, 0, 9, 1, 29, 0, 29, 0, 29, 0, 29, 0, 9, 0, 9, 0, 9, 0, 9, 1, 19, 0, 19, 0, 19, 191, 255, 9, 2, 30, 0, 30, 0, 30, 0, 30, 191, 254, 9, 0, 9, 0, 9, 0, 9, 3, 40, 0, 40, 0, 40, 0, 57, 0, 57, 0, 57, 0, 11, 0, 11, 128, 222, 3, 0, 3, 10, 15, 0, 3, 0, 3, 0, 3, 215, 0, 205, 0, 220, 0, 0, 9, 2, 2, 2, 3, 45, 0, 10, 206, 12, 114, 101, 97, 100, 45, 107, 101, 121, 119, 111, 114, 100, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 10, 3, 3, 3, 1, 18, 0, 5, 206, 17, 114, 101, 97, 100, 45, 107, 101, 121, 119, 111, 114, 100, 45, 110, 97, 109, 101, 218, 131, 42, 218, 131, 98, 0, 18, 0, 218, 131, 54, 0, 18, 1, 218, 131, 55, 0, 18, 2, 218, 129, 137, 0, 18, 3, 207, 17, 114, 101, 97, 100, 45, 107, 101, 121, 119, 111, 114, 100, 45, 110, 97, 109, 101, 3, 13, 5, 207, 7, 95, 48, 48, 48, 48, 103, 57, 46, 3, 0, 0, 63, 5, 0, 0, 35, 6, 2, 5, 27, 5, 6, 0, 30, 6, 8, 0, 49, 2, 0, 0, 53, 7, 0, 0, 49, 7, 0, 0, 44, 9, 0, 0, 53, 8, 9, 0, 27, 4, 8, 0, 28, 2, 0, 0, 27, 4, 5, 0, 30, 4, 4, 0, 5, 5, 2, 1, 51, 0, 1, 5, 54, 3, 0, 0, 3, 2, 0, 0, 96, 1, 1, 19, 0, 12, 0, 7, 0, 7, 1, 26, 0, 26, 0, 12, 0, 12, 0, 12, 191, 255, 7, 0, 7, 0, 7, 0, 3, 2, 30, 0, 5, 0, 5, 191, 254, 3, 218, 129, 189, 218, 131, 132, 0, 45, 0, 218, 131, 54, 0, 45, 1, 218, 131, 55, 0, 45, 2, 207, 12, 114, 101, 97, 100, 45, 107, 101, 121, 119, 111, 114, 100, 3, 12, 4, 207, 7, 95, 48, 48, 48, 48, 103, 97, 14, 29, 5, 218, 129, 136, 18, 29, 6, 218, 129, 137, 22, 29, 7, 218, 131, 82, 30, 45, 5, 218, 129, 136, 34, 45, 6, 218, 129, 137, 38, 45, 7, 218, 131, 82, 5, 4, 1, 1, 63, 5, 0, 0, 35, 6, 4, 5, 27, 4, 6, 0, 30, 6, 7, 0, 5, 5, 1, 1, 49, 5, 0, 0, 53, 7, 0, 0, 38, 5, 7, 58, 27, 3, 5, 0, 28, 2, 0, 0, 27, 3, 4, 0, 30, 3, 17, 0, 5, 4, 1, 2, 27, 5, 4, 0, 51, 0, 5, 5, 44, 6, 0, 0, 53, 4, 6, 0, 27, 6, 4, 0, 51, 0, 5, 6, 44, 7, 1, 0, 53, 4, 7, 0, 27, 7, 4, 0, 49, 7, 0, 0, 44, 8, 2, 0, 53, 4, 8, 0, 50, 4, 6, 0, 69, 4, 0, 0, 3, 4, 0, 0, 5, 4, 1, 1, 27, 5, 4, 0, 51, 0, 5, 5, 44, 6, 0, 0, 53, 4, 6, 0, 27, 6, 4, 0, 51, 0, 5, 6, 44, 7, 1, 0, 53, 4, 7, 0, 27, 7, 4, 0, 49, 7, 0, 0, 44, 8, 2, 0, 53, 4, 8, 0, 50, 4, 6, 0, 69, 4, 0, 0, 3, 4, 0, 0, 104, 15, 0, 25, 0, 12, 0, 7, 0, 7, 0, 43, 0, 40, 0, 40, 0, 37, 0, 7, 0, 7, 0, 7, 0, 3, 2, 17, 0, 5, 1, 15, 0, 15, 0, 15, 191, 255, 5, 2, 16, 0, 16, 0, 16, 191, 254, 5, 3, 8, 0, 8, 0, 8, 0, 7, 0, 7, 0, 7, 2, 17, 0, 5, 1, 15, 0, 15, 0, 15, 191, 255, 5, 2, 16, 0, 16, 0, 16, 191, 254, 5, 3, 8, 0, 8, 0, 8, 0, 7, 0, 7, 0, 7, 206, 5, 113, 117, 111, 116, 101, 218, 131, 77, 215, 0, 205, 0, 220, 0, 0, 9, 4, 4, 4, 2, 14, 0, 7, 206, 10, 114, 101, 97, 100, 45, 113, 117, 111, 116, 101, 218, 131, 42, 218, 131, 43, 218, 130, 91, 0, 14, 0, 218, 131, 54, 0, 14, 1, 218, 131, 55, 0, 14, 2, 218, 131, 73, 0, 14, 3, 207, 9, 116, 111, 107, 101, 110, 45, 115, 121, 109, 0, 14, 4, 207, 10, 114, 101, 97, 100, 45, 113, 117, 111, 116, 101, 5, 14, 7, 218, 131, 72, 7, 14, 8, 207, 9, 102, 105, 110, 97, 108, 45, 112, 111, 115, 50, 0, 2, 0, 44, 6, 0, 0, 61, 6, 6, 0, 53, 5, 6, 0, 61, 6, 5, 0, 27, 7, 6, 0, 61, 6, 5, 1, 27, 8, 6, 0, 50, 3, 7, 0, 44, 6, 1, 0, 53, 5, 6, 0, 50, 5, 8, 0, 69, 5, 0, 0, 3, 5, 0, 0, 129, 35, 26, 0, 26, 0, 26, 0, 26, 0, 3, 0, 3, 0, 3, 0, 3, 1, 6, 0, 6, 0, 6, 0, 5, 0, 5, 0, 5, 206, 12, 115, 121, 110, 116, 97, 120, 45, 113, 117, 111, 116, 101, 206, 16, 117, 110, 113, 117, 111, 116, 101, 45, 115, 112, 108, 105, 99, 105, 110, 103, 206, 7, 117, 110, 113, 117, 111, 116, 101, 218, 129, 71, 215, 0, 205, 0, 220, 0, 0, 10, 2, 2, 2, 4, 27, 0, 7, 206, 9, 114, 101, 97, 100, 45, 109, 101, 116, 97, 218, 131, 42, 218, 131, 43, 206, 9, 119, 105, 116, 104, 45, 109, 101, 116, 97, 218, 131, 77, 218, 130, 91, 0, 27, 0, 218, 131, 54, 0, 27, 1, 218, 131, 55, 0, 27, 2, 207, 9, 114, 101, 97, 100, 45, 109, 101, 116, 97, 6, 27, 5, 207, 9, 109, 101, 116, 97, 45, 102, 111, 114, 109, 8, 27, 6, 218, 131, 73, 14, 27, 7, 218, 131, 72, 16, 27, 8, 218, 131, 173, 5, 3, 1, 1, 50, 0, 3, 0, 44, 5, 0, 0, 61, 5, 5, 0, 53, 4, 5, 0, 61, 3, 4, 0, 27, 5, 3, 0, 61, 3, 4, 1, 27, 6, 3, 0, 50, 0, 6, 0, 44, 4, 0, 0, 61, 4, 4, 0, 53, 3, 4, 0, 61, 4, 3, 0, 27, 7, 4, 0, 61, 4, 3, 1, 27, 8, 4, 0, 44, 3, 1, 0, 49, 3, 0, 0, 44, 4, 2, 0, 53, 3, 4, 0, 51, 3, 7, 5, 44, 9, 3, 0, 53, 4, 9, 0, 50, 4, 8, 0, 69, 3, 0, 0, 3, 3, 0, 0, 129, 40, 42, 0, 29, 0, 29, 0, 29, 0, 29, 0, 3, 0, 3, 0, 3, 0, 3, 1, 25, 0, 25, 0, 25, 0, 25, 191, 255, 3, 0, 3, 0, 3, 0, 3, 2, 13, 0, 13, 0, 13, 0, 13, 0, 6, 0, 6, 0, 6, 0, 5, 0, 5, 0, 5, 215, 0, 205, 0, 220, 0, 0, 8, 2, 2, 2, 5, 19, 0, 5, 206, 9, 114, 101, 97, 100, 45, 99, 104, 97, 114, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 9, 2, 2, 2, 1, 18, 0, 4, 206, 18, 114, 101, 97, 100, 45, 99, 104, 97, 114, 45, 110, 97, 109, 101, 45, 101, 110, 100, 218, 131, 42, 218, 131, 98, 0, 18, 0, 218, 131, 54, 0, 18, 1, 218, 131, 55, 0, 18, 2, 207, 18, 114, 101, 97, 100, 45, 99, 104, 97, 114, 45, 110, 97, 109, 101, 45, 101, 110, 100, 3, 13, 4, 207, 7, 95, 48, 48, 48, 48, 103, 106, 46, 2, 0, 0, 63, 4, 0, 0, 35, 5, 1, 4, 27, 4, 5, 0, 30, 5, 8, 0, 49, 1, 0, 0, 53, 6, 0, 0, 49, 6, 0, 0, 44, 8, 0, 0, 53, 7, 8, 0, 27, 3, 7, 0, 28, 2, 0, 0, 27, 3, 4, 0, 30, 3, 4, 0, 5, 4, 1, 1, 50, 0, 4, 0, 54, 2, 0, 0, 3, 1, 0, 0, 128, 246, 1, 1, 19, 0, 12, 0, 7, 0, 7, 0, 45, 0, 45, 0, 31, 0, 31, 0, 31, 0, 7, 0, 7, 0, 7, 0, 3, 1, 27, 0, 5, 0, 5, 191, 255, 3, 218, 129, 189, 218, 6, 208, 4, 99, 104, 97, 114, 218, 21, 0, 19, 0, 218, 131, 54, 0, 19, 1, 218, 131, 55, 0, 19, 2, 207, 9, 114, 101, 97, 100, 45, 99, 104, 97, 114, 4, 19, 3, 218, 129, 137, 9, 19, 4, 207, 9, 99, 104, 97, 114, 45, 110, 97, 109, 101, 5, 3, 1, 1, 50, 0, 3, 0, 44, 5, 0, 0, 53, 4, 5, 0, 27, 3, 4, 0, 5, 4, 1, 1, 51, 0, 4, 3, 44, 6, 1, 0, 53, 5, 6, 0, 27, 4, 5, 0, 44, 5, 2, 0, 44, 6, 3, 0, 44, 7, 4, 0, 51, 5, 6, 7, 49, 4, 0, 0, 67, 5, 0, 0, 50, 5, 3, 0, 69, 5, 0, 0, 3, 5, 0, 0, 128, 253, 35, 0, 13, 0, 13, 0, 13, 0, 3, 1, 35, 0, 19, 0, 19, 0, 19, 191, 255, 3, 2, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 218, 131, 121, 215, 0, 205, 0, 220, 0, 0, 17, 2, 2, 2, 11, 128, 131, 0, 21, 206, 11, 114, 101, 97, 100, 45, 110, 117, 109, 98, 101, 114, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 10, 3, 3, 3, 1, 18, 0, 5, 206, 15, 114, 101, 97, 100, 45, 104, 101, 120, 45, 100, 105, 103, 105, 116, 115, 218, 131, 42, 215, 0, 205, 0, 220, 0, 0, 8, 1, 1, 1, 0, 32, 0, 7, 206, 10, 104, 101, 120, 45, 100, 105, 103, 105, 116, 63, 218, 131, 42, 0, 32, 0, 218, 130, 153, 0, 32, 1, 207, 10, 104, 101, 120, 45, 100, 105, 103, 105, 116, 63, 2, 9, 4, 207, 7, 95, 48, 48, 48, 48, 102, 74, 9, 32, 3, 207, 7, 95, 48, 48, 48, 48, 102, 73, 14, 21, 5, 207, 7, 95, 48, 48, 48, 48, 102, 75, 21, 32, 4, 207, 7, 95, 48, 48, 48, 48, 102, 72, 26, 32, 5, 207, 7, 95, 48, 48, 48, 48, 102, 76, 43, 4, 48, 0, 71, 3, 0, 4, 27, 4, 3, 0, 30, 3, 5, 0, 43, 6, 57, 0, 72, 5, 0, 6, 27, 2, 5, 0, 28, 2, 0, 0, 27, 2, 4, 0, 27, 3, 2, 0, 30, 3, 2, 0, 3, 3, 0, 0, 43, 5, 65, 0, 71, 4, 0, 5, 27, 5, 4, 0, 30, 4, 5, 0, 43, 7, 70, 0, 72, 6, 0, 7, 27, 2, 6, 0, 28, 2, 0, 0, 27, 2, 5, 0, 27, 4, 2, 0, 30, 4, 2, 0, 3, 4, 0, 0, 43, 5, 97, 0, 71, 2, 0, 5, 27, 5, 2, 0, 30, 2, 4, 0, 43, 7, 102, 0, 72, 6, 0, 7, 3, 6, 0, 0, 3, 5, 0, 0, 33, 12, 0, 12, 0, 7, 0, 7, 0, 22, 0, 22, 0, 7, 0, 7, 0, 7, 0, 3, 0, 3, 0, 3, 1, 12, 0, 12, 0, 7, 0, 7, 0, 22, 0, 22, 0, 7, 0, 7, 0, 7, 191, 255, 3, 0, 3, 0, 3, 2, 12, 0, 12, 0, 7, 0, 7, 0, 22, 0, 22, 0, 22, 0, 7, 0, 18, 0, 218, 131, 54, 0, 18, 1, 218, 131, 55, 0, 18, 2, 218, 129, 137, 0, 18, 3, 207, 15, 114, 101, 97, 100, 45, 104, 101, 120, 45, 100, 105, 103, 105, 116, 115, 3, 13, 5, 207, 7, 95, 48, 48, 48, 48, 103, 98, 46, 3, 0, 0, 63, 5, 0, 0, 35, 6, 2, 5, 27, 5, 6, 0, 30, 6, 8, 0, 49, 2, 0, 0, 53, 7, 0, 0, 49, 7, 0, 0, 44, 9, 0, 0, 53, 8, 9, 0, 27, 4, 8, 0, 28, 2, 0, 0, 27, 4, 5, 0, 30, 4, 4, 0, 5, 5, 2, 1, 51, 0, 1, 5, 54, 3, 0, 0, 3, 2, 0, 0, 128, 145, 1, 1, 19, 0, 12, 0, 7, 0, 7, 0, 43, 0, 43, 0, 31, 0, 31, 0, 31, 0, 7, 0, 7, 0, 7, 0, 3, 1, 28, 0, 5, 0, 5, 191, 255, 3, 215, 0, 205, 0, 220, 0, 0, 10, 3, 3, 3, 1, 18, 0, 5, 206, 11, 114, 101, 97, 100, 45, 100, 105, 103, 105, 116, 115, 218, 131, 42, 218, 131, 121, 0, 18, 0, 218, 131, 54, 0, 18, 1, 218, 131, 55, 0, 18, 2, 218, 129, 137, 0, 18, 3, 207, 11, 114, 101, 97, 100, 45, 100, 105, 103, 105, 116, 115, 3, 13, 5, 207, 7, 95, 48, 48, 48, 48, 103, 99, 46, 3, 0, 0, 63, 5, 0, 0, 35, 6, 2, 5, 27, 5, 6, 0, 30, 6, 8, 0, 49, 2, 0, 0, 53, 7, 0, 0, 49, 7, 0, 0, 44, 9, 0, 0, 53, 8, 9, 0, 27, 4, 8, 0, 28, 2, 0, 0, 27, 4, 5, 0, 30, 4, 4, 0, 5, 5, 2, 1, 51, 0, 1, 5, 54, 3, 0, 0, 3, 2, 0, 0, 128, 150, 1, 1, 19, 0, 12, 0, 7, 0, 7, 0, 39, 0, 39, 0, 31, 0, 31, 0, 31, 0, 7, 0, 7, 0, 7, 0, 3, 1, 24, 0, 5, 0, 5, 191, 255, 3, 206, 19, 69, 120, 112, 101, 99, 116, 101, 100, 32, 110, 117, 109, 98, 101, 114, 32, 97, 116, 32, 218, 54, 218, 102, 215, 0, 205, 0, 220, 0, 0, 10, 3, 3, 3, 1, 18, 0, 5, 206, 15, 114, 101, 97, 100, 45, 102, 114, 97, 99, 116, 105, 111, 110, 97, 108, 218, 131, 42, 218, 131, 121, 0, 18, 0, 218, 131, 54, 0, 18, 1, 218, 131, 55, 0, 18, 2, 218, 129, 137, 0, 18, 3, 207, 15, 114, 101, 97, 100, 45, 102, 114, 97, 99, 116, 105, 111, 110, 97, 108, 3, 13, 5, 207, 7, 95, 48, 48, 48, 48, 103, 100, 46, 3, 0, 0, 63, 5, 0, 0, 35, 6, 2, 5, 27, 5, 6, 0, 30, 6, 8, 0, 49, 2, 0, 0, 53, 7, 0, 0, 49, 7, 0, 0, 44, 9, 0, 0, 53, 8, 9, 0, 27, 4, 8, 0, 28, 2, 0, 0, 27, 4, 5, 0, 30, 4, 4, 0, 5, 5, 2, 1, 51, 0, 1, 5, 54, 3, 0, 0, 3, 2, 0, 0, 128, 155, 1, 1, 19, 0, 12, 0, 7, 0, 7, 0, 39, 0, 39, 0, 31, 0, 31, 0, 31, 0, 7, 0, 7, 0, 7, 0, 3, 1, 28, 0, 5, 0, 5, 191, 255, 3, 206, 22, 69, 120, 112, 101, 99, 116, 101, 100, 32, 100, 105, 103, 105, 116, 32, 97, 102, 116, 101, 114, 32, 46, 218, 129, 189, 216, 11, 115, 99, 97, 110, 45, 110, 117, 109, 98, 101, 114, 206, 4, 48, 120, 37, 115, 216, 13, 115, 116, 114, 105, 110, 103, 47, 102, 111, 114, 109, 97, 116, 0, 128, 131, 0, 218, 131, 54, 0, 128, 131, 1, 218, 131, 55, 0, 128, 131, 2, 207, 11, 114, 101, 97, 100, 45, 110, 117, 109, 98, 101, 114, 0, 128, 131, 3, 218, 129, 136, 1, 128, 131, 4, 207, 3, 110, 101, 103, 4, 12, 6, 207, 7, 95, 48, 48, 48, 48, 103, 101, 15, 128, 131, 5, 218, 131, 55, 19, 36, 7, 207, 7, 95, 48, 48, 48, 48, 103, 103, 24, 33, 10, 207, 7, 95, 48, 48, 48, 48, 103, 102, 36, 128, 131, 7, 207, 4, 104, 101, 120, 63, 42, 128, 131, 8, 218, 129, 136, 53, 128, 131, 9, 218, 129, 137, 64, 79, 11, 207, 7, 95, 48, 48, 48, 48, 103, 105, 68, 76, 13, 207, 7, 95, 48, 48, 48, 48, 103, 104, 81, 106, 11, 207, 10, 102, 114, 97, 99, 45, 115, 116, 97, 114, 116, 85, 106, 12, 207, 8, 102, 114, 97, 99, 45, 101, 110, 100, 93, 106, 13, 207, 7, 110, 117, 109, 45, 115, 116, 114, 97, 106, 14, 218, 128, 179, 109, 128, 131, 11, 218, 131, 242, 118, 128, 131, 12, 218, 128, 179, 122, 128, 131, 13, 218, 128, 179, 27, 3, 1, 0, 42, 4, 0, 0, 63, 6, 0, 0, 35, 7, 1, 6, 27, 6, 7, 0, 30, 7, 6, 0, 49, 1, 0, 0, 53, 8, 0, 0, 38, 9, 8, 45, 27, 5, 9, 0, 28, 2, 0, 0, 27, 5, 6, 0, 30, 5, 3, 0, 5, 3, 1, 1, 41, 4, 0, 0, 27, 5, 3, 0, 5, 7, 5, 1, 63, 8, 0, 0, 35, 9, 7, 8, 27, 7, 9, 0, 30, 9, 15, 0, 49, 5, 0, 0, 53, 10, 0, 0, 38, 11, 10, 48, 27, 10, 11, 0, 30, 11, 7, 0, 5, 12, 5, 1, 49, 12, 0, 0, 53, 13, 0, 0, 38, 12, 13, 120, 27, 8, 12, 0, 28, 2, 0, 0, 27, 8, 10, 0, 27, 6, 8, 0, 28, 2, 0, 0, 27, 6, 7, 0, 27, 7, 6, 0, 30, 7, 4, 0, 5, 8, 5, 2, 27, 6, 8, 0, 28, 2, 0, 0, 27, 6, 5, 0, 27, 8, 6, 0, 30, 7, 6, 0, 51, 0, 8, 8, 44, 10, 0, 0, 53, 9, 10, 0, 27, 6, 9, 0, 28, 5, 0, 0, 51, 0, 8, 8, 44, 10, 1, 0, 53, 9, 10, 0, 27, 6, 9, 0, 27, 9, 6, 0, 37, 6, 9, 8, 30, 6, 6, 0, 44, 10, 2, 0, 50, 10, 5, 0, 44, 11, 3, 0, 53, 10, 11, 0, 1, 10, 0, 0, 49, 7, 0, 0, 44, 11, 4, 0, 53, 10, 11, 0, 27, 11, 10, 0, 30, 10, 13, 0, 63, 13, 0, 0, 35, 14, 9, 13, 27, 13, 14, 0, 30, 14, 6, 0, 49, 9, 0, 0, 53, 15, 0, 0, 38, 16, 15, 46, 27, 12, 16, 0, 28, 2, 0, 0, 27, 12, 13, 0, 27, 6, 12, 0, 28, 2, 0, 0, 27, 6, 11, 0, 30, 6, 27, 0, 5, 10, 9, 1, 27, 11, 10, 0, 51, 0, 11, 11, 44, 12, 5, 0, 53, 10, 12, 0, 27, 12, 10, 0, 37, 10, 12, 11, 30, 10, 3, 0, 44, 13, 6, 0, 1, 13, 0, 0, 51, 0, 8, 12, 44, 13, 7, 0, 53, 10, 13, 0, 27, 13, 10, 0, 49, 13, 0, 0, 44, 14, 8, 0, 53, 10, 14, 0, 27, 14, 10, 0, 30, 4, 4, 0, 9, 15, 14, 255, 27, 10, 15, 0, 28, 2, 0, 0, 27, 10, 14, 0, 50, 10, 12, 0, 69, 10, 0, 0, 3, 10, 0, 0, 51, 0, 8, 9, 44, 11, 7, 0, 53, 10, 11, 0, 27, 11, 10, 0, 30, 7, 7, 0, 44, 12, 9, 0, 50, 12, 11, 0, 44, 13, 10, 0, 53, 12, 13, 0, 27, 10, 12, 0, 28, 2, 0, 0, 27, 10, 11, 0, 27, 12, 10, 0, 49, 12, 0, 0, 44, 13, 8, 0, 53, 10, 13, 0, 27, 13, 10, 0, 30, 4, 4, 0, 9, 14, 13, 255, 27, 10, 14, 0, 28, 2, 0, 0, 27, 10, 13, 0, 50, 10, 9, 0, 69, 10, 0, 0, 3, 10, 0, 0, 128, 161, 3, 1, 3, 3, 19, 0, 12, 0, 7, 0, 7, 0, 34, 0, 34, 0, 31, 0, 7, 0, 7, 0, 7, 0, 3, 1, 20, 0, 31, 2, 3, 1, 22, 0, 32, 0, 19, 0, 14, 0, 14, 1, 22, 0, 22, 0, 19, 191, 255, 14, 0, 14, 1, 40, 0, 37, 0, 37, 0, 34, 191, 255, 14, 0, 14, 0, 14, 0, 14, 0, 14, 0, 14, 191, 255, 3, 3, 15, 0, 24, 0, 15, 0, 15, 0, 15, 191, 253, 3, 4, 13, 1, 15, 0, 15, 0, 15, 191, 255, 13, 0, 13, 2, 15, 0, 15, 0, 15, 191, 254, 13, 191, 252, 3, 7, 9, 0, 5, 0, 30, 0, 30, 0, 30, 0, 30, 0, 23, 3, 14, 0, 14, 0, 14, 0, 9, 0, 9, 1, 21, 0, 14, 191, 255, 9, 0, 9, 2, 17, 0, 17, 0, 14, 191, 254, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 5, 3, 24, 0, 7, 1, 22, 0, 22, 0, 22, 191, 255, 7, 2, 13, 0, 9, 0, 37, 0, 37, 1, 23, 0, 23, 0, 23, 0, 9, 1, 19, 0, 19, 0, 19, 191, 255, 9, 2, 12, 0, 20, 0, 12, 0, 12, 0, 12, 0, 11, 0, 11, 0, 11, 3, 21, 0, 21, 0, 21, 0, 7, 1, 17, 1, 19, 0, 19, 0, 19, 0, 19, 191, 255, 17, 0, 17, 0, 17, 191, 255, 7, 4, 17, 0, 17, 0, 17, 191, 252, 7, 5, 10, 0, 18, 0, 10, 0, 10, 0, 10, 0, 9, 0, 9, 0, 9, 215, 0, 205, 0, 220, 0, 0, 11, 2, 2, 2, 10, 50, 0, 5, 206, 11, 114, 101, 97, 100, 45, 115, 121, 109, 98, 111, 108, 218, 131, 42, 218, 131, 96, 218, 130, 242, 206, 26, 85, 110, 114, 101, 99, 111, 103, 110, 105, 122, 101, 100, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 32, 97, 116, 32, 206, 2, 58, 32, 218, 54, 218, 129, 189, 206, 3, 110, 105, 108, 206, 4, 116, 114, 117, 101, 206, 5, 102, 97, 108, 115, 101, 218, 131, 79, 0, 50, 0, 218, 131, 54, 0, 50, 1, 218, 131, 55, 0, 50, 2, 207, 11, 114, 101, 97, 100, 45, 115, 121, 109, 98, 111, 108, 3, 50, 4, 218, 129, 137, 22, 50, 6, 218, 131, 82, 51, 0, 1, 1, 44, 4, 0, 0, 53, 3, 4, 0, 27, 4, 3, 0, 37, 3, 4, 1, 30, 3, 14, 0, 49, 1, 0, 0, 53, 5, 0, 0, 49, 5, 0, 0, 44, 7, 1, 0, 53, 6, 7, 0, 44, 5, 2, 0, 44, 7, 3, 0, 51, 5, 1, 7, 49, 6, 0, 0, 44, 7, 4, 0, 53, 5, 7, 0, 1, 5, 0, 0, 4, 0, 0, 0, 51, 0, 1, 4, 44, 6, 5, 0, 53, 5, 6, 0, 27, 6, 5, 0, 44, 7, 6, 0, 37, 5, 6, 7, 30, 5, 5, 0, 40, 7, 0, 0, 50, 7, 4, 0, 69, 7, 0, 0, 3, 7, 0, 0, 44, 8, 7, 0, 37, 7, 6, 8, 30, 7, 5, 0, 41, 8, 0, 0, 50, 8, 4, 0, 69, 8, 0, 0, 3, 8, 0, 0, 44, 9, 8, 0, 37, 8, 6, 9, 30, 8, 5, 0, 42, 9, 0, 0, 50, 9, 4, 0, 69, 9, 0, 0, 3, 9, 0, 0, 49, 6, 0, 0, 44, 10, 9, 0, 53, 9, 10, 0, 50, 9, 4, 0, 69, 9, 0, 0, 3, 9, 0, 0, 87, 13, 0, 13, 0, 13, 0, 3, 1, 9, 0, 5, 1, 79, 0, 79, 0, 60, 0, 60, 0, 60, 0, 14, 0, 14, 0, 14, 0, 14, 0, 14, 0, 14, 0, 7, 0, 7, 1, 18, 0, 18, 0, 18, 0, 7, 1, 13, 0, 13, 0, 9, 0, 28, 0, 28, 0, 28, 0, 28, 1, 15, 0, 15, 0, 11, 0, 31, 0, 31, 0, 31, 0, 31, 1, 17, 0, 17, 0, 13, 0, 34, 0, 34, 0, 34, 0, 34, 1, 16, 0, 16, 0, 16, 0, 15, 0, 15, 0, 15, 0, 128, 190, 0, 218, 131, 54, 0, 128, 190, 1, 218, 131, 55, 3, 128, 190, 3, 218, 131, 55, 13, 128, 190, 5, 218, 130, 153, 19, 24, 7, 207, 8, 108, 105, 110, 101, 45, 101, 110, 100, 81, 90, 16, 207, 7, 95, 48, 48, 48, 48, 103, 108, 128, 133, 128, 183, 19, 207, 7, 95, 48, 48, 48, 48, 103, 110, 128, 138, 128, 157, 22, 207, 7, 95, 48, 48, 48, 48, 103, 112, 128, 143, 128, 154, 24, 207, 7, 95, 48, 48, 48, 48, 103, 111, 128, 157, 128, 182, 21, 207, 7, 95, 48, 48, 48, 48, 103, 109, 128, 162, 128, 181, 24, 207, 7, 95, 48, 48, 48, 48, 103, 114, 128, 167, 128, 178, 26, 207, 7, 95, 48, 48, 48, 48, 103, 113, 50, 0, 1, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 63, 2, 0, 0, 71, 4, 3, 2, 30, 4, 5, 0, 40, 2, 0, 0, 50, 2, 3, 0, 69, 2, 0, 0, 3, 2, 0, 0, 49, 3, 0, 0, 53, 2, 0, 0, 27, 5, 2, 0, 38, 2, 5, 59, 30, 2, 9, 0, 50, 0, 3, 0, 44, 7, 1, 0, 53, 6, 7, 0, 27, 7, 6, 0, 50, 0, 7, 0, 44, 6, 2, 0, 61, 6, 6, 0, 54, 6, 0, 0, 38, 6, 5, 35, 30, 6, 4, 0, 50, 0, 3, 0, 44, 7, 3, 0, 54, 7, 0, 0, 38, 7, 5, 34, 30, 7, 4, 0, 50, 0, 3, 0, 44, 8, 4, 0, 54, 8, 0, 0, 38, 8, 5, 40, 30, 8, 4, 0, 50, 0, 3, 0, 44, 9, 5, 0, 54, 9, 0, 0, 38, 9, 5, 91, 30, 9, 4, 0, 50, 0, 3, 0, 44, 10, 6, 0, 54, 10, 0, 0, 38, 10, 5, 123, 30, 10, 4, 0, 50, 0, 3, 0, 44, 11, 7, 0, 54, 11, 0, 0, 38, 11, 5, 58, 30, 11, 4, 0, 50, 0, 3, 0, 44, 12, 8, 0, 54, 12, 0, 0, 38, 12, 5, 39, 30, 12, 10, 0, 5, 13, 3, 1, 44, 14, 9, 0, 49, 14, 0, 0, 44, 15, 10, 0, 53, 14, 15, 0, 51, 0, 3, 13, 49, 14, 0, 0, 44, 15, 11, 0, 54, 15, 0, 0, 38, 13, 5, 96, 30, 13, 10, 0, 5, 14, 3, 1, 44, 15, 12, 0, 49, 15, 0, 0, 44, 16, 10, 0, 53, 15, 16, 0, 51, 0, 3, 14, 49, 15, 0, 0, 44, 16, 11, 0, 54, 16, 0, 0, 38, 14, 5, 126, 30, 14, 32, 0, 5, 16, 3, 1, 63, 17, 0, 0, 35, 18, 16, 17, 27, 16, 18, 0, 30, 18, 7, 0, 5, 17, 3, 1, 49, 17, 0, 0, 53, 19, 0, 0, 38, 17, 19, 64, 27, 15, 17, 0, 28, 2, 0, 0, 27, 15, 16, 0, 30, 15, 10, 0, 5, 16, 3, 2, 44, 17, 13, 0, 49, 17, 0, 0, 44, 18, 10, 0, 53, 17, 18, 0, 51, 0, 3, 16, 49, 17, 0, 0, 44, 18, 11, 0, 54, 18, 0, 0, 5, 16, 3, 1, 44, 17, 14, 0, 49, 17, 0, 0, 44, 18, 10, 0, 53, 17, 18, 0, 51, 0, 3, 16, 49, 17, 0, 0, 44, 18, 11, 0, 54, 18, 0, 0, 38, 15, 5, 64, 30, 15, 10, 0, 5, 16, 3, 1, 44, 17, 15, 0, 49, 17, 0, 0, 44, 18, 10, 0, 53, 17, 18, 0, 51, 0, 3, 16, 49, 17, 0, 0, 44, 18, 11, 0, 54, 18, 0, 0, 38, 16, 5, 94, 30, 16, 4, 0, 50, 0, 3, 0, 44, 17, 16, 0, 54, 17, 0, 0, 38, 17, 5, 92, 30, 17, 4, 0, 50, 0, 3, 0, 44, 18, 17, 0, 54, 18, 0, 0, 49, 5, 0, 0, 44, 19, 18, 0, 53, 18, 19, 0, 27, 19, 18, 0, 30, 19, 3, 0, 27, 18, 19, 0, 28, 47, 0, 0, 38, 21, 5, 45, 27, 22, 21, 0, 30, 21, 17, 0, 5, 24, 3, 1, 63, 25, 0, 0, 35, 26, 24, 25, 27, 24, 26, 0, 30, 26, 9, 0, 5, 25, 3, 1, 49, 25, 0, 0, 53, 27, 0, 0, 49, 27, 0, 0, 44, 28, 18, 0, 53, 25, 28, 0, 27, 23, 25, 0, 28, 2, 0, 0, 27, 23, 24, 0, 27, 20, 23, 0, 28, 2, 0, 0, 27, 20, 22, 0, 27, 21, 20, 0, 30, 21, 3, 0, 27, 20, 21, 0, 28, 22, 0, 0, 38, 23, 5, 43, 27, 24, 23, 0, 30, 23, 17, 0, 5, 26, 3, 1, 63, 27, 0, 0, 35, 28, 26, 27, 27, 26, 28, 0, 30, 28, 9, 0, 5, 27, 3, 1, 49, 27, 0, 0, 53, 29, 0, 0, 49, 29, 0, 0, 44, 30, 18, 0, 53, 27, 30, 0, 27, 25, 27, 0, 28, 2, 0, 0, 27, 25, 26, 0, 27, 22, 25, 0, 28, 2, 0, 0, 27, 22, 24, 0, 27, 20, 22, 0, 27, 18, 20, 0, 30, 18, 4, 0, 50, 0, 3, 0, 44, 19, 19, 0, 54, 19, 0, 0, 50, 0, 3, 0, 44, 19, 20, 0, 54, 19, 0, 0, 129, 50, 13, 0, 13, 0, 13, 0, 3, 1, 17, 0, 9, 0, 5, 1, 7, 0, 7, 0, 7, 0, 7, 1, 15, 0, 15, 0, 7, 3, 11, 191, 254, 9, 3, 26, 0, 26, 0, 26, 0, 11, 1, 13, 0, 13, 0, 13, 0, 13, 3, 11, 191, 249, 9, 8, 11, 0, 11, 0, 11, 3, 11, 191, 245, 9, 12, 11, 0, 11, 0, 11, 3, 11, 191, 241, 9, 16, 11, 0, 11, 0, 11, 3, 11, 191, 237, 9, 20, 11, 0, 11, 0, 11, 3, 11, 191, 233, 9, 24, 11, 0, 11, 0, 11, 3, 11, 191, 229, 9, 28, 11, 0, 11, 0, 11, 3, 11, 191, 225, 9, 32, 29, 0, 39, 0, 39, 0, 39, 0, 39, 0, 11, 0, 11, 0, 11, 0, 11, 3, 11, 191, 221, 9, 36, 29, 0, 39, 0, 39, 0, 39, 0, 39, 0, 11, 0, 11, 0, 11, 0, 11, 3, 11, 191, 217, 9, 40, 23, 0, 33, 0, 20, 0, 15, 0, 15, 0, 51, 0, 48, 0, 48, 0, 45, 0, 15, 0, 15, 0, 15, 0, 11, 1, 31, 0, 41, 0, 41, 0, 41, 0, 41, 0, 13, 0, 13, 0, 13, 0, 13, 1, 31, 0, 41, 0, 41, 0, 41, 0, 41, 0, 13, 0, 13, 0, 13, 0, 13, 3, 11, 191, 211, 9, 46, 29, 0, 39, 0, 39, 0, 39, 0, 39, 0, 11, 0, 11, 0, 11, 0, 11, 3, 11, 191, 207, 9, 50, 11, 0, 11, 0, 11, 3, 11, 191, 203, 9, 54, 11, 0, 11, 0, 11, 3, 19, 0, 19, 0, 19, 0, 15, 0, 15, 0, 15, 0, 15, 1, 24, 0, 19, 0, 19, 0, 36, 0, 46, 0, 33, 0, 19, 0, 19, 0, 69, 0, 66, 0, 66, 0, 58, 0, 58, 0, 58, 0, 19, 0, 19, 0, 19, 0, 19, 0, 19, 0, 19, 191, 255, 15, 0, 15, 0, 15, 0, 15, 2, 24, 0, 19, 0, 19, 0, 36, 0, 46, 0, 33, 0, 19, 0, 19, 0, 69, 0, 66, 0, 66, 0, 58, 0, 58, 0, 58, 0, 19, 0, 19, 0, 19, 0, 19, 0, 19, 0, 19, 191, 254, 15, 0, 15, 0, 11, 3, 13, 0, 13, 0, 13, 1, 13, 0, 13, 0, 13, 0, 9, 0, 218, 131, 54, 0, 9, 1, 207, 12, 112, 97, 114, 115, 101, 45, 115, 116, 114, 105, 110, 103, 6, 9, 4, 218, 131, 72, 8, 9, 5, 218, 129, 37, 43, 2, 0, 0, 50, 0, 2, 0, 44, 3, 0, 0, 61, 3, 3, 0, 53, 2, 3, 0, 61, 3, 2, 0, 27, 4, 3, 0, 61, 3, 2, 1, 3, 4, 0, 0, 129, 120, 18, 0, 18, 0, 18, 0, 18, 0, 18, 0, 3, 0, 3, 0, 3, 0, 3, 209, 1, 215, 0, 205, 2, 246, 0, 0, 16, 3, 3, 3, 17, 81, 0, 1, 3, 206, 24, 115, 114, 99, 47, 106, 111, 108, 116, 47, 101, 118, 97, 108, 117, 97, 116, 111, 114, 46, 106, 97, 110, 101, 116, 218, 52, 218, 91, 218, 53, 218, 130, 173, 216, 6, 98, 121, 116, 101, 115, 63, 216, 7, 98, 117, 102, 102, 101, 114, 63, 218, 74, 218, 128, 205, 218, 76, 218, 88, 218, 6, 218, 130, 17, 215, 0, 205, 0, 220, 0, 0, 19, 3, 3, 3, 18, 128, 138, 0, 20, 206, 11, 114, 101, 115, 111, 108, 118, 101, 45, 115, 121, 109, 218, 132, 6, 218, 21, 218, 30, 218, 52, 218, 102, 218, 131, 11, 215, 0, 205, 0, 220, 0, 0, 8, 2, 2, 2, 3, 18, 0, 7, 206, 11, 99, 116, 120, 45, 102, 105, 110, 100, 45, 110, 115, 218, 131, 13, 218, 8, 218, 14, 215, 0, 205, 0, 220, 0, 0, 8, 1, 1, 1, 7, 15, 0, 2, 206, 7, 109, 97, 107, 101, 45, 110, 115, 218, 131, 13, 218, 6, 218, 18, 218, 21, 218, 19, 218, 22, 218, 16, 218, 129, 168, 0, 15, 0, 218, 131, 82, 0, 15, 1, 207, 7, 109, 97, 107, 101, 45, 110, 115, 68, 2, 0, 0, 68, 3, 0, 0, 68, 4, 0, 0, 44, 5, 0, 0, 44, 6, 1, 0, 44, 7, 2, 0, 51, 5, 6, 7, 44, 5, 3, 0, 51, 0, 5, 2, 44, 5, 4, 0, 44, 6, 5, 0, 51, 5, 3, 6, 49, 4, 0, 0, 44, 5, 6, 0, 54, 5, 0, 0, 128, 144, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 18, 0, 218, 131, 14, 0, 18, 1, 207, 6, 110, 115, 45, 115, 121, 109, 0, 18, 2, 207, 11, 99, 116, 120, 45, 102, 105, 110, 100, 45, 110, 115, 3, 18, 4, 207, 3, 101, 110, 118, 7, 18, 5, 207, 10, 110, 97, 109, 101, 115, 112, 97, 99, 101, 115, 9, 18, 6, 207, 7, 95, 48, 48, 48, 48, 102, 118, 15, 18, 7, 207, 2, 110, 115, 44, 3, 0, 0, 49, 3, 0, 0, 53, 3, 0, 0, 27, 4, 3, 0, 44, 3, 1, 0, 49, 3, 0, 0, 53, 3, 4, 0, 27, 5, 3, 0, 59, 3, 5, 1, 27, 6, 3, 0, 30, 6, 2, 0, 3, 6, 0, 0, 49, 1, 0, 0, 44, 7, 2, 0, 53, 3, 7, 0, 27, 7, 3, 0, 60, 5, 1, 7, 3, 7, 0, 0, 128, 227, 13, 0, 13, 0, 13, 0, 3, 1, 20, 0, 20, 0, 20, 191, 255, 3, 2, 9, 0, 5, 0, 5, 0, 5, 1, 18, 0, 18, 0, 18, 0, 9, 1, 11, 191, 255, 9, 215, 0, 205, 0, 220, 0, 0, 5, 2, 2, 2, 1, 5, 0, 3, 206, 16, 110, 115, 45, 105, 109, 112, 111, 114, 116, 45, 108, 111, 111, 107, 117, 112, 218, 131, 13, 218, 22, 0, 5, 0, 218, 132, 21, 0, 5, 1, 207, 10, 99, 108, 97, 115, 115, 45, 110, 97, 109, 101, 0, 5, 2, 207, 16, 110, 115, 45, 105, 109, 112, 111, 114, 116, 45, 108, 111, 111, 107, 117, 112, 44, 3, 0, 0, 49, 3, 0, 0, 53, 3, 0, 0, 59, 4, 3, 1, 3, 4, 0, 0, 128, 213, 8, 0, 8, 0, 8, 0, 3, 0, 3, 215, 0, 205, 0, 220, 0, 0, 5, 2, 2, 2, 1, 5, 0, 3, 206, 7, 110, 115, 45, 102, 105, 110, 100, 218, 131, 13, 218, 19, 0, 5, 0, 218, 132, 21, 0, 5, 1, 218, 131, 85, 0, 5, 2, 207, 7, 110, 115, 45, 102, 105, 110, 100, 44, 3, 0, 0, 49, 3, 0, 0, 53, 3, 0, 0, 59, 4, 3, 1, 3, 4, 0, 0, 128, 186, 8, 0, 8, 0, 8, 0, 3, 0, 3, 215, 0, 205, 0, 220, 0, 0, 11, 1, 1, 1, 6, 46, 0, 6, 206, 7, 118, 97, 114, 45, 103, 101, 116, 218, 131, 13, 209, 0, 218, 129, 31, 218, 52, 218, 102, 215, 0, 205, 0, 220, 0, 0, 7, 1, 1, 1, 3, 12, 0, 3, 206, 4, 118, 97, 114, 63, 218, 131, 13, 218, 89, 218, 6, 218, 33, 0, 12, 0, 218, 62, 0, 12, 1, 207, 4, 118, 97, 114, 63, 3, 12, 3, 207, 7, 95, 48, 48, 48, 48, 102, 115, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 27, 3, 2, 0, 30, 2, 7, 0, 44, 4, 1, 0, 49, 4, 0, 0, 53, 4, 0, 0, 44, 6, 2, 0, 37, 5, 6, 4, 3, 5, 0, 0, 3, 3, 0, 0, 60, 8, 0, 8, 0, 8, 0, 3, 0, 3, 0, 32, 0, 32, 0, 32, 0, 19, 0, 19, 0, 19, 0, 3, 218, 36, 0, 46, 0, 218, 97, 0, 46, 1, 207, 7, 118, 97, 114, 45, 103, 101, 116, 1, 46, 2, 218, 59, 7, 46, 3, 218, 121, 13, 34, 7, 207, 5, 102, 114, 97, 109, 101, 15, 34, 8, 218, 128, 179, 46, 1, 0, 0, 40, 2, 0, 0, 44, 4, 0, 0, 63, 3, 4, 0, 49, 3, 0, 0, 44, 5, 1, 0, 53, 4, 5, 0, 27, 3, 4, 0, 43, 6, 0, 0, 71, 5, 3, 6, 30, 5, 25, 0, 44, 7, 0, 0, 58, 6, 7, 3, 27, 7, 6, 0, 59, 6, 7, 0, 27, 8, 6, 0, 49, 8, 0, 0, 44, 9, 2, 0, 53, 6, 9, 0, 49, 6, 0, 0, 44, 10, 3, 0, 53, 9, 10, 0, 30, 9, 11, 0, 49, 8, 0, 0, 44, 10, 4, 0, 53, 6, 10, 0, 30, 6, 4, 0, 49, 8, 0, 0, 53, 2, 1, 0, 28, 2, 0, 0, 27, 2, 8, 0, 43, 3, 255, 255, 28, 2, 0, 0, 7, 3, 3, 1, 28, 230, 255, 255, 49, 2, 0, 0, 44, 6, 2, 0, 53, 5, 6, 0, 49, 5, 0, 0, 44, 7, 3, 0, 53, 6, 7, 0, 30, 6, 2, 0, 3, 2, 0, 0, 44, 5, 5, 0, 49, 5, 0, 0, 54, 0, 0, 0, 87, 1, 5, 3, 1, 15, 0, 15, 0, 10, 0, 10, 0, 10, 0, 3, 1, 10, 0, 10, 0, 3, 1, 17, 0, 17, 0, 5, 1, 15, 191, 255, 5, 2, 16, 0, 16, 0, 16, 0, 11, 0, 11, 0, 11, 0, 7, 2, 27, 0, 27, 0, 27, 0, 23, 0, 38, 0, 38, 0, 23, 0, 23, 1, 11, 191, 253, 7, 4, 9, 191, 249, 3, 8, 12, 0, 12, 0, 12, 0, 7, 0, 7, 0, 7, 0, 3, 0, 3, 0, 34, 0, 34, 0, 34, 206, 26, 85, 110, 97, 98, 108, 101, 32, 116, 111, 32, 114, 101, 115, 111, 108, 118, 101, 32, 115, 121, 109, 98, 111, 108, 58, 32, 218, 129, 49, 218, 54, 218, 25, 216, 13, 102, 105, 98, 101, 114, 47, 99, 117, 114, 114, 101, 110, 116, 216, 12, 102, 105, 98, 101, 114, 47, 103, 101, 116, 101, 110, 118, 216, 6, 115, 121, 109, 98, 111, 108, 218, 89, 218, 40, 0, 128, 138, 0, 218, 131, 14, 0, 128, 138, 1, 207, 8, 98, 105, 110, 100, 105, 110, 103, 115, 0, 128, 138, 2, 207, 5, 115, 121, 109, 45, 115, 0, 128, 138, 3, 207, 11, 114, 101, 115, 111, 108, 118, 101, 45, 115, 121, 109, 3, 128, 138, 5, 218, 131, 82, 7, 128, 138, 6, 218, 132, 21, 21, 67, 4, 207, 10, 99, 117, 114, 114, 101, 110, 116, 45, 110, 115, 25, 67, 9, 207, 10, 97, 108, 105, 97, 115, 101, 100, 45, 110, 115, 30, 47, 10, 207, 9, 116, 97, 114, 103, 101, 116, 45, 110, 115, 34, 47, 11, 218, 97, 50, 67, 10, 218, 132, 47, 54, 67, 11, 218, 97, 68, 128, 138, 8, 207, 5, 108, 111, 99, 97, 108, 80, 128, 138, 10, 218, 132, 45, 84, 128, 138, 11, 218, 132, 21, 88, 128, 138, 12, 218, 97, 97, 128, 138, 13, 207, 7, 99, 111, 114, 101, 45, 110, 115, 101, 128, 138, 14, 207, 6, 99, 111, 114, 101, 45, 118, 111, 128, 138, 4, 207, 8, 114, 111, 111, 116, 45, 101, 110, 118, 116, 128, 138, 15, 207, 5, 101, 110, 116, 114, 121, 44, 4, 0, 0, 49, 4, 0, 0, 53, 4, 2, 0, 27, 5, 4, 0, 44, 4, 1, 0, 49, 4, 0, 0, 53, 4, 2, 0, 27, 6, 4, 0, 49, 6, 0, 0, 44, 7, 2, 0, 53, 4, 7, 0, 49, 4, 0, 0, 44, 8, 3, 0, 53, 7, 8, 0, 30, 7, 53, 0, 49, 0, 0, 0, 44, 8, 4, 0, 53, 4, 8, 0, 50, 0, 4, 0, 44, 9, 5, 0, 53, 8, 9, 0, 27, 4, 8, 0, 50, 4, 6, 0, 44, 9, 6, 0, 53, 8, 9, 0, 27, 9, 8, 0, 30, 9, 21, 0, 50, 0, 9, 0, 44, 10, 5, 0, 53, 8, 10, 0, 27, 10, 8, 0, 50, 10, 5, 0, 44, 11, 7, 0, 53, 8, 11, 0, 27, 11, 8, 0, 30, 11, 4, 0, 49, 11, 0, 0, 44, 8, 8, 0, 54, 8, 0, 0, 44, 8, 9, 0, 44, 12, 10, 0, 51, 8, 6, 12, 49, 5, 0, 0, 44, 12, 11, 0, 53, 8, 12, 0, 1, 8, 0, 0, 4, 0, 0, 0, 50, 0, 6, 0, 44, 10, 5, 0, 53, 8, 10, 0, 27, 10, 8, 0, 50, 10, 5, 0, 44, 11, 7, 0, 53, 8, 11, 0, 27, 11, 8, 0, 30, 11, 4, 0, 49, 11, 0, 0, 44, 8, 8, 0, 54, 8, 0, 0, 44, 8, 9, 0, 44, 12, 10, 0, 51, 8, 6, 12, 49, 5, 0, 0, 44, 12, 11, 0, 53, 8, 12, 0, 1, 8, 0, 0, 4, 0, 0, 0, 59, 4, 1, 5, 27, 8, 4, 0, 49, 8, 0, 0, 44, 9, 2, 0, 53, 4, 9, 0, 49, 4, 0, 0, 44, 10, 3, 0, 53, 9, 10, 0, 30, 9, 2, 0, 3, 8, 0, 0, 49, 0, 0, 0, 44, 10, 4, 0, 53, 4, 10, 0, 27, 10, 4, 0, 50, 0, 10, 0, 44, 11, 5, 0, 53, 4, 11, 0, 27, 11, 4, 0, 50, 11, 5, 0, 44, 12, 7, 0, 53, 4, 12, 0, 27, 12, 4, 0, 30, 12, 4, 0, 49, 12, 0, 0, 44, 4, 8, 0, 54, 4, 0, 0, 44, 4, 12, 0, 50, 0, 4, 0, 44, 13, 5, 0, 53, 4, 13, 0, 27, 13, 4, 0, 50, 13, 5, 0, 44, 14, 7, 0, 53, 4, 14, 0, 27, 14, 4, 0, 30, 14, 4, 0, 49, 14, 0, 0, 44, 4, 8, 0, 54, 4, 0, 0, 44, 15, 13, 0, 53, 4, 15, 0, 49, 4, 0, 0, 44, 16, 14, 0, 53, 15, 16, 0, 27, 4, 15, 0, 49, 5, 0, 0, 44, 16, 15, 0, 53, 15, 16, 0, 58, 16, 4, 15, 27, 15, 16, 0, 49, 15, 0, 0, 44, 17, 2, 0, 53, 16, 17, 0, 49, 16, 0, 0, 44, 18, 3, 0, 53, 17, 18, 0, 30, 17, 9, 0, 49, 15, 0, 0, 44, 18, 16, 0, 53, 16, 18, 0, 30, 16, 4, 0, 44, 18, 17, 0, 49, 18, 0, 0, 54, 15, 0, 0, 3, 15, 0, 0, 44, 16, 9, 0, 50, 16, 5, 0, 44, 18, 11, 0, 53, 16, 18, 0, 1, 16, 0, 0, 4, 0, 0, 0, 89, 14, 0, 14, 0, 14, 0, 3, 0, 31, 0, 31, 0, 31, 0, 3, 1, 14, 0, 14, 0, 14, 0, 9, 0, 9, 0, 9, 0, 5, 1, 41, 0, 41, 0, 41, 0, 24, 0, 24, 0, 24, 0, 7, 0, 74, 0, 74, 0, 74, 0, 7, 1, 9, 1, 27, 0, 27, 0, 27, 0, 11, 0, 58, 0, 58, 0, 58, 0, 11, 1, 13, 0, 19, 0, 19, 0, 19, 0, 38, 0, 38, 0, 38, 0, 38, 0, 38, 0, 38, 0, 31, 0, 31, 1, 27, 0, 27, 0, 27, 0, 11, 0, 50, 0, 50, 0, 50, 0, 11, 1, 13, 0, 19, 0, 19, 0, 19, 0, 38, 0, 38, 0, 38, 0, 38, 0, 38, 0, 38, 0, 31, 0, 31, 1, 19, 0, 7, 1, 18, 0, 18, 0, 18, 0, 13, 0, 13, 0, 13, 0, 9, 0, 9, 1, 28, 0, 28, 0, 28, 0, 11, 0, 52, 0, 52, 0, 52, 0, 11, 0, 83, 0, 83, 0, 83, 0, 11, 1, 13, 0, 19, 0, 19, 0, 19, 2, 29, 0, 29, 0, 29, 0, 29, 0, 15, 1, 28, 0, 28, 0, 28, 191, 255, 15, 2, 17, 1, 19, 0, 19, 0, 19, 2, 48, 0, 48, 0, 34, 0, 34, 0, 34, 0, 19, 1, 44, 0, 44, 0, 44, 0, 31, 191, 255, 19, 2, 30, 0, 30, 0, 30, 0, 25, 0, 25, 0, 25, 0, 21, 1, 27, 0, 27, 0, 27, 0, 23, 0, 42, 0, 42, 0, 42, 0, 23, 1, 30, 0, 30, 0, 30, 0, 30, 0, 23, 0, 23, 206, 24, 85, 110, 101, 120, 112, 101, 99, 116, 101, 100, 32, 116, 97, 103, 103, 101, 100, 32, 102, 111, 114, 109, 58, 32, 218, 54, 218, 90, 215, 0, 205, 2, 254, 0, 0, 36, 3, 3, 3, 44, 129, 200, 0, 6, 57, 206, 9, 101, 118, 97, 108, 45, 108, 105, 115, 116, 218, 132, 6, 216, 5, 102, 105, 114, 115, 116, 218, 21, 218, 131, 182, 218, 131, 188, 215, 0, 205, 0, 220, 0, 0, 23, 3, 3, 3, 23, 129, 58, 0, 35, 206, 13, 115, 121, 110, 116, 97, 120, 45, 113, 117, 111, 116, 101, 42, 218, 132, 6, 218, 90, 218, 132, 56, 218, 131, 190, 215, 0, 205, 0, 220, 0, 0, 9, 2, 2, 2, 4, 19, 0, 5, 206, 9, 115, 121, 109, 45, 110, 97, 109, 101, 63, 218, 132, 6, 218, 88, 218, 6, 218, 130, 17, 218, 21, 0, 19, 0, 218, 132, 43, 0, 19, 1, 207, 8, 110, 97, 109, 101, 45, 115, 116, 114, 0, 19, 2, 207, 9, 115, 121, 109, 45, 110, 97, 109, 101, 63, 3, 19, 4, 207, 7, 95, 48, 48, 48, 48, 103, 116, 10, 18, 5, 207, 7, 95, 48, 48, 48, 48, 103, 115, 49, 0, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 27, 4, 3, 0, 30, 3, 14, 0, 44, 5, 1, 0, 49, 5, 0, 0, 53, 5, 0, 0, 44, 7, 2, 0, 37, 6, 7, 5, 27, 5, 6, 0, 30, 6, 6, 0, 44, 7, 3, 0, 49, 7, 0, 0, 53, 7, 0, 0, 37, 8, 1, 7, 3, 8, 0, 0, 3, 5, 0, 0, 3, 4, 0, 0, 8, 8, 0, 8, 0, 8, 0, 3, 0, 3, 0, 35, 0, 35, 0, 35, 0, 24, 0, 24, 0, 3, 0, 3, 0, 67, 0, 67, 0, 67, 0, 55, 0, 55, 0, 3, 0, 3, 218, 132, 4, 218, 131, 189, 206, 51, 126, 64, 32, 117, 115, 101, 100, 32, 111, 117, 116, 115, 105, 100, 101, 32, 111, 102, 32, 97, 32, 108, 105, 115, 116, 32, 111, 114, 32, 118, 101, 99, 116, 111, 114, 32, 105, 110, 32, 115, 121, 110, 116, 97, 120, 45, 113, 117, 111, 116, 101, 218, 91, 218, 53, 218, 130, 173, 218, 52, 218, 88, 218, 6, 218, 130, 17, 218, 30, 218, 21, 215, 0, 205, 0, 220, 0, 0, 14, 1, 1, 1, 11, 53, 0, 12, 206, 15, 115, 112, 101, 99, 105, 97, 108, 45, 115, 121, 109, 98, 111, 108, 63, 218, 132, 6, 218, 131, 182, 218, 131, 188, 218, 131, 190, 218, 131, 189, 206, 2, 100, 111, 206, 2, 105, 102, 206, 3, 100, 101, 102, 218, 131, 76, 206, 4, 108, 101, 116, 42, 206, 5, 108, 111, 111, 112, 42, 206, 5, 114, 101, 99, 117, 114, 0, 53, 0, 218, 131, 82, 0, 53, 1, 207, 15, 115, 112, 101, 99, 105, 97, 108, 45, 115, 121, 109, 98, 111, 108, 63, 2, 53, 3, 207, 7, 95, 48, 48, 48, 48, 103, 68, 7, 53, 4, 207, 7, 95, 48, 48, 48, 48, 103, 67, 12, 53, 5, 207, 7, 95, 48, 48, 48, 48, 103, 66, 17, 53, 6, 207, 7, 95, 48, 48, 48, 48, 103, 65, 22, 53, 7, 207, 7, 95, 48, 48, 48, 48, 103, 122, 27, 53, 8, 207, 7, 95, 48, 48, 48, 48, 103, 121, 32, 53, 9, 207, 7, 95, 48, 48, 48, 48, 103, 120, 37, 53, 10, 207, 7, 95, 48, 48, 48, 48, 103, 119, 42, 53, 11, 207, 7, 95, 48, 48, 48, 48, 103, 118, 47, 53, 12, 207, 7, 95, 48, 48, 48, 48, 103, 117, 44, 3, 0, 0, 37, 2, 0, 3, 27, 3, 2, 0, 30, 3, 2, 0, 3, 3, 0, 0, 44, 4, 1, 0, 37, 2, 0, 4, 27, 4, 2, 0, 30, 4, 2, 0, 3, 4, 0, 0, 44, 5, 2, 0, 37, 2, 0, 5, 27, 5, 2, 0, 30, 5, 2, 0, 3, 5, 0, 0, 44, 6, 3, 0, 37, 2, 0, 6, 27, 6, 2, 0, 30, 6, 2, 0, 3, 6, 0, 0, 44, 7, 4, 0, 37, 2, 0, 7, 27, 7, 2, 0, 30, 7, 2, 0, 3, 7, 0, 0, 44, 8, 5, 0, 37, 2, 0, 8, 27, 8, 2, 0, 30, 8, 2, 0, 3, 8, 0, 0, 44, 9, 6, 0, 37, 2, 0, 9, 27, 9, 2, 0, 30, 9, 2, 0, 3, 9, 0, 0, 44, 10, 7, 0, 37, 2, 0, 10, 27, 10, 2, 0, 30, 10, 2, 0, 3, 10, 0, 0, 44, 11, 8, 0, 37, 2, 0, 11, 27, 11, 2, 0, 30, 11, 2, 0, 3, 11, 0, 0, 44, 12, 9, 0, 37, 2, 0, 12, 27, 12, 2, 0, 30, 12, 2, 0, 3, 12, 0, 0, 44, 13, 10, 0, 37, 2, 0, 13, 3, 2, 0, 0, 12, 7, 0, 7, 0, 3, 0, 3, 0, 3, 0, 24, 0, 24, 0, 3, 0, 3, 0, 3, 0, 48, 0, 48, 0, 3, 0, 3, 0, 3, 1, 7, 0, 7, 191, 255, 3, 0, 3, 0, 3, 1, 35, 0, 35, 191, 255, 3, 0, 3, 0, 3, 1, 49, 0, 49, 191, 255, 3, 0, 3, 0, 3, 2, 7, 0, 7, 191, 254, 3, 0, 3, 0, 3, 2, 22, 0, 22, 191, 254, 3, 0, 3, 0, 3, 2, 37, 0, 37, 191, 254, 3, 0, 3, 0, 3, 2, 53, 0, 53, 191, 254, 3, 0, 3, 0, 3, 3, 7, 0, 7, 0, 7, 218, 131, 11, 218, 74, 218, 55, 218, 127, 218, 128, 213, 218, 129, 168, 0, 129, 58, 0, 218, 131, 14, 0, 129, 58, 1, 218, 132, 42, 0, 129, 58, 2, 218, 131, 72, 0, 129, 58, 3, 207, 13, 115, 121, 110, 116, 97, 120, 45, 113, 117, 111, 116, 101, 42, 4, 23, 6, 207, 7, 95, 48, 48, 48, 48, 103, 70, 8, 20, 8, 207, 7, 95, 48, 48, 48, 48, 103, 69, 33, 52, 7, 207, 7, 95, 48, 48, 48, 48, 103, 72, 37, 49, 9, 207, 7, 95, 48, 48, 48, 48, 103, 71, 59, 97, 7, 207, 7, 95, 48, 48, 48, 48, 103, 77, 66, 96, 9, 207, 7, 95, 48, 48, 48, 48, 103, 76, 73, 95, 11, 207, 7, 95, 48, 48, 48, 48, 103, 75, 80, 94, 13, 207, 7, 95, 48, 48, 48, 48, 103, 74, 86, 93, 15, 207, 7, 95, 48, 48, 48, 48, 103, 73, 102, 112, 9, 207, 7, 95, 48, 48, 48, 48, 103, 78, 128, 148, 128, 207, 10, 218, 59, 128, 149, 128, 207, 9, 218, 121, 128, 154, 128, 202, 13, 207, 4, 105, 116, 101, 109, 128, 158, 128, 177, 15, 207, 7, 95, 48, 48, 48, 48, 103, 80, 128, 162, 128, 174, 17, 207, 7, 95, 48, 48, 48, 48, 103, 79, 128, 184, 128, 196, 14, 207, 7, 95, 48, 48, 48, 48, 103, 82, 128, 187, 128, 196, 16, 207, 7, 95, 48, 48, 48, 48, 103, 81, 128, 190, 128, 196, 17, 218, 97, 128, 212, 129, 13, 11, 218, 59, 128, 213, 129, 13, 10, 218, 121, 128, 218, 129, 10, 14, 218, 132, 96, 128, 222, 128, 241, 16, 207, 7, 95, 48, 48, 48, 48, 103, 84, 128, 226, 128, 238, 18, 207, 7, 95, 48, 48, 48, 48, 103, 83, 128, 248, 129, 4, 15, 207, 7, 95, 48, 48, 48, 48, 103, 86, 128, 251, 129, 4, 17, 207, 7, 95, 48, 48, 48, 48, 103, 85, 128, 254, 129, 4, 18, 218, 97, 129, 16, 129, 23, 12, 207, 7, 95, 48, 48, 48, 48, 103, 87, 129, 30, 129, 57, 13, 218, 128, 215, 129, 34, 129, 54, 14, 207, 7, 95, 48, 48, 48, 48, 103, 89, 129, 37, 129, 54, 15, 207, 7, 95, 48, 48, 48, 48, 103, 88, 129, 40, 129, 54, 16, 218, 93, 46, 3, 0, 0, 49, 2, 0, 0, 44, 6, 0, 0, 53, 5, 6, 0, 27, 6, 5, 0, 30, 5, 17, 0, 63, 8, 2, 0, 34, 9, 8, 0, 27, 8, 9, 0, 30, 9, 10, 0, 49, 2, 0, 0, 44, 11, 1, 0, 53, 10, 11, 0, 44, 11, 2, 0, 50, 10, 11, 0, 44, 12, 3, 0, 53, 11, 12, 0, 27, 7, 11, 0, 28, 2, 0, 0, 27, 7, 8, 0, 27, 4, 7, 0, 28, 2, 0, 0, 27, 4, 6, 0, 30, 4, 7, 0, 43, 6, 1, 0, 58, 5, 2, 6, 51, 0, 1, 5, 44, 6, 4, 0, 61, 6, 6, 0, 54, 6, 0, 0, 49, 2, 0, 0, 44, 7, 0, 0, 53, 6, 7, 0, 27, 7, 6, 0, 30, 6, 17, 0, 63, 9, 2, 0, 34, 10, 9, 0, 27, 9, 10, 0, 30, 10, 10, 0, 49, 2, 0, 0, 44, 12, 1, 0, 53, 11, 12, 0, 44, 12, 5, 0, 50, 11, 12, 0, 44, 13, 3, 0, 53, 12, 13, 0, 27, 8, 12, 0, 28, 2, 0, 0, 27, 8, 9, 0, 27, 5, 8, 0, 28, 2, 0, 0, 27, 5, 7, 0, 30, 5, 4, 0, 44, 6, 6, 0, 1, 6, 0, 0, 4, 0, 0, 0, 49, 2, 0, 0, 44, 7, 7, 0, 53, 6, 7, 0, 27, 7, 6, 0, 30, 7, 3, 0, 27, 6, 7, 0, 28, 35, 0, 0, 49, 2, 0, 0, 44, 9, 8, 0, 53, 8, 9, 0, 27, 9, 8, 0, 30, 9, 3, 0, 27, 8, 9, 0, 28, 27, 0, 0, 49, 2, 0, 0, 44, 11, 9, 0, 53, 10, 11, 0, 27, 11, 10, 0, 30, 11, 3, 0, 27, 10, 11, 0, 28, 19, 0, 0, 49, 2, 0, 0, 44, 13, 10, 0, 53, 12, 13, 0, 27, 13, 12, 0, 30, 13, 3, 0, 27, 12, 13, 0, 28, 11, 0, 0, 41, 15, 0, 0, 37, 14, 15, 2, 27, 15, 14, 0, 30, 15, 3, 0, 27, 14, 15, 0, 28, 4, 0, 0, 42, 17, 0, 0, 37, 16, 17, 2, 27, 14, 16, 0, 27, 12, 14, 0, 27, 10, 12, 0, 27, 8, 10, 0, 27, 6, 8, 0, 30, 6, 2, 0, 3, 2, 0, 0, 49, 2, 0, 0, 44, 9, 11, 0, 53, 8, 9, 0, 27, 9, 8, 0, 30, 8, 8, 0, 44, 10, 12, 0, 49, 10, 0, 0, 53, 10, 2, 0, 44, 12, 13, 0, 37, 11, 12, 10, 27, 7, 11, 0, 28, 2, 0, 0, 27, 7, 9, 0, 30, 7, 31, 0, 44, 8, 14, 0, 49, 8, 0, 0, 53, 8, 2, 0, 49, 8, 0, 0, 44, 10, 10, 0, 53, 9, 10, 0, 30, 9, 23, 0, 44, 8, 15, 0, 49, 8, 0, 0, 53, 8, 2, 0, 49, 8, 0, 0, 44, 11, 16, 0, 53, 10, 11, 0, 30, 10, 2, 0, 3, 2, 0, 0, 44, 8, 15, 0, 49, 8, 0, 0, 53, 8, 2, 0, 49, 0, 0, 0, 44, 12, 17, 0, 53, 11, 12, 0, 44, 12, 12, 0, 44, 13, 13, 0, 44, 14, 15, 0, 51, 12, 13, 14, 44, 12, 14, 0, 51, 8, 12, 11, 67, 8, 0, 0, 3, 8, 0, 0, 3, 2, 0, 0, 49, 2, 0, 0, 44, 9, 18, 0, 53, 8, 9, 0, 30, 8, 61, 0, 64, 9, 0, 0, 27, 10, 9, 0, 43, 9, 0, 0, 63, 11, 2, 0, 35, 12, 9, 11, 30, 12, 52, 0, 58, 11, 2, 9, 27, 13, 11, 0, 49, 13, 0, 0, 44, 15, 0, 0, 53, 14, 15, 0, 27, 15, 14, 0, 30, 14, 17, 0, 63, 17, 13, 0, 34, 18, 17, 0, 27, 17, 18, 0, 30, 18, 10, 0, 49, 13, 0, 0, 44, 20, 1, 0, 53, 19, 20, 0, 44, 20, 5, 0, 50, 19, 20, 0, 44, 21, 3, 0, 53, 20, 21, 0, 27, 16, 20, 0, 28, 2, 0, 0, 27, 16, 17, 0, 27, 11, 16, 0, 28, 2, 0, 0, 27, 11, 15, 0, 30, 11, 20, 0, 43, 15, 1, 0, 58, 14, 13, 15, 51, 0, 1, 14, 44, 16, 4, 0, 61, 16, 16, 0, 53, 15, 16, 0, 27, 14, 15, 0, 40, 16, 0, 0, 73, 15, 14, 16, 27, 16, 15, 0, 31, 16, 8, 0, 58, 15, 14, 16, 27, 17, 15, 0, 50, 10, 17, 0, 44, 18, 19, 0, 53, 15, 18, 0, 73, 16, 14, 16, 28, 249, 255, 255, 28, 6, 0, 0, 51, 0, 1, 13, 53, 14, 3, 0, 50, 10, 14, 0, 44, 16, 19, 0, 53, 15, 16, 0, 5, 9, 9, 1, 28, 203, 255, 255, 52, 10, 0, 0, 44, 11, 20, 0, 54, 11, 0, 0, 49, 2, 0, 0, 44, 10, 0, 0, 53, 9, 10, 0, 30, 9, 59, 0, 64, 10, 0, 0, 27, 11, 10, 0, 43, 10, 0, 0, 63, 12, 2, 0, 35, 13, 10, 12, 30, 13, 52, 0, 58, 12, 2, 10, 27, 14, 12, 0, 49, 14, 0, 0, 44, 16, 0, 0, 53, 15, 16, 0, 27, 16, 15, 0, 30, 15, 17, 0, 63, 18, 14, 0, 34, 19, 18, 0, 27, 18, 19, 0, 30, 19, 10, 0, 49, 14, 0, 0, 44, 21, 1, 0, 53, 20, 21, 0, 44, 21, 5, 0, 50, 20, 21, 0, 44, 22, 3, 0, 53, 21, 22, 0, 27, 17, 21, 0, 28, 2, 0, 0, 27, 17, 18, 0, 27, 12, 17, 0, 28, 2, 0, 0, 27, 12, 16, 0, 30, 12, 20, 0, 43, 16, 1, 0, 58, 15, 14, 16, 51, 0, 1, 15, 44, 17, 4, 0, 61, 17, 17, 0, 53, 16, 17, 0, 27, 15, 16, 0, 40, 17, 0, 0, 73, 16, 15, 17, 27, 17, 16, 0, 31, 17, 8, 0, 58, 16, 15, 17, 27, 18, 16, 0, 50, 11, 18, 0, 44, 19, 19, 0, 53, 16, 19, 0, 73, 17, 15, 17, 28, 249, 255, 255, 28, 6, 0, 0, 51, 0, 1, 14, 53, 15, 3, 0, 50, 11, 15, 0, 44, 17, 19, 0, 53, 16, 17, 0, 5, 10, 10, 1, 28, 203, 255, 255, 3, 11, 0, 0, 49, 2, 0, 0, 44, 12, 11, 0, 53, 11, 12, 0, 27, 12, 11, 0, 30, 11, 5, 0, 44, 14, 12, 0, 59, 13, 2, 14, 27, 10, 13, 0, 28, 2, 0, 0, 27, 10, 12, 0, 30, 10, 2, 0, 3, 2, 0, 0, 49, 2, 0, 0, 44, 12, 11, 0, 53, 11, 12, 0, 30, 11, 29, 0, 64, 12, 0, 0, 27, 13, 12, 0, 49, 2, 0, 0, 44, 14, 21, 0, 53, 12, 14, 0, 27, 14, 12, 0, 40, 15, 0, 0, 73, 12, 14, 15, 27, 15, 12, 0, 31, 15, 16, 0, 58, 12, 14, 15, 27, 16, 12, 0, 51, 0, 1, 16, 53, 12, 3, 0, 50, 13, 12, 0, 44, 18, 19, 0, 53, 17, 18, 0, 59, 12, 2, 16, 51, 0, 1, 12, 53, 17, 3, 0, 50, 13, 17, 0, 44, 18, 19, 0, 53, 12, 18, 0, 73, 15, 14, 15, 28, 241, 255, 255, 52, 13, 0, 0, 44, 12, 22, 0, 54, 12, 0, 0, 3, 2, 0, 0, 19, 1, 3, 10, 0, 10, 0, 10, 0, 5, 0, 5, 0, 27, 0, 24, 0, 5, 0, 5, 0, 55, 0, 55, 0, 55, 0, 44, 0, 44, 0, 44, 0, 44, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 191, 255, 3, 2, 29, 0, 29, 0, 5, 0, 5, 0, 5, 0, 5, 1, 10, 0, 10, 0, 10, 0, 5, 0, 5, 0, 27, 0, 24, 0, 5, 0, 5, 0, 55, 0, 55, 0, 55, 0, 44, 0, 44, 0, 44, 0, 44, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 191, 253, 3, 4, 5, 0, 5, 0, 5, 1, 9, 0, 9, 0, 9, 0, 5, 0, 5, 0, 5, 0, 5, 0, 24, 0, 24, 0, 24, 0, 5, 0, 5, 0, 5, 0, 5, 0, 39, 0, 39, 0, 39, 0, 5, 0, 5, 0, 5, 0, 5, 0, 55, 0, 55, 0, 55, 0, 5, 0, 5, 0, 5, 0, 5, 0, 67, 0, 67, 0, 5, 0, 5, 0, 5, 0, 5, 0, 81, 0, 81, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 191, 251, 3, 0, 3, 7, 10, 0, 10, 0, 10, 0, 5, 0, 5, 0, 36, 0, 36, 0, 36, 0, 25, 0, 25, 0, 5, 0, 5, 0, 5, 191, 249, 3, 8, 15, 0, 15, 0, 15, 0, 9, 0, 9, 0, 9, 0, 5, 1, 28, 0, 28, 0, 28, 0, 11, 0, 11, 0, 11, 0, 7, 0, 7, 1, 60, 0, 60, 0, 60, 0, 33, 0, 33, 0, 33, 191, 255, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 191, 255, 5, 4, 5, 0, 5, 0, 5, 191, 244, 3, 13, 9, 0, 9, 0, 26, 0, 48, 0, 43, 0, 36, 1, 18, 0, 7, 1, 18, 0, 18, 0, 18, 0, 13, 0, 13, 0, 35, 0, 32, 0, 13, 0, 13, 0, 63, 0, 63, 0, 63, 0, 52, 0, 52, 0, 52, 0, 52, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 9, 1, 43, 0, 43, 0, 19, 0, 19, 0, 19, 0, 19, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 56, 0, 56, 0, 56, 0, 11, 0, 11, 191, 255, 9, 2, 30, 0, 30, 0, 11, 0, 11, 0, 11, 1, 7, 191, 251, 36, 5, 15, 0, 15, 0, 15, 1, 5, 0, 5, 0, 5, 191, 237, 3, 20, 9, 0, 9, 0, 26, 0, 48, 0, 43, 0, 36, 1, 18, 0, 7, 1, 18, 0, 18, 0, 18, 0, 13, 0, 13, 0, 35, 0, 32, 0, 13, 0, 13, 0, 63, 0, 63, 0, 63, 0, 52, 0, 52, 0, 52, 0, 52, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 9, 1, 43, 0, 43, 0, 19, 0, 19, 0, 19, 0, 19, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 56, 0, 56, 0, 56, 0, 11, 0, 11, 191, 255, 9, 2, 30, 0, 30, 0, 11, 0, 11, 0, 11, 1, 7, 191, 251, 36, 0, 5, 6, 10, 0, 10, 0, 10, 0, 5, 0, 5, 0, 25, 0, 25, 0, 5, 0, 5, 0, 5, 191, 230, 3, 0, 3, 27, 5, 0, 5, 0, 5, 191, 229, 3, 28, 9, 0, 9, 0, 31, 0, 31, 0, 31, 0, 23, 0, 23, 0, 23, 0, 23, 0, 23, 0, 23, 0, 23, 1, 23, 0, 23, 0, 7, 0, 7, 0, 7, 1, 51, 0, 23, 0, 23, 0, 7, 0, 7, 0, 7, 191, 254, 23, 0, 23, 2, 67, 0, 67, 0, 67, 191, 226, 3, 218, 131, 190, 206, 41, 85, 110, 113, 117, 111, 116, 101, 32, 110, 111, 116, 32, 118, 97, 108, 105, 100, 32, 111, 117, 116, 115, 105, 100, 101, 32, 111, 102, 32, 115, 121, 110, 116, 97, 120, 45, 113, 117, 111, 116, 101, 218, 131, 189, 206, 50, 85, 110, 113, 117, 111, 116, 101, 45, 115, 112, 108, 105, 99, 105, 110, 103, 32, 110, 111, 116, 32, 118, 97, 108, 105, 100, 32, 111, 117, 116, 115, 105, 100, 101, 32, 111, 102, 32, 115, 121, 110, 116, 97, 120, 45, 113, 117, 111, 116, 101, 218, 132, 68, 218, 132, 4, 218, 132, 69, 218, 52, 218, 102, 218, 132, 70, 218, 131, 11, 218, 132, 11, 215, 0, 205, 0, 220, 0, 0, 11, 3, 2, 3, 7, 34, 0, 8, 206, 9, 110, 115, 45, 105, 110, 116, 101, 114, 110, 218, 131, 13, 218, 19, 218, 52, 218, 102, 215, 0, 205, 0, 220, 0, 0, 5, 2, 2, 2, 1, 4, 0, 3, 206, 9, 98, 105, 110, 100, 45, 114, 111, 111, 116, 218, 131, 13, 218, 36, 0, 4, 0, 218, 97, 0, 4, 1, 218, 128, 179, 0, 4, 2, 207, 9, 98, 105, 110, 100, 45, 114, 111, 111, 116, 27, 3, 0, 0, 44, 4, 0, 0, 60, 3, 4, 1, 3, 3, 0, 0, 128, 133, 3, 0, 3, 0, 3, 0, 3, 218, 21, 218, 30, 215, 0, 205, 0, 220, 0, 0, 14, 3, 1, 3, 8, 52, 0, 8, 206, 8, 109, 97, 107, 101, 45, 118, 97, 114, 218, 131, 13, 218, 21, 208, 7, 100, 121, 110, 97, 109, 105, 99, 208, 5, 109, 97, 99, 114, 111, 218, 30, 218, 6, 218, 33, 218, 34, 218, 36, 0, 52, 0, 218, 131, 82, 0, 52, 1, 207, 8, 105, 110, 105, 116, 45, 118, 97, 108, 0, 52, 2, 207, 4, 109, 101, 116, 97, 0, 52, 3, 207, 8, 109, 97, 107, 101, 45, 118, 97, 114, 4, 52, 5, 218, 132, 119, 9, 52, 7, 218, 132, 120, 17, 52, 9, 218, 92, 50, 52, 10, 218, 59, 32, 1, 3, 0, 40, 4, 0, 0, 28, 2, 0, 0, 27, 4, 1, 0, 27, 5, 4, 0, 32, 2, 3, 0, 40, 6, 0, 0, 28, 2, 0, 0, 27, 6, 2, 0, 27, 7, 6, 0, 30, 7, 3, 0, 27, 8, 7, 0, 28, 5, 0, 0, 44, 9, 0, 0, 50, 9, 0, 0, 67, 9, 0, 0, 27, 8, 9, 0, 27, 9, 8, 0, 30, 7, 5, 0, 44, 11, 1, 0, 59, 10, 7, 11, 27, 8, 10, 0, 28, 2, 0, 0, 42, 8, 0, 0, 30, 7, 5, 0, 44, 12, 2, 0, 59, 11, 7, 12, 27, 10, 11, 0, 28, 2, 0, 0, 42, 10, 0, 0, 30, 7, 5, 0, 44, 13, 3, 0, 59, 12, 7, 13, 27, 11, 12, 0, 28, 2, 0, 0, 40, 11, 0, 0, 44, 12, 1, 0, 44, 13, 4, 0, 51, 12, 8, 13, 44, 12, 5, 0, 44, 13, 2, 0, 51, 12, 13, 10, 44, 12, 6, 0, 44, 13, 0, 0, 51, 12, 9, 13, 44, 12, 3, 0, 51, 0, 12, 11, 44, 12, 7, 0, 50, 12, 5, 0, 68, 8, 0, 0, 27, 10, 8, 0, 3, 10, 0, 0, 45, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 3, 5, 27, 0, 36, 0, 36, 0, 27, 0, 27, 0, 27, 1, 25, 0, 34, 0, 34, 0, 25, 0, 25, 0, 25, 1, 22, 0, 31, 0, 31, 0, 22, 0, 22, 0, 22, 191, 249, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 34, 0, 218, 132, 21, 0, 34, 1, 218, 131, 85, 0, 34, 2, 218, 128, 179, 0, 34, 3, 207, 9, 110, 115, 45, 105, 110, 116, 101, 114, 110, 4, 34, 5, 218, 128, 179, 8, 34, 7, 207, 8, 109, 97, 112, 112, 105, 110, 103, 115, 10, 34, 8, 218, 129, 118, 31, 34, 6, 218, 97, 32, 2, 3, 0, 40, 4, 0, 0, 28, 2, 0, 0, 27, 4, 2, 0, 27, 5, 4, 0, 44, 6, 0, 0, 49, 6, 0, 0, 53, 6, 0, 0, 27, 7, 6, 0, 59, 6, 7, 1, 27, 8, 6, 0, 30, 8, 12, 0, 49, 5, 0, 0, 44, 9, 1, 0, 53, 6, 9, 0, 49, 6, 0, 0, 44, 10, 2, 0, 53, 9, 10, 0, 30, 9, 4, 0, 50, 8, 5, 0, 44, 10, 3, 0, 53, 6, 10, 0, 3, 8, 0, 0, 44, 6, 4, 0, 44, 9, 5, 0, 51, 6, 1, 9, 49, 0, 0, 0, 67, 6, 0, 0, 51, 1, 5, 6, 44, 10, 6, 0, 53, 9, 10, 0, 27, 6, 9, 0, 60, 7, 1, 6, 3, 6, 0, 0, 128, 171, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 18, 0, 18, 0, 18, 0, 3, 1, 18, 191, 255, 3, 2, 5, 2, 20, 0, 20, 0, 20, 0, 15, 0, 15, 0, 15, 0, 9, 1, 11, 0, 11, 0, 11, 191, 254, 7, 4, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 7, 1, 9, 191, 255, 7, 218, 132, 29, 206, 2, 110, 115, 215, 0, 205, 0, 220, 0, 0, 6, 1, 1, 1, 4, 17, 0, 2, 206, 12, 115, 121, 109, 45, 110, 97, 109, 101, 45, 115, 116, 114, 218, 132, 6, 218, 30, 218, 21, 218, 129, 49, 218, 54, 0, 17, 0, 218, 132, 43, 0, 17, 1, 207, 12, 115, 121, 109, 45, 110, 97, 109, 101, 45, 115, 116, 114, 44, 2, 0, 0, 49, 2, 0, 0, 53, 2, 0, 0, 30, 2, 11, 0, 44, 3, 0, 0, 49, 3, 0, 0, 53, 3, 0, 0, 44, 4, 1, 0, 49, 4, 0, 0, 53, 4, 0, 0, 44, 5, 2, 0, 51, 3, 5, 4, 44, 5, 3, 0, 54, 5, 0, 0, 44, 3, 1, 0, 49, 3, 0, 0, 54, 0, 0, 0, 64, 7, 0, 7, 0, 7, 0, 3, 0, 27, 0, 27, 0, 27, 0, 43, 0, 43, 0, 43, 0, 19, 0, 19, 0, 19, 0, 19, 0, 58, 0, 58, 0, 58, 218, 76, 215, 0, 205, 0, 220, 0, 0, 6, 2, 2, 2, 2, 7, 0, 3, 206, 18, 99, 116, 120, 45, 115, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 110, 115, 218, 131, 13, 218, 8, 218, 10, 0, 7, 0, 218, 131, 14, 0, 7, 1, 218, 132, 16, 0, 7, 2, 207, 18, 99, 116, 120, 45, 115, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 110, 115, 44, 3, 0, 0, 49, 3, 0, 0, 53, 3, 0, 0, 27, 4, 3, 0, 44, 5, 1, 0, 60, 4, 5, 1, 3, 4, 0, 0, 129, 20, 8, 0, 8, 0, 8, 0, 3, 0, 3, 0, 3, 0, 3, 218, 90, 208, 7, 114, 101, 113, 117, 105, 114, 101, 215, 0, 205, 0, 220, 0, 0, 21, 2, 2, 2, 10, 71, 0, 14, 206, 12, 101, 118, 97, 108, 45, 114, 101, 113, 117, 105, 114, 101, 218, 132, 6, 218, 132, 125, 208, 2, 97, 115, 218, 88, 218, 6, 218, 130, 17, 218, 21, 206, 2, 97, 115, 218, 132, 11, 218, 131, 11, 215, 0, 205, 0, 220, 0, 0, 6, 3, 3, 3, 1, 6, 0, 4, 206, 9, 110, 115, 45, 105, 109, 112, 111, 114, 116, 218, 131, 13, 218, 22, 0, 6, 0, 218, 132, 21, 0, 6, 1, 218, 132, 24, 0, 6, 2, 207, 13, 102, 113, 45, 99, 108, 97, 115, 115, 45, 110, 97, 109, 101, 0, 6, 3, 207, 9, 110, 115, 45, 105, 109, 112, 111, 114, 116, 44, 4, 0, 0, 49, 4, 0, 0, 53, 4, 0, 0, 27, 5, 4, 0, 60, 5, 1, 2, 3, 5, 0, 0, 128, 208, 8, 0, 8, 0, 8, 0, 3, 0, 3, 0, 3, 0, 71, 0, 218, 131, 14, 0, 71, 1, 207, 4, 115, 112, 101, 99, 0, 71, 2, 207, 12, 101, 118, 97, 108, 45, 114, 101, 113, 117, 105, 114, 101, 2, 71, 4, 218, 132, 16, 6, 71, 5, 207, 7, 110, 115, 45, 110, 97, 109, 101, 7, 71, 3, 207, 5, 97, 108, 105, 97, 115, 8, 71, 6, 218, 121, 10, 56, 8, 207, 4, 115, 108, 101, 110, 14, 55, 10, 218, 132, 96, 17, 45, 11, 207, 7, 95, 48, 48, 48, 48, 103, 90, 24, 44, 14, 207, 7, 95, 48, 48, 48, 48, 104, 49, 31, 41, 16, 207, 7, 95, 48, 48, 48, 48, 104, 48, 48, 53, 11, 207, 9, 97, 108, 105, 97, 115, 45, 115, 121, 109, 66, 70, 7, 218, 132, 45, 43, 4, 0, 0, 58, 3, 1, 4, 27, 4, 3, 0, 49, 4, 0, 0, 44, 5, 0, 0, 53, 3, 5, 0, 27, 5, 3, 0, 40, 3, 0, 0, 43, 6, 1, 0, 63, 7, 1, 0, 27, 8, 7, 0, 35, 7, 6, 8, 30, 7, 44, 0, 58, 9, 1, 6, 27, 10, 9, 0, 44, 11, 1, 0, 37, 9, 10, 11, 27, 11, 9, 0, 30, 11, 3, 0, 27, 9, 11, 0, 28, 25, 0, 0, 49, 10, 0, 0, 44, 14, 2, 0, 53, 13, 14, 0, 27, 14, 13, 0, 30, 13, 18, 0, 44, 16, 3, 0, 49, 16, 0, 0, 53, 16, 10, 0, 44, 18, 4, 0, 37, 17, 18, 16, 27, 16, 17, 0, 30, 17, 8, 0, 44, 18, 5, 0, 49, 18, 0, 0, 53, 18, 10, 0, 44, 20, 6, 0, 37, 19, 20, 18, 27, 15, 19, 0, 28, 2, 0, 0, 27, 15, 16, 0, 27, 12, 15, 0, 28, 2, 0, 0, 27, 12, 14, 0, 27, 9, 12, 0, 30, 9, 9, 0, 5, 11, 6, 1, 58, 12, 1, 11, 27, 11, 12, 0, 44, 12, 5, 0, 49, 12, 0, 0, 53, 3, 11, 0, 27, 6, 8, 0, 28, 2, 0, 0, 5, 6, 6, 1, 28, 212, 255, 255, 50, 0, 5, 0, 44, 8, 7, 0, 53, 7, 8, 0, 30, 3, 11, 0, 49, 0, 0, 0, 44, 8, 8, 0, 53, 7, 8, 0, 50, 0, 7, 0, 44, 9, 7, 0, 53, 8, 9, 0, 27, 7, 8, 0, 51, 7, 3, 5, 44, 9, 9, 0, 53, 8, 9, 0, 4, 0, 0, 0, 68, 16, 0, 16, 0, 3, 1, 17, 0, 17, 0, 17, 191, 255, 3, 2, 5, 1, 5, 1, 16, 0, 5, 1, 14, 0, 7, 1, 20, 0, 9, 1, 19, 0, 19, 0, 15, 0, 15, 0, 15, 0, 15, 0, 37, 0, 37, 0, 37, 0, 32, 0, 32, 0, 63, 0, 63, 0, 63, 0, 52, 0, 52, 0, 32, 0, 32, 0, 90, 0, 90, 0, 90, 0, 82, 0, 82, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 15, 0, 11, 2, 39, 0, 30, 0, 15, 1, 26, 0, 26, 0, 26, 1, 15, 191, 252, 11, 5, 13, 191, 249, 7, 8, 5, 0, 5, 0, 5, 1, 5, 1, 41, 0, 41, 0, 41, 0, 24, 0, 24, 0, 24, 0, 7, 1, 9, 0, 9, 0, 9, 191, 240, 3, 206, 7, 114, 101, 113, 117, 105, 114, 101, 218, 74, 206, 29, 114, 101, 113, 117, 105, 114, 101, 32, 101, 120, 112, 101, 99, 116, 115, 32, 97, 32, 118, 101, 99, 116, 111, 114, 32, 115, 112, 101, 99, 206, 5, 105, 110, 45, 110, 115, 218, 131, 76, 218, 128, 205, 218, 132, 71, 216, 14, 116, 97, 98, 108, 101, 47, 115, 101, 116, 112, 114, 111, 116, 111, 218, 132, 72, 218, 55, 218, 132, 73, 208, 12, 106, 111, 108, 116, 47, 108, 111, 111, 112, 45, 102, 110, 206, 34, 114, 101, 99, 117, 114, 32, 117, 115, 101, 100, 32, 111, 117, 116, 115, 105, 100, 101, 32, 111, 102, 32, 108, 111, 111, 112, 42, 32, 111, 114, 32, 102, 110, 42, 218, 88, 218, 6, 218, 130, 17, 215, 0, 205, 0, 220, 0, 0, 11, 3, 3, 3, 7, 36, 0, 9, 206, 11, 114, 101, 115, 111, 108, 118, 101, 45, 118, 97, 114, 218, 132, 6, 218, 21, 218, 30, 218, 52, 218, 102, 218, 132, 11, 218, 132, 26, 218, 131, 11, 0, 36, 0, 218, 131, 14, 0, 36, 1, 218, 132, 42, 0, 36, 2, 218, 132, 43, 0, 36, 3, 207, 11, 114, 101, 115, 111, 108, 118, 101, 45, 118, 97, 114, 3, 36, 5, 218, 131, 82, 7, 36, 6, 218, 132, 21, 18, 22, 8, 218, 132, 47, 28, 36, 9, 218, 132, 45, 32, 36, 10, 218, 132, 21, 44, 4, 0, 0, 49, 4, 0, 0, 53, 4, 2, 0, 27, 5, 4, 0, 44, 4, 1, 0, 49, 4, 0, 0, 53, 4, 2, 0, 27, 6, 4, 0, 49, 6, 0, 0, 44, 7, 2, 0, 53, 4, 7, 0, 49, 4, 0, 0, 44, 8, 3, 0, 53, 7, 8, 0, 30, 7, 8, 0, 50, 0, 6, 0, 44, 8, 4, 0, 53, 4, 8, 0, 27, 8, 4, 0, 50, 8, 5, 0, 44, 4, 5, 0, 54, 4, 0, 0, 59, 4, 1, 5, 30, 4, 2, 0, 4, 0, 0, 0, 49, 0, 0, 0, 44, 9, 6, 0, 53, 8, 9, 0, 27, 9, 8, 0, 50, 0, 9, 0, 44, 10, 4, 0, 53, 8, 10, 0, 27, 10, 8, 0, 50, 10, 5, 0, 44, 8, 5, 0, 54, 8, 0, 0, 56, 14, 0, 14, 0, 14, 0, 3, 0, 31, 0, 31, 0, 31, 0, 3, 1, 14, 0, 14, 0, 14, 0, 9, 0, 9, 0, 9, 0, 5, 1, 23, 0, 23, 0, 23, 0, 7, 0, 45, 0, 45, 0, 45, 1, 11, 0, 7, 0, 7, 1, 26, 0, 26, 0, 26, 0, 9, 0, 50, 0, 50, 0, 50, 0, 9, 0, 80, 0, 80, 0, 80, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 3, 0, 2, 206, 10, 118, 97, 114, 45, 109, 97, 99, 114, 111, 63, 218, 131, 13, 218, 132, 118, 0, 3, 0, 218, 97, 0, 3, 1, 207, 10, 118, 97, 114, 45, 109, 97, 99, 114, 111, 63, 44, 2, 0, 0, 49, 2, 0, 0, 54, 0, 0, 0, 70, 3, 0, 3, 0, 3, 0, 129, 200, 0, 218, 131, 14, 0, 129, 200, 1, 218, 132, 42, 0, 129, 200, 2, 218, 131, 72, 0, 129, 200, 3, 207, 9, 101, 118, 97, 108, 45, 108, 105, 115, 116, 3, 129, 200, 5, 207, 10, 102, 105, 114, 115, 116, 45, 102, 111, 114, 109, 7, 129, 200, 7, 218, 131, 82, 7, 129, 200, 7, 207, 7, 95, 48, 48, 48, 48, 104, 50, 37, 51, 13, 218, 59, 38, 51, 14, 218, 121, 40, 50, 16, 207, 3, 108, 101, 110, 60, 94, 14, 207, 8, 116, 101, 115, 116, 45, 118, 97, 108, 67, 77, 16, 207, 7, 95, 48, 48, 48, 48, 104, 51, 99, 128, 130, 16, 207, 8, 110, 97, 109, 101, 45, 115, 121, 109, 106, 128, 130, 15, 218, 128, 179, 110, 128, 130, 18, 218, 132, 142, 114, 128, 130, 19, 218, 132, 21, 128, 138, 128, 202, 16, 218, 132, 142, 128, 143, 128, 202, 18, 207, 7, 99, 108, 97, 117, 115, 101, 115, 128, 150, 128, 202, 17, 218, 59, 128, 151, 128, 202, 19, 218, 121, 128, 153, 128, 201, 21, 207, 4, 99, 108, 101, 110, 128, 157, 128, 200, 23, 207, 6, 99, 108, 97, 117, 115, 101, 128, 161, 128, 178, 25, 207, 7, 95, 48, 48, 48, 48, 104, 53, 128, 165, 128, 175, 27, 207, 7, 95, 48, 48, 48, 48, 104, 52, 128, 183, 128, 197, 25, 207, 5, 115, 112, 101, 99, 115, 128, 185, 128, 197, 26, 218, 132, 144, 128, 186, 128, 197, 24, 218, 128, 130, 128, 190, 128, 194, 29, 218, 131, 54, 128, 211, 128, 229, 17, 218, 132, 140, 128, 215, 128, 222, 20, 207, 7, 95, 48, 48, 48, 48, 104, 54, 128, 237, 128, 245, 18, 218, 132, 142, 128, 250, 129, 8, 20, 207, 9, 97, 114, 103, 115, 45, 102, 111, 114, 109, 129, 13, 129, 60, 24, 207, 8, 98, 105, 110, 100, 45, 118, 101, 99, 129, 18, 129, 60, 25, 207, 4, 98, 111, 100, 121, 129, 20, 129, 60, 26, 207, 12, 110, 101, 119, 45, 98, 105, 110, 100, 105, 110, 103, 115, 129, 24, 129, 60, 23, 218, 121, 129, 26, 129, 46, 28, 218, 132, 164, 129, 31, 129, 45, 30, 218, 131, 85, 129, 39, 129, 45, 31, 218, 128, 179, 129, 46, 129, 60, 27, 218, 59, 129, 46, 129, 59, 25, 207, 7, 95, 48, 48, 48, 48, 104, 100, 129, 49, 129, 59, 29, 207, 7, 95, 48, 48, 48, 48, 104, 99, 129, 52, 129, 59, 30, 207, 9, 98, 111, 100, 121, 45, 102, 111, 114, 109, 129, 65, 129, 103, 25, 218, 132, 176, 129, 72, 129, 103, 27, 207, 9, 105, 110, 105, 116, 45, 118, 97, 108, 115, 129, 75, 129, 103, 24, 218, 121, 129, 108, 129, 127, 27, 207, 7, 108, 111, 111, 112, 45, 102, 110, 129, 124, 129, 127, 30, 218, 43, 129, 130, 129, 140, 30, 207, 7, 95, 48, 48, 48, 48, 104, 106, 129, 144, 129, 184, 30, 218, 97, 129, 144, 129, 152, 30, 207, 7, 95, 48, 48, 48, 48, 104, 107, 129, 156, 129, 168, 32, 207, 8, 109, 97, 99, 114, 111, 45, 102, 110, 129, 161, 129, 168, 33, 218, 43, 129, 172, 129, 184, 32, 218, 42, 129, 181, 129, 184, 31, 218, 43, 129, 188, 129, 200, 30, 218, 42, 129, 197, 129, 200, 27, 218, 43, 49, 2, 0, 0, 44, 5, 0, 0, 53, 4, 5, 0, 27, 5, 4, 0, 44, 6, 1, 0, 49, 6, 0, 0, 53, 6, 5, 0, 27, 7, 6, 0, 44, 9, 2, 0, 37, 8, 7, 9, 30, 8, 4, 0, 43, 10, 1, 0, 58, 9, 2, 10, 3, 9, 0, 0, 44, 10, 3, 0, 37, 9, 7, 10, 30, 9, 6, 0, 43, 11, 1, 0, 58, 10, 2, 11, 51, 0, 1, 10, 44, 11, 4, 0, 54, 11, 0, 0, 44, 11, 5, 0, 37, 10, 7, 11, 30, 10, 4, 0, 44, 11, 6, 0, 1, 11, 0, 0, 4, 0, 0, 0, 44, 12, 7, 0, 37, 11, 7, 12, 30, 11, 4, 0, 44, 12, 8, 0, 1, 12, 0, 0, 4, 0, 0, 0, 44, 13, 9, 0, 37, 12, 7, 13, 30, 12, 15, 0, 40, 13, 0, 0, 43, 14, 1, 0, 63, 15, 2, 0, 27, 16, 15, 0, 35, 15, 14, 16, 30, 15, 8, 0, 58, 17, 2, 14, 51, 0, 1, 17, 44, 18, 10, 0, 61, 18, 18, 0, 53, 13, 18, 0, 5, 14, 14, 1, 28, 248, 255, 255, 3, 13, 0, 0, 44, 14, 11, 0, 37, 13, 7, 14, 30, 13, 41, 0, 43, 15, 1, 0, 58, 14, 2, 15, 51, 0, 1, 14, 44, 16, 10, 0, 61, 16, 16, 0, 53, 15, 16, 0, 27, 14, 15, 0, 49, 14, 0, 0, 44, 17, 12, 0, 53, 16, 17, 0, 49, 16, 0, 0, 44, 18, 13, 0, 53, 17, 18, 0, 27, 16, 17, 0, 30, 17, 8, 0, 42, 19, 0, 0, 37, 18, 19, 14, 49, 18, 0, 0, 44, 20, 13, 0, 53, 19, 20, 0, 27, 15, 19, 0, 28, 2, 0, 0, 27, 15, 16, 0, 30, 15, 7, 0, 43, 17, 2, 0, 58, 16, 2, 17, 51, 0, 1, 16, 44, 17, 10, 0, 61, 17, 17, 0, 54, 17, 0, 0, 63, 16, 2, 0, 34, 17, 16, 3, 30, 17, 7, 0, 43, 18, 3, 0, 58, 16, 2, 18, 51, 0, 1, 16, 44, 18, 10, 0, 61, 18, 18, 0, 54, 18, 0, 0, 4, 0, 0, 0, 44, 15, 14, 0, 37, 14, 7, 15, 30, 14, 34, 0, 43, 16, 1, 0, 58, 15, 2, 16, 27, 16, 15, 0, 43, 17, 2, 0, 58, 15, 2, 17, 51, 0, 1, 15, 44, 18, 10, 0, 61, 18, 18, 0, 53, 17, 18, 0, 27, 15, 17, 0, 49, 0, 0, 0, 44, 18, 15, 0, 53, 17, 18, 0, 27, 18, 17, 0, 50, 0, 18, 0, 44, 19, 16, 0, 53, 17, 19, 0, 27, 19, 17, 0, 44, 17, 1, 0, 49, 17, 0, 0, 53, 17, 16, 0, 51, 19, 17, 15, 44, 21, 17, 0, 53, 20, 21, 0, 44, 17, 1, 0, 49, 17, 0, 0, 53, 17, 16, 0, 50, 19, 17, 0, 44, 21, 17, 0, 53, 20, 21, 0, 49, 20, 0, 0, 44, 17, 18, 0, 54, 17, 0, 0, 44, 16, 19, 0, 37, 15, 7, 16, 30, 15, 70, 0, 43, 17, 1, 0, 58, 16, 2, 17, 49, 16, 0, 0, 44, 18, 20, 0, 53, 17, 18, 0, 27, 16, 17, 0, 43, 17, 2, 0, 50, 2, 17, 0, 44, 18, 21, 0, 53, 17, 18, 0, 27, 18, 17, 0, 50, 0, 16, 0, 44, 19, 22, 0, 53, 17, 19, 0, 50, 0, 16, 0, 44, 19, 16, 0, 53, 17, 19, 0, 40, 17, 0, 0, 43, 19, 0, 0, 63, 20, 18, 0, 27, 21, 20, 0, 35, 20, 19, 21, 30, 20, 46, 0, 58, 22, 18, 19, 27, 23, 22, 0, 49, 23, 0, 0, 44, 25, 23, 0, 53, 24, 25, 0, 27, 25, 24, 0, 30, 24, 15, 0, 63, 27, 23, 0, 34, 28, 27, 0, 27, 27, 28, 0, 30, 28, 8, 0, 49, 23, 0, 0, 44, 30, 0, 0, 53, 29, 30, 0, 44, 31, 24, 0, 37, 30, 31, 29, 27, 26, 30, 0, 28, 2, 0, 0, 27, 26, 27, 0, 27, 22, 26, 0, 28, 2, 0, 0, 27, 22, 25, 0, 30, 22, 20, 0, 43, 24, 1, 0, 50, 23, 24, 0, 44, 25, 21, 0, 53, 24, 25, 0, 27, 25, 24, 0, 63, 24, 25, 0, 27, 26, 24, 0, 43, 24, 0, 0, 35, 27, 24, 26, 30, 27, 8, 0, 58, 28, 25, 24, 27, 29, 28, 0, 50, 0, 29, 0, 44, 30, 25, 0, 53, 28, 30, 0, 5, 24, 24, 1, 28, 248, 255, 255, 5, 19, 19, 1, 28, 3, 0, 0, 27, 17, 23, 0, 5, 19, 19, 1, 28, 210, 255, 255, 3, 17, 0, 0, 44, 17, 26, 0, 37, 16, 7, 17, 30, 16, 25, 0, 43, 18, 1, 0, 58, 17, 2, 18, 51, 0, 1, 17, 44, 19, 10, 0, 61, 19, 19, 0, 53, 18, 19, 0, 27, 17, 18, 0, 49, 17, 0, 0, 44, 20, 27, 0, 53, 19, 20, 0, 27, 20, 19, 0, 30, 19, 5, 0, 63, 21, 17, 0, 34, 22, 21, 0, 27, 18, 22, 0, 28, 2, 0, 0, 27, 18, 20, 0, 30, 18, 4, 0, 50, 0, 17, 0, 44, 19, 25, 0, 54, 19, 0, 0, 44, 19, 28, 0, 1, 19, 0, 0, 4, 0, 0, 0, 44, 18, 29, 0, 37, 17, 7, 18, 30, 17, 14, 0, 43, 19, 1, 0, 58, 18, 2, 19, 49, 18, 0, 0, 44, 20, 20, 0, 53, 19, 20, 0, 27, 18, 19, 0, 50, 0, 18, 0, 44, 20, 22, 0, 53, 19, 20, 0, 50, 0, 18, 0, 44, 20, 16, 0, 53, 19, 20, 0, 4, 0, 0, 0, 44, 19, 30, 0, 37, 18, 7, 19, 30, 18, 17, 0, 43, 20, 1, 0, 58, 19, 2, 20, 27, 20, 19, 0, 43, 19, 2, 0, 50, 2, 19, 0, 44, 21, 21, 0, 53, 19, 21, 0, 27, 21, 19, 0, 48, 19, 0, 0, 50, 19, 20, 0, 44, 23, 31, 0, 53, 22, 23, 0, 27, 19, 22, 0, 40, 22, 0, 0, 48, 22, 1, 0, 3, 22, 0, 0, 44, 23, 32, 0, 37, 20, 7, 23, 30, 20, 50, 0, 43, 24, 1, 0, 58, 23, 2, 24, 27, 24, 23, 0, 43, 23, 2, 0, 50, 2, 23, 0, 44, 25, 21, 0, 53, 23, 25, 0, 27, 25, 23, 0, 68, 23, 0, 0, 27, 26, 23, 0, 50, 26, 1, 0, 44, 27, 33, 0, 53, 23, 27, 0, 43, 23, 0, 0, 63, 27, 24, 0, 27, 28, 27, 0, 35, 27, 23, 28, 30, 27, 18, 0, 49, 23, 0, 0, 53, 29, 24, 0, 27, 30, 29, 0, 5, 29, 23, 1, 49, 29, 0, 0, 53, 31, 24, 0, 51, 0, 26, 31, 44, 32, 10, 0, 61, 32, 32, 0, 53, 29, 32, 0, 27, 31, 29, 0, 44, 29, 1, 0, 49, 29, 0, 0, 53, 29, 30, 0, 60, 26, 29, 31, 5, 23, 23, 2, 28, 238, 255, 255, 40, 27, 0, 0, 40, 29, 0, 0, 73, 28, 25, 29, 27, 29, 28, 0, 31, 29, 9, 0, 58, 28, 25, 29, 27, 30, 28, 0, 51, 0, 26, 30, 44, 28, 10, 0, 61, 28, 28, 0, 53, 27, 28, 0, 73, 29, 25, 29, 28, 248, 255, 255, 3, 27, 0, 0, 44, 24, 34, 0, 37, 23, 7, 24, 30, 23, 41, 0, 43, 25, 1, 0, 58, 24, 2, 25, 27, 25, 24, 0, 43, 24, 2, 0, 50, 2, 24, 0, 44, 26, 21, 0, 53, 24, 26, 0, 27, 26, 24, 0, 64, 24, 0, 0, 27, 27, 24, 0, 64, 24, 0, 0, 27, 28, 24, 0, 43, 24, 0, 0, 63, 29, 25, 0, 35, 30, 24, 29, 30, 30, 21, 0, 5, 29, 24, 1, 49, 29, 0, 0, 53, 31, 25, 0, 51, 0, 1, 31, 44, 32, 10, 0, 61, 32, 32, 0, 53, 29, 32, 0, 50, 27, 29, 0, 44, 32, 35, 0, 53, 31, 32, 0, 49, 24, 0, 0, 53, 29, 25, 0, 44, 31, 1, 0, 49, 31, 0, 0, 53, 31, 29, 0, 50, 28, 31, 0, 44, 32, 35, 0, 53, 29, 32, 0, 5, 24, 24, 2, 28, 234, 255, 255, 40, 29, 0, 0, 48, 29, 2, 0, 52, 27, 0, 0, 54, 29, 0, 0, 44, 25, 36, 0, 37, 24, 7, 25, 30, 24, 22, 0, 44, 27, 37, 0, 59, 25, 1, 27, 27, 27, 25, 0, 49, 27, 0, 0, 44, 30, 12, 0, 53, 25, 30, 0, 30, 25, 4, 0, 44, 30, 38, 0, 1, 30, 0, 0, 4, 0, 0, 0, 48, 30, 3, 0, 43, 31, 1, 0, 50, 2, 31, 0, 44, 32, 21, 0, 53, 31, 32, 0, 50, 30, 31, 0, 44, 33, 31, 0, 53, 32, 33, 0, 27, 30, 32, 0, 52, 30, 0, 0, 54, 27, 0, 0, 49, 5, 0, 0, 44, 30, 39, 0, 53, 27, 30, 0, 27, 30, 27, 0, 30, 27, 8, 0, 44, 31, 40, 0, 49, 31, 0, 0, 53, 31, 5, 0, 44, 33, 41, 0, 37, 32, 33, 31, 27, 25, 32, 0, 28, 2, 0, 0, 27, 25, 30, 0, 30, 25, 44, 0, 51, 0, 1, 5, 44, 30, 42, 0, 53, 27, 30, 0, 27, 30, 27, 0, 30, 30, 6, 0, 49, 30, 0, 0, 44, 32, 43, 0, 53, 31, 32, 0, 27, 27, 31, 0, 28, 2, 0, 0, 27, 27, 30, 0, 30, 27, 16, 0, 49, 30, 0, 0, 44, 32, 18, 0, 53, 31, 32, 0, 27, 32, 31, 0, 43, 31, 1, 0, 50, 2, 31, 0, 44, 33, 21, 0, 53, 31, 33, 0, 27, 33, 31, 0, 52, 33, 0, 0, 53, 31, 32, 0, 51, 0, 1, 31, 44, 34, 10, 0, 61, 34, 34, 0, 54, 34, 0, 0, 51, 0, 1, 5, 44, 32, 10, 0, 61, 32, 32, 0, 53, 31, 32, 0, 27, 32, 31, 0, 48, 31, 4, 0, 43, 33, 1, 0, 50, 2, 33, 0, 44, 34, 21, 0, 53, 33, 34, 0, 50, 31, 33, 0, 44, 35, 31, 0, 53, 34, 35, 0, 27, 31, 34, 0, 52, 31, 0, 0, 54, 32, 0, 0, 51, 0, 1, 5, 44, 30, 10, 0, 61, 30, 30, 0, 53, 27, 30, 0, 27, 30, 27, 0, 48, 27, 5, 0, 43, 31, 1, 0, 50, 2, 31, 0, 44, 32, 21, 0, 53, 31, 32, 0, 50, 27, 31, 0, 44, 33, 31, 0, 53, 32, 33, 0, 27, 27, 32, 0, 52, 27, 0, 0, 54, 30, 0, 0, 205, 0, 220, 0, 0, 2, 1, 1, 1, 1, 3, 0, 1, 218, 128, 206, 218, 132, 6, 218, 21, 0, 3, 0, 207, 9, 95, 48, 48, 48, 48, 104, 55, 36, 48, 44, 1, 0, 0, 49, 1, 0, 0, 54, 0, 0, 0, 128, 173, 33, 0, 33, 0, 33, 205, 0, 213, 0, 0, 10, 0, 0, 205, 127, 255, 255, 255, 3, 39, 1, 16, 218, 132, 6, 218, 132, 152, 218, 132, 153, 218, 132, 4, 191, 255, 0, 0, 218, 131, 14, 191, 255, 0, 1, 218, 132, 42, 191, 255, 0, 2, 218, 131, 72, 191, 255, 0, 3, 218, 132, 161, 191, 255, 0, 5, 218, 132, 162, 191, 255, 0, 7, 218, 131, 82, 0, 39, 0, 207, 7, 102, 110, 45, 97, 114, 103, 115, 1, 39, 2, 207, 11, 102, 110, 45, 98, 105, 110, 100, 105, 110, 103, 115, 6, 39, 4, 218, 121, 7, 20, 5, 207, 7, 95, 48, 48, 48, 48, 104, 57, 10, 20, 7, 207, 7, 95, 48, 48, 48, 48, 104, 56, 13, 20, 8, 207, 8, 97, 114, 103, 45, 110, 97, 109, 101, 23, 39, 5, 218, 59, 24, 38, 6, 207, 7, 95, 48, 48, 48, 48, 104, 98, 27, 38, 8, 207, 7, 95, 48, 48, 48, 48, 104, 97, 30, 38, 9, 218, 132, 181, 68, 1, 0, 0, 27, 2, 1, 0, 45, 3, 0, 1, 50, 2, 3, 0, 44, 4, 0, 0, 53, 3, 4, 0, 43, 4, 0, 0, 45, 5, 0, 19, 40, 7, 0, 0, 73, 6, 5, 7, 27, 7, 6, 0, 31, 7, 9, 0, 58, 6, 5, 7, 27, 8, 6, 0, 49, 4, 0, 0, 53, 6, 0, 0, 60, 2, 8, 6, 5, 4, 4, 1, 73, 7, 5, 7, 28, 248, 255, 255, 44, 5, 1, 0, 45, 6, 0, 22, 60, 2, 5, 6, 40, 5, 0, 0, 45, 6, 0, 21, 40, 8, 0, 0, 73, 7, 6, 8, 27, 8, 7, 0, 31, 8, 10, 0, 58, 7, 6, 8, 27, 9, 7, 0, 45, 7, 0, 0, 51, 7, 2, 9, 44, 7, 2, 0, 61, 7, 7, 0, 53, 5, 7, 0, 73, 8, 6, 8, 28, 247, 255, 255, 3, 5, 0, 0, 191, 255, 128, 176, 15, 0, 15, 1, 15, 0, 15, 0, 15, 0, 15, 1, 15, 1, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 1, 43, 0, 43, 0, 17, 1, 17, 191, 254, 15, 0, 15, 3, 15, 0, 15, 0, 15, 1, 15, 1, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 1, 29, 0, 29, 0, 29, 0, 29, 0, 29, 191, 255, 15, 0, 15, 191, 247, 23, 205, 0, 213, 0, 0, 10, 0, 0, 205, 127, 255, 255, 255, 3, 39, 1, 16, 218, 132, 6, 218, 132, 152, 218, 132, 153, 218, 132, 4, 191, 255, 0, 0, 218, 131, 14, 191, 255, 0, 1, 218, 132, 42, 191, 255, 0, 2, 218, 131, 72, 191, 255, 0, 3, 218, 132, 161, 191, 255, 0, 5, 218, 132, 162, 191, 255, 0, 7, 218, 131, 82, 0, 39, 0, 218, 43, 1, 39, 2, 207, 13, 108, 111, 111, 112, 45, 98, 105, 110, 100, 105, 110, 103, 115, 6, 39, 4, 218, 128, 130, 7, 20, 5, 207, 7, 95, 48, 48, 48, 48, 104, 102, 10, 20, 7, 207, 7, 95, 48, 48, 48, 48, 104, 101, 13, 20, 8, 207, 2, 115, 110, 23, 39, 5, 218, 59, 24, 38, 6, 207, 7, 95, 48, 48, 48, 48, 104, 104, 27, 38, 8, 207, 7, 95, 48, 48, 48, 48, 104, 103, 30, 38, 9, 218, 132, 181, 68, 1, 0, 0, 27, 2, 1, 0, 45, 3, 0, 1, 50, 2, 3, 0, 44, 4, 0, 0, 53, 3, 4, 0, 43, 4, 0, 0, 45, 5, 0, 28, 40, 7, 0, 0, 73, 6, 5, 7, 27, 7, 6, 0, 31, 7, 9, 0, 58, 6, 5, 7, 27, 8, 6, 0, 49, 4, 0, 0, 53, 6, 0, 0, 60, 2, 8, 6, 5, 4, 4, 1, 73, 7, 5, 7, 28, 248, 255, 255, 44, 5, 1, 0, 45, 6, 0, 29, 60, 2, 5, 6, 40, 5, 0, 0, 45, 6, 0, 26, 40, 8, 0, 0, 73, 7, 6, 8, 27, 8, 7, 0, 31, 8, 10, 0, 58, 7, 6, 8, 27, 9, 7, 0, 45, 7, 0, 0, 51, 7, 2, 9, 44, 7, 2, 0, 61, 7, 7, 0, 53, 5, 7, 0, 73, 8, 6, 8, 28, 247, 255, 255, 3, 5, 0, 0, 191, 255, 128, 214, 17, 0, 17, 1, 17, 0, 17, 0, 17, 0, 17, 1, 17, 1, 17, 0, 17, 0, 17, 0, 17, 0, 17, 0, 17, 0, 17, 1, 41, 0, 41, 0, 19, 1, 19, 191, 254, 17, 0, 17, 3, 17, 0, 17, 0, 17, 1, 17, 1, 17, 0, 17, 0, 17, 0, 17, 0, 17, 0, 17, 0, 17, 1, 31, 0, 31, 0, 31, 0, 31, 0, 31, 191, 255, 17, 0, 17, 191, 247, 28, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 6, 1, 7, 218, 128, 206, 218, 132, 6, 218, 132, 4, 191, 255, 0, 0, 218, 131, 14, 191, 255, 0, 1, 218, 132, 42, 191, 255, 0, 2, 218, 131, 72, 191, 255, 0, 3, 218, 132, 161, 191, 255, 0, 5, 218, 132, 162, 191, 255, 0, 7, 218, 131, 82, 0, 6, 0, 207, 9, 95, 48, 48, 48, 48, 104, 105, 36, 48, 45, 1, 0, 0, 45, 2, 0, 1, 51, 1, 2, 0, 44, 1, 0, 0, 61, 1, 1, 0, 54, 1, 0, 0, 191, 255, 128, 229, 34, 0, 34, 0, 34, 0, 34, 0, 34, 0, 34, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 6, 1, 7, 218, 128, 206, 218, 132, 6, 218, 132, 4, 191, 255, 0, 0, 218, 131, 14, 191, 255, 0, 1, 218, 132, 42, 191, 255, 0, 2, 218, 131, 72, 191, 255, 0, 3, 218, 132, 161, 191, 255, 0, 5, 218, 132, 162, 191, 255, 0, 7, 218, 131, 82, 0, 6, 0, 207, 9, 95, 48, 48, 48, 48, 104, 108, 36, 48, 45, 1, 0, 0, 45, 2, 0, 1, 51, 1, 2, 0, 44, 1, 0, 0, 61, 1, 1, 0, 54, 1, 0, 0, 191, 255, 128, 239, 28, 0, 28, 0, 28, 0, 28, 0, 28, 0, 28, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 6, 1, 7, 218, 128, 206, 218, 132, 6, 218, 132, 4, 191, 255, 0, 0, 218, 131, 14, 191, 255, 0, 1, 218, 132, 42, 191, 255, 0, 2, 218, 131, 72, 191, 255, 0, 3, 218, 132, 161, 191, 255, 0, 5, 218, 132, 162, 191, 255, 0, 7, 218, 131, 82, 0, 6, 0, 207, 9, 95, 48, 48, 48, 48, 104, 109, 36, 48, 45, 1, 0, 0, 45, 2, 0, 1, 51, 1, 2, 0, 44, 1, 0, 0, 61, 1, 1, 0, 54, 1, 0, 0, 191, 255, 128, 242, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 118, 19, 0, 19, 0, 19, 0, 3, 1, 13, 0, 13, 0, 13, 0, 3, 1, 3, 0, 3, 0, 3, 1, 13, 0, 13, 0, 13, 191, 255, 3, 0, 3, 0, 3, 2, 48, 0, 48, 0, 20, 0, 20, 0, 20, 191, 254, 3, 0, 3, 0, 3, 3, 15, 0, 15, 0, 15, 191, 253, 3, 0, 3, 0, 3, 4, 24, 0, 24, 0, 24, 191, 252, 3, 0, 3, 0, 3, 6, 12, 1, 12, 1, 22, 0, 12, 1, 21, 0, 14, 1, 52, 0, 28, 0, 28, 0, 28, 0, 28, 1, 16, 191, 254, 14, 191, 252, 10, 191, 251, 3, 0, 3, 0, 3, 13, 49, 0, 49, 0, 25, 0, 25, 0, 25, 0, 25, 0, 10, 1, 26, 0, 26, 0, 26, 0, 21, 0, 21, 0, 21, 0, 16, 0, 16, 0, 48, 0, 48, 0, 43, 0, 43, 0, 43, 0, 16, 0, 16, 0, 16, 0, 12, 1, 38, 0, 38, 0, 14, 0, 14, 0, 14, 0, 14, 1, 21, 0, 18, 0, 14, 0, 62, 0, 62, 0, 38, 0, 38, 0, 38, 0, 38, 0, 14, 191, 240, 3, 0, 3, 0, 3, 17, 26, 0, 26, 0, 11, 1, 45, 0, 45, 0, 21, 0, 21, 0, 21, 0, 21, 191, 255, 11, 2, 25, 0, 25, 0, 25, 191, 254, 11, 3, 20, 0, 20, 0, 20, 191, 253, 11, 4, 27, 0, 27, 0, 27, 0, 13, 0, 13, 0, 13, 1, 36, 0, 36, 0, 36, 0, 22, 0, 22, 0, 22, 0, 13, 0, 13, 0, 13, 191, 234, 3, 0, 3, 0, 3, 23, 38, 0, 38, 0, 24, 0, 24, 0, 24, 0, 10, 1, 24, 0, 24, 0, 24, 0, 24, 191, 255, 10, 2, 12, 0, 12, 0, 12, 1, 12, 0, 12, 0, 12, 1, 12, 1, 12, 1, 23, 0, 12, 1, 21, 0, 14, 1, 29, 0, 16, 1, 27, 0, 27, 0, 27, 0, 22, 0, 22, 0, 46, 0, 43, 0, 22, 0, 22, 0, 77, 0, 77, 0, 77, 0, 65, 0, 65, 0, 22, 0, 22, 0, 22, 0, 22, 0, 22, 0, 22, 0, 18, 1, 32, 0, 32, 0, 32, 0, 32, 0, 20, 1, 31, 191, 255, 20, 2, 22, 1, 29, 0, 22, 1, 32, 0, 24, 1, 26, 0, 26, 0, 26, 1, 24, 191, 253, 22, 4, 29, 191, 248, 18, 9, 24, 0, 44, 191, 245, 14, 191, 249, 10, 191, 233, 3, 0, 3, 0, 3, 43, 50, 0, 50, 0, 26, 0, 26, 0, 26, 0, 26, 0, 15, 1, 27, 0, 27, 0, 27, 0, 22, 0, 22, 0, 44, 0, 41, 0, 22, 0, 22, 0, 22, 0, 18, 1, 20, 0, 20, 0, 20, 1, 20, 0, 20, 0, 20, 191, 210, 3, 0, 3, 0, 3, 47, 41, 0, 41, 0, 27, 0, 27, 0, 27, 0, 13, 1, 15, 0, 15, 0, 15, 1, 15, 0, 15, 0, 15, 191, 254, 13, 191, 209, 3, 0, 3, 0, 3, 51, 27, 0, 27, 0, 11, 1, 22, 0, 22, 0, 22, 0, 22, 191, 255, 11, 2, 32, 0, 27, 0, 27, 0, 27, 191, 254, 11, 3, 13, 1, 23, 191, 252, 11, 191, 205, 3, 0, 3, 0, 3, 68, 27, 0, 27, 0, 12, 1, 23, 0, 23, 0, 23, 0, 23, 191, 255, 12, 2, 14, 0, 14, 1, 14, 0, 14, 0, 14, 1, 14, 1, 24, 0, 14, 1, 23, 0, 16, 1, 28, 0, 28, 0, 18, 1, 66, 0, 56, 0, 56, 0, 28, 0, 28, 0, 28, 0, 28, 191, 255, 18, 2, 38, 0, 38, 0, 38, 0, 20, 1, 20, 191, 252, 16, 5, 14, 1, 14, 0, 14, 0, 14, 0, 14, 0, 14, 0, 14, 1, 28, 0, 28, 0, 28, 0, 28, 191, 255, 14, 0, 14, 191, 244, 12, 191, 188, 3, 0, 3, 0, 3, 83, 28, 0, 28, 0, 13, 1, 24, 0, 24, 0, 24, 0, 24, 191, 255, 13, 0, 13, 0, 13, 0, 13, 0, 13, 4, 15, 1, 27, 0, 22, 0, 15, 1, 73, 0, 63, 0, 63, 0, 39, 0, 39, 0, 39, 0, 39, 0, 17, 0, 17, 0, 17, 1, 40, 0, 40, 0, 39, 0, 39, 0, 39, 0, 17, 0, 17, 0, 17, 1, 17, 191, 253, 15, 4, 15, 1, 28, 12, 15, 0, 15, 191, 151, 3, 0, 3, 0, 3, 106, 27, 0, 27, 0, 13, 1, 19, 0, 19, 0, 19, 0, 15, 1, 17, 0, 17, 0, 17, 1, 33, 0, 61, 0, 61, 0, 61, 0, 61, 0, 28, 0, 28, 0, 28, 0, 17, 1, 19, 0, 19, 2, 14, 0, 14, 0, 14, 0, 9, 0, 9, 0, 46, 0, 46, 0, 46, 0, 35, 0, 35, 0, 9, 0, 9, 0, 9, 0, 5, 1, 15, 0, 15, 0, 15, 0, 7, 1, 13, 0, 20, 0, 20, 0, 20, 0, 13, 0, 13, 0, 13, 0, 9, 1, 26, 0, 26, 0, 26, 0, 11, 1, 22, 0, 22, 0, 22, 0, 22, 191, 255, 11, 2, 37, 0, 37, 0, 13, 0, 13, 0, 13, 0, 13, 1, 19, 0, 19, 0, 19, 0, 19, 0, 11, 1, 27, 0, 55, 0, 55, 0, 55, 0, 55, 0, 22, 0, 22, 0, 22, 191, 255, 11, 2, 13, 0, 13, 1, 15, 0, 15, 0, 15, 0, 15, 0, 7, 1, 23, 0, 51, 0, 51, 0, 51, 0, 51, 0, 18, 0, 18, 0, 18, 191, 255, 7, 2, 9, 0, 9, 3, 0, 104, 52, 0, 0, 0, 0, 0, 81, 0, 218, 131, 14, 0, 81, 1, 218, 132, 42, 0, 81, 2, 218, 131, 72, 49, 2, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 30, 3, 2, 0, 4, 0, 0, 0, 49, 2, 0, 0, 44, 5, 1, 0, 53, 4, 5, 0, 30, 4, 2, 0, 3, 2, 0, 0, 49, 2, 0, 0, 44, 6, 2, 0, 53, 5, 6, 0, 30, 5, 2, 0, 3, 2, 0, 0, 49, 2, 0, 0, 44, 7, 3, 0, 53, 6, 7, 0, 30, 6, 2, 0, 3, 2, 0, 0, 49, 2, 0, 0, 44, 8, 4, 0, 53, 7, 8, 0, 30, 7, 2, 0, 3, 2, 0, 0, 49, 2, 0, 0, 44, 9, 5, 0, 53, 8, 9, 0, 30, 8, 2, 0, 3, 2, 0, 0, 49, 2, 0, 0, 44, 10, 6, 0, 53, 9, 10, 0, 30, 9, 8, 0, 48, 10, 0, 0, 50, 10, 2, 0, 44, 12, 7, 0, 53, 11, 12, 0, 49, 11, 0, 0, 44, 10, 8, 0, 54, 10, 0, 0, 49, 2, 0, 0, 44, 11, 9, 0, 53, 10, 11, 0, 30, 10, 23, 0, 44, 11, 10, 0, 49, 11, 0, 0, 53, 11, 2, 0, 44, 13, 11, 0, 37, 12, 13, 11, 30, 12, 4, 0, 51, 0, 1, 2, 44, 11, 12, 0, 54, 11, 0, 0, 44, 13, 10, 0, 59, 11, 2, 13, 30, 11, 10, 0, 44, 13, 10, 0, 49, 13, 0, 0, 53, 13, 2, 0, 44, 14, 13, 0, 50, 14, 13, 0, 44, 15, 14, 0, 53, 14, 15, 0, 1, 14, 0, 0, 4, 0, 0, 0, 3, 2, 0, 0, 49, 2, 0, 0, 44, 12, 15, 0, 53, 11, 12, 0, 30, 11, 10, 0, 63, 12, 2, 0, 43, 14, 0, 0, 37, 13, 14, 12, 30, 13, 3, 0, 64, 12, 0, 0, 3, 12, 0, 0, 51, 0, 1, 2, 44, 12, 16, 0, 54, 12, 0, 0, 3, 2, 0, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 6, 1, 4, 218, 128, 206, 218, 132, 6, 218, 132, 4, 191, 255, 0, 0, 218, 131, 14, 191, 255, 0, 1, 218, 132, 42, 191, 255, 0, 2, 218, 131, 72, 0, 6, 0, 207, 9, 95, 48, 48, 48, 48, 104, 110, 36, 48, 45, 1, 0, 0, 45, 2, 0, 1, 51, 1, 2, 0, 44, 1, 0, 0, 61, 1, 1, 0, 54, 1, 0, 0, 191, 255, 128, 253, 38, 0, 38, 0, 38, 0, 38, 0, 38, 0, 38, 128, 247, 5, 0, 5, 0, 5, 191, 255, 3, 0, 3, 2, 5, 0, 5, 0, 5, 191, 254, 3, 0, 3, 3, 5, 0, 5, 0, 5, 191, 253, 3, 0, 3, 4, 5, 0, 5, 0, 5, 191, 252, 3, 0, 3, 5, 5, 0, 5, 0, 5, 191, 251, 3, 0, 3, 6, 5, 0, 5, 0, 5, 191, 250, 3, 0, 3, 7, 5, 0, 5, 0, 5, 191, 249, 3, 7, 37, 0, 32, 0, 32, 0, 32, 0, 19, 0, 19, 0, 19, 1, 5, 0, 5, 0, 5, 191, 248, 3, 9, 20, 0, 20, 0, 20, 0, 9, 0, 9, 0, 5, 1, 7, 0, 7, 0, 7, 1, 11, 0, 11, 0, 7, 1, 51, 0, 51, 0, 51, 0, 16, 0, 16, 0, 16, 0, 16, 0, 9, 0, 9, 191, 255, 7, 3, 5, 0, 5, 0, 5, 191, 242, 3, 15, 14, 0, 9, 0, 9, 0, 5, 0, 5, 0, 5, 2, 7, 0, 7, 0, 7, 191, 239, 3, 3, 0, 0, 0, 0, 9, 0, 218, 131, 14, 0, 9, 1, 218, 131, 54, 0, 9, 2, 207, 11, 101, 118, 97, 108, 45, 115, 116, 114, 105, 110, 103, 3, 9, 4, 218, 131, 72, 49, 1, 0, 0, 44, 4, 0, 0, 53, 3, 4, 0, 27, 4, 3, 0, 68, 3, 0, 0, 51, 0, 3, 4, 44, 5, 1, 0, 61, 5, 5, 0, 54, 5, 0, 0, 28, 14, 0, 14, 0, 14, 0, 3, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 215, 0, 205, 0, 220, 0, 0, 9, 1, 1, 1, 12, 39, 0, 3, 206, 11, 112, 114, 105, 110, 116, 45, 118, 97, 108, 117, 101, 218, 2, 218, 52, 218, 131, 247, 218, 4, 218, 89, 218, 6, 218, 33, 218, 131, 10, 218, 131, 11, 215, 0, 205, 0, 220, 0, 0, 3, 1, 1, 1, 1, 3, 0, 2, 206, 8, 118, 97, 114, 45, 110, 97, 109, 101, 218, 131, 13, 218, 21, 0, 3, 0, 218, 97, 0, 3, 1, 207, 8, 118, 97, 114, 45, 110, 97, 109, 101, 44, 2, 0, 0, 49, 2, 0, 0, 54, 0, 0, 0, 75, 3, 0, 3, 0, 3, 218, 21, 206, 7, 35, 39, 37, 115, 47, 37, 115, 216, 6, 112, 114, 105, 110, 116, 102, 0, 39, 0, 218, 97, 0, 39, 1, 207, 11, 112, 114, 105, 110, 116, 45, 118, 97, 108, 117, 101, 11, 21, 5, 207, 7, 95, 48, 48, 48, 48, 105, 74, 49, 0, 0, 0, 44, 3, 0, 0, 53, 2, 3, 0, 30, 2, 5, 0, 44, 3, 1, 0, 49, 3, 0, 0, 44, 3, 2, 0, 54, 3, 0, 0, 49, 0, 0, 0, 44, 5, 3, 0, 53, 4, 5, 0, 27, 5, 4, 0, 30, 4, 8, 0, 44, 6, 4, 0, 49, 6, 0, 0, 53, 6, 0, 0, 44, 8, 5, 0, 37, 7, 8, 6, 27, 3, 7, 0, 28, 2, 0, 0, 27, 3, 5, 0, 30, 3, 15, 0, 44, 4, 6, 0, 49, 4, 0, 0, 44, 5, 7, 0, 53, 4, 5, 0, 49, 0, 0, 0, 44, 6, 8, 0, 53, 5, 6, 0, 44, 6, 9, 0, 49, 6, 0, 0, 53, 6, 5, 0, 44, 5, 10, 0, 51, 5, 4, 6, 44, 5, 11, 0, 54, 5, 0, 0, 49, 0, 0, 0, 44, 4, 2, 0, 54, 4, 0, 0, 16, 7, 0, 7, 0, 7, 0, 3, 1, 5, 0, 5, 0, 5, 0, 5, 1, 14, 0, 14, 0, 14, 0, 9, 0, 9, 0, 38, 0, 38, 0, 38, 0, 25, 0, 25, 0, 9, 0, 9, 0, 9, 0, 5, 1, 25, 0, 25, 0, 25, 0, 25, 0, 47, 0, 47, 0, 47, 0, 46, 0, 46, 0, 46, 0, 7, 0, 7, 0, 7, 0, 7, 1, 7, 0, 7, 0, 7, 191, 255, 0, 5, 218, 131, 26, 44, 0, 0, 0, 45, 1, 0, 5, 50, 0, 1, 0, 44, 1, 1, 0, 53, 0, 1, 0, 49, 0, 0, 0, 44, 1, 2, 0, 54, 1, 0, 0, 191, 255, 33, 28, 0, 28, 0, 28, 0, 28, 0, 28, 0, 15, 0, 15, 0, 15, 205, 2, 254, 0, 0, 9, 0, 0, 205, 127, 255, 255, 255, 15, 56, 1, 1, 5, 206, 5, 119, 104, 105, 108, 101, 218, 2, 218, 131, 10, 218, 131, 11, 218, 131, 16, 218, 54, 218, 131, 17, 218, 52, 218, 131, 27, 218, 51, 218, 102, 218, 131, 28, 218, 131, 29, 218, 131, 30, 218, 131, 31, 218, 131, 32, 218, 131, 33, 191, 255, 0, 0, 218, 131, 34, 191, 255, 0, 3, 218, 131, 35, 39, 54, 3, 207, 7, 95, 48, 48, 48, 48, 105, 78, 42, 54, 6, 207, 7, 95, 48, 48, 48, 48, 105, 77, 48, 53, 6, 207, 3, 101, 114, 114, 45, 0, 0, 3, 29, 0, 2, 0, 4, 0, 0, 0, 44, 0, 0, 0, 49, 0, 0, 0, 44, 1, 1, 0, 53, 0, 1, 0, 44, 1, 2, 0, 50, 0, 1, 0, 44, 2, 3, 0, 53, 1, 2, 0, 49, 1, 0, 0, 44, 2, 4, 0, 53, 0, 2, 0, 27, 1, 0, 0, 49, 1, 0, 0, 44, 2, 5, 0, 53, 0, 2, 0, 30, 0, 4, 0, 42, 2, 0, 0, 47, 2, 0, 3, 28, 33, 0, 0, 44, 3, 6, 0, 37, 2, 1, 3, 30, 2, 4, 0, 42, 3, 0, 0, 47, 3, 0, 3, 28, 27, 0, 0, 44, 4, 7, 0, 37, 3, 4, 1, 49, 3, 0, 0, 44, 5, 8, 0, 53, 4, 5, 0, 30, 4, 21, 0, 48, 3, 0, 0, 44, 5, 9, 0, 50, 3, 5, 0, 44, 6, 10, 0, 53, 5, 6, 0, 27, 3, 5, 0, 40, 6, 0, 0, 55, 5, 3, 6, 27, 6, 5, 0, 49, 3, 0, 0, 44, 7, 11, 0, 53, 5, 7, 0, 44, 8, 12, 0, 37, 7, 5, 8, 30, 7, 6, 0, 44, 5, 13, 0, 50, 5, 6, 0, 44, 8, 14, 0, 53, 5, 8, 0, 28, 1, 0, 0, 46, 0, 0, 0, 54, 0, 0, 0, 191, 255, 205, 0, 220, 0, 0, 2, 0, 0, 0, 3, 8, 1, 1, 218, 131, 36, 218, 2, 218, 131, 10, 218, 131, 37, 218, 132, 206, 191, 255, 0, 1, 218, 131, 26, 44, 0, 0, 0, 45, 1, 0, 1, 50, 0, 1, 0, 44, 1, 1, 0, 53, 0, 1, 0, 49, 0, 0, 0, 44, 1, 2, 0, 54, 1, 0, 0, 191, 255, 33, 28, 0, 28, 0, 28, 0, 28, 0, 28, 0, 15, 0, 15, 0, 15, 27, 3, 0, 3, 0, 3, 1, 35, 0, 35, 0, 35, 0, 35, 0, 27, 0, 27, 0, 27, 0, 27, 0, 16, 0, 16, 0, 16, 0, 5, 1, 11, 0, 11, 0, 11, 0, 7, 0, 23, 0, 23, 0, 7, 1, 13, 0, 13, 0, 9, 0, 31, 0, 31, 0, 9, 1, 20, 0, 20, 0, 15, 0, 15, 0, 15, 0, 11, 1, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13, 3, 16, 0, 16, 0, 16, 0, 16, 191, 253, 13, 191, 251, 3, 0, 3, 2, 0, 0, 0, 23, 3, 0, 3, 0, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 3, 2, 3, 1, 3, 0, 3, 0, 3, 40, 0, 0, 0}; + +const unsigned char *janet_payload_image_embed = bytes; +size_t janet_payload_image_embed_size = sizeof(bytes); + +int main(int argc, const char **argv) { + +#if defined(JANET_PRF) + uint8_t hash_key[JANET_HASH_KEY_SIZE + 1]; +#ifdef JANET_REDUCED_OS + char *envvar = NULL; +#else + char *envvar = getenv("JANET_HASHSEED"); +#endif + if (NULL != envvar) { + strncpy((char *) hash_key, envvar, sizeof(hash_key) - 1); + } else if (janet_cryptorand(hash_key, JANET_HASH_KEY_SIZE) != 0) { + fputs("unable to initialize janet PRF hash function.\n", stderr); + return 1; + } + janet_init_hash_key(hash_key); +#endif + + janet_init(); + + /* Get core env */ +JanetTable *env = janet_core_env(NULL); +JanetTable *lookup = janet_env_lookup(env); +JanetTable *temptab; +int handle = janet_gclock(); /* Unmarshal bytecode */ + Janet marsh_out = janet_unmarshal( + janet_payload_image_embed, + janet_payload_image_embed_size, + 0, + lookup, + NULL); + + /* Verify the marshalled object is a function */ + if (!janet_checktype(marsh_out, JANET_FUNCTION)) { + fprintf(stderr, "invalid bytecode image - expected function."); + return 1; + } + JanetFunction *jfunc = janet_unwrap_function(marsh_out); + + /* Check arity */ + janet_arity(argc, jfunc->def->min_arity, jfunc->def->max_arity); + + /* Collect command line arguments */ + JanetArray *args = janet_array(argc); + for (int i = 0; i < argc; i++) { + janet_array_push(args, janet_cstringv(argv[i])); + } + + /* Create enviornment */ + temptab = env; + janet_table_put(temptab, janet_ckeywordv("args"), janet_wrap_array(args)); + janet_gcroot(janet_wrap_table(temptab)); + + /* Unlock GC */ + janet_gcunlock(handle); + + /* Run everything */ + JanetFiber *fiber = janet_fiber(jfunc, 64, argc, argc ? args->data : NULL); + fiber->env = temptab; +#ifdef JANET_EV + janet_gcroot(janet_wrap_fiber(fiber)); + janet_schedule(fiber, janet_wrap_nil()); + janet_loop(); + int status = janet_fiber_status(fiber); + janet_deinit(); + return status; +#else + Janet out; + JanetSignal result = janet_continue(fiber, janet_wrap_nil(), &out); + if (result != JANET_SIGNAL_OK && result != JANET_SIGNAL_EVENT) { + janet_stacktrace(fiber, out); + janet_deinit(); + return result; + } + janet_deinit(); + return 0; +#endif +} diff --git a/fix-core.janet b/fix-core.janet new file mode 100644 index 0000000..d73ce4d --- /dev/null +++ b/fix-core.janet @@ -0,0 +1,14 @@ +(def lines (string/split "\n" (slurp "src/jolt/core.janet"))) +(def new-lines @[]) +(each l lines + (array/push new-lines l) + (if (= l " new-val))") + (do + (array/push new-lines "") + (array/push new-lines "# Hierarchy (minimal stubs for sci bootstrap)") + (array/push new-lines "(defn core-derive [tag parent] nil)") + (array/push new-lines "(defn core-isa? ([child parent] false) ([h child parent] false))") + (array/push new-lines "(defn core-ancestors ([tag] #{}) ([h tag] #{}))") + (array/push new-lines "(defn core-descendants ([tag] #{}) ([h tag] #{}))")))) +(spit "src/jolt/core.janet" (string/join new-lines "\n")) +(print "done") diff --git a/preprocess.janet b/preprocess.janet new file mode 100644 index 0000000..c6d0049 --- /dev/null +++ b/preprocess.janet @@ -0,0 +1,21 @@ +# Preprocess a cljc file: resolve #?(:clj ...) and #?@(:clj ...) reader conditionals +# at read time. Output a plain .clj file that Jolt can parse without reader conditionals. + +(use ./src/jolt/reader) + +(defn preprocess [filepath] + (def src (slurp filepath)) + (var s src) + (var out @[]) + (var count 0) + (while (> (length (string/trim s)) 0) + (def [form rest] (parse-next s)) + (set s rest) + (++ count) + (if (nil? form) + nil + (array/push out (string form)))) + (string/join out "\n")) + +(def filepath (if (> (length (dyn :args @[])) 0) (in (dyn :args) 0) "/Users/yogthos/src/sci/src/sci/impl/utils.cljc")) +(print (preprocess filepath)) diff --git a/project.janet b/project.janet index 886889b..2676169 100644 --- a/project.janet +++ b/project.janet @@ -7,4 +7,4 @@ (declare-executable :name "jolt" - :entry "jolt/main.janet") + :entry "src/jolt/main.janet") diff --git a/src/jolt/core.janet b/src/jolt/core.janet index e1faded..a71e811 100644 --- a/src/jolt/core.janet +++ b/src/jolt/core.janet @@ -8,6 +8,7 @@ # ============================================================ (defn core-nil? [x] (nil? x)) +(defn core-not [x] (if x false true)) (defn core-some? [x] (not (nil? x))) (defn core-string? [x] (string? x)) (defn core-number? [x] (number? x)) @@ -592,6 +593,110 @@ # Initialization — intern everything into a context's namespace # ============================================================ +(defn core-when + "Macro: (when test & body) -> (if test (do body...))" + [test & body] + (def arr (array ;body)) + (array/insert arr 0 {:jolt/type :symbol :ns nil :name "do"}) + @[{:jolt/type :symbol :ns nil :name "if"} + test + arr]) + +(defn core-defn + "Macro: (defn name [args] body) -> (def name (fn* [args] body))" + [fn-name args-form & body] + (def fn-form @[]) + (array/push fn-form {:jolt/type :symbol :ns nil :name "fn*"}) + (array/push fn-form args-form) + (each b body (array/push fn-form b)) + @[{:jolt/type :symbol :ns nil :name "def"} + fn-name + fn-form]) + +# defn- stub — expands to defn +(defn core-defn- [& args] @[{:jolt/type :symbol :ns nil :name "do"}]) + +# Hierarchy stubs for sci bootstrap +(def core-derive (fn [& args] nil)) +(def core-isa? (fn [& args] false)) +(def core-ancestors (fn [& args] @[])) +(def core-descendants (fn [& args] @[])) + +# Java interop stubs +(def core-Object (fn [] (struct ;[:jolt/type :jolt/java-object]))) + +# Volatile stubs (minimal — use table as volatile box) +(defn core-volatile! [v] @{:val v}) +(defn core-vswap! [vol f & args] + (def new-val (apply f (vol :val) args)) + (put vol :val new-val) + new-val) +(defn core-vreset! [vol val] (put vol :val val) val) + +# Proxy stub — returns nil form (macro, args not evaluated) +(defn core-proxy [& args] nil) + +# Thread stubs +(def core-Thread (fn [& args] (struct ;[:jolt/type :jolt/thread]))) +(def core-ThreadLocal (fn [& args] (struct ;[:jolt/type :jolt/thread-local]))) +(def core-IllegalStateException (fn [& args] (struct ;[:jolt/type :jolt/exception]))) + +# definterface stub — JVM-only, emits def form +(defn core-definterface [name-sym & body] + @[{:jolt/type :symbol :ns nil :name "def"} + name-sym + @{}]) + +# comment macro — ignores body, returns nil +(defn core-comment [& body] + nil) + +# prefer-method stub — multimethod preference ordering +(defn core-prefer-method [multifn dispatch-val & dispatch-vals] + nil) + +# declare macro — accepts symbols, does nothing (forward declaration) +(defn core-declare [& syms] + @[{:jolt/type :symbol :ns nil :name "do"}]) + +(defn core-fn + "Macro: (fn [args] body) → (fn* [args] body)" + [& args] + (def result @[]) + (array/push result {:jolt/type :symbol :ns nil :name "fn*"}) + (each a args (array/push result a)) + result) + +# Protocol stubs — defined in sci.impl.protocols, needed in clojure.core +# defprotocol must be a macro to avoid evaluating its args +(defn core-defprotocol [protocol-name & sigs] + # Emit (do (def protocol-name {}) (def method1 fn) (def method2 fn) ...) + (def result @[]) + (array/push result {:jolt/type :symbol :ns nil :name "do"}) + # First (def protocol-name {}) + (def d @[]) + (array/push d {:jolt/type :symbol :ns nil :name "def"}) + (array/push d protocol-name) + (array/push d @{}) + (array/push result d) + # Then (def method-name (fn [& args] nil)) for each sig + (each sig sigs + (def method-sym (first sig)) + (def d @[]) + (array/push d {:jolt/type :symbol :ns nil :name "def"}) + (array/push d method-sym) + (array/push d (fn [& args] nil)) + (array/push result d)) + result) +(def core-extend-type (fn [& args] nil)) +(defn core-extend-protocol [& args] @[{:jolt/type :symbol :ns nil :name "do"}]) +(def core-extend (fn [& args] nil)) +(def core-reify (fn [& args] nil)) +(def core-satisfies? (fn [& args] nil)) +(def core-extends? (fn [& args] false)) +(def core-implements? (fn [& args] false)) +(def core-type->str (fn [& args] "")) + (def- core-bindings "Map of symbol name → function for all core functions." @{"nil?" core-nil? @@ -691,7 +796,45 @@ "atom?" core-atom? "deref" core-deref "reset!" core-reset! - "swap!" core-swap!}) + "swap!" core-swap! + "not" core-not + "when" core-when + "defn" core-defn + "defn-" core-defn- + "derive" core-derive + "isa?" core-isa? + "ancestors" core-ancestors + "descendants" core-descendants + "Object" core-Object + "declare" core-declare + "fn" core-fn + "defprotocol" core-defprotocol + "extend-type" core-extend-type + "extend-protocol" core-extend-protocol + "extend" core-extend + "reify" core-reify + "satisfies?" core-satisfies? + "extends?" core-extends? + "implements?" core-implements? + "type->str" core-type->str + "volatile!" core-volatile! + "vswap!" core-vswap! + "vreset!" core-vreset! + "proxy" core-proxy + "Thread" core-Thread + "ThreadLocal" core-ThreadLocal + "IllegalStateException" core-IllegalStateException + "definterface" core-definterface + "comment" core-comment + "prefer-method" core-prefer-method + # Dynamic vars — stubs for SCI bootstrap + "*unchecked-math*" false + "*clojure-version*" {:major 1 :minor 11 :incremental 0 :qualifier nil}}) + +(defn core-macro-names + "Set of core binding names that are macros." + [] + @{"when" true "defn" true "defn-" true "declare" true "defprotocol" true "extend-type" true "extend-protocol" true "extend" true "reify" true "fn" true "proxy" true "definterface" true "comment" true}) (def init-core! (fn [& args] @@ -699,11 +842,15 @@ 1 (let [ctx (args 0) ns (ctx-find-ns ctx "clojure.core")] (loop [[name fn] :pairs core-bindings] - (ns-intern ns name fn)) + (def v (ns-intern ns name fn)) + (when (get (core-macro-names) name) + (put v :macro true))) ns) 2 (let [ctx (args 0) ns-name (args 1) ns (ctx-find-ns ctx ns-name)] (loop [[name fn] :pairs core-bindings] - (ns-intern ns name fn)) + (def v (ns-intern ns name fn)) + (when (get (core-macro-names) name) + (put v :macro true))) ns) (error "Wrong number of args passed to: init-core!")))) diff --git a/src/jolt/evaluator.janet b/src/jolt/evaluator.janet index a5464de..dea7de0 100644 --- a/src/jolt/evaluator.janet +++ b/src/jolt/evaluator.janet @@ -11,8 +11,11 @@ [name] (or (= name "quote") (= name "syntax-quote") (= name "unquote") (= name "unquote-splicing") (= name "do") (= name "if") - (= name "def") (= name "fn*") (= name "let*") (= name "loop*") - (= name "recur"))) + (= name "def") (= name "defmacro") (= name "fn*") (= name "let*") (= name "loop*") + (= name "recur") (= name "throw") (= name "try") + (= name "set!") (= name "var") (= name "locking") + (= name "instance?") (= name "defmulti") (= name "defmethod") + (= name "deftype") (= name "new") (= name "."))) (var eval-form nil) @@ -51,13 +54,18 @@ (array/push kvs (syntax-quote* ctx bindings (get form k)))) (struct ;kvs)) form)) -(defn- resolve-var +(defn resolve-var [ctx bindings sym-s] (let [name (sym-s :name) ns (sym-s :ns)] (if (not (nil? ns)) (let [target-ns (ctx-find-ns ctx ns)] (ns-find target-ns name)) (if (get bindings name) nil - (let [current-ns (ctx-current-ns ctx) ns (ctx-find-ns ctx current-ns)] (ns-find ns name)))))) + (let [current-ns (ctx-current-ns ctx) + ns (ctx-find-ns ctx current-ns) + v (ns-find ns name)] + (if v v + (let [core-ns (ctx-find-ns ctx "clojure.core")] + (ns-find core-ns name)))))))) (defn- sym-name-str [sym-s] @@ -103,20 +111,94 @@ core-v (ns-find core-ns name)] (if core-v (var-get core-v) - # Fall back to Janet's global environment - (let [root-env (fiber/getenv (fiber/current)) - entry (in root-env (symbol name))] - (if (not (nil? entry)) - (if (table? entry) (entry :value) entry) - (error (string "Unable to resolve symbol: " name))))))))))))) + # Try class-name resolution: Foo.Bar.Baz -> ns "Foo.Bar", name "Baz" + (let [dot-idx (string/find "." name)] + (if dot-idx + (let [last-dot (do + (var idx dot-idx) + (var next-dot (string/find "." name (+ idx 1))) + (while (not (nil? next-dot)) + (set idx next-dot) + (set next-dot (string/find "." name (+ idx 1)))) + idx) + class-ns (string/slice name 0 last-dot) + class-name (string/slice name (+ last-dot 1))] + (let [target-ns (ctx-find-ns ctx class-ns) tv (ns-find target-ns class-name)] + (if tv (var-get tv) tv))) + # Fall back to Janet's global environment + (let [root-env (fiber/getenv (fiber/current)) + entry (in root-env (symbol name))] + (if (not (nil? entry)) + (if (table? entry) (entry :value) entry) + (error (string "Unable to resolve symbol: " name))))))))))))))) + +(defn- parse-arg-names + "Parse a parameter vector, handling & rest args. + Returns {:fixed [names...] :rest name-or-nil :all [names...]}" + [args-form] + (var fixed @[]) + (var rest-name nil) + (var i 0) + (while (< i (length args-form)) + (let [a (in args-form i)] + (if (and (struct? a) (= :symbol (a :jolt/type)) (= "&" (a :name))) + (do + (+= i 1) + (if (< i (length args-form)) + (do + (set rest-name ((in args-form i) :name)) + (+= i 1)) + (error "& without argument in parameter list"))) + (do + (if (and (struct? a) (= :symbol (a :jolt/type))) + (array/push fixed (a :name)) + # destructuring form: recurse into it + (when (indexed? a) + (var di 0) + (while (< di (length a)) + (def inner (in a di)) + (if (and (struct? inner) (= :symbol (inner :jolt/type)) (= "&" (inner :name))) + (do + (+= di 1) + (if (< di (length a)) + (do + (set rest-name ((in a di) :name)) + (+= di 1)) + (error "& without argument in parameter list"))) + (do + (if (and (struct? inner) (= :symbol (inner :jolt/type))) + (array/push fixed (inner :name)) + # nested destructuring - extract names + (when (indexed? inner) + (each sym inner + (when (and (struct? sym) (= :symbol (sym :jolt/type))) + (array/push fixed (sym :name)))))) + (+= di 1)))))) + (+= i 1))))) + (var all @[]) + (each n fixed (array/push all n)) + (if rest-name (array/push all rest-name)) + {:fixed (tuple/slice (tuple ;fixed)) :rest rest-name :all (tuple/slice (tuple ;all))}) + +# Dispatch a special form by its string name. +(defn- unwrap-meta-name + "Recursively unwrap (with-meta sym meta) forms to extract the underlying symbol. + Returns the symbol struct, or the original form if it's not a with-meta wrapper." + [form] + (if (and (array? form) (> (length form) 0) + (struct? (in form 0)) + (= :symbol ((in form 0) :jolt/type)) + (= "with-meta" ((in form 0) :name))) + (unwrap-meta-name (in form 1)) + form)) -# Dispatch a special form by its string name. Each branch is a standalone -# expression that returns the value directly — no cond, no nested if chains. -# We use a local function per form and call the matching one. (defn- eval-list [ctx bindings form] (def first-form (first form)) - (def name (first-form :name)) + # Safe name extraction: non-symbol heads (e.g. keywords) fall through to default + (def name (if (and (struct? first-form) (= :symbol (first-form :jolt/type))) + (first-form :name) + nil)) (match name "quote" (in form 1) "syntax-quote" (syntax-quote* ctx bindings (in form 1)) @@ -134,13 +216,44 @@ (if (and (not (nil? test-val)) (not (= false test-val))) (eval-form ctx bindings (in form 2)) (if (> (length form) 3) (eval-form ctx bindings (in form 3)) nil))) - "def" (let [name-sym (in form 1) + "def" (let [raw-name (in form 1) + name-sym (unwrap-meta-name raw-name) val (eval-form ctx bindings (in form 2)) ns-name (ctx-current-ns ctx) ns (ctx-find-ns ctx ns-name)] (ns-intern ns (name-sym :name) val) (var-get (ns-intern ns (name-sym :name)))) - "ns" (let [ns-name (sym-name-str (in form 1)) + "defmacro" (let [name-sym (in form 1) + rest-form (tuple/slice form 2) + # optional docstring + has-doc? (and (> (length rest-form) 0) (string? (first rest-form))) + args-form (if has-doc? (in rest-form 1) (first rest-form)) + body (tuple/slice rest-form (if has-doc? 2 1)) + arg-info (parse-arg-names args-form) + fixed-names (arg-info :fixed) + rest-name (arg-info :rest)] + (def macro-fn (fn [& macro-args] + (var new-bindings @{}) + (table/setproto new-bindings bindings) + (put new-bindings "&env" @{}) # implicit &env for macro bodies (table — nil-safe) + (var i 0) + (each a fixed-names + (put new-bindings a (macro-args i)) + (++ i)) + (when rest-name + (put new-bindings rest-name (tuple/slice macro-args i))) + (var result nil) + (each bf body + (set result (eval-form ctx new-bindings bf))) + result)) + (let [ns-name (ctx-current-ns ctx) + ns (ctx-find-ns ctx ns-name)] + (def v (ns-intern ns (name-sym :name) macro-fn)) + (put v :macro true) + (var-get v))) + "ns" (let [raw-name (in form 1) + name-sym (unwrap-meta-name raw-name) + ns-name (sym-name-str name-sym) clauses (tuple/slice form 2)] (ctx-set-current-ns ctx ns-name) (ctx-find-ns ctx ns-name) @@ -153,9 +266,9 @@ (let [specs (tuple/slice clause 1) slen (length specs)] (var j 0) - (while (< j slen) - (let [s (in specs j)] - (eval-require ctx s)) + (while (< j slen) + (let [s (in specs j)] + (when s (eval-require ctx s))) (++ j)) (set i (+ i 1))) (do (set result clause) (++ i)))))) @@ -170,15 +283,19 @@ nil) "fn*" (let [args-form (in form 1) body (tuple/slice form 2) - arg-names (map |($ :name) args-form)] + arg-info (parse-arg-names args-form) + fixed-names (arg-info :fixed) + rest-name (arg-info :rest)] (var self nil) (set self (fn [& fn-args] (var fn-bindings @{}) (table/setproto fn-bindings bindings) (var i 0) - (each arg-name arg-names + (each arg-name fixed-names (put fn-bindings arg-name (fn-args i)) (++ i)) + (when rest-name + (put fn-bindings rest-name (tuple/slice fn-args i))) (put fn-bindings :jolt/loop-fn self) (var result nil) (each body-form body @@ -228,19 +345,184 @@ (error "recur used outside of loop* or fn*") (let [args (map |(eval-form ctx bindings $) (tuple/slice form 1))] (apply loop-fn args)))) + "throw" (let [val (eval-form ctx bindings (in form 1))] + (error {:jolt/type :jolt/exception :value val})) + "try" (let [body-form (in form 1) + clauses (tuple/slice form 2) + n (length clauses)] + (var catch-sym nil) + (var catch-body nil) + (var finally-body nil) + (var i 0) + (while (< i n) + (let [clause (in clauses i)] + (if (and (array? clause) (> (length clause) 0)) + (let [head (first clause)] + (if (and (struct? head) (= :symbol (head :jolt/type))) + (match (head :name) + "catch" (do + (set catch-sym (in clause 2)) + (set catch-body (tuple/slice clause 3))) + "finally" (set finally-body (tuple/slice clause 1))))))) + (++ i)) + (defn run-finally [f] + (when f + (each fb f (eval-form ctx bindings fb)))) + (if catch-sym + (try + (eval-form ctx bindings body-form) + ([err] + (var new-bindings @{}) + (table/setproto new-bindings bindings) + (put new-bindings (catch-sym :name) err) + (var result nil) + (each cb catch-body + (set result (eval-form ctx new-bindings cb))) + (run-finally finally-body) + result)) + (if finally-body + (try + (eval-form ctx bindings body-form) + ([err] + (run-finally finally-body) + (error err))) + (eval-form ctx bindings body-form)))) + "set!" (let [target-sym (in form 1) + val (eval-form ctx bindings (in form 2)) + v (resolve-var ctx bindings target-sym)] + (if v + (do (var-set v val) val) + # Auto-create var if it doesn't exist (e.g., *warn-on-reflection*) + (let [ns-name (ctx-current-ns ctx) + ns (ctx-find-ns ctx ns-name)] + (def new-v (ns-intern ns (target-sym :name) val)) + val))) + "var" (let [target-sym (in form 1) + v (resolve-var ctx bindings target-sym)] + (if v v (error (string "Unable to resolve var: " (sym-name-str target-sym) " in var")))) + "locking" (eval-form ctx bindings (in form 2)) + "instance?" (let [type-sym (in form 1) + val (eval-form ctx bindings (in form 2))] + (match (type-sym :name) + "Number" (number? val) + "String" (string? val) + "Boolean" (or (= true val) (= false val)) + "Keyword" (keyword? val) + "Object" true + false)) + "defmulti" (let [name-sym (in form 1) + dispatch-fn (eval-form ctx bindings (in form 2)) + ns (ctx-find-ns ctx (ctx-current-ns ctx)) + methods @{} + mm-fn (fn [& args] + (let [dv (apply dispatch-fn args) + method (get methods dv)] + (if method + (apply method args) + (error (string "No method in multimethod " + (name-sym :name) " for dispatch value: " + dv)))))] + (def v (ns-intern ns (name-sym :name) mm-fn)) + (put v :jolt/methods methods) + (var-get v)) + "defmethod" (let [mm-sym (in form 1) + dispatch-val (eval-form ctx bindings (in form 2)) + arg-vec (in form 3) + body (tuple/slice form 4) + # Extract names, handling metadata-wrapped symbols + extract-name (fn [arg] + (let [arg (unwrap-meta-name arg)] + (arg :name))) + arg-names (tuple/slice (map extract-name arg-vec)) + mm-var (resolve-var ctx bindings mm-sym) + # Auto-create multimethod if it doesn't exist + mm-var (if mm-var mm-var + (let [ns (ctx-find-ns ctx (ctx-current-ns ctx)) + dummy-fn (fn [& args] nil)] + (def v (ns-intern ns (mm-sym :name) dummy-fn)) + (put v :jolt/methods @{}) + v)) + methods (get mm-var :jolt/methods) + impl (fn [& args] + (var new-bindings @{}) + (table/setproto new-bindings bindings) + (var i 0) + (each a arg-names + (put new-bindings a (args i)) + (++ i)) + (var result nil) + (each bf body + (set result (eval-form ctx new-bindings bf))) + result)] + (put methods dispatch-val impl) + mm-var) + "deftype" (let [raw-name (in form 1) + type-name (unwrap-meta-name raw-name) + fields-vec (in form 2) + field-names (map + (fn [f] + # Handle ^:meta and ^Type annotations — extract the actual name + (let [f (unwrap-meta-name f)] + (if (and (struct? f) (= :symbol (f :jolt/type))) + (keyword (f :name)) + (error (string "Unsupported deftype field: " (string f)))))) + fields-vec) + ns-name (ctx-current-ns ctx) + type-tag (string ns-name "." (type-name :name))] + (defn ctor [& args] + (var inst @{:jolt/deftype type-tag}) + (var i 0) + (each fn field-names + (put inst fn (args i)) + (++ i)) + inst) + (let [ns (ctx-find-ns ctx ns-name) + ctor-name (type-name :name) + arrow-name (string "->" ctor-name)] + (ns-intern ns ctor-name ctor) + (ns-intern ns arrow-name ctor) + (var-get (ns-intern ns ctor-name)))) + "new" (let [type-sym (in form 1) + args (map |(eval-form ctx bindings $) (tuple/slice form 2)) + ctor (eval-form ctx bindings type-sym)] + (apply ctor args)) + "." (let [target (eval-form ctx bindings (in form 1)) + member-sym (in form 2) + member-name (member-sym :name)] + (if (> (length form) 3) + # method call: (. obj method args...) + (let [args (map |(eval-form ctx bindings $) (tuple/slice form 3))] + (if (target :jolt/deftype) + (let [method-key (keyword member-name)] + (apply (get target method-key) target ;args)) + (error (string "Cannot call method " member-name " on non-deftype")))) + # field access: (. obj field) + (get target (keyword member-name)))) # default: function application — check for macros (if (and (struct? first-form) (= :symbol (first-form :jolt/type))) - (let [v (resolve-var ctx bindings first-form)] - (if (and v (var-macro? v)) - (let [macro-fn (var-get v) - args (tuple/slice form 1)] - (eval-form ctx bindings (apply macro-fn args))) - (let [f (eval-form ctx bindings first-form) + (let [sym-name (first-form :name)] + # Handle ClassName. constructor syntax + (if (and (> (length sym-name) 0) (= (sym-name (- (length sym-name) 1)) 46)) + (let [type-name (string/slice sym-name 0 (- (length sym-name) 1)) + type-sym {:jolt/type :symbol :ns (first-form :ns) :name type-name} + ctor (eval-form ctx bindings type-sym) args (map |(eval-form ctx bindings $) (tuple/slice form 1))] - (apply f args)))) + (apply ctor args)) + (let [v (resolve-var ctx bindings first-form)] + (if (and v (var-macro? v)) + (let [macro-fn (var-get v) + args (tuple/slice form 1)] + (eval-form ctx bindings (apply macro-fn args))) + (let [f (eval-form ctx bindings first-form) + args (map |(eval-form ctx bindings $) (tuple/slice form 1))] + (apply f args)))))) (let [f (eval-form ctx bindings first-form) args (map |(eval-form ctx bindings $) (tuple/slice form 1))] - (apply f args))))) + (if (function? f) + (apply f args) + (if (keyword? f) + (get (first args) f) + (error (string "Cannot call " (type f) " as a function")))))))) (set eval-form (fn [ctx bindings form] (cond diff --git a/src/jolt/main.janet b/src/jolt/main.janet index 4b1aad8..494b852 100644 --- a/src/jolt/main.janet +++ b/src/jolt/main.janet @@ -19,16 +19,17 @@ (printf "#'%s/%s" (ctx-current-ns ctx) ((var-name v) :name)) (print v)))) -(print "Jolt — Clojure on Janet") -(print "Type (exit) to quit.\n") +(defn main [&] + (print "Jolt — Clojure on Janet") + (print "Type (exit) to quit.\n") -(var running true) -(while running - (let [line (read-line (string (ctx-current-ns ctx) "=> "))] - (if (nil? line) (set running false) - (if (= line "(exit)") (set running false) - (if (not (= "" line)) - (try - (print-value (eval-string ctx line)) - ([err] - (eprint "Error: " err)))))))) + (var running true) + (while running + (let [line (read-line (string (ctx-current-ns ctx) "=> "))] + (if (nil? line) (set running false) + (if (= line "(exit)") (set running false) + (if (not (= "" line)) + (try + (print-value (eval-string ctx line)) + ([err] + (eprint "Error: " err))))))))) diff --git a/src/jolt/reader.janet b/src/jolt/reader.janet index 6a126da..be9d753 100644 --- a/src/jolt/reader.janet +++ b/src/jolt/reader.janet @@ -202,7 +202,13 @@ (if (= (s pos) 41) # ) [items (+ pos 1)] (let [[form new-pos] (read-form s pos)] - (read-list-items s new-pos (array/push items form)))))) + # skip #_ discarded forms + (if (and (struct? form) (= :jolt/skip (form :jolt/type))) + (read-list-items s new-pos items) + # splice #?@ items into the list + (if (and (struct? form) (= :jolt/splice (form :jolt/type))) + (read-list-items s new-pos (array/concat items (form :items))) + (read-list-items s new-pos (array/push items form)))))))) (read-list-items s (+ pos 1) @[])) (defn read-vector [s pos] @@ -214,7 +220,11 @@ (if (= (s pos) 93) # ] [(tuple/slice (tuple ;items)) (+ pos 1)] (let [[form new-pos] (read-form s pos)] - (read-vec-items s new-pos (array/push items form)))))) + (if (and (struct? form) (= :jolt/skip (form :jolt/type))) + (read-vec-items s new-pos items) + (if (and (struct? form) (= :jolt/splice (form :jolt/type))) + (read-vec-items s new-pos (array/concat items (form :items))) + (read-vec-items s new-pos (array/push items form)))))))) (read-vec-items s (+ pos 1) @[])) (defn read-map [s pos] @@ -225,10 +235,21 @@ (error "Unterminated map")) (if (= (s pos) 125) # } [(struct ;kvs) (+ pos 1)] - (let [[key new-pos] (read-form s pos) - pos (skip-whitespace s new-pos) - [val new-pos2] (read-form s pos)] - (read-kvs s new-pos2 (-> kvs (array/push key) (array/push val))))))) + (let [[key new-pos] (read-form s pos)] + (if (and (struct? key) (= :jolt/skip (key :jolt/type))) + (read-kvs s new-pos kvs) + (if (and (struct? key) (= :jolt/splice (key :jolt/type))) + (read-kvs s new-pos (array/concat kvs (key :items))) + (let [pos (skip-whitespace s new-pos) + [val new-pos2] (read-form s pos)] + (if (and (struct? val) (= :jolt/skip (val :jolt/type))) + (read-kvs s new-pos2 kvs) + (if (and (struct? val) (= :jolt/splice (val :jolt/type))) + # Only push key if splice contributes items + (if (> (length (val :items)) 0) + (do (array/push kvs key) (read-kvs s new-pos2 (array/concat kvs (val :items)))) + (read-kvs s new-pos2 kvs)) + (read-kvs s new-pos2 (-> kvs (array/push key) (array/push val)))))))))))) (read-kvs s (+ pos 1) @[])) (defn read-set [s pos] @@ -240,7 +261,11 @@ (if (= (s pos) 125) # } [{:jolt/type :jolt/set :value (tuple/slice (tuple ;items))} (+ pos 1)] (let [[form new-pos] (read-form s pos)] - (read-set-items s new-pos (array/push items form)))))) + (if (and (struct? form) (= :jolt/skip (form :jolt/type))) + (read-set-items s new-pos items) + (if (and (struct? form) (= :jolt/splice (form :jolt/type))) + (read-set-items s new-pos (array/concat items (form :items))) + (read-set-items s new-pos (array/push items form)))))))) (read-set-items s (+ pos 2) @[])) (defn read-char-name-end [s pos] @@ -260,15 +285,53 @@ [(array/insert form 0 (sym "fn*")) new-pos])) (defn read-reader-conditional [s pos] - # pos is at #, next char is ? - (let [[form new-pos] (read-form s (+ pos 2))] - [{:jolt/type :jolt/reader-conditional :clauses form} new-pos])) + # pos is at #, next char is ? or ?@ + (def splice? (and (< (+ pos 2) (length s)) (= (s (+ pos 2)) 64))) # @ = 64 + (def form-start (if splice? (+ pos 3) (+ pos 2))) + (let [[form new-pos] (read-form s form-start)] + (if (array? form) + (do + (var result nil) + (var i 0) + (while (< i (length form)) + (if (= (in form i) :clj) + (do + (set result (in form (+ i 1))) + (set i (length form))) + (++ i))) + (if splice? + # #?@ splicing: resolve :clj branch, wrap for splice + (let [items (if (nil? result) + @[] + (if (or (array? result) (tuple? result)) + result + @[result]))] + [{:jolt/type :jolt/splice :items items} new-pos]) + # #? non-splicing: skip nil results (from :cljs branches on CLJ) + (if (nil? result) + [{:jolt/type :jolt/skip} new-pos] + [result new-pos]))) + [{:jolt/type :jolt/reader-conditional :clauses form} new-pos]))) (defn read-var-quote [s pos] # pos is at #, next char is ' (let [[form new-pos] (read-form s (+ pos 2))] [(array (sym "var") form) new-pos])) +(defn read-regex [s pos] + # pos is at #, next char is " + # Read until unescaped closing " + (var i (+ pos 2)) + (var done nil) + (while (and (< i (length s)) (not done)) + (if (= (s i) 92) # backslash — skip next char + (+= i 2) + (if (= (s i) 34) # closing quote + (set done [(struct ;[:jolt/type :jolt/tagged :tag :regex :form (string/slice s (+ pos 2) i)]) + (+ i 1)]) + (++ i)))) + (if done done (error "Unterminated regex literal"))) + (defn read-dispatch [s pos] # pos is at # (if (>= (+ pos 1) (length s)) @@ -279,8 +342,9 @@ (= c 40) (read-anon-fn s pos) # #( (= c 63) (read-reader-conditional s pos) # #? (= c 95) (let [[_ new-pos] (read-form s (+ pos 2))] # #_ - (read-form s new-pos)) + [{:jolt/type :jolt/skip} new-pos]) (= c 39) (read-var-quote s pos) # #' + (= c 34) (read-regex s pos) # #"regex # unknown dispatch — tagged literal (let [end (read-symbol-name s pos pos) tag (string/slice s pos end) @@ -311,7 +375,7 @@ # comment (= c 59) (let [line-end (read-until-newline s pos)] - (read-form s line-end)) + [{:jolt/type :jolt/skip} line-end]) # dispatch (= c 35) @@ -325,6 +389,16 @@ (= c 40) (read-list s pos) + # unmatched closing delimiters + (= c 41) + (error (string "Unmatched closing paren at " pos)) + + (= c 93) + (error (string "Unmatched closing bracket at " pos)) + + (= c 125) + (error (string "Unmatched closing brace at " pos)) + # vector (= c 91) (read-vector s pos) @@ -373,11 +447,17 @@ (defn parse-string "Parse a Clojure source string and return the first form." [s] - (let [[form _] (read-form s 0)] - form)) + (let [[form pos] (read-form s 0)] + (if (and (struct? form) (= :jolt/skip (form :jolt/type))) + (parse-string (string/slice s pos)) + form))) (defn parse-next "Parse the first form from a string. Returns [form remaining-string]." [s] - (let [[form pos] (read-form s 0)] - [form (string/slice s pos)])) + (defn- parse-next-loop [pos] + (let [[form new-pos] (read-form s pos)] + (if (and (struct? form) (= :jolt/skip (form :jolt/type))) + (parse-next-loop new-pos) + [form (string/slice s new-pos)]))) + (parse-next-loop 0)) diff --git a/test-defprotocol.janet b/test-defprotocol.janet new file mode 100644 index 0000000..6eea727 --- /dev/null +++ b/test-defprotocol.janet @@ -0,0 +1,26 @@ +(use ./src/jolt/evaluator) +(use ./src/jolt/types) +(use ./src/jolt/reader) +(use ./src/jolt/api) + +(def ctx (init)) + +# Test simple defprotocol expansion +(def proto-name {:jolt/type :symbol :ns nil :name "IBox"}) +(def sig1 @[{:jolt/type :symbol :ns nil :name "setVal"} {:jolt/type :symbol :ns nil :name "_this"} {:jolt/type :symbol :ns nil :name "_v"}]) +(def sig2 @[{:jolt/type :symbol :ns nil :name "getVal"} {:jolt/type :symbol :ns nil :name "_this"}]) + +# Call core-defprotocol directly +(use ./src/jolt/core) +(def expanded (core-defprotocol proto-name sig1 sig2)) +(print "expanded: " (string expanded)) + +# Try to eval it +(def [ok err] (protect (eval-form ctx @{} expanded))) +(if ok + (do + (print "eval OK!") + (let [ns (ctx-find-ns ctx (ctx-current-ns ctx))] + (printf "IBox: %q\n" (ns-find ns "IBox")) + (printf "setVal: %q\n" (ns-find ns "setVal")))) + (printf "eval FAIL: %q\n" err)) diff --git a/test-eval.janet b/test-eval.janet new file mode 100644 index 0000000..e1851d2 --- /dev/null +++ b/test-eval.janet @@ -0,0 +1,42 @@ +(use ./src/jolt/evaluator) +(use ./src/jolt/types) +(use ./src/jolt/reader) +(use ./src/jolt/api) + +(def ctx (init)) + +(defn load-all [] + (each fp ["/Users/yogthos/src/sci/src/sci/impl/macros.cljc" + "/Users/yogthos/src/sci/src/sci/impl/protocols.cljc" + "/Users/yogthos/src/sci/src/sci/impl/utils.cljc" + "/Users/yogthos/src/sci/src/sci/impl/types.cljc" + "/Users/yogthos/src/sci/src/sci/impl/unrestrict.cljc"] + (def src (slurp fp)) + (var s src) + (while (> (length (string/trim s)) 0) + (def [f r] (parse-next s)) (set s r) + (if (not (nil? f)) (protect (eval-form ctx @{} f))))) + (def vs (slurp "/Users/yogthos/src/sci/src/sci/impl/vars.cljc")) + (var s vs) (var c 0) + (while (and (> (length (string/trim s)) 0) (< c 27)) + (def [f r] (parse-next s)) (set s r) (++ c) + (if (not (nil? f)) (protect (eval-form ctx @{} f)))) + (each fp ["/Users/yogthos/src/sci/src/sci/lang.cljc" + "/Users/yogthos/src/sci/src/sci/core.cljc"] + (def src (slurp fp)) + (var s src) + (while (> (length (string/trim s)) 0) + (def [f r] (parse-next s)) (set s r) + (if (not (nil? f)) (protect (eval-form ctx @{} f)))))) + +(load-all) + +(print "=== Testing eval-string ===") + +# Call sci.core/eval-string via our own eval +(def src "(do (require (quote [sci.core :as sci])) (sci/eval-string (sci/init) (str (+ 1 2))))") +(printf "eval: %s\n" src) +(try + (def result (eval-form ctx @{} (parse-string src))) + (printf "result: %q\n" result) + ([err] (printf "FAIL: %q\n" err))) diff --git a/test-form15.janet b/test-form15.janet new file mode 100644 index 0000000..c53023b --- /dev/null +++ b/test-form15.janet @@ -0,0 +1,13 @@ +(use ./src/jolt/reader) + +(def src (slurp "/Users/yogthos/src/sci/src/sci/impl/utils.cljc")) +(var s src) +(for i 1 14 + (let [p (parse-next s)] + (set s (in p 1)))) + +(def [form15 rest] (parse-next s)) +(if (array? form15) + (printf "form15: (%s ...)" (get (first form15) :name)) + (printf "form15: %q" form15)) +(printf " => OK, rest: %d bytes" (length rest)) diff --git a/test-ivar.janet b/test-ivar.janet new file mode 100644 index 0000000..8cea3cc --- /dev/null +++ b/test-ivar.janet @@ -0,0 +1,16 @@ +(use ./src/jolt/evaluator) +(use ./src/jolt/types) +(use ./src/jolt/reader) +(use ./src/jolt/api) + +(def ctx (init)) +(eval-form ctx @{} (parse-string "(ns sci.lang)")) +(eval-form ctx @{} (parse-string "(definterface IVar)")) + +# Resolve sci.lang/IVar by evaluating as a qualified symbol +(def sym (parse-string "sci.lang/IVar")) +(printf "sym: %q\n" sym) +(try + (def v (eval-form ctx @{} sym)) + (printf "resolved: %q\n" v) + ([err] (printf "error: %q\n" err))) diff --git a/test-load-sci.janet b/test-load-sci.janet new file mode 100644 index 0000000..aa9fb3e --- /dev/null +++ b/test-load-sci.janet @@ -0,0 +1,44 @@ +(use ./src/jolt/evaluator) +(use ./src/jolt/types) +(use ./src/jolt/reader) +(use ./src/jolt/api) + +(def ctx (init)) + +(defn load-file-quiet [ctx fp stop-at] + (def src (slurp fp)) + (var s src) + (var c 0) + (var good 0) + (var bad 0) + (while (and (> (length (string/trim s)) 0) (or (not stop-at) (< c stop-at))) + (def pr (protect (parse-next s))) + (if (not (pr 0)) (do (printf "%s PARSE CRASH: %q\n" fp (pr 1)) (break))) + (let [[f r] (pr 1)] + (set s r) + (++ c) + (if (not (nil? f)) + (let [pr2 (protect (eval-form ctx @{} f))] + (if (pr2 0) (++ good) (++ bad)))))) + {:count c :good good :bad bad}) + +(each fp ["/Users/yogthos/src/sci/src/sci/impl/macros.cljc" + "/Users/yogthos/src/sci/src/sci/impl/protocols.cljc" + "/Users/yogthos/src/sci/src/sci/impl/utils.cljc" + "/Users/yogthos/src/sci/src/sci/impl/types.cljc" + "/Users/yogthos/src/sci/src/sci/impl/unrestrict.cljc"] + (load-file-quiet ctx fp nil)) + +(load-file-quiet ctx "/Users/yogthos/src/sci/src/sci/impl/vars.cljc" 27) +(load-file-quiet ctx "/Users/yogthos/src/sci/src/sci/lang.cljc" nil) + +# Summary +(printf "\nSummary:\n") +(printf "ns: %s\n" (ctx-current-ns ctx)) + +# Try loading sci.core +(print "\nLoading sci.core...") +(def r (load-file-quiet ctx "/Users/yogthos/src/sci/src/sci/core.cljc" nil)) +(printf "sci.core: %d forms, %d ok, %d fail\n" (r :count) (r :good) (r :bad)) + +(printf "ns: %s\n" (ctx-current-ns ctx)) diff --git a/test-parse-utils.janet b/test-parse-utils.janet new file mode 100644 index 0000000..6f14db6 --- /dev/null +++ b/test-parse-utils.janet @@ -0,0 +1,18 @@ +(use ./src/jolt/reader) +(def s (slurp "/Users/yogthos/src/sci/src/sci/impl/utils.cljc")) +(var ss s) +(var i 0) +(while (< i 14) + (def [f r] (parse-next ss)) + (set ss r) + (++ i)) +(try + (def [form rest] (parse-next ss)) + (if (array? form) + (let [h (first form)] + (if (and (struct? h) (= :symbol (h :jolt/type))) + (print (string "form: (" (h :name) "...)")) + (print (string "form: array head " (type h))))) + (print (string "form: " (type form) " " (string form)))) + (print (string "OK rest: " (string/slice rest 0 80))) + ([err] (print (string "FAIL: " err)))) diff --git a/test/bootstrap-test.janet b/test/bootstrap-test.janet new file mode 100644 index 0000000..c1581ba --- /dev/null +++ b/test/bootstrap-test.janet @@ -0,0 +1,28 @@ +(use ../src/jolt/evaluator) +(use ../src/jolt/types) +(use ../src/jolt/reader) +(use ../src/jolt/api) + +(def ctx (init)) +(def source (slurp "/Users/yogthos/src/sci/src/sci/impl/macros.cljc")) +(var s source) +(var count 0) + +(while (> (length (string/trim s)) 0) + (def [form rest] (parse-next s)) + (set s rest) + (++ count) + (if (not (nil? form)) + (do + (printf "eval form %d..." count) + (flush) + (eval-form ctx @{} form) + (printf " OK\n")))) + +(printf "\n%d forms processed\n" count) +(printf "ns: %s\n" (ctx-current-ns ctx)) + +(let [ns (ctx-find-ns ctx "sci.impl.macros")] + (printf "sci.impl.macros bindings:\n") + (loop [[name v] :pairs (ns :mappings)] + (printf " %s: macro=%q\n" name (v :macro)))) diff --git a/test/evaluator-test.janet b/test/evaluator-test.janet index 5082ab6..72e97fd 100644 --- a/test/evaluator-test.janet +++ b/test/evaluator-test.janet @@ -1,6 +1,7 @@ (use ../src/jolt/evaluator) (use ../src/jolt/types) (use ../src/jolt/reader) +(use ../src/jolt/api) # Helper: create a Jolt symbol (defn sym [name] @@ -70,4 +71,81 @@ (assert (= 0 (countdown 5)) "recur in fn")) (print " passed") +(print "10: throw/try/catch/finally...") +# throw + catch +(let [result (eval-str "(try (throw \"boom\") (catch Exception e \"caught\"))")] + (assert (= "caught" result) "catch catches throw")) + +# try with finally — body returns, finally runs +(let [result (eval-str "(try 1 (finally 2))")] + (assert (= 1 result) "try returns body even with finally")) + +# try/catch/finally — catch returns, finally runs +(let [result (eval-str "(try (throw \"err\") (catch Exception e \"handled\") (finally :cleanup))")] + (assert (= "handled" result) "catch + finally returns catch value")) +(print " passed") + +(print "11: set!...") +# set! on a var +(assert (= 99 (eval-str "(do (def x 1) (set! x 99) x)")) "set! on var") +# set! re-evaluates +(assert (= 3 (eval-str "(do (def a 1) (def b 2) (set! a (+ a b)) a)")) "set! with expression") +(print " passed") + +(print "12: var...") +# (var x) returns the var itself, not its value +(let [v (eval-str "(do (def x 42) (var x))")] + (assert (var? v) "(var x) returns a var") + (assert (= 42 (var-get v)) "var holds value")) +(print " passed") + +(print "13: locking...") +# locking is a no-op in single-threaded Janet — just executes body +(assert (= 42 (eval-str "(locking :lock 42)")) "locking returns body result") +(print " passed") + +(print "14: instance?...") +# instance? checks type +(assert (= true (eval-str "(instance? Number 42)")) "instance? Number matches number") +(assert (= false (eval-str "(instance? Number \"hello\")")) "instance? Number doesn't match string") +(print " passed") + +(print "15: defmulti/defmethod...") +(let [ctx (make-ctx)] + (eval-form ctx @{} (parse-string "(defmulti my-dispatch (fn* [x] (x :type)))")) + (eval-form ctx @{} (parse-string "(defmethod my-dispatch :foo [_] :got-foo)")) + (eval-form ctx @{} (parse-string "(defmethod my-dispatch :bar [_] :got-bar)")) + (assert (= :got-foo (eval-form ctx @{} (parse-string "(my-dispatch {:type :foo})"))) "defmethod :foo dispatches") + (assert (= :got-bar (eval-form ctx @{} (parse-string "(my-dispatch {:type :bar})"))) "defmethod :bar dispatches")) +(print " passed") + +(print "16: deftype...") +(let [ctx (make-ctx) + _ (eval-form ctx @{} (parse-string "(deftype Point [x y])")) + _ (eval-form ctx @{} (parse-string "(def p (Point. 10 20))")) + p-val (eval-form ctx @{} (parse-string "p")) + x-val (eval-form ctx @{} (parse-string "(p :x)")) + y-val (eval-form ctx @{} (parse-string "(p :y)")) + result [x-val y-val]] + (printf " p-val: %q" p-val) + (printf " x-val: %q, y-val: %q" x-val y-val) + (printf " result: %q" result) + (assert (deep= [10 20] result) "deftype creates tagged instances with fields")) +(print " passed") + +(print "17: defmacro...") +# define a macro using defmacro special form +# init loads clojure.core so `list` is available +(let [ctx (init) + _ (eval-form ctx @{} (parse-string "(defmacro my-when [test body] (list 'if test body nil))")) + result (eval-form ctx @{} (parse-string "(my-when true 2)"))] + (assert (= 2 result) "defmacro defines callable macro")) +# verify the var is marked :macro +(let [ctx (make-ctx) + _ (eval-form ctx @{} (parse-string "(defmacro m [x] (list 'quote x))")) + v (resolve-var ctx @{} (parse-string "m"))] + (assert v "macro var exists") + (assert (v :macro) "macro var has :macro true")) +(print " passed") + (print "\nAll evaluator tests passed!") diff --git a/test/reader-test.janet b/test/reader-test.janet index a9d28fd..596f02a 100644 --- a/test/reader-test.janet +++ b/test/reader-test.janet @@ -115,10 +115,18 @@ (let [[form2 _] (parse-next rest-str)] (assert (deep= [3 4] form2) "second form is vector"))) -# Reader conditional (basic #? support) -(let [form (parse-string "#?(:clj 1 :cljs 2)")] - (assert (struct? form) "reader conditional") - (assert (= :jolt/reader-conditional (form :jolt/type)) "correct type")) +# Reader conditional — resolves :clj branch at read time +(assert (= 1 (parse-string "#?(:clj 1 :cljs 2)")) + "#?(:clj) picks :clj branch") +(assert (= nil (parse-string "#?(:cljs 999)")) + "#?(:cljs) returns nil on CLJ") +(assert (= 42 (parse-string "#?(:clj 42)")) + "#?(:clj) with single branch") +(assert (deep= (sym "clj-only") (parse-string "#?(:clj clj-only :cljs cljs-only)")) + "#?(:clj) picks :clj symbol") +# Nested inside a list — :clj branch is evaluated at read time +(assert (deep= @[(sym "+") 1 3] (parse-string "(+ 1 #?(:clj 3 :cljs 4))")) + "#? inside list picks :clj") # Characters (let [form (parse-string "\\newline")]