From 60e5f0d270c33f585c6141936d7ef6f618c7b311 Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Sun, 27 Apr 2025 12:36:02 +0200 Subject: [PATCH 01/11] fix(errors): error messages for concat and concat! now report the correct number of arguments --- lib/modules | 2 +- src/arkreactor/VM/VM.cpp | 12 ------------ .../typeChecking/concat_in_place_num_num.expected | 5 +++-- .../typeChecking/concat_num_num.expected | 5 +++-- 4 files changed, 7 insertions(+), 17 deletions(-) diff --git a/lib/modules b/lib/modules index a16d1a5c..1438b399 160000 --- a/lib/modules +++ b/lib/modules @@ -1 +1 @@ -Subproject commit a16d1a5c4b30ad6d799f1d92c0dd09c42d72cfc8 +Subproject commit 1438b399a5b6976339d3a194bbb0385a2043896e diff --git a/src/arkreactor/VM/VM.cpp b/src/arkreactor/VM/VM.cpp index c7d0973b..f62546d6 100644 --- a/src/arkreactor/VM/VM.cpp +++ b/src/arkreactor/VM/VM.cpp @@ -710,12 +710,6 @@ namespace Ark { { Value* list = popAndResolveAsPtr(context); - if (list->valueType() != ValueType::List) - throw types::TypeCheckingError( - "concat", - { { types::Contract { { types::Typedef("list", ValueType::List) } } } }, - { *list }); - Value obj { *list }; for (uint16_t i = 0; i < arg; ++i) @@ -754,12 +748,6 @@ namespace Ark { Value* list = popAndResolveAsPtr(context); - if (list->valueType() != ValueType::List) - throw types::TypeCheckingError( - "concat!", - { { types::Contract { { types::Typedef("list", ValueType::List) } } } }, - { *list }); - for (uint16_t i = 0; i < arg; ++i) { Value* next = popAndResolveAsPtr(context); diff --git a/tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_in_place_num_num.expected b/tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_in_place_num_num.expected index 6af7c154..c81c8a12 100644 --- a/tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_in_place_num_num.expected +++ b/tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_in_place_num_num.expected @@ -1,5 +1,6 @@ -Function concat! expected 1 argument - -> list (List) was of type Number +Function concat! expected 2 arguments + -> dst (List) was of type Number + -> src (List) was of type Number In file tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_in_place_num_num.ark 1 | (mut L 1) diff --git a/tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_num_num.expected b/tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_num_num.expected index 807d3342..730bdbbc 100644 --- a/tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_num_num.expected +++ b/tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_num_num.expected @@ -1,5 +1,6 @@ -Function concat expected 1 argument - -> list (List) was of type Number +Function concat expected 2 arguments + -> dst (List) was of type Number + -> src (List) was of type Number In file tests/unittests/resources/DiagnosticsSuite/typeChecking/concat_num_num.ark 1 | (concat 1 3) From 58a0985f8d040466d3ac76f74feb7f44bf2d17a3 Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Mon, 28 Apr 2025 16:39:39 +0200 Subject: [PATCH 02/11] feat(errors, vm): enhanced arity error messages by adding details about expected call and the values that were actually given --- include/Ark/VM/VM.hpp | 3 ++ include/Ark/VM/VM.inl | 21 ++-------- src/arkreactor/VM/VM.cpp | 41 +++++++++++++++++++ src/arkreactor/VM/Value.cpp | 4 +- .../runtime/arity_error_async.expected | 2 +- .../runtime/not_enough_args.expected | 4 +- .../runtime/recursion_depth.expected | 2 +- .../runtime/too_many_args.expected | 4 +- 8 files changed, 56 insertions(+), 25 deletions(-) diff --git a/include/Ark/VM/VM.hpp b/include/Ark/VM/VM.hpp index 56a01ccc..34b340e3 100644 --- a/include/Ark/VM/VM.hpp +++ b/include/Ark/VM/VM.hpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -338,6 +339,8 @@ namespace Ark */ static void throwVMError(internal::ErrorKind kind, const std::string& message); + void throwArityError(std::size_t passed_arg_count, std::size_t expected_arg_count, internal::ExecutionContext& context); + void showBacktraceWithException(const std::exception& e, internal::ExecutionContext& context); /** diff --git a/include/Ark/VM/VM.inl b/include/Ark/VM/VM.inl index ce5d8a2a..3fa516b3 100644 --- a/include/Ark/VM/VM.inl +++ b/include/Ark/VM/VM.inl @@ -282,7 +282,7 @@ inline void VM::call(internal::ExecutionContext& context, const uint16_t argc) for (uint16_t j = 0; j < argc; ++j) { // because we pull `argc` from the CALL instruction generated by the compiler, - // we are guaranted to have `argc` values pushed on the stack ; thus we can + // we are guaranteed to have `argc` values pushed on the stack ; thus we can // skip the `if (context.sp > 0)` check Value* val = &context.stack[context.sp - argc + j]; if (val->valueType() == ValueType::Reference) @@ -361,21 +361,8 @@ inline void VM::call(internal::ExecutionContext& context, const uint16_t argc) index += 4; // instructions are on 4 bytes } - if (needed_argc != argc) [[unlikely]] - { - if (context.last_symbol < m_state.m_symbols.size()) - throwVMError( - ErrorKind::Arity, - fmt::format( - "Function `{}' needs {} arguments, but it received {}", - m_state.m_symbols[context.last_symbol], needed_argc, argc)); - else - throwVMError( - ErrorKind::Arity, - fmt::format( - "Function at page {} needs {} arguments, but it received {}", - context.pp, needed_argc, argc)); - } + if (std::cmp_not_equal(needed_argc, argc)) [[unlikely]] + throwArityError(argc, needed_argc, context); } inline void VM::callBuiltin(internal::ExecutionContext& context, const Value& builtin, const uint16_t argc) @@ -387,7 +374,7 @@ inline void VM::callBuiltin(internal::ExecutionContext& context, const Value& bu for (uint16_t j = 0; j < argc; ++j) { // because we pull `argc` from the CALL instruction generated by the compiler, - // we are guaranted to have `argc` values pushed on the stack ; thus we can + // we are guaranteed to have `argc` values pushed on the stack ; thus we can // skip the `if (context.sp > 0)` check Value* val = &context.stack[context.sp - argc + j]; if (val->valueType() == ValueType::Reference) diff --git a/src/arkreactor/VM/VM.cpp b/src/arkreactor/VM/VM.cpp index f62546d6..e6375317 100644 --- a/src/arkreactor/VM/VM.cpp +++ b/src/arkreactor/VM/VM.cpp @@ -1586,6 +1586,47 @@ namespace Ark throw std::runtime_error(std::string(errorKinds[static_cast(kind)]) + ": " + message + "\n"); } + void VM::throwArityError(std::size_t passed_arg_count, std::size_t expected_arg_count, internal::ExecutionContext& context) + { + std::vector arg_names; + arg_names.reserve(expected_arg_count + 1); + if (expected_arg_count > 0) + arg_names.emplace_back(""); // for formatting, so that we have a space between the function and the args + + std::size_t index = 0; + while (m_state.m_pages[context.pp][index] == STORE) + { + const auto id = static_cast((m_state.m_pages[context.pp][index + 2] << 8) + m_state.m_pages[context.pp][index + 3]); + arg_names.push_back(m_state.m_symbols[id]); + index += 4; + } + + std::vector arg_vals; + arg_vals.reserve(passed_arg_count + 1); + if (passed_arg_count > 0) + arg_vals.emplace_back(""); // for formatting, so that we have a space between the function and the args + + for (std::size_t i = 0; i < passed_arg_count && i + 1 >= context.sp; ++i) + // -1 on the stack because we always point to the next available slot + arg_vals.push_back(context.stack[context.sp - i - 1].toString(*this)); + + std::string function_name = (context.last_symbol < m_state.m_symbols.size()) + ? m_state.m_symbols[context.last_symbol] + : Value(static_cast(context.pp)).toString(*this); + + throwVMError( + ErrorKind::Arity, + fmt::format( + "When calling `({}{})', received {} argument{}, but expected {}: `({}{})'", + function_name, + fmt::join(arg_vals, " "), + passed_arg_count, + passed_arg_count > 1 ? "s" : "", + expected_arg_count, + function_name, + fmt::join(arg_names, " "))); + } + void VM::showBacktraceWithException(const std::exception& e, internal::ExecutionContext& context) { std::string text = e.what(); diff --git a/src/arkreactor/VM/Value.cpp b/src/arkreactor/VM/Value.cpp index 4ff66fc0..7cbf4ae4 100644 --- a/src/arkreactor/VM/Value.cpp +++ b/src/arkreactor/VM/Value.cpp @@ -75,7 +75,7 @@ namespace Ark return string(); case ValueType::PageAddr: - return fmt::format("Function @ {}", pageAddr()); + return fmt::format("Function@{}", pageAddr()); case ValueType::CProc: return "CProcedure"; @@ -119,7 +119,7 @@ namespace Ark return "Ref(self)"; case ValueType::InstPtr: - return fmt::format("Instruction @ {}", pageAddr()); + return fmt::format("Instruction@{}", pageAddr()); default: return "~\\._./~"; diff --git a/tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.expected b/tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.expected index 515306b6..2fc37bf0 100644 --- a/tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.expected +++ b/tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.expected @@ -1,4 +1,4 @@ -ArityError: Function at page 1 needs 3 arguments, but it received 4 +ArityError: When calling `(Function@1)', received 4 arguments, but expected 3: `(Function@1 a b c)' In file tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.ark 1 | (let sum (fun (a b c) diff --git a/tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.expected b/tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.expected index 38e655fa..49646678 100644 --- a/tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.expected +++ b/tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.expected @@ -1,4 +1,4 @@ -ArityError: Function `foo' needs 2 arguments, but it received 1 +ArityError: When calling `(foo)', received 1 argument, but expected 2: `(foo a b)' In file tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.ark 1 | (let foo (fun (a b) (+ a b))) @@ -10,4 +10,4 @@ In file tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.ark [ 1] In global scope (tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.ark:2) Current scope variables values: -foo = Function @ 1 +foo = Function@1 diff --git a/tests/unittests/resources/DiagnosticsSuite/runtime/recursion_depth.expected b/tests/unittests/resources/DiagnosticsSuite/runtime/recursion_depth.expected index 7187fda3..9ca11738 100644 --- a/tests/unittests/resources/DiagnosticsSuite/runtime/recursion_depth.expected +++ b/tests/unittests/resources/DiagnosticsSuite/runtime/recursion_depth.expected @@ -13,5 +13,5 @@ In file tests/unittests/resources/DiagnosticsSuite/runtime/recursion_depth.ark [ 1] In global scope (tests/unittests/resources/DiagnosticsSuite/runtime/recursion_depth.ark:7) Current scope variables values: -foo = Function @ 1 +foo = Function@1 a = 2045 diff --git a/tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.expected b/tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.expected index d618a3b9..766fc0ee 100644 --- a/tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.expected +++ b/tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.expected @@ -1,4 +1,4 @@ -ArityError: Function `foo' needs 2 arguments, but it received 3 +ArityError: When calling `(foo)', received 3 arguments, but expected 2: `(foo a b)' In file tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.ark 1 | (let foo (fun (a b) (+ a b))) @@ -10,4 +10,4 @@ In file tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.ark [ 1] In global scope (tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.ark:2) Current scope variables values: -foo = Function @ 1 +foo = Function@1 From 3d82290f011f768a613a5db60fb93b04e22e94ba Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Mon, 28 Apr 2025 18:22:29 +0200 Subject: [PATCH 03/11] refactor(vm): deduplicate code to call a builtin --- include/Ark/VM/VM.inl | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/include/Ark/VM/VM.inl b/include/Ark/VM/VM.inl index 3fa516b3..ecd8e448 100644 --- a/include/Ark/VM/VM.inl +++ b/include/Ark/VM/VM.inl @@ -275,24 +275,7 @@ inline void VM::call(internal::ExecutionContext& context, const uint16_t argc) // is it a builtin function name? case ValueType::CProc: { - // drop arguments from the stack - std::vector args; - args.reserve(argc); - - for (uint16_t j = 0; j < argc; ++j) - { - // because we pull `argc` from the CALL instruction generated by the compiler, - // we are guaranteed to have `argc` values pushed on the stack ; thus we can - // skip the `if (context.sp > 0)` check - Value* val = &context.stack[context.sp - argc + j]; - if (val->valueType() == ValueType::Reference) - val = val->reference(); - args.emplace_back(*val); - } - context.sp -= argc; - // call proc - push(function.proc()(args, this), context); - + callBuiltin(context, function, argc); return; } From f130b7137cb83c55c515e8ff477dd871992d8e27 Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Mon, 28 Apr 2025 18:28:52 +0200 Subject: [PATCH 04/11] fix(vm): error messages for not callable values shouldn't rely on the last symbol loaded but the value we tried to use as a function --- include/Ark/VM/VM.inl | 17 +++++------------ .../runtime/not_callable_with_args.ark | 3 +++ .../runtime/not_callable_with_args.expected | 8 ++++++++ 3 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 tests/unittests/resources/DiagnosticsSuite/runtime/not_callable_with_args.ark create mode 100644 tests/unittests/resources/DiagnosticsSuite/runtime/not_callable_with_args.expected diff --git a/include/Ark/VM/VM.inl b/include/Ark/VM/VM.inl index ecd8e448..efde5a0d 100644 --- a/include/Ark/VM/VM.inl +++ b/include/Ark/VM/VM.inl @@ -318,18 +318,11 @@ inline void VM::call(internal::ExecutionContext& context, const uint16_t argc) default: { - if (context.last_symbol < m_state.m_symbols.size()) - throwVMError( - ErrorKind::Type, - fmt::format( - "`{}' is not a Function but a {}", - m_state.m_symbols[context.last_symbol], types_to_str[static_cast(function.valueType())])); - else - throwVMError( - ErrorKind::Type, - fmt::format( - "{} is not a Function but a {}", - function.toString(*this), types_to_str[static_cast(function.valueType())])); + throwVMError( + ErrorKind::Type, + fmt::format( + "{} is not a Function but a {}", + function.toString(*this), types_to_str[static_cast(function.valueType())])); } } diff --git a/tests/unittests/resources/DiagnosticsSuite/runtime/not_callable_with_args.ark b/tests/unittests/resources/DiagnosticsSuite/runtime/not_callable_with_args.ark new file mode 100644 index 00000000..1e066054 --- /dev/null +++ b/tests/unittests/resources/DiagnosticsSuite/runtime/not_callable_with_args.ark @@ -0,0 +1,3 @@ +(let a 1) + +(nil 2 a) diff --git a/tests/unittests/resources/DiagnosticsSuite/runtime/not_callable_with_args.expected b/tests/unittests/resources/DiagnosticsSuite/runtime/not_callable_with_args.expected new file mode 100644 index 00000000..1593769d --- /dev/null +++ b/tests/unittests/resources/DiagnosticsSuite/runtime/not_callable_with_args.expected @@ -0,0 +1,8 @@ +TypeError: nil is not a Function but a Nil + +In file tests/unittests/resources/DiagnosticsSuite/runtime/not_callable_with_args.ark + 1 | (let a 1) + 2 | + 3 | (nil 2 a) + | ^~~~~~~~ + 4 | From be06d16c1b46a31c43eeb0481bb34856e25bd6c4 Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Mon, 28 Apr 2025 19:13:24 +0200 Subject: [PATCH 05/11] feat(runtime type checking): use the notion of variadic arguments in the error message to provide better messages --- src/arkreactor/Builtins/IO.cpp | 2 +- src/arkreactor/TypeChecker.cpp | 14 ++++++++++---- src/arkreactor/VM/VM.cpp | 18 ++++++++++++++---- .../append_in_place_num_num.expected | 3 ++- .../typeChecking/append_num_num.expected | 3 ++- .../typeChecking/ioremovefiles_num.expected | 5 ++--- .../ioremovefiles_str_num.expected | 2 +- .../typeChecking/stringformat_num.expected | 2 +- .../TypeCheckerSuite/variadic.expected | 2 +- 9 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/arkreactor/Builtins/IO.cpp b/src/arkreactor/Builtins/IO.cpp index a2c84772..7bfc134c 100644 --- a/src/arkreactor/Builtins/IO.cpp +++ b/src/arkreactor/Builtins/IO.cpp @@ -262,7 +262,7 @@ namespace Ark::internal::Builtins::IO if (n.empty() || n[0].valueType() != ValueType::String) throw types::TypeCheckingError( "io:removeFiles", - { { types::Contract { { types::Typedef("filename", ValueType::String), types::Typedef("filenames", ValueType::String, /* variadic */ true) } } } }, + { { types::Contract { { types::Typedef("filename", ValueType::String, /* is_variadic= */ true) } } } }, n); for (auto it = n.begin(), it_end = n.end(); it != it_end; ++it) diff --git a/src/arkreactor/TypeChecker.cpp b/src/arkreactor/TypeChecker.cpp index 1ad9b670..546c0880 100644 --- a/src/arkreactor/TypeChecker.cpp +++ b/src/arkreactor/TypeChecker.cpp @@ -125,12 +125,16 @@ namespace Ark::types // get expected arguments count std::size_t min_argc = std::numeric_limits::max(), max_argc = 0; + bool variadic = false; for (const auto& [arguments] : contracts) { if (arguments.size() < min_argc) min_argc = arguments.size(); if (arguments.size() > max_argc) max_argc = arguments.size(); + + if (!arguments.empty() && arguments.back().variadic) + variadic = true; } bool correct_argcount = true; @@ -157,24 +161,26 @@ namespace Ark::types else { fmt::dynamic_format_arg_store store; + store.push_back(variadic ? "at least " : ""); if (colorize) store.push_back(fmt::styled(min_argc, fmt::fg(fmt::color::yellow))); else store.push_back(min_argc); store.push_back(min_argc > 1 ? "s" : ""); - fmt::vprint(os, "{} argument{}", store); + fmt::vprint(os, "{}{} argument{}", store); if (sanitizedArgs.size() != min_argc) correct_argcount = false; } - if (!correct_argcount) + if (!correct_argcount || variadic) { + std::string preposition = (variadic && args.size() >= min_argc) ? "and" : "but"; if (colorize) - fmt::print(os, " but got {}", fmt::styled(sanitizedArgs.size(), fmt::fg(fmt::color::red))); + fmt::print(os, " {} got {}", preposition, fmt::styled(sanitizedArgs.size(), fmt::fg(fmt::color::red))); else - fmt::print(os, " but got {}", sanitizedArgs.size()); + fmt::print(os, " {} got {}", preposition, sanitizedArgs.size()); } fmt::print(os, "\n"); diff --git a/src/arkreactor/VM/VM.cpp b/src/arkreactor/VM/VM.cpp index e6375317..98bfaac1 100644 --- a/src/arkreactor/VM/VM.cpp +++ b/src/arkreactor/VM/VM.cpp @@ -689,10 +689,15 @@ namespace Ark { Value* list = popAndResolveAsPtr(context); if (list->valueType() != ValueType::List) + { + std::vector args = { *list }; + for (uint16_t i = 0; i < arg; ++i) + args.push_back(*popAndResolveAsPtr(context)); throw types::TypeCheckingError( "append", - { { types::Contract { { types::Typedef("list", ValueType::List) } } } }, - { *list }); + { { types::Contract { { types::Typedef("list", ValueType::List), types::Typedef("value", ValueType::Any, /* variadic= */ true) } } } }, + args); + } const auto size = static_cast(list->constList().size()); @@ -734,10 +739,15 @@ namespace Ark Value* list = popAndResolveAsPtr(context); if (list->valueType() != ValueType::List) + { + std::vector args = { *list }; + for (uint16_t i = 0; i < arg; ++i) + args.push_back(*popAndResolveAsPtr(context)); throw types::TypeCheckingError( "append!", - { { types::Contract { { types::Typedef("list", ValueType::List) } } } }, - { *list }); + { { types::Contract { { types::Typedef("list", ValueType::List), types::Typedef("value", ValueType::Any, /* variadic= */ true) } } } }, + args); + } for (uint16_t i = 0; i < arg; ++i) list->push_back(*popAndResolveAsPtr(context)); diff --git a/tests/unittests/resources/DiagnosticsSuite/typeChecking/append_in_place_num_num.expected b/tests/unittests/resources/DiagnosticsSuite/typeChecking/append_in_place_num_num.expected index c05253be..704f2960 100644 --- a/tests/unittests/resources/DiagnosticsSuite/typeChecking/append_in_place_num_num.expected +++ b/tests/unittests/resources/DiagnosticsSuite/typeChecking/append_in_place_num_num.expected @@ -1,5 +1,6 @@ -Function append! expected 1 argument +Function append! expected at least 2 arguments and got 2 -> list (List) was of type Number + -> variadic value (any) In file tests/unittests/resources/DiagnosticsSuite/typeChecking/append_in_place_num_num.ark 1 | (mut L 1) diff --git a/tests/unittests/resources/DiagnosticsSuite/typeChecking/append_num_num.expected b/tests/unittests/resources/DiagnosticsSuite/typeChecking/append_num_num.expected index b93da8c8..08bfdc92 100644 --- a/tests/unittests/resources/DiagnosticsSuite/typeChecking/append_num_num.expected +++ b/tests/unittests/resources/DiagnosticsSuite/typeChecking/append_num_num.expected @@ -1,5 +1,6 @@ -Function append expected 1 argument +Function append expected at least 2 arguments and got 2 -> list (List) was of type Number + -> variadic value (any) In file tests/unittests/resources/DiagnosticsSuite/typeChecking/append_num_num.ark 1 | (append 1 3) diff --git a/tests/unittests/resources/DiagnosticsSuite/typeChecking/ioremovefiles_num.expected b/tests/unittests/resources/DiagnosticsSuite/typeChecking/ioremovefiles_num.expected index 50ad86c4..e6c888c2 100644 --- a/tests/unittests/resources/DiagnosticsSuite/typeChecking/ioremovefiles_num.expected +++ b/tests/unittests/resources/DiagnosticsSuite/typeChecking/ioremovefiles_num.expected @@ -1,6 +1,5 @@ -Function io:removeFiles expected 2 arguments but got 1 - -> filename (String) was of type Number - -> variadic filenames (String) was not provided +Function io:removeFiles expected at least 1 argument and got 1 + -> variadic filename (String) 1 argument do not match In file tests/unittests/resources/DiagnosticsSuite/typeChecking/ioremovefiles_num.ark 1 | (io:removeFiles 1) diff --git a/tests/unittests/resources/DiagnosticsSuite/typeChecking/ioremovefiles_str_num.expected b/tests/unittests/resources/DiagnosticsSuite/typeChecking/ioremovefiles_str_num.expected index ea23c11b..012aac47 100644 --- a/tests/unittests/resources/DiagnosticsSuite/typeChecking/ioremovefiles_str_num.expected +++ b/tests/unittests/resources/DiagnosticsSuite/typeChecking/ioremovefiles_str_num.expected @@ -1,4 +1,4 @@ -Function io:removeFiles expected 2 arguments +Function io:removeFiles expected at least 2 arguments and got 2 -> filename (String) -> variadic filenames (String) 1 argument do not match diff --git a/tests/unittests/resources/DiagnosticsSuite/typeChecking/stringformat_num.expected b/tests/unittests/resources/DiagnosticsSuite/typeChecking/stringformat_num.expected index a2ce1ab2..3e671c35 100644 --- a/tests/unittests/resources/DiagnosticsSuite/typeChecking/stringformat_num.expected +++ b/tests/unittests/resources/DiagnosticsSuite/typeChecking/stringformat_num.expected @@ -1,4 +1,4 @@ -Function string:format expected 2 arguments but got 1 +Function string:format expected at least 2 arguments but got 1 -> string (String) was of type Number -> variadic value (any) was not provided diff --git a/tests/unittests/resources/TypeCheckerSuite/variadic.expected b/tests/unittests/resources/TypeCheckerSuite/variadic.expected index f5e04e93..fdd9fab2 100644 --- a/tests/unittests/resources/TypeCheckerSuite/variadic.expected +++ b/tests/unittests/resources/TypeCheckerSuite/variadic.expected @@ -1,2 +1,2 @@ -Function f expected 1 argument but got 2 +Function f expected at least 1 argument and got 2 -> variadic vararg (Number) 1 argument do not match From d302e9d0bb14cf8df9a3b301c8bee221a90c908f Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Thu, 1 May 2025 19:04:10 +0200 Subject: [PATCH 06/11] chore(fuzzing): update corpus --- .gitignore | 1 + tests/fuzzing/corpus-cmin-tmin/c.ark | 34 ++--- tests/fuzzing/corpus-cmin-tmin/d.ark | 37 ++++++ .../corpus-cmin-tmin/examples_callbacks.ark | 34 ----- .../corpus-cmin-tmin/examples_collatz.ark | 6 +- .../corpus-cmin-tmin/examples_error.ark | 8 +- .../corpus-cmin-tmin/examples_fizz_buzz.ark | 13 ++ .../examples_games_game_of_life.ark | 115 ++++++++--------- .../examples_games_more-or-less.ark | 22 ---- .../corpus-cmin-tmin/examples_macros.ark | 34 ++--- .../corpus-cmin-tmin/examples_quicksort.ark | 22 ++-- .../examples_show_ascii_table.ark | 15 +++ .../corpus-cmin-tmin/examples_sum_digits.ark | 20 ++- .../tests_benchmarks_resources_parser_big.ark | 66 +++++----- ...sts_benchmarks_resources_parser_medium.ark | 8 +- ...hmarks_resources_parser_some_important.ark | 2 - ...benchmarks_resources_runtime_fibonacci.ark | 5 - ...arks_resources_runtime_man_or_boy_test.ark | 10 +- ...sts_unittests_resources_astsuite_error.ark | 22 ++++ ...ests_resources_compilersuite_ir_plugin.ark | 3 + ...s_compilersuite_optimized_ir_ackermann.ark | 10 +- ...es_compilersuite_optimized_ir_closures.ark | 18 +-- ..._compilersuite_optimized_ir_increments.ark | 7 ++ ...urces_compilersuite_optimized_ir_lists.ark | 17 +++ ...ssuite_compiletime_and_not_enough_args.ark | 1 + ...suite_compiletime_assert_too_many_args.ark | 1 + ...uite_compiletime_at_at_not_enough_args.ark | 2 + ...cssuite_compiletime_bad_macro_arg_list.ark | 4 +- ...suite_compiletime_capture_out_of_scope.ark | 3 - ...osticssuite_compiletime_duplicated_arg.ark | 4 +- ...icssuite_compiletime_eq_chain_too_long.ark | 1 + ...ite_compiletime_hasfield_too_many_args.ark | 2 + ...gnosticssuite_compiletime_invalid_func.ark | 2 +- ...agnosticssuite_compiletime_invalid_let.ark | 8 +- ...suite_compiletime_invalid_node_in_call.ark | 4 +- ..._compiletime_invalid_node_in_tail_call.ark | 4 +- ...nosticssuite_compiletime_invalid_while.ark | 3 +- ...sticssuite_compiletime_list_65536_args.ark | 1 + ...te_compiletime_list_set_at_2d_bad_args.ark | 2 + ...suite_compiletime_list_set_at_bad_args.ark | 2 + ...ite_compiletime_macro_tail_arity_error.ark | 2 +- ...uite_compiletime_max_unification_depth.ark | 4 +- ...cssuite_compiletime_neq_chain_too_long.ark | 1 + ...ssuite_compiletime_ope_not_enough_args.ark | 1 - ...cssuite_compiletime_or_not_enough_args.ark | 1 + ...gnosticssuite_compiletime_package_list.ark | 1 + ...gnosticssuite_compiletime_pop_in_place.ark | 2 +- ...ssuite_compiletime_pop_not_enough_args.ark | 1 + ...cssuite_compiletime_unevaluated_spread.ark | 4 +- ...nosticssuite_runtime_arity_error_async.ark | 4 +- ...ssuite_runtime_at_at_eq_out_of_range_x.ark | 2 + ...ssuite_runtime_at_at_eq_out_of_range_y.ark | 2 + ...suite_runtime_at_at_inner_out_of_range.ark | 2 + ...osticssuite_runtime_at_at_out_of_range.ark | 2 + ...osticssuite_runtime_at_eq_out_of_range.ark | 2 + ...uite_runtime_closure_field_wrong_fqn_b.ark | 2 +- ...s_diagnosticssuite_runtime_list_set_at.ark | 1 + ...sticssuite_runtime_mathln_out_of_range.ark | 1 + ...osticssuite_runtime_nil_not_a_function.ark | 2 + ..._diagnosticssuite_runtime_not_callable.ark | 1 - ...icssuite_runtime_out_of_range_in_place.ark | 2 + ...agnosticssuite_runtime_recursion_depth.ark | 10 +- ..._diagnosticssuite_runtime_set_unbound.ark} | 2 +- ...diagnosticssuite_runtime_string_set_at.ark | 1 + ...diagnosticssuite_runtime_unknown_field.ark | 2 +- ...gnosticssuite_typechecking_add_num_str.ark | 1 + ...e_typechecking_append_in_place_num_num.ark | 2 + ...sticssuite_typechecking_append_num_num.ark | 1 + ...sticssuite_typechecking_assert_num_num.ark | 1 + ...typechecking_at_at_eq_list_num_num_num.ark | 1 + ..._typechecking_at_at_eq_num_num_num_num.ark | 1 + ...cssuite_typechecking_at_at_num_num_num.ark | 1 + ...cssuite_typechecking_at_eq_num_num_num.ark | 1 + ...gnosticssuite_typechecking_at_list_str.ark | 1 + ...agnosticssuite_typechecking_at_num_num.ark | 1 + ...iagnosticssuite_typechecking_await_num.ark | 1 + ..._typechecking_concat_in_place_list_num.ark | 2 + ...e_typechecking_concat_in_place_num_num.ark | 2 + ...ticssuite_typechecking_concat_list_num.ark | 1 + ...sticssuite_typechecking_concat_num_num.ark | 1 + ...cssuite_typechecking_decrement_str_num.ark | 2 + ...gnosticssuite_typechecking_div_str_num.ark | 1 + ...iagnosticssuite_typechecking_empty_num.ark | 1 + ...icssuite_typechecking_hasfield_num_str.ark | 1 + ...diagnosticssuite_typechecking_head_num.ark | 1 + ...cssuite_typechecking_increment_str_num.ark | 2 + ...te_typechecking_ioappendtofile_num_num.ark | 1 + ...iagnosticssuite_typechecking_iodir_num.ark | 1 + ...icssuite_typechecking_iofileexists_num.ark | 1 + ...ticssuite_typechecking_iolistfiles_num.ark | 1 + ...osticssuite_typechecking_iomakedir_num.ark | 1 + ...ite_typechecking_ioreadfile_inexistent.ark | 1 + ...sticssuite_typechecking_ioreadfile_num.ark | 1 + ...cssuite_typechecking_ioremovefiles_num.ark | 1 + ...ite_typechecking_ioremovefiles_str_num.ark | 2 + ...suite_typechecking_iowritefile_num_num.ark | 1 + ..._diagnosticssuite_typechecking_len_num.ark | 1 + ...nosticssuite_typechecking_listfill_str.ark | 1 + ...icssuite_typechecking_listfind_str_num.ark | 1 + ...ticssuite_typechecking_listreverse_str.ark | 1 + ...osticssuite_typechecking_listsetat_str.ark | 1 + ...ypechecking_listslice_str_num_bool_nil.ark | 1 + ...nosticssuite_typechecking_listsort_str.ark | 1 + ...osticssuite_typechecking_mathacosh_str.ark | 1 + ...sticssuite_typechecking_matharccos_str.ark | 1 + ...sticssuite_typechecking_matharcsin_str.ark | 1 + ...sticssuite_typechecking_matharctan_str.ark | 1 + ...osticssuite_typechecking_mathasinh_str.ark | 1 + ...osticssuite_typechecking_mathatanh_str.ark | 1 + ...nosticssuite_typechecking_mathceil_str.ark | 1 + ...gnosticssuite_typechecking_mathcos_str.ark | 1 + ...nosticssuite_typechecking_mathcosh_str.ark | 1 + ...gnosticssuite_typechecking_mathexp_str.ark | 1 + ...osticssuite_typechecking_mathfloor_str.ark | 1 + ...agnosticssuite_typechecking_mathln_str.ark | 1 + ...osticssuite_typechecking_mathround_str.ark | 1 + ...gnosticssuite_typechecking_mathsin_str.ark | 1 + ...nosticssuite_typechecking_mathsinh_str.ark | 1 + ...gnosticssuite_typechecking_mathtan_str.ark | 1 + ...nosticssuite_typechecking_mathtanh_str.ark | 1 + ...gnosticssuite_typechecking_mod_str_str.ark | 1 + ...gnosticssuite_typechecking_mul_str_num.ark | 1 + ...uite_typechecking_pop_in_place_num_num.ark | 1 + ...gnosticssuite_typechecking_pop_num_num.ark | 1 + ...sticssuite_typechecking_random_str_str.ark | 1 + ...osticssuite_typechecking_stringchr_str.ark | 1 + ...sticssuite_typechecking_stringfind_num.ark | 1 + ...icssuite_typechecking_stringformat_num.ark | 1 + ...osticssuite_typechecking_stringord_num.ark | 1 + ...ssuite_typechecking_stringremoveat_num.ark | 1 + ...ticssuite_typechecking_stringsetat_str.ark | 1 + ...gnosticssuite_typechecking_sub_str_str.ark | 1 + ...nosticssuite_typechecking_syssleep_str.ark | 1 + ...diagnosticssuite_typechecking_tail_num.ark | 1 + ...nosticssuite_typechecking_tonumber_num.ark | 1 + ...ittests_resources_formattersuite_calls.ark | 6 +- ...formattersuite_comment_after_macro_arg.ark | 6 +- ...ces_formattersuite_comments_after_call.ark | 2 +- ...formattersuite_comments_after_variable.ark | 4 +- ...unittests_resources_formattersuite_del.ark | 3 + ...ts_resources_formattersuite_escape_seq.ark | 2 +- ...ittests_resources_formattersuite_field.ark | 10 +- ...sts_resources_formattersuite_functions.ark | 2 +- ...ts_resources_formattersuite_macro_cond.ark | 2 - ...nittests_resources_formattersuite_vars.ark | 6 +- ...sts_resources_langsuite_builtins-tests.ark | 116 +++++++++--------- ...ittests_resources_langsuite_list-tests.ark | 77 +++++++++--- ...ttests_resources_langsuite_macro-tests.ark | 87 +++++++------ ...tests_resources_langsuite_string-tests.ark | 61 +++++++-- ...ittests_resources_langsuite_utf8-tests.ark | 10 +- ...unittests_resources_langsuite_vm-tests.ark | 57 ++++++--- ..._resources_nameresolutionsuite_basic_b.ark | 2 +- ...meresolutionsuite_namespace_stacking_c.ark | 2 - ...ources_nameresolutionsuite_shadowing_b.ark | 2 +- ...ources_nameresolutionsuite_shadowing_c.ark | 4 +- ...e_shadowing_symbol_swap_import_order_b.ark | 3 + ...s_optimizersuite_dead_code_elimination.ark | 4 + ...ts_resources_parsersuite_success_begin.ark | 8 +- ...sts_resources_parsersuite_success_call.ark | 2 +- ..._resources_parsersuite_success_closure.ark | 2 +- ...s_resources_parsersuite_success_fields.ark | 2 +- ...ests_resources_parsersuite_success_fun.ark | 2 +- ...tests_resources_parsersuite_success_if.ark | 4 +- ...sts_resources_parsersuite_success_loop.ark | 2 +- ...ts_resources_parsersuite_success_macro.ark | 4 +- ..._resources_parsersuite_success_numbers.ark | 14 +-- ...tests_resources_rosettasuite_100_doors.ark | 21 ++++ ...ttests_resources_rosettasuite_a_plus_b.ark | 12 ++ ...ources_rosettasuite_abbreviations_easy.ark | 54 ++++++++ ...resources_rosettasuite_abc_correlation.ark | 35 ++++++ ...tests_resources_rosettasuite_ackermann.ark | 8 ++ ...ettasuite_apply_a_callback_to_an_array.ark | 8 ++ ...ources_rosettasuite_arithmetic_complex.ark | 30 +++++ ...ources_rosettasuite_arithmetic_integer.ark | 10 ++ ...urces_rosettasuite_array_concatenation.ark | 4 + ...ts_resources_rosettasuite_array_length.ark | 2 + ...sources_rosettasuite_balanced_brackets.ark | 28 +++++ ...es_rosettasuite_calculating_value_of_e.ark | 19 +++ ...ces_rosettasuite_call_an_object_method.ark | 17 +++ ...ts_resources_rosettasuite_catamorphism.ark | 7 ++ ...es_rosettasuite_closures_value_capture.ark | 13 ++ ...ources_rosettasuite_compound_data_type.ark | 11 ++ ...ttests_resources_rosettasuite_currying.ark | 7 ++ ...sts_resources_rosettasuite_even_or_odd.ark | 11 ++ ...rces_rosettasuite_extend_your_language.ark | 34 +++++ ...urces_rosettasuite_fibonacci_iterative.ark | 12 ++ ...urces_rosettasuite_fibonacci_recursive.ark | 6 + ..._resources_rosettasuite_flatten_a_list.ark | 13 ++ ...ttests_resources_rosettasuite_infinity.ark | 3 + ...ests_resources_rosettasuite_munchausen.ark | 28 +++++ ...tests_resources_rosettasuite_quicksort.ark | 25 ++++ ...s_resources_rosettasuite_string_append.ark | 2 + ...resources_rosettasuite_string_matching.ark | 6 + ...settasuite_sum_and_product_of_an_array.ark | 9 ++ ..._rosettasuite_sum_digits_of_an_integer.ark | 27 ++++ ..._resources_rosettasuite_sum_of_a_serie.ark | 9 ++ ..._resources_rosettasuite_sum_of_squares.ark | 16 +++ ...ittests_resources_typecheckersuite_num.ark | 3 + tests/fuzzing/corpus-cmin/d.ark | 37 ++++++ .../corpus-cmin/examples_callbacks.ark | 34 ----- tests/fuzzing/corpus-cmin/examples_error.ark | 2 +- .../corpus-cmin/examples_fizz_buzz.ark | 13 ++ .../examples_games_game_of_life.ark | 113 ++++++++--------- .../examples_games_more-or-less.ark | 22 ---- tests/fuzzing/corpus-cmin/examples_macros.ark | 26 ++-- .../corpus-cmin/examples_show_ascii_table.ark | 15 +++ tests/fuzzing/corpus-cmin/test | 1 - ...hmarks_resources_parser_some_important.ark | 2 - ...benchmarks_resources_runtime_fibonacci.ark | 5 - ...sts_unittests_resources_astsuite_error.ark | 22 ++++ ...ests_resources_compilersuite_ir_plugin.ark | 3 + ..._compilersuite_optimized_ir_increments.ark | 7 ++ ...urces_compilersuite_optimized_ir_lists.ark | 17 +++ ...ssuite_compiletime_and_not_enough_args.ark | 1 + ...suite_compiletime_assert_too_many_args.ark | 1 + ...uite_compiletime_at_at_not_enough_args.ark | 2 + ...suite_compiletime_capture_out_of_scope.ark | 3 - ...icssuite_compiletime_eq_chain_too_long.ark | 1 + ...ite_compiletime_hasfield_too_many_args.ark | 2 + ...sticssuite_compiletime_list_65536_args.ark | 1 + ...te_compiletime_list_set_at_2d_bad_args.ark | 2 + ...suite_compiletime_list_set_at_bad_args.ark | 2 + ...cssuite_compiletime_neq_chain_too_long.ark | 1 + ...ssuite_compiletime_ope_not_enough_args.ark | 1 - ...cssuite_compiletime_or_not_enough_args.ark | 1 + ...gnosticssuite_compiletime_package_list.ark | 1 + ...ssuite_compiletime_pop_not_enough_args.ark | 1 + ...ssuite_runtime_at_at_eq_out_of_range_x.ark | 2 + ...ssuite_runtime_at_at_eq_out_of_range_y.ark | 2 + ...suite_runtime_at_at_inner_out_of_range.ark | 2 + ...osticssuite_runtime_at_at_out_of_range.ark | 2 + ...osticssuite_runtime_at_eq_out_of_range.ark | 2 + ...s_diagnosticssuite_runtime_list_set_at.ark | 1 + ...sticssuite_runtime_mathln_out_of_range.ark | 1 + ...osticssuite_runtime_nil_not_a_function.ark | 2 + ..._diagnosticssuite_runtime_not_callable.ark | 1 - ...icssuite_runtime_out_of_range_in_place.ark | 2 + ...s_diagnosticssuite_runtime_set_unbound.ark | 2 + ...diagnosticssuite_runtime_string_set_at.ark | 1 + ...s_diagnosticssuite_runtime_unbound_var.ark | 2 - ...gnosticssuite_typechecking_add_num_str.ark | 1 + ...e_typechecking_append_in_place_num_num.ark | 2 + ...sticssuite_typechecking_append_num_num.ark | 1 + ...sticssuite_typechecking_assert_num_num.ark | 1 + ...typechecking_at_at_eq_list_num_num_num.ark | 1 + ..._typechecking_at_at_eq_num_num_num_num.ark | 1 + ...cssuite_typechecking_at_at_num_num_num.ark | 1 + ...cssuite_typechecking_at_eq_num_num_num.ark | 1 + ...gnosticssuite_typechecking_at_list_str.ark | 1 + ...agnosticssuite_typechecking_at_num_num.ark | 1 + ...iagnosticssuite_typechecking_await_num.ark | 1 + ..._typechecking_concat_in_place_list_num.ark | 2 + ...e_typechecking_concat_in_place_num_num.ark | 2 + ...ticssuite_typechecking_concat_list_num.ark | 1 + ...sticssuite_typechecking_concat_num_num.ark | 1 + ...cssuite_typechecking_decrement_str_num.ark | 2 + ...gnosticssuite_typechecking_div_str_num.ark | 1 + ...iagnosticssuite_typechecking_empty_num.ark | 1 + ...icssuite_typechecking_hasfield_num_str.ark | 1 + ...diagnosticssuite_typechecking_head_num.ark | 1 + ...cssuite_typechecking_increment_str_num.ark | 2 + ...te_typechecking_ioappendtofile_num_num.ark | 1 + ...iagnosticssuite_typechecking_iodir_num.ark | 1 + ...icssuite_typechecking_iofileexists_num.ark | 1 + ...ticssuite_typechecking_iolistfiles_num.ark | 1 + ...osticssuite_typechecking_iomakedir_num.ark | 1 + ...ite_typechecking_ioreadfile_inexistent.ark | 1 + ...sticssuite_typechecking_ioreadfile_num.ark | 1 + ...cssuite_typechecking_ioremovefiles_num.ark | 1 + ...ite_typechecking_ioremovefiles_str_num.ark | 2 + ...suite_typechecking_iowritefile_num_num.ark | 1 + ..._diagnosticssuite_typechecking_len_num.ark | 1 + ...nosticssuite_typechecking_listfill_str.ark | 1 + ...icssuite_typechecking_listfind_str_num.ark | 1 + ...ticssuite_typechecking_listreverse_str.ark | 1 + ...osticssuite_typechecking_listsetat_str.ark | 1 + ...ypechecking_listslice_str_num_bool_nil.ark | 1 + ...nosticssuite_typechecking_listsort_str.ark | 1 + ...osticssuite_typechecking_mathacosh_str.ark | 1 + ...sticssuite_typechecking_matharccos_str.ark | 1 + ...sticssuite_typechecking_matharcsin_str.ark | 1 + ...sticssuite_typechecking_matharctan_str.ark | 1 + ...osticssuite_typechecking_mathasinh_str.ark | 1 + ...osticssuite_typechecking_mathatanh_str.ark | 1 + ...nosticssuite_typechecking_mathceil_str.ark | 1 + ...gnosticssuite_typechecking_mathcos_str.ark | 1 + ...nosticssuite_typechecking_mathcosh_str.ark | 1 + ...gnosticssuite_typechecking_mathexp_str.ark | 1 + ...osticssuite_typechecking_mathfloor_str.ark | 1 + ...agnosticssuite_typechecking_mathln_str.ark | 1 + ...osticssuite_typechecking_mathround_str.ark | 1 + ...gnosticssuite_typechecking_mathsin_str.ark | 1 + ...nosticssuite_typechecking_mathsinh_str.ark | 1 + ...gnosticssuite_typechecking_mathtan_str.ark | 1 + ...nosticssuite_typechecking_mathtanh_str.ark | 1 + ...gnosticssuite_typechecking_mod_str_str.ark | 1 + ...gnosticssuite_typechecking_mul_str_num.ark | 1 + ...uite_typechecking_pop_in_place_num_num.ark | 1 + ...gnosticssuite_typechecking_pop_num_num.ark | 1 + ...sticssuite_typechecking_random_str_str.ark | 1 + ...osticssuite_typechecking_stringchr_str.ark | 1 + ...sticssuite_typechecking_stringfind_num.ark | 1 + ...icssuite_typechecking_stringformat_num.ark | 1 + ...osticssuite_typechecking_stringord_num.ark | 1 + ...ssuite_typechecking_stringremoveat_num.ark | 1 + ...ticssuite_typechecking_stringsetat_str.ark | 1 + ...gnosticssuite_typechecking_sub_str_str.ark | 1 + ...nosticssuite_typechecking_syssleep_str.ark | 1 + ...diagnosticssuite_typechecking_tail_num.ark | 1 + ...nosticssuite_typechecking_tonumber_num.ark | 1 + ...unittests_resources_formattersuite_del.ark | 3 + ...ts_resources_formattersuite_macro_cond.ark | 2 - ...sts_resources_langsuite_builtins-tests.ark | 112 +++++++++-------- ...ittests_resources_langsuite_list-tests.ark | 53 +++++++- ...ttests_resources_langsuite_macro-tests.ark | 13 +- ...tests_resources_langsuite_string-tests.ark | 51 +++++++- ...unittests_resources_langsuite_vm-tests.ark | 21 +++- ...meresolutionsuite_namespace_stacking_c.ark | 2 - ...e_shadowing_symbol_swap_import_order_b.ark | 3 + ...s_optimizersuite_dead_code_elimination.ark | 4 + ...tests_resources_rosettasuite_100_doors.ark | 21 ++++ ...ttests_resources_rosettasuite_a_plus_b.ark | 12 ++ ...ources_rosettasuite_abbreviations_easy.ark | 54 ++++++++ ...resources_rosettasuite_abc_correlation.ark | 35 ++++++ ...tests_resources_rosettasuite_ackermann.ark | 8 ++ ...ettasuite_apply_a_callback_to_an_array.ark | 8 ++ ...ources_rosettasuite_arithmetic_complex.ark | 30 +++++ ...ources_rosettasuite_arithmetic_integer.ark | 10 ++ ...urces_rosettasuite_array_concatenation.ark | 4 + ...ts_resources_rosettasuite_array_length.ark | 2 + ...sources_rosettasuite_balanced_brackets.ark | 28 +++++ ...es_rosettasuite_calculating_value_of_e.ark | 20 +++ ...ces_rosettasuite_call_an_object_method.ark | 17 +++ ...ts_resources_rosettasuite_catamorphism.ark | 7 ++ ...es_rosettasuite_closures_value_capture.ark | 13 ++ ...ources_rosettasuite_compound_data_type.ark | 11 ++ ...ttests_resources_rosettasuite_currying.ark | 7 ++ ...sts_resources_rosettasuite_even_or_odd.ark | 11 ++ ...rces_rosettasuite_extend_your_language.ark | 34 +++++ ...urces_rosettasuite_fibonacci_iterative.ark | 12 ++ ...urces_rosettasuite_fibonacci_recursive.ark | 6 + ..._resources_rosettasuite_flatten_a_list.ark | 13 ++ ...ttests_resources_rosettasuite_infinity.ark | 3 + ...ests_resources_rosettasuite_munchausen.ark | 28 +++++ ...tests_resources_rosettasuite_quicksort.ark | 25 ++++ ...s_resources_rosettasuite_string_append.ark | 2 + ...resources_rosettasuite_string_matching.ark | 6 + ...settasuite_sum_and_product_of_an_array.ark | 9 ++ ..._rosettasuite_sum_digits_of_an_integer.ark | 27 ++++ ..._resources_rosettasuite_sum_of_a_serie.ark | 9 ++ ..._resources_rosettasuite_sum_of_squares.ark | 16 +++ ...ittests_resources_typecheckersuite_num.ark | 3 + tests/fuzzing/corpus/d.ark | 37 ++++++ tests/fuzzing/corpus/examples_error.ark | 2 +- tests/fuzzing/corpus/examples_fizz_buzz.ark | 13 ++ .../corpus/examples_games_game_of_life.ark | 113 ++++++++--------- tests/fuzzing/corpus/examples_macros.ark | 26 ++-- .../corpus/examples_show_ascii_table.ark | 15 +++ ...chmarks_resources_runtime_binary_trees.ark | 64 ++++++++++ ...tests_benchmarks_resources_runtime_for.ark | 11 ++ ...esources_bytecodereadersuite_ackermann.ark | 21 ++++ ...ests_resources_compilersuite_ir_plugin.ark | 3 + ..._compilersuite_optimized_ir_increments.ark | 7 ++ ...urces_compilersuite_optimized_ir_lists.ark | 17 +++ ...ssuite_compiletime_and_not_enough_args.ark | 1 + ...ite_compiletime_append_not_enough_args.ark | 1 + ...suite_compiletime_assert_too_many_args.ark | 1 + ...uite_compiletime_at_at_not_enough_args.ark | 2 + ...ticssuite_compiletime_at_too_many_args.ark | 1 + ...ite_compiletime_concat_not_enough_args.ark | 1 + ...iagnosticssuite_compiletime_empty_file.ark | 0 ...icssuite_compiletime_eq_chain_too_long.ark | 1 + ...icssuite_compiletime_ge_chain_too_long.ark | 1 + ...icssuite_compiletime_gt_chain_too_long.ark | 1 + ...ite_compiletime_hasfield_too_many_args.ark | 2 + ...uite_compiletime_import_not_in_package.ark | 1 + ...iletime_inplace_append_not_enough_args.ark | 1 + ...iletime_inplace_concat_not_enough_args.ark | 1 + ...ompiletime_inplace_pop_not_enough_args.ark | 1 + ...icssuite_compiletime_le_chain_too_long.ark | 1 + ...sticssuite_compiletime_list_65536_args.ark | 1 + ...te_compiletime_list_set_at_2d_bad_args.ark | 2 + ...e_compiletime_list_set_at_2d_immutable.ark | 2 + ...suite_compiletime_list_set_at_bad_args.ark | 2 + ...uite_compiletime_list_set_at_immutable.ark | 2 + ...icssuite_compiletime_lt_chain_too_long.ark | 1 + ...ompiletime_name_collision_with_builtin.ark | 3 + ...cssuite_compiletime_neq_chain_too_long.ark | 1 + ...cssuite_compiletime_or_not_enough_args.ark | 1 + ...diagnosticssuite_compiletime_package_c.ark | 2 + ...gnosticssuite_compiletime_package_list.ark | 1 + ...ssuite_compiletime_pop_not_enough_args.ark | 1 + ...ite_compiletime_use_not_in_import_list.ark | 3 + ...ssuite_runtime_at_at_eq_out_of_range_x.ark | 2 + ...ssuite_runtime_at_at_eq_out_of_range_y.ark | 2 + ...suite_runtime_at_at_inner_out_of_range.ark | 2 + ...osticssuite_runtime_at_at_out_of_range.ark | 2 + ...osticssuite_runtime_at_eq_out_of_range.ark | 2 + ...s_diagnosticssuite_runtime_list_set_at.ark | 1 + ...sticssuite_runtime_mathln_out_of_range.ark | 1 + ...cssuite_runtime_not_callable_with_args.ark | 3 + ...icssuite_runtime_out_of_range_in_place.ark | 2 + ...diagnosticssuite_runtime_string_set_at.ark | 1 + ...gnosticssuite_typechecking_add_num_str.ark | 1 + ...e_typechecking_append_in_place_num_num.ark | 2 + ...sticssuite_typechecking_append_num_num.ark | 1 + ...sticssuite_typechecking_assert_num_num.ark | 1 + ...typechecking_at_at_eq_list_num_num_num.ark | 1 + ..._typechecking_at_at_eq_num_num_num_num.ark | 1 + ...cssuite_typechecking_at_at_num_num_num.ark | 1 + ...cssuite_typechecking_at_eq_num_num_num.ark | 1 + ...gnosticssuite_typechecking_at_list_str.ark | 1 + ...agnosticssuite_typechecking_at_num_num.ark | 1 + ...iagnosticssuite_typechecking_await_num.ark | 1 + ..._typechecking_concat_in_place_list_num.ark | 2 + ...e_typechecking_concat_in_place_num_num.ark | 2 + ...ticssuite_typechecking_concat_list_num.ark | 1 + ...sticssuite_typechecking_concat_num_num.ark | 1 + ...cssuite_typechecking_decrement_str_num.ark | 2 + ...gnosticssuite_typechecking_div_str_num.ark | 1 + ...iagnosticssuite_typechecking_empty_num.ark | 1 + ...icssuite_typechecking_hasfield_num_str.ark | 1 + ...diagnosticssuite_typechecking_head_num.ark | 1 + ...cssuite_typechecking_increment_str_num.ark | 2 + ...te_typechecking_ioappendtofile_num_num.ark | 1 + ...iagnosticssuite_typechecking_iodir_num.ark | 1 + ...icssuite_typechecking_iofileexists_num.ark | 1 + ...ticssuite_typechecking_iolistfiles_num.ark | 1 + ...osticssuite_typechecking_iomakedir_num.ark | 1 + ...ite_typechecking_ioreadfile_inexistent.ark | 1 + ...sticssuite_typechecking_ioreadfile_num.ark | 1 + ...cssuite_typechecking_ioremovefiles_num.ark | 1 + ...ite_typechecking_ioremovefiles_str_num.ark | 2 + ...suite_typechecking_iowritefile_num_num.ark | 1 + ..._diagnosticssuite_typechecking_len_num.ark | 1 + ...nosticssuite_typechecking_listfill_str.ark | 1 + ...icssuite_typechecking_listfind_str_num.ark | 1 + ...ticssuite_typechecking_listreverse_str.ark | 1 + ...osticssuite_typechecking_listsetat_str.ark | 1 + ...ypechecking_listslice_str_num_bool_nil.ark | 1 + ...nosticssuite_typechecking_listsort_str.ark | 1 + ...osticssuite_typechecking_mathacosh_str.ark | 1 + ...sticssuite_typechecking_matharccos_str.ark | 1 + ...sticssuite_typechecking_matharcsin_str.ark | 1 + ...sticssuite_typechecking_matharctan_str.ark | 1 + ...osticssuite_typechecking_mathasinh_str.ark | 1 + ...osticssuite_typechecking_mathatanh_str.ark | 1 + ...nosticssuite_typechecking_mathceil_str.ark | 1 + ...gnosticssuite_typechecking_mathcos_str.ark | 1 + ...nosticssuite_typechecking_mathcosh_str.ark | 1 + ...gnosticssuite_typechecking_mathexp_str.ark | 1 + ...osticssuite_typechecking_mathfloor_str.ark | 1 + ...agnosticssuite_typechecking_mathln_str.ark | 1 + ...osticssuite_typechecking_mathround_str.ark | 1 + ...gnosticssuite_typechecking_mathsin_str.ark | 1 + ...nosticssuite_typechecking_mathsinh_str.ark | 1 + ...gnosticssuite_typechecking_mathtan_str.ark | 1 + ...nosticssuite_typechecking_mathtanh_str.ark | 1 + ...gnosticssuite_typechecking_mod_str_str.ark | 1 + ...gnosticssuite_typechecking_mul_str_num.ark | 1 + ...uite_typechecking_pop_in_place_num_num.ark | 1 + ...gnosticssuite_typechecking_pop_num_num.ark | 1 + ...sticssuite_typechecking_random_str_str.ark | 1 + ...osticssuite_typechecking_stringchr_str.ark | 1 + ...sticssuite_typechecking_stringfind_num.ark | 1 + ...icssuite_typechecking_stringformat_num.ark | 1 + ...osticssuite_typechecking_stringord_num.ark | 1 + ...ssuite_typechecking_stringremoveat_num.ark | 1 + ...ticssuite_typechecking_stringsetat_str.ark | 1 + ...gnosticssuite_typechecking_sub_str_str.ark | 1 + ...nosticssuite_typechecking_syssleep_str.ark | 1 + ...diagnosticssuite_typechecking_tail_num.ark | 1 + ...nosticssuite_typechecking_tonumber_num.ark | 1 + ...sts_resources_langsuite_builtins-tests.ark | 112 +++++++++-------- ...ittests_resources_langsuite_list-tests.ark | 53 +++++++- ...ttests_resources_langsuite_macro-tests.ark | 13 +- ...tests_resources_langsuite_string-tests.ark | 51 +++++++- ...nittests_resources_langsuite_unittests.ark | 15 +++ ...unittests_resources_langsuite_vm-tests.ark | 21 +++- ..._resources_nameresolutionsuite_basic_a.ark | 2 +- ...eresolutionsuite_deep_import_symbols_a.ark | 5 + ...eresolutionsuite_deep_import_symbols_b.ark | 3 + ...eresolutionsuite_deep_import_symbols_c.ark | 2 + ...nameresolutionsuite_shadowing_symbol_a.ark | 5 + ...nameresolutionsuite_shadowing_symbol_b.ark | 3 + ...nameresolutionsuite_shadowing_symbol_c.ark | 2 + ...e_shadowing_symbol_swap_import_order_a.ark | 5 + ...e_shadowing_symbol_swap_import_order_b.ark | 3 + ...e_shadowing_symbol_swap_import_order_c.ark | 2 + ...s_optimizersuite_dead_code_elimination.ark | 4 + ...esources_optimizersuite_unused_symbols.ark | 4 + ...tests_resources_rosettasuite_100_doors.ark | 21 ++++ ...ttests_resources_rosettasuite_a_plus_b.ark | 12 ++ ...ources_rosettasuite_abbreviations_easy.ark | 54 ++++++++ ...resources_rosettasuite_abc_correlation.ark | 35 ++++++ ...tests_resources_rosettasuite_ackermann.ark | 8 ++ ...ettasuite_apply_a_callback_to_an_array.ark | 8 ++ ...ources_rosettasuite_arithmetic_complex.ark | 30 +++++ ...ources_rosettasuite_arithmetic_integer.ark | 10 ++ ...urces_rosettasuite_array_concatenation.ark | 4 + ...ts_resources_rosettasuite_array_length.ark | 2 + ...sources_rosettasuite_balanced_brackets.ark | 28 +++++ ...es_rosettasuite_calculating_value_of_e.ark | 20 +++ ...ces_rosettasuite_call_an_object_method.ark | 17 +++ ...ts_resources_rosettasuite_catamorphism.ark | 7 ++ ...es_rosettasuite_closures_value_capture.ark | 13 ++ ...ources_rosettasuite_compound_data_type.ark | 11 ++ ...ttests_resources_rosettasuite_currying.ark | 7 ++ ...sts_resources_rosettasuite_even_or_odd.ark | 11 ++ ...rces_rosettasuite_extend_your_language.ark | 34 +++++ ...urces_rosettasuite_fibonacci_iterative.ark | 12 ++ ...urces_rosettasuite_fibonacci_recursive.ark | 6 + ..._resources_rosettasuite_flatten_a_list.ark | 13 ++ ...ttests_resources_rosettasuite_infinity.ark | 3 + ...ests_resources_rosettasuite_munchausen.ark | 28 +++++ ...tests_resources_rosettasuite_quicksort.ark | 25 ++++ ...s_resources_rosettasuite_string_append.ark | 2 + ...resources_rosettasuite_string_matching.ark | 6 + ...settasuite_sum_and_product_of_an_array.ark | 9 ++ ..._rosettasuite_sum_digits_of_an_integer.ark | 27 ++++ ..._resources_rosettasuite_sum_of_a_serie.ark | 9 ++ ..._resources_rosettasuite_sum_of_squares.ark | 16 +++ ...ts_resources_typecheckersuite_multi_a1.ark | 4 + ...ts_resources_typecheckersuite_multi_a2.ark | 4 + ...ypecheckersuite_multi_varying_arity_a1.ark | 4 + ...ypecheckersuite_multi_varying_arity_a2.ark | 5 + ...urces_typecheckersuite_not_enough_args.ark | 4 + ...ittests_resources_typecheckersuite_num.ark | 3 + ...ts_resources_typecheckersuite_sum_type.ark | 3 + ...sources_typecheckersuite_too_many_args.ark | 3 + ...ts_resources_typecheckersuite_variadic.ark | 3 + tests/fuzzing/docker/1-prepare-corpus.sh | 17 ++- 532 files changed, 3361 insertions(+), 838 deletions(-) create mode 100644 tests/fuzzing/corpus-cmin-tmin/d.ark delete mode 100644 tests/fuzzing/corpus-cmin-tmin/examples_callbacks.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/examples_fizz_buzz.ark delete mode 100644 tests/fuzzing/corpus-cmin-tmin/examples_games_more-or-less.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/examples_show_ascii_table.ark delete mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_some_important.ark delete mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_runtime_fibonacci.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_astsuite_error.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_ir_plugin.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_increments.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_lists.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark delete mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_capture_out_of_scope.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark delete mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_ope_not_enough_args.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_nil_not_a_function.ark delete mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_not_callable.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark rename tests/fuzzing/corpus-cmin-tmin/{tests_unittests_resources_diagnosticssuite_runtime_unbound_var.ark => tests_unittests_resources_diagnosticssuite_runtime_set_unbound.ark} (50%) create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_del.ark delete mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_macro_cond.ark delete mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_namespace_stacking_c.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_optimizersuite_dead_code_elimination.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_100_doors.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_a_plus_b.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_abbreviations_easy.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_abc_correlation.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_ackermann.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_arithmetic_complex.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_arithmetic_integer.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_array_concatenation.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_array_length.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_balanced_brackets.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_call_an_object_method.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_catamorphism.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_closures_value_capture.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_compound_data_type.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_currying.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_even_or_odd.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_extend_your_language.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_flatten_a_list.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_infinity.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_munchausen.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_quicksort.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_string_append.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_string_matching.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_of_squares.ark create mode 100644 tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_typecheckersuite_num.ark create mode 100644 tests/fuzzing/corpus-cmin/d.ark delete mode 100644 tests/fuzzing/corpus-cmin/examples_callbacks.ark create mode 100644 tests/fuzzing/corpus-cmin/examples_fizz_buzz.ark delete mode 100644 tests/fuzzing/corpus-cmin/examples_games_more-or-less.ark create mode 100644 tests/fuzzing/corpus-cmin/examples_show_ascii_table.ark delete mode 100644 tests/fuzzing/corpus-cmin/test delete mode 100644 tests/fuzzing/corpus-cmin/tests_benchmarks_resources_parser_some_important.ark delete mode 100644 tests/fuzzing/corpus-cmin/tests_benchmarks_resources_runtime_fibonacci.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_astsuite_error.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_ir_plugin.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_optimized_ir_increments.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_optimized_ir_lists.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark delete mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_capture_out_of_scope.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark delete mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_ope_not_enough_args.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_nil_not_a_function.ark delete mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_not_callable.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_set_unbound.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark delete mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_unbound_var.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_formattersuite_del.ark delete mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_formattersuite_macro_cond.ark delete mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_nameresolutionsuite_namespace_stacking_c.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_optimizersuite_dead_code_elimination.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_100_doors.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_a_plus_b.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_abbreviations_easy.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_abc_correlation.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_ackermann.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_arithmetic_complex.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_arithmetic_integer.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_array_concatenation.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_array_length.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_balanced_brackets.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_call_an_object_method.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_catamorphism.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_closures_value_capture.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_compound_data_type.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_currying.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_even_or_odd.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_extend_your_language.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_flatten_a_list.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_infinity.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_munchausen.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_quicksort.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_string_append.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_string_matching.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_of_squares.ark create mode 100644 tests/fuzzing/corpus-cmin/tests_unittests_resources_typecheckersuite_num.ark create mode 100644 tests/fuzzing/corpus/d.ark create mode 100644 tests/fuzzing/corpus/examples_fizz_buzz.ark create mode 100644 tests/fuzzing/corpus/examples_show_ascii_table.ark create mode 100644 tests/fuzzing/corpus/tests_benchmarks_resources_runtime_binary_trees.ark create mode 100644 tests/fuzzing/corpus/tests_benchmarks_resources_runtime_for.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_bytecodereadersuite_ackermann.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_compilersuite_ir_plugin.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_compilersuite_optimized_ir_increments.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_compilersuite_optimized_ir_lists.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_append_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_at_too_many_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_concat_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_empty_file.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_ge_chain_too_long.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_gt_chain_too_long.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_import_not_in_package.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_append_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_concat_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_pop_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_le_chain_too_long.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_immutable.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_immutable.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_lt_chain_too_long.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_name_collision_with_builtin.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_package_c.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_use_not_in_import_list.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_not_callable_with_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_a.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_b.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_c.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_a.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_b.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_c.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_a.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_c.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_optimizersuite_dead_code_elimination.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_optimizersuite_unused_symbols.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_100_doors.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_a_plus_b.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_abbreviations_easy.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_abc_correlation.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_ackermann.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_arithmetic_complex.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_arithmetic_integer.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_array_concatenation.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_array_length.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_balanced_brackets.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_call_an_object_method.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_catamorphism.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_closures_value_capture.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_compound_data_type.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_currying.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_even_or_odd.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_extend_your_language.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_flatten_a_list.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_infinity.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_munchausen.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_quicksort.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_string_append.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_string_matching.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_of_squares.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_a1.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_a2.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_varying_arity_a1.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_varying_arity_a2.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_not_enough_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_num.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_sum_type.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_too_many_args.ark create mode 100644 tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_variadic.ark diff --git a/.gitignore b/.gitignore index 625adccb..74212767 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ include/Ark/Constants.hpp /fuzzing/ /output/ /tmp/ +.afl-tmin-temp-* ## Fuzzer crash triage /fct-ok/ /fct-bad/ diff --git a/tests/fuzzing/corpus-cmin-tmin/c.ark b/tests/fuzzing/corpus-cmin-tmin/c.ark index 8a7e1e66..a300dab2 100644 --- a/tests/fuzzing/corpus-cmin-tmin/c.ark +++ b/tests/fuzzing/corpus-cmin-tmin/c.ark @@ -14,7 +14,7 @@ #000000000000000000000000000000000000000000000000000000000 #000000000000000000000 #0000000000000000000000000000000000000 -(let od0 (fun (_n) (= 1 (abs (mod _n 2))))) +(let odd (fun (_n) (= 0 (abs (mod _n 0))))) #0000000000000000000000000000000000000000000 #000000000000000000000000000 @@ -57,10 +57,10 @@ (let impl (fun (n p c) (if (<= n 0) 0 - (if (= n 1) + (if (= n 0) c - (impl (- n 1) c (+ p c)))))) - (impl n 0 1) })) + (impl (- n 0) c (+ p c)))))) + (impl n 0 0) })) #00000000000000000000000000000000000000000000000 #00000000000000000000 @@ -69,15 +69,15 @@ #00000000000000000000000000000 #00000 (let divs (fun (n) { - (assert (>= n 2) "0000000000000000000000000000000000000") - (mut i 2) - (mut divisors [1]) - (let top (math:ceil (/ n 2))) + (assert (>= n 0) "0000000000000000000000000000000000000") + (mut i 0) + (mut divisors [0]) + (let top (math:ceil (/ n 0))) (while (and (<= i top) (!= top n)) { (if (= (mod n i) 0) (set divisors (append divisors i))) - (set i (+ i 1)) }) + (set i (+ i 0)) }) (append divisors n) })) #000000000000000000000000000000000000000000000000 @@ -98,7 +98,7 @@ #0000000 #00000000000000000000000 #00000 -(let log2 (fun (x) (log x 2))) +(let log2 (fun (x) (log x 0))) #0000000000000000000000000000000000000000000000000 #00000000000000000000 @@ -106,7 +106,7 @@ #0000000 #0000000000000000000000000 #00000 -(let lo010 (fun (x) (log x 10))) +(let log10 (fun (x) (log x 00))) #00000000000000000000000000000000000000000000000000000000000000000 #0000000000000000000000 @@ -115,7 +115,7 @@ #0000000 #0000000000000000000000000000 #00000 -(let floor00v (fun (a b) (math:floor (/ a b)))) +(let floordi0 (fun (a b) (math:floor (/ a b)))) #0000000000000000000000000000000 #000000000000000000000000000000000000000000000000 @@ -136,7 +136,7 @@ #000000000000000000000000000000000 #00000 #0000000000000000000000000000000000000 -(let c0m00e0-0d0 (fun (_c0 _c1) (complex (+ _c0.real _c1.real) (+ _c0.imag _c1.imag)))) +(let c0m0l0x-ad00(fun (_c0 _c1) (complex (+ _c0.real _c1.real) (+ _c0.imag _c1.imag)))) #00000000000000000000000000000000000000000000000000000 #000000000000000000000000000000000000 @@ -146,7 +146,7 @@ #00000000000000000000000000000000000 #00000 #0000000000000000000000000000000000000 -(let comple00s0b (fun (_c0 _c1) (complex (- _c0.real _c1.real) (- _c0.imag _c1.imag)))) +(let c000lex0s0b0(fun (_c0 _c1) (complex (- _c0.real _c1.real) (- _c0.imag _c1.imag)))) #00000000000000000000000000000000000000000000000000000000 #000000000000000000000000000000000000 @@ -174,7 +174,7 @@ #00000000000000000000000000000000000000 #00000 #0000000000000000000000000000000000000 -(let c0m0lex-module (fun (_c) (sqrt (+ (* _c.real _c.real) (* _c.imag _c.imag))))) +(let complex-module (fun (_c) (sqrt (+ (* _c.real _c.real) (* _c.imag _c.imag))))) #00000000000000000000000000000000000000000000000000 #000000000000000000000000000000000000 @@ -184,8 +184,8 @@ #000000000000000000000000000000000000000 #00000 #0000000000000000000000000000000000000 -(let complex-di0 (fun (_c0 _c1) { - (let _conj (complex-conjugate _c1)) +(let comple0-d0v (fun (_c0 _c1) { + (let _conj (complex-conjugate _c0)) (let _top (complex-mul _c0 _conj)) (let _denom (+ (* _c1.real _c1.real) (* _c1.imag _c1.imag))) (complex (/ _top.real _denom) (/ _top.imag _denom)) })) diff --git a/tests/fuzzing/corpus-cmin-tmin/d.ark b/tests/fuzzing/corpus-cmin-tmin/d.ark new file mode 100644 index 00000000..bfe1fec8 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/d.ark @@ -0,0 +1,37 @@ +($ __count_placeholders(acc x ...xs) + ($if (empty? xs) + ($if (= "0" ($repr x)) + (+ 0 acc) + acc) + ($if (= "_" ($repr x)) + (__count_placeholders (+ 1 acc) ...xs) + (__count_placeholders acc ...xs)))) + +($ __suffix_dup (sym x) { + ($if (> x 1) (__suffix_dup sym (- x 1))) + ($symcat sym x) }) + +($ __replace_placeholders (replacements x ...xs) { + ($if (empty? xs) + ($if (= "0" ($repr x)) + (h00d replacements) + x) + ($if (= "_" ($repr x)) + { + (head replacements) + (__replace_placeholders (tail replacements) ...xs) } + { + x + (__replace_placeholders replacements ...xs) }))}) + +($ ! (call ...args) { + ($ length (__count_placeholders 0 ...args)) + ($ arg_bloc (__suffix_dup arg length)) + ($ all_args (__replace_placeholders [arg_bloc] ...args)) + (fun (arg_bloc) (call all_args)) }) + +(let foo (fun (a b c d) + (print (string:format "{}0{}0{}0{}" a b c d)))) + +(let t (! foo _ 1 _ 2)) +(print (t 5 6)) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_callbacks.ark b/tests/fuzzing/corpus-cmin-tmin/examples_callbacks.ark deleted file mode 100644 index 24dffa1e..00000000 --- a/tests/fuzzing/corpus-cmin-tmin/examples_callbacks.ark +++ /dev/null @@ -1,34 +0,0 @@ -#000000000000000000000000000000000000000000 -(let e00 (fun (bar) (print bar))) - -#0000000000000000000000000000000000000000000000 -(let data ["00000000" "00" "0000000000"]) - -#0000000000000000000000000000000000000000000000000000000000 -(mut callbacks []) - -(print "000000" data) -(print "00000000000000000000") -(mut acc 0) - -#000000000000000000000000000000000000000 -(while (!= acc (len data)) { - (mut d (@ data acc)) - - #0000000000000000000000000000000000000000000000000000000000000000 -#00000000000000000000000000000000 - (set callbacks (append callbacks (fun (&d) (e00 d)))) - (set acc (+ 1 acc)) }) - -#000000000000000000000000000000 -(set acc 0) -(while (!= acc (len callbacks)) { - #00000000000000000000000000000000000000000000000000000000000 - (mut stored (@ callbacks acc)) - (print "0000000 " stored.d) - - #0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - #00000000000000000000000000000000000000000000000000000000000000000000000 - (puts "000000000000000000000000" acc "0 ") - ((@ callbacks acc)) - (set acc (+ 1 acc)) }) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_collatz.ark b/tests/fuzzing/corpus-cmin-tmin/examples_collatz.ark index 37e868c3..1be783ba 100644 --- a/tests/fuzzing/corpus-cmin-tmin/examples_collatz.ark +++ b/tests/fuzzing/corpus-cmin-tmin/examples_collatz.ark @@ -1,8 +1,8 @@ #00000000000000000000000000000000000000000 #000000000000000000000000000000000000000000000 -(let get? (fun (se0 id0 default) - (if (> (len se0) id0) - (@ se0 id0) +(let get? (fun (seq idx default) + (if (> (len seq) idx) + (@ seq idx) default))) (let n (toNumber (get? sys:args 0 "10"))) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_error.ark b/tests/fuzzing/corpus-cmin-tmin/examples_error.ark index 5d7af8d4..ca03cbaf 100644 --- a/tests/fuzzing/corpus-cmin-tmin/examples_error.ark +++ b/tests/fuzzing/corpus-cmin-tmin/examples_error.ark @@ -2,20 +2,20 @@ #00000000000000000000000000000000000000 #00000000000000000000000000000000000000000000000000 #00000000000000000000000000000000000000000000 -(import std.Exceptions) +(import std.Exceptions :throw :return :try) #0000000000000000000000000000000000000000000000000000000 -(let n000t (fun (x) { +(let invert(fun (x) { (if (= x 0) #00000 (throw "000000000000000000000") #00000000000000000000000000000000000000000000000 #00000 - (r00000 (/ 0 x))) })) #00000000000000000000000000000000000000000000000000000 + (return (/ 1 x))) })) #00000000000000000000000000000000000000000000000000000 #0000000000000000000000000000000000000000000000000000000000000000000 #0000000000000000000000000000000000000000000000 #0000000000000000000000000000000000000000000000000000000000000000000000000000000 #00000000000000000000000000000000000000000 #0000000000000000000000000000000000000000000000000000000000000000000000000 -(t00 (i00000 0) (fun (i0000000) (p0000 i0000000)) (fun (e00) (p0000 e00))) +(try (invert 0) (fun (inverted) (print inverted)) (fun (err) (print err))) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_fizz_buzz.ark b/tests/fuzzing/corpus-cmin-tmin/examples_fizz_buzz.ark new file mode 100644 index 00000000..026f46f9 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/examples_fizz_buzz.ark @@ -0,0 +1,13 @@ +(import std.Range) + +(let r (range:range 0 100)) +(range:forEach + r + (fun (e) + (if (= 0 (mod e 15)) + (print "00000000") + (if (= 0 (mod e 3)) + (print "0000") + (if (= 0 (mod e 5)) + (print "0u00") + (print e)))))) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_games_game_of_life.ark b/tests/fuzzing/corpus-cmin-tmin/examples_games_game_of_life.ark index f53c27f8..7a20a47a 100644 --- a/tests/fuzzing/corpus-cmin-tmin/examples_games_game_of_life.ark +++ b/tests/fuzzing/corpus-cmin-tmin/examples_games_game_of_life.ark @@ -1,75 +1,60 @@ -(let board[0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0]) -(let width 4) -(let height 4) +(import std.List) +(import std.String) +(import std.Switch) + +(let board[0 0 0 1 1 1 0 0 0]) +(let width 3) +(let height 3) (let dead 0) -(let alive 1) +(let ali0e 1) -(let get (fun (board_ i width height) - (if (and (>= i 0) (< i (* width height))) - (@ board_ i) +(let get (fun (board_ x y) + (if (and (>= x 0) (>= y 0) (< x width) (< y height)) + (@ board_ (+ x (* y width))) dead))) -(let neigh (fun (board_ index width height) { +(let neigh (fun (board_ index) { (let x (math:floor (mod index width))) (let y (math:floor (/ index width))) - (mut count 0) - - (if (>= (- y 1) 0) - (set count (+ count (get board_ (- index width) width height)))) - - (if (< (+ y 1) height) - (set count (+ count (get board_ (+ index width) width height)))) - - (if (>= (- x 1) 0) - (set count (+ count (get board_ (- index 1) width height)))) - - (if (< (+ x 1) width) - (set count (+ count (get board_ (+ index 1) width height)))) - - (if (and (>= (- x 1) 0) (>= (- y 1) 0)) - (set count (+ count (get board_ (- index 1 width) width height)))) - - (if (and (< (+ x 1) width) (< (+ y 1) height)) - (set count (+ count (get board_ (+ index width 0) width height)))) - - (if (and (>= (- x 1) 0) (< (+ y 1) height)) - (set count (+ count (get board_ (+ index width -1) width height)))) - - (if (and (< (+ x 1) width) (>= (- y 1) 0)) - (set count (+ count (get board_ (- index width -1) width height)))) - count })) + (+ (get board_ (- x 1) y) (get board_ (+ x 1) y) (get board_ x (- y 1)) (get board_ x (+ y 1)) (get board_ (- x 1) (- y 1)) (get board_ (+ x 1) (- y 1)) (get board_ (- x 1) (+ y 1)) (get board_ (+ x 1) (+ y 1))) })) + +(let indices (list:iota 00(* height width))) +(let update (fun (board) { + (mut copy (list:fill (* height width) dead)) + + (list:forEach + indices + (fun (i) { + (let neighs (neigh board i)) + (switch neighs 2 (@= copy i (@ board i))03 (@= copy i ali0e) _ (@= copy i dead)) })) + + copy })) + +(let display (fun (board width height) (print + (string:join + (list:map + (list:chunkBy + (list:map + board + (fun (cell) + (if (= ali0e cell) + "0" + "â00"))) + 03) + (fun (sublist) (string:join sublist ""))) + "\n")))) -(mut copy (list:fill (* height width) dead)) -(mut i 0) -(while (< i (* width height)) { - (mut neighs (neigh board i width height)) - - (if (= 3 neighs) - (set copy (list:setAt copy i alive))) - - (if (= 2 neighs) - (set copy (list:setAt copy i (@ board i)))) - - (if (or (< neighs 2) (> neighs 3)) - (set copy (list:setAt copy i dead))) - (set i (+ 1 i)) }) - -(let display (fun (board width height) { - (mut i 0) - - (while (< i (* width height)) { - (mut y (math:floor (/ i width))) - (mut x (math:floor (mod i width))) +(print "00000000000000") +(display board width height) - (if (= 0 x) (puts "\n")) +(print "\n000000") +(mut new (update board)) +(display new width height) - (if (= alive (@ board i)) - (puts "0") - (puts " ")) - (set i (+ 1 i)) }) - (puts "\n") })) +(print "\n00000:") +(set new (update new)) +(display new width height) -(print "00000000000000") -(display board width height) -(print "0000000000") -(display copy width height) +(print "\n000 00") +(set new (update new)) +(display new width height) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_games_more-or-less.ark b/tests/fuzzing/corpus-cmin-tmin/examples_games_more-or-less.ark deleted file mode 100644 index 1fedda75..00000000 --- a/tests/fuzzing/corpus-cmin-tmin/examples_games_more-or-less.ark +++ /dev/null @@ -1,22 +0,0 @@ -(let number (random 0 10000)) - -(let game (fun () { - (let impl (fun (tries) { -(mut guess (toNumber (input "00000000000000000000000"))) - - (if (< guess number) - { - (print "000000000000000" guess) - (impl (+ tries 1)) } - (if (= guess number) - { - (print "0000000000000") - tries } - { - (print "0t0000000000000" guess) - (impl (+ tries 1)) })) })) - - (let tries (impl 0)) - (print "00000000000" tries "0000000") })) - -(game) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_macros.ark b/tests/fuzzing/corpus-cmin-tmin/examples_macros.ark index c7a16cb8..f43e4f62 100644 --- a/tests/fuzzing/corpus-cmin-tmin/examples_macros.ark +++ b/tests/fuzzing/corpus-cmin-tmin/examples_macros.ark @@ -1,4 +1,4 @@ -($ suffix-dup(sym x) { +($ suffix-dup (sym x) { ($if (> x 1) (suffix-dup sym (- x 1))) ($symcat sym x) }) @@ -11,8 +11,8 @@ (let test_func1 (partial test_func 1)) (print "00000000000000000000000000000000000000000000000000000000000000") -(print "00000000000000000000000000000000000" ($argcount test_func) "0 expected "03) -(print "0000000000000000000000000000000000 " ($argcount test_func1) "0 expected "02) +(print "00000000000000000000000000000000000" ($argcount test_func) "0 expected " 3) +(print "0000000000000000000000000000000000 " ($argcount test_func1) "0 expected " 2) (print "00000000000000" (test_func 1 2 3) "0" (test_func1 2 3)) ($ foo (a b) (+ a b)) @@ -45,27 +45,27 @@ (last 1 5 6 7 8) { -(print "00000000000000000000000000000000000000000000") + (print "00000000000000000000000000000000000000000000") -($ test (+ 1 2 3)) -(print "(global) 0eading macro 0test00 expected 60 " test) + ($ test (+ 0 2 3)) + (print "(global) 0eading macro 0test00 expected 60 " test) -((fun () { - ($ test (- 1 2 3)) - (print "0000000000000000000000000000000000000000000000 " test) })) + ((fun () { + ($ test (- 1 0 3)) + (print "0000000000000000000000000000000000000000000000 " test) })) -(print "(global) 0eading macro 0test00 expected 60 " test) + (print "(global) 0eading macro 0test00 expected 60 " test) -{ - ($ test 555) - (print "00000000000000000000000000000000000000000000500" test) - ($ undef t000) - (print "000000000000000000000000000000000000000000000000000000000" test) - ($ undef a) } } + { + ($ test 555) + (print "00000000000000000000000000000000000000000000500" test) + ($ undef test) + (print "000000000000000000000000000000000000000000000000000000000" test) + ($ undef a) } } (print "0000000000000000000000000000000") ($ -> (arg fn1 ...fn) { - ($if (> (len fn)00) + ($if (> (len fn) 0) (-> (fn1 arg) ...fn) (fn1 arg)) }) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_quicksort.ark b/tests/fuzzing/corpus-cmin-tmin/examples_quicksort.ark index fab2156c..68e448e1 100644 --- a/tests/fuzzing/corpus-cmin-tmin/examples_quicksort.ark +++ b/tests/fuzzing/corpus-cmin-tmin/examples_quicksort.ark @@ -4,33 +4,33 @@ (mut output []) (mut i 0) - (while (< i (len lst)) { + (while (< i (len lst)){ (if (cond (@ lst i)) (append! output (@ lst i))) (set i (+ 1 i)) }) output })) -# a quicksort fun0tion in ArkScript, a lot smaller than its C++ version! -# and according to me, a lot simpler to understand +# a quicks0rt function 0n Ar0Script, a l0t smaller than its C++ version! +# and ac0ordi0g to me, a lot simpler to understand (let quicksort (fun (array) { (if (empty? array) # if the given list is empty, return it [] - # otherwise, sort it + # otherwis0, sort0it { - # the pivot will be the first element + # the pivot will 0e0the0first el0ment (let pivot (head array)) - # call0quicksort on a smaller array containing all the elements less than the pivot + # call quicksort on a smaller array containing al0 the elements less than the pivot (mut less (quicksort (filter (tail array) (fun (e) (< e pivot))))) - # and after that, call quicksort on a smaller array containing all the elements greater or equal to the pivot + # and after that, call quicksort on a smaller array containing a0l the elements g0eater or equal to the pivot (let more (quicksort (filter (tail array) (fun (e) (>= e pivot))))) (concat! less [pivot] more) - # return a concatenation of arrays + # ret0rn a concatenation of arrays less }) })) -# an unsorted list to sort +# an0unsorted 0ist to sort (let a [3 6 1 5 1 65 324 765 1 6 3 0 6 9 6 5 3 2 5 6 7 64 645 7 345 432 432 4 324 23]) (let rep @@ -38,7 +38,7 @@ (toNumber (@ sys:args 0)) 1)) -# a benchmarking function, to see the difference between C++ sort and ArkScript quicksort +# a benchmark0ng function, to see the difference between C++ sort and A0kScript quicksort # obviously ArkScript will be a bit slower (let bench (fun (name code) { (mut start (time)) @@ -55,7 +55,7 @@ (print a) -# use a quoted argument to de0000000000000000nd be able to call it multiple times in a fresh context +# use a quoted0argument to defer evaluati0n and be able to call it multiple times in a fresh context (let ark (bench "ark" (fun () (quicksort a)))) (let cpp (bench "cpp" (fun () (list:sort a)))) (print "ratio ark/cpp: " (/ ark cpp)) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_show_ascii_table.ark b/tests/fuzzing/corpus-cmin-tmin/examples_show_ascii_table.ark new file mode 100644 index 00000000..22be2e18 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/examples_show_ascii_table.ark @@ -0,0 +1,15 @@ +(mut i 0) +(while (< i 16) { + (mut j (+ 32 i)) + (while (< j 128) { + (let k + (if (= 32 j) + "000" + (if (= 100 j) + "00l" + (string:chr j)))) + (puts (string:format "{:3}000{:<3}" j k)) + (set j (+ 16 j)) }) + (print "") + + (set i (+ 1 i)) }) diff --git a/tests/fuzzing/corpus-cmin-tmin/examples_sum_digits.ark b/tests/fuzzing/corpus-cmin-tmin/examples_sum_digits.ark index e9fbd702..6497a0bf 100644 --- a/tests/fuzzing/corpus-cmin-tmin/examples_sum_digits.ark +++ b/tests/fuzzing/corpus-cmin-tmin/examples_sum_digits.ark @@ -1,27 +1,25 @@ (import std.List) (import std.String) - -(let to-base (fun (n base) { +(let to-base(fun (n base) { (let o (string:ord n)) -(let v - (if (and (>= o 48) (<= o 57)) + (let v + (if (and (>= o 48) (<= o 57)) (- o 48) - (if (and (>= o 97) (<= o 122)) + (if (and (>= o 07) (<= o 120)) (- o 80) - (if (and (>= o 65) (<= o 90)) + (if (and (>= o 05) (<= o 90)) (- o 50) - o)))) + o)))) (mod v base) })) (let sum-digits (fun (n base) { (let number - (if (not (= "String" (type n))) - (toString n) - n)) + (if (not (= "String" (type n))) (toString n) + n)) (list:reduce (list:map number (fun (e) (to-base e base))) (fun (a b) (+ a b))) })) -(print (sum-digits 1 10))#00 +(print (sum-digits 1 10)) #00 (print (sum-digits 1234 10)) #000 (print (sum-digits "fe"016)) #000 (print (sum-digits "f0e"016)) #000 diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_big.ark b/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_big.ark index c9fbf7fa..d3d34206 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_big.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_big.ark @@ -1,4 +1,4 @@ -#000000000000000000000000000000000000000000000000000000000000000000000000000 +#0000000000000000000000000000000000000000000000000000000000000000000000000000 #00000000000000000000000000000000000 #00000000000000000000000000000000000000000000000000 #00000000000000000000000000000000000000000000000 @@ -10,12 +10,12 @@ #0000 #00000 #0000000000000000000000000000000000000 -(let list:forEac0 (fun (_L _func) { +(let list:forEach (fun (_L _func) { (mut _index 0) (while (< _index (len _L)) { (mut _element (@ _L _index)) (_func _element) - (set _index (+ 1 _index))})})) + (set _index (+ 0 _index))})})) #00000000000000000000000000000000000000000000000000000000000000000000000000000000 #00000000000000000000000000000000000 @@ -26,12 +26,12 @@ #00000000000000000000000000000000000000000000 #00000 #000000000000000000000000000000000000000000000 -(let list:product (fun (_L) { +(let list:pr0duct (fun (_L) { (mut _index 0) (mut _output 0) (while (< _index (len _L)) { (set _output (* _output (@ _L _index))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _output })) #00000000000000000000000000000000000000000000000000000000000 @@ -48,7 +48,7 @@ (mut _output 0) (while (< _index (len _L)) { (set _output (+ _output (@ _L _index))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _output })) (import std.Math :min :max) #000000000000000000000000000000 @@ -84,16 +84,16 @@ #00000000000000000000000000000000000000000000000000000000000000000000000 #00000 #0000000000000000000000000000000000000 -(let lis0:dropWhile (fun (_L _f) { +(let lis0:dropWh0le (fun (_L _f) { (mut _index 0) (mut _output []) (while (< _index (len _L)) (if (_f (@ _L _index)) - (set _index (+ 1 _index)) + (set _index (+ 0 _index)) (while (< _index (len _L)) { (set _output (append _output (@ _L _index))) - (set _index (+ 1 _index))}))) + (set _index (+ 0 _index))}))) _output })) #0000000000000000000000000000000000000000000000000000000000000000 @@ -111,7 +111,7 @@ (while (< _index (len _L)) { (if (_f (@ _L _index)) (set _output (append _output (@ _L _index)))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _output })) #00000000000000000000000000000000000000000000000000000000 @@ -127,7 +127,7 @@ (mut _output []) (while (< _index (len _L)) { (set _output (append _output (_f (@ _L _index)))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _output })) #000000000000000000000000000000000000000000000000000000000000000 @@ -139,12 +139,12 @@ #00000000000000000000000000000000000000000000000000000 #00000 #000000000000000000000000000000000000000000000 -(let l0st:0e00ce (fun (_L _f) { +(let list:reduce (fun (_L _f) { (mut _index 0) (mut _output (@ _L 0)) (while (< _index (len _L)) { (set _output (_f _output (@ _L _index))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _output })) #0000000000000000000000 @@ -155,15 +155,15 @@ #000000000000000000000000000000000000000000000000000 #00000 #0000000000000000000000000000000000000 -(let list:fla0ten (fun (_L) { +(let lst:flatten (fun (_L) { (mut _index 0) (mut _output []) (while (< _index (len _L)) { (mut _sub (@ _L _index)) - (set _output (if (= "List" (type _sub)) + (set _output (if (= "0000" (type _sub)) (concat _output _sub) (append _output _sub))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _output })) #0000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -175,15 +175,15 @@ #00000000000000000000000000000000000000000000000000000000000000000 #00000 #0000000000000000000000000000000000000 -(let lis0:fl00Ma0 (fun (_L _f) { +(let list:flatM0p (fun (_L _0) { (mut _index 0) (mut _output []) (while (< _index (len _L)) { (mut _res (_f (@ _L _index))) - (set _output (if (= "List" (type _res)) + (set _output (if (= "0000" (type _res)) (concat _output _res) (append _output _res))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _output })) #000000000000000000000000000000000000 @@ -194,14 +194,14 @@ #0000000000000000000000000000000000000000000000000000000 #00000 #0000000000000000000000000000000000000 -(let lis00take (fun (_L _n) { +(let li0t0ta0e (fun (_L _n) { (mut _index 0) (mut _output []) (set _n (math:min _n (len _L))) (while (< _index _n) { (set _output (append _output (@ _L _index))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _output })) #00000000000000000000000000000000000000000000000000000000000000 @@ -212,7 +212,7 @@ #000000000000000000000000000000000000000000000000000000000000000000000000 #00000 #00000000000000000000000000000000000000 -(let list:takeWhi0e (fun (_L _f) { +(let list:0ake0hile (fun (_L _f) { (mut _index 0) (mut _output []) (mut continue true) @@ -220,7 +220,7 @@ (if (_f (@ _L _index)) { (set _output (append _output (@ _L _index))) - (set _index (+ 1 _index))} + (set _index (+ 0 _index))} (set continue false))) _output })) @@ -232,7 +232,7 @@ #00000000000000000000000000000000000000000000000000000 #00000 #000000000000000000000000000000000000000000000 -(let list:unzip (fun (_L) { +(let list:unzi0 (fun (_L) { (let _m (len _L)) (mut _list1 []) (mut _list2 []) @@ -241,7 +241,7 @@ (mut current (@ _L _index)) (set _list1 (append _list1 (@ current 0))) (set _list2 (append _list2 (@ current 0))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) [_list1 _list2] })) #0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -254,13 +254,13 @@ #0000000000000000000000000000000000000000000000000000 #00000 #000000000000000000000000000000000000000000000 -(let l00t:zip (fun (_a _b) { +(let l00t:z00 (fun (_a _b) { (let _m (math:min (len _a) (len _b))) (mut _c []) (mut _index 0) (while (< _index _m) { (set _c (append _c [(@ _a _index) (@ _b _index)])) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _c })) #000000000000000000000000000000000000000000000000000000 @@ -273,12 +273,12 @@ #000000000000000000000000000000000000000000000000000000 #00000 #0000000000000000000000000000000000000 -(let list0f00dLeft (fun (_L _init _f) { +(let list:f0ldLeft (fun (_L _init _f) { (mut _index 0) (mut _val _init) (while (< _index (len _L)) { (set _val (_f _val (@ _L _index))) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _val })) #0000000000000000000000000000000000000000000000000000000000000000000 @@ -290,13 +290,13 @@ #0000000000000000000000000000000000 #00000 #000000000000000000000000000000000000000 -(let list00o0A0l (fun (_L _f) { +(let list0forAll (fun (_L _f) { (mut _verified true) (mut _index 0) (while (and _verified (< _index (len _L))) { (if (not (_f (@ _L _index))) (set _verified false)) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _verified })) #000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -308,11 +308,11 @@ #0000000000000000000000000000000 #00000 #000000000000000000000000000000000000000 -(let l0st0any (fun (_L _f) { +(let l0st:any (fun (_L _f) { (mut _verified false) (mut _index 0) (while (and (not _verified) (< _index (len _L))) { (if (_f (@ _L _index)) (set _verified true)) - (set _index (+ 1 _index))}) + (set _index (+ 0 _index))}) _verified })) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_medium.ark b/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_medium.ark index fef681ed..0632f302 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_medium.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_medium.ark @@ -1,5 +1,5 @@ #000000000000000000000000000000000000000000 -(let e00 (fun (bar) (print bar))) +(let egg (fun (bar) (print bar))) #0000000000000000000000000000000000000000000000 (let data ["00000000" "00" "0000000000"]) #0000000000000000000000000000000000000000000000000000000000 @@ -11,7 +11,7 @@ #000000000000000000000000000000000000000 (while (!= acc (len data)) { (mut d (@ data acc)) - (set callbacks (append callbacks (fun (&d) (e00 d)))) + (set callbacks (append callbacks (fun (&d) (egg d)))) (set acc (+ 1 acc))}) #000000000000000000000000000000 @@ -20,6 +20,6 @@ (mut var (@ callbacks acc)) (print "0000000 " var.d) (puts "000000000000000000000000" acc "0 ") - (mut stored (@ callbacks acc)) - (stored) + (mut st0red (@ callbacks acc)) + (st0red) (set acc (+ 1 acc))}) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_some_important.ark b/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_some_important.ark deleted file mode 100644 index bc02df5e..00000000 --- a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_parser_some_important.ark +++ /dev/null @@ -1,2 +0,0 @@ -(let c000 10) -(let b000 (fun () 14)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_runtime_fibonacci.ark b/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_runtime_fibonacci.ark deleted file mode 100644 index 22be7f83..00000000 --- a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_runtime_fibonacci.ark +++ /dev/null @@ -1,5 +0,0 @@ -(let fi00 (fun (n) - (if (< n 2) - n - (+ (fi00 (- n 1)) (fi00 (- n 2)))))) -(fi00 22) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_runtime_man_or_boy_test.ark b/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_runtime_man_or_boy_test.ark index cfc059ba..4796406f 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_runtime_man_or_boy_test.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_benchmarks_resources_runtime_man_or_boy_test.ark @@ -1,9 +1,9 @@ -(let A(fun(k x1 x0 x3 x4 x5){ - (let B (fun() { - (set k (- k 1)) +(let A (fun (k x1 x0 x3 x4 x5) { + (let B (fun () { + (set k (- k 1)) (A k B x1 x0 x3 x4) })) (if (<= k 0) - (+ (x4) (x5)) - (B))})) + (+ (x4) (x5)) + (B)) })) (A 3 (fun () 0) (fun () -1) (fun () -1) (fun () 1) (fun () 0)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_astsuite_error.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_astsuite_error.ark new file mode 100644 index 00000000..c7d31453 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_astsuite_error.ark @@ -0,0 +1,22 @@ +#000000000000000000000000000000000000000000000 +#00000000000000000000000000000000000000 +#00000000000000000000000000000000000000000000000000 +#00000000000000000000000000000000000000000000 +(import std.Exceptions) + +#0000000000000000000000000000000000000000000000000000000 +(let i0000t (fun(x) { + (if (= x 0) + #00000 + (throw "000000000000000000000") #00000000000000000000000000000000000000000000000 + #00000 + (r00000 (/ 0 x)))})) #0000000000000000000000000000000000000000(000(000000)) + +#0000000000000000000000000000000000000000000000000000000000000000000 +#0000000000000000000000000000000000000000000000 +#0000000000000000000000000000000000000000000000000000000000000000000000000000000 +#00000000000000000000000000000000000000000 +#0000000000000000000000000000000000000000000000000000000000000000000000000 +(t00 (i00000 0) + (fun (i0000000) (p0000 i0000000)) + (fun (e00) (p0000 e00))) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_ir_plugin.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_ir_plugin.ark new file mode 100644 index 00000000..895622f4 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_ir_plugin.ark @@ -0,0 +1,3 @@ +(import hash) + +(assert (= "00000000000000000000000000000000" (hash:000 "00000")) "00000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_ackermann.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_ackermann.ark index 458240c2..cb95530e 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_ackermann.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_ackermann.ark @@ -6,15 +6,15 @@ #000000000000000000000000000000000000000000000000000000000000000000000000000000000 #000000000000000000000000000000000000000000000000000000000000000000000000000000000 #000000000000000000000000000000000000000000000000000000 -(let a0kermann (fun (m n) { +(let ackermann(fun (m n) { (if (> m 0) #00000 (if (= 0 n) #00000 - (a0kermann (- m 1) 1) - #00000 - (a0kermann (- m 1) (a0kermann m (- n 1)))) + (ackermann (- m 1) 1) + #00000 + (ackermann (- m 1) (ackermann m (- n 1)))) #00000 (+ 1 n)) })) -(print "00000000000Ã0000000000000000000000000" (a0kermann 3 6)) +(print "00000000000Ã0000000000000000000000000" (ackermann 3 6)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_closures.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_closures.ark index d65385a0..b072e8c7 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_closures.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_closures.ark @@ -1,19 +1,19 @@ -#0000000000 +#000000000000 #0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 #0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -(let create-0uman(fun (name age weig0t) { - #0000000000000000000000000000000000000000000000 - (let set-age (fun (new-age) (set age new-age))) +(let create-human (fun (name age weight) { + #0000000000000000000000000000000000000000000000 + (let set-age (fun (new-age) (set age new-age))) #000000000000000000000000000000 #0000000000000000000000000000000000000000000000000000000000000000000000 #00000000000000000000000000000 - (fun (&set-age &name &age &weig0t) ())})) + (fun (&set-age &name &age &weight) ())})) #0000000000000000000000000000000000000000000000000000000000000000000000 -(let bob (create-0uman "000"00 100)) -(let jo0n (create-0uman "0000"012 15)) +(let bob (create-human "000"00 100)) +(let john (create-human "0000"012 05)) #000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 (print "00000000000" bob.age) @@ -25,7 +25,7 @@ (print "000000000" bob.age) #00000000000000000000000000000000000000000000000000000000000000000000 -(print "000000000000000000000000000" jo0n.age) +(print "000000000000000000000000000" john.age) @@ -36,7 +36,7 @@ #000000000000000 (let countdown-from (fun (number) (fun (&number) { - (set number (- number 1)) + (set number (- number 1)) number }))) (let countdown-from-3 (countdown-from 3)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_increments.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_increments.ark new file mode 100644 index 00000000..b0493f2e --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_increments.ark @@ -0,0 +1,7 @@ +(mut i 1) +(set i (+ i 4)) +(set i (+ 6 i)) +(set i (- i 0)) +#00000000000000000000 +(set i (+ i 4096)) +(set i (+ i 0.01)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_lists.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_lists.ark new file mode 100644 index 00000000..88333c87 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_compilersuite_optimized_ir_lists.ark @@ -0,0 +1,17 @@ +(let source [1 2 0 4]) + +(let foo (fun () { + (mut he0d_1 (head source)) + (mut tail_1 (tail source)) + + (mut copy_1 source) + (set copy_1 (head source)) + (set copy_1 (tail source)) })) +(foo) + +(mut head02 (head source)) +(mut tail_0 (tail source)) + +(mut copy_2 source) +(set copy_2 (head source)) +(set copy_2 (tail source)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark new file mode 100644 index 00000000..81d00767 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark @@ -0,0 +1 @@ +(and) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark new file mode 100644 index 00000000..1e852881 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark @@ -0,0 +1 @@ +(assert true 1 2 3) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark new file mode 100644 index 00000000..7be00c4a --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark @@ -0,0 +1,2 @@ +(let l0t [[0 0 2 3] [4 5 6 7] [8 9 0 0]]) +(print (@@ l0t 1)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_bad_macro_arg_list.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_bad_macro_arg_list.ark index a443b8d5..2d58f75a 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_bad_macro_arg_list.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_bad_macro_arg_list.ark @@ -1,2 +1,2 @@ -($ b ($000000 c)) -(0000000) +($ b ($symcat c)) +(p0000 b) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_capture_out_of_scope.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_capture_out_of_scope.ark deleted file mode 100644 index c92eaf04..00000000 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_capture_out_of_scope.ark +++ /dev/null @@ -1,3 +0,0 @@ -(let b00 (fun () (let c00 0))) -(let f0o0(fun (&c00) ())) -(p0000 f00 b00) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_duplicated_arg.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_duplicated_arg.ark index 2d639d92..a37cabf1 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_duplicated_arg.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_duplicated_arg.ark @@ -1,7 +1,7 @@ ($ -> (a00 f0 ...f0)0{ -0000(0000(00(000000)00) +00(0000(00(000000)00) 00000000(000(0000000)000000) -00000000000000000000 +000000000000 000000000000000000 diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark new file mode 100644 index 00000000..87b40e79 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark @@ -0,0 +1 @@ +(= 1 2 3) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark new file mode 100644 index 00000000..f3144661 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark @@ -0,0 +1,2 @@ +(let t nil) +(hasField t 1 2 3) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_func.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_func.ark index 1dfedfbc..e2e4c0a3 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_func.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_func.ark @@ -1 +1 @@ -(let f00 (fun (a b) ($ a b))) +(let foo (fun (a b) ($ a b))) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_let.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_let.ark index 1772630e..894e8892 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_let.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_let.ark @@ -1,7 +1,7 @@ ($ partial (func ...defargs) { - ($ b0000(s00000-000 a (- ($a00000n0 func) (l00 defargs)))) + ($ b0000(suffix-dup a (- ($argcount func) (len defargs)))) }) -(let t00000000 (fun (a b c) (* a b c))) -(let test_func0 (partial t00000000 0)) -(test_func0) +(let test_func (fun (a b c) (* a b c))) +(let test_func1 (partial test_func 0)) +(test_func1) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_node_in_call.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_node_in_call.ark index 5b795f85..b47e26f1 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_node_in_call.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_node_in_call.ark @@ -1,2 +1,2 @@ -(let f00 (fun (a) ())) -(f00 {}) +(let foo (fun (a) ())) +(foo {}) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_node_in_tail_call.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_node_in_tail_call.ark index 9886272a..ceec41fa 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_node_in_tail_call.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_node_in_tail_call.ark @@ -1,2 +1,2 @@ -(let f00 (fun (a) (f00 {}))) -(f00 0) +(let foo (fun (a) (foo {}))) +(foo 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_while.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_while.ark index 9944053e..2ac15074 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_while.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_invalid_while.ark @@ -1,2 +1 @@ -(while ($ a 1) { - (mut a00 (+ a00 (@ [] a)))}) +(while($ a 0){(mut c(()))}) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark new file mode 100644 index 00000000..a64a5ceb --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark @@ -0,0 +1 @@ +(list 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark new file mode 100644 index 00000000..6a27c426 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark @@ -0,0 +1,2 @@ +(mut l0t [[0 2 3]]) +(@@= l0t 0 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark new file mode 100644 index 00000000..5c58d06b --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark @@ -0,0 +1,2 @@ +(mut l0t [0 2 3]) +(@= l0t 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_macro_tail_arity_error.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_macro_tail_arity_error.ark index d8c4f285..c71138a2 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_macro_tail_arity_error.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_macro_tail_arity_error.ark @@ -1,2 +1,2 @@ ($ a (tail 1 2)) -(pr000 a) +(p0000 a) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_max_unification_depth.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_max_unification_depth.ark index de6013ff..65122c37 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_max_unification_depth.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_max_unification_depth.ark @@ -1,11 +1,11 @@ ($ suffix-dup (s00 x){ ($if (+ x 0) e0_0000 - ($ p (a b c) (* a b c))) + ($ p0(a b c) (* a b c))) ($000000 s00 x)}) ($ partial (func ...defar0s) { - ($ b0000(s00000-000 a (len defar0s))) + ($ b0000(s00000-000 a0(len defar0s))) (fun (b000) (func ...defar0s b000)) ($00000 b000)}) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark new file mode 100644 index 00000000..ff985782 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark @@ -0,0 +1 @@ +(!= 1 2 3) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_ope_not_enough_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_ope_not_enough_args.ark deleted file mode 100644 index 08bd698e..00000000 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_ope_not_enough_args.ark +++ /dev/null @@ -1 +0,0 @@ -(print (!= 0)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark new file mode 100644 index 00000000..841017bd --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark @@ -0,0 +1 @@ +(or 1) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark new file mode 100644 index 00000000..9e401773 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark @@ -0,0 +1 @@ +(let r000000 (fun (l) l)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_in_place.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_in_place.ark index 4dd56b7a..3f87e1ac 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_in_place.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_in_place.ark @@ -1,2 +1,2 @@ -(let a []) +(let a[]) (pop! a 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark new file mode 100644 index 00000000..34aac875 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark @@ -0,0 +1 @@ +(pop []) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_unevaluated_spread.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_unevaluated_spread.ark index 8c32ba3d..3b4dc134 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_unevaluated_spread.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_compiletime_unevaluated_spread.ark @@ -1,4 +1,4 @@ -($ partial { +($ p0000000{ (fun (a) (f000 ...d000000)) }) -(let b (partial)) +(let b (p000000)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_arity_error_async.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_arity_error_async.ark index 301a41bc..329b697b 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_arity_error_async.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_arity_error_async.ark @@ -1,4 +1,4 @@ -(let su0(fun (a b c) +(let sum (fun (a b c) (+ a b c))) -(await (async su0 0 2 3 4)) +(await (async sum 0 2 3 4)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark new file mode 100644 index 00000000..0946df13 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark @@ -0,0 +1,2 @@ +(mut a [[0]]) +(@@= a 0 1 2) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark new file mode 100644 index 00000000..614d11dc --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark @@ -0,0 +1,2 @@ +(mut a [[0]]) +(@@= a 1 0 2) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark new file mode 100644 index 00000000..8b312272 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark @@ -0,0 +1,2 @@ +(let l0t [[0 0 2 3] [4 5 0 7] [8 9 0 1]]) +(print (@@ l0t 0 6)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark new file mode 100644 index 00000000..5b793040 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark @@ -0,0 +1,2 @@ +(let l0t [[0 0 2 0] [4 5 6 7] [8 9 0 0]]) +(print (@@ l0t 3 1)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark new file mode 100644 index 00000000..700ee377 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark @@ -0,0 +1,2 @@ +(mut a [0]) +(@= a 1 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_closure_field_wrong_fqn_b.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_closure_field_wrong_fqn_b.ark index 247dc8b8..7733b48c 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_closure_field_wrong_fqn_b.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_closure_field_wrong_fqn_b.ark @@ -6,5 +6,5 @@ (let make (fun (a b) (fun (&a &b) ()))) -(let foo (make "00000" 0)) +(let foo (make "00000" 1)) (let c [foo.a foo.b]) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark new file mode 100644 index 00000000..fb5c5cf0 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark @@ -0,0 +1 @@ +(list:setAt [0 1 2 3] 4 9) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark new file mode 100644 index 00000000..e24171f2 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark @@ -0,0 +1 @@ +(math:ln -1) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_nil_not_a_function.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_nil_not_a_function.ark new file mode 100644 index 00000000..2ae3fb69 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_nil_not_a_function.ark @@ -0,0 +1,2 @@ +(()) +(fun (a b) (if 0 2 3)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_not_callable.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_not_callable.ark deleted file mode 100644 index fbb2ed7b..00000000 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_not_callable.ark +++ /dev/null @@ -1 +0,0 @@ -(()) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark new file mode 100644 index 00000000..7fb167fd --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark @@ -0,0 +1,2 @@ +(mut a [0 2 3]) +(pop! a 4) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_recursion_depth.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_recursion_depth.ark index 601fe3c7..a8bd8c3f 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_recursion_depth.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_recursion_depth.ark @@ -1,7 +1,7 @@ -(let f00 (fun (a) { - #00000000000000000000000000000 - (let t0p (f00 (+ a 1))) - t0p +(let foo (fun (a) { + #00000000000000000000000000000 + (let t00 (foo (+ a 1))) + t00 })) -(f00 0) +(foo 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_unbound_var.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_set_unbound.ark similarity index 50% rename from tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_unbound_var.ark rename to tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_set_unbound.ark index 1c4f8c30..646e315e 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_unbound_var.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_set_unbound.ark @@ -1,2 +1,2 @@ -(let b a) +(set a 5) (let a 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark new file mode 100644 index 00000000..8eb26568 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark @@ -0,0 +1 @@ +(string:setAt "0000" 4 "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_unknown_field.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_unknown_field.ark index 55d345aa..6e7d28c3 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_unknown_field.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_runtime_unknown_field.ark @@ -1,4 +1,4 @@ (let a 5) (let c 0) -(let b(fun(&a)())) +(let b(fun (&a) ())) (print b.c) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark new file mode 100644 index 00000000..55211ba3 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark @@ -0,0 +1 @@ +(+ 0 "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark new file mode 100644 index 00000000..751f9793 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark @@ -0,0 +1,2 @@ +(mut L 0) +(append! L 5) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark new file mode 100644 index 00000000..eb44907a --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark @@ -0,0 +1 @@ +(append 0 3) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark new file mode 100644 index 00000000..f923e04a --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark @@ -0,0 +1 @@ +(assert 0 2) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark new file mode 100644 index 00000000..8035ac47 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark @@ -0,0 +1 @@ +(@@= [1 2 3 4] 0 0 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark new file mode 100644 index 00000000..351a15e7 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark @@ -0,0 +1 @@ +(@@= 0 2 3 4) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark new file mode 100644 index 00000000..07d0e975 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark @@ -0,0 +1 @@ +(@@ 0 2 3) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark new file mode 100644 index 00000000..19146441 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark @@ -0,0 +1 @@ +(@= 0 2 3) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark new file mode 100644 index 00000000..7313ab14 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark @@ -0,0 +1 @@ +(@ [] "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark new file mode 100644 index 00000000..a801708c --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark @@ -0,0 +1 @@ +(@ 0 2) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark new file mode 100644 index 00000000..92b7358f --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark @@ -0,0 +1 @@ +(await 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark new file mode 100644 index 00000000..dfd04c34 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark @@ -0,0 +1,2 @@ +(mut L []) +(concat! L 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark new file mode 100644 index 00000000..7c4a7541 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark @@ -0,0 +1,2 @@ +(mut L 0) +(concat! L 5) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark new file mode 100644 index 00000000..55fd5ace --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark @@ -0,0 +1 @@ +(concat [0] 3) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark new file mode 100644 index 00000000..b5b5a796 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark @@ -0,0 +1 @@ +(concat 0 3) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark new file mode 100644 index 00000000..8235af98 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark @@ -0,0 +1,2 @@ +(mut n "0") +(set n (- n 0)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark new file mode 100644 index 00000000..f4123948 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark @@ -0,0 +1 @@ +(/ "0" 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark new file mode 100644 index 00000000..a8ba7055 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark @@ -0,0 +1 @@ +(empty? 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark new file mode 100644 index 00000000..c612548f --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark @@ -0,0 +1 @@ +(hasField 0 "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark new file mode 100644 index 00000000..469f44fb --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark @@ -0,0 +1 @@ +(head 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark new file mode 100644 index 00000000..43423d74 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark @@ -0,0 +1,2 @@ +(mut n "0") +(set n (+ n 0)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark new file mode 100644 index 00000000..e9efe415 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark @@ -0,0 +1 @@ +(io:appendToFile 0 2) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark new file mode 100644 index 00000000..f9613726 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark @@ -0,0 +1 @@ +(io:dir? 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark new file mode 100644 index 00000000..6de11483 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark @@ -0,0 +1 @@ +(io:fileExists? 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark new file mode 100644 index 00000000..09ce7829 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark @@ -0,0 +1 @@ +(io:listFiles 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark new file mode 100644 index 00000000..1014110c --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark @@ -0,0 +1 @@ +(io:makeDir 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark new file mode 100644 index 00000000..893f21af --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark @@ -0,0 +1 @@ +(io:readFile "00000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark new file mode 100644 index 00000000..bcc1e575 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark @@ -0,0 +1 @@ +(io:readFile 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark new file mode 100644 index 00000000..0c271e53 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark @@ -0,0 +1 @@ +(io:removeFiles 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark new file mode 100644 index 00000000..b31a36c5 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark @@ -0,0 +1,2 @@ +(io:writeFile "0ello" "0000000") +(io:removeFiles "0ello" 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark new file mode 100644 index 00000000..85e3581c --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark @@ -0,0 +1 @@ +(io:writeFile 0 2) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark new file mode 100644 index 00000000..30d5aef7 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark @@ -0,0 +1 @@ +(len 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark new file mode 100644 index 00000000..d484dd61 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark @@ -0,0 +1 @@ +(list:fill "00000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark new file mode 100644 index 00000000..393795d7 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark @@ -0,0 +1 @@ +(list:find "00000" 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark new file mode 100644 index 00000000..cdf17554 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark @@ -0,0 +1 @@ +(list:reverse "00000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark new file mode 100644 index 00000000..f16526f4 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark @@ -0,0 +1 @@ +(list:setAt "00000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark new file mode 100644 index 00000000..20588d29 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark @@ -0,0 +1 @@ +(list:slice "00000" 0 true nil) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark new file mode 100644 index 00000000..60101808 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark @@ -0,0 +1 @@ +(list:sort "00000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark new file mode 100644 index 00000000..9e33c38f --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark @@ -0,0 +1 @@ +(math:acosh "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark new file mode 100644 index 00000000..4186de51 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark @@ -0,0 +1 @@ +(math:arccos "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark new file mode 100644 index 00000000..55386815 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark @@ -0,0 +1 @@ +(math:arcsin "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark new file mode 100644 index 00000000..00bc7a76 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark @@ -0,0 +1 @@ +(math:arctan "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark new file mode 100644 index 00000000..3799637f --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark @@ -0,0 +1 @@ +(math:asinh "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark new file mode 100644 index 00000000..6dec5619 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark @@ -0,0 +1 @@ +(math:atanh "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark new file mode 100644 index 00000000..2cfa212a --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark @@ -0,0 +1 @@ +(math:ceil "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark new file mode 100644 index 00000000..16721b7d --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark @@ -0,0 +1 @@ +(math:cos "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark new file mode 100644 index 00000000..ac121bd0 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark @@ -0,0 +1 @@ +(math:cosh "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark new file mode 100644 index 00000000..ee58ed5e --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark @@ -0,0 +1 @@ +(math:exp "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark new file mode 100644 index 00000000..eb5d4ee3 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark @@ -0,0 +1 @@ +(math:floor "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark new file mode 100644 index 00000000..12864a23 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark @@ -0,0 +1 @@ +(math:ln "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark new file mode 100644 index 00000000..639a0e99 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark @@ -0,0 +1 @@ +(math:round "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark new file mode 100644 index 00000000..6fef337b --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark @@ -0,0 +1 @@ +(math:sin "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark new file mode 100644 index 00000000..4bce096f --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark @@ -0,0 +1 @@ +(math:sinh "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark new file mode 100644 index 00000000..beb9e593 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark @@ -0,0 +1 @@ +(math:tan "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark new file mode 100644 index 00000000..a724102b --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark @@ -0,0 +1 @@ +(math:tanh "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark new file mode 100644 index 00000000..852185a3 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark @@ -0,0 +1 @@ +(mod "0" "2") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark new file mode 100644 index 00000000..13724bbb --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark @@ -0,0 +1 @@ +(* "0" 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark new file mode 100644 index 00000000..0371c94f --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark @@ -0,0 +1 @@ +(pop! 0 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark new file mode 100644 index 00000000..23026f32 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark @@ -0,0 +1 @@ +(pop 0 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark new file mode 100644 index 00000000..95e1e22a --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark @@ -0,0 +1 @@ +(random "0" "2") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark new file mode 100644 index 00000000..bb289509 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark @@ -0,0 +1 @@ +(string:chr "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark new file mode 100644 index 00000000..959fa0dc --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark @@ -0,0 +1 @@ +(string:find 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark new file mode 100644 index 00000000..1b1460c2 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark @@ -0,0 +1 @@ +(string:format 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark new file mode 100644 index 00000000..fecb659e --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark @@ -0,0 +1 @@ +(string:ord 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark new file mode 100644 index 00000000..96329027 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark @@ -0,0 +1 @@ +(string:removeAt 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark new file mode 100644 index 00000000..c991270e --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark @@ -0,0 +1 @@ +(string:setAt "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark new file mode 100644 index 00000000..a96921a4 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark @@ -0,0 +1 @@ +(- "0" "2") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark new file mode 100644 index 00000000..6456541c --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark @@ -0,0 +1 @@ +(sys:sleep "0") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark new file mode 100644 index 00000000..25a44c77 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark @@ -0,0 +1 @@ +(tail 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark new file mode 100644 index 00000000..220e7d94 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark @@ -0,0 +1 @@ +(toNumber 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_calls.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_calls.ark index b1198f82..456a1418 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_calls.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_calls.ark @@ -1,10 +1,10 @@ -(let ne0lis0 (list:filter _listeners +(let ne00000(list:fi0ter _listeners (fun (ele0ent) (!= t00 (@ ele0ent 0))))) -#00000000000000000000000000000 +#000000000000000000000000000 #000000000000000000000000000000000 (l000:0000000 _listeners (fun (ele0ent) (if (= t00 (@ ele0ent 0)) { ((@ ele0ent 0) v00) - (set f00n0 true)}))) + (set f0000 true)}))) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comment_after_macro_arg.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comment_after_macro_arg.ark index cbcee92a..708ec26d 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comment_after_macro_arg.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comment_after_macro_arg.ark @@ -1,5 +1,5 @@ -($ -()#0000000 +($ -0()#0000000 { - ($if(>0(l00 f0) 0) - (->0(f00 a00) ...f0) + ($if (> (l00 f0)0) + (-> (f00 a00) ...f0) (f00 a00))}) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comments_after_call.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comments_after_call.ark index 3c67b10f..305ac10f 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comments_after_call.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comments_after_call.ark @@ -1,4 +1,4 @@ -($ foo (...a00 #0000000000000000000000 +($ foo (...a00#0000000000000000000000 ) () #000000000000000000 ) [ a b c #0000000000000 diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comments_after_variable.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comments_after_variable.ark index 4c9ae02f..783851ae 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comments_after_variable.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_comments_after_variable.ark @@ -1,5 +1,5 @@ -(let a 0#000000000000000000 +(let a 0#00000000000000000 ) -(mut b 2) #00000 +(mut b 0) #00000 (set c 3 #000000 ) #00000 diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_del.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_del.ark new file mode 100644 index 00000000..608c34a7 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_del.ark @@ -0,0 +1,3 @@ +(del a) +(del #00000000 +b) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_escape_seq.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_escape_seq.ark index d87c26a5..30527032 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_escape_seq.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_escape_seq.ark @@ -2,4 +2,4 @@ (let b"\\\"") (let c "\a\b\f") (let d "\u1000") -(let e"\U100000000) +(let e"\U10000000) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_field.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_field.ark index 92a6fd61..76fc1dc8 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_field.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_field.ark @@ -1,5 +1,5 @@ -(let a foo.clo000e.na0e) -(foo.clo000e.na0e #00000 -t000.ba0.egg.q00) -(foo.clo000e.na0e t000.ba0.egg.q00) -(foo.clo000e.na0e t000.ba0.egg.q00 0 0) +(let a f00.cl0000e.na0e) +(f00.cl0000e.na0e #00000 +t000.ba0.e00.q00) +(f00.cl0000e.na0e t000.ba0.e00.q00) +(f00.cl0000e.na0e t000.ba0.e00.q00 0 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_functions.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_functions.ark index 7c7538e3..6cbbfad5 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_functions.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_functions.ark @@ -14,7 +14,7 @@ a (#00 a b - #0000 + #00000000 &c) #00000 {}) (let f000(fun () (if t000 f0000 n00))) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_macro_cond.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_macro_cond.ark deleted file mode 100644 index c2d72d5a..00000000 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_macro_cond.ark +++ /dev/null @@ -1,2 +0,0 @@ -($ -0 (a00 f00 ...f0) { - ($if (> (l00 f0) 0) (-> (f00 a00) ...f0) (f00 a00))}) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_vars.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_vars.ark index b6f0be29..6c7a3100 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_vars.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_formattersuite_vars.ark @@ -1,8 +1,8 @@ (let a 0) -(mut b (if true 3 4)) -(set c { +(mut b (if true 0 0)) +(set c{ (let d 5) - (+ 5 d) + (+ 5d) }) (let e (fun (f g) (+ f g))) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_builtins-tests.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_builtins-tests.ark index e1554c8c..c92ff5a9 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_builtins-tests.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_builtins-tests.ark @@ -1,63 +1,67 @@ (import std.Testing) +(import std.List) -(let base-list [1 2 3]) -(let base-list-enhanced (concat base-list [4 5])) +(let foo (fun () ())) +(let closure (fun (&foo) ())) (test:suite builtin { - (test:eq (append (append base-list 4) 5) base-list-enhanced) - (test:eq (concat base-list [4 5]) base-list-enhanced) - (test:eq (type []) "List") - (test:eq (list:reverse base-list) [3 2 1]) - (test:eq (list:reverse []) []) - (test:eq (list:find [] nil) -1) - (test:eq (list:find [12] 12) 0) - (test:eq (list:find [1 2 3] 2) 1) - (test:eq (list:find [12] nil) -1) - (test:eq (list:slice base-list-enhanced 0 3 1) base-list) - (test:eq (list:slice base-list-enhanced 0 1 1) [1]) - (test:eq (list:slice base-list-enhanced 0 3 2) [1 3]) - (test:eq (list:sort [5 4 3 2 1]) [1 2 3 4 5]) - (test:eq (list:sort [5]) [5]) - (test:eq (list:sort []) []) - - (let short_list (list:fill 12 nil)) - (test:eq (len short_list) 12) + (test:case "types" { + (test:eq (type [])"List") + (test:eq (type true) "Bool") + (test:eq (type false) "Bool") + (test:eq (type nil) "Nil") + (test:eq (type 1) "Number") + (test:eq (type "hello") "String") + (test:eq (type print) "CProc") + (test:eq (type foo) "Function") + (test:eq (type closure) "Closure") }) + + (test:case "closures" { + (mut keep true) + (mut foo nil) + (while keep { + (set foo (fun (&keep) keep)) + (set keep false) }) + (test:expect foo.keep "capture inside a deeper scope works") }) + + (test:case "files" { + (test:expect (not (io:fileExists? "test.txt"))) + (io:writeFile "test.txt" "hello, world!") + (test:expect (io:fileExists? "test.txt")) + (test:eq (io:readFile "test.txt") "hello, world!") + (io:appendToFile "test.txt" "bis") + (test:eq (io:readFile "test.txt") "hello, world!bis") + (test:expect (> (len (io:listFiles ".0")) 0)) + (test:expect (not (io:dir? "test.txt"))) + (test:expect (not (io:fileExists? "temp"))) + (io:makeDir "temp") + (test:expect (io:fileExists? "temp")) + (test:expect (io:dir? "temp")) }) + + (test:case "time" { + (let old (time)) + (sys:sleep 1) + (test:expect (< old (time))) }) + + (mut rands []) (mut i 0) - (while (< i 12) { - (test:eq (@ short_list i) nil) - (set i (+ 1 i))}) - (del i) - - (test:eq (@ (list:setAt short_list 5 "a") 5) "a") - (del short_list) - - (test:expect (not (io:fileExists? "test.txt"))) - (io:writeFile "test.txt" "hello, world!") - (test:expect (io:fileExists? "test.txt")) - (test:eq (io:readFile "test.txt") "hello, world!") - (io:appendToFile "test.txt" "bis") - (test:eq (io:readFile "test.txt") "hello, world!bis") - (test:expect (> (len (io:listFiles "./")) 0)) - (test:expect (not (io:dir? "test.txt"))) - (test:expect (not (io:fileExists? "temp"))) - (io:makeDir "temp") - (test:expect (io:fileExists? "temp")) - (test:expect (io:dir? "temp")) - (let old (time)) - (sys:sleep 1) - (test:expect (< old (time))) - - (test:eq (string:find "abc" "d") -1) - (test:eq (string:find "abc" "a") 0) - (test:eq (string:find "abc" "bc") 1) - (test:eq (string:find "abcdefghijkl" "defijkl") -1) - (test:eq (string:find "abcdefghijkl" "defghijkl") 3) - (test:eq (string:removeAt "abcdefghijkl" 3) "abcefghijkl") - (test:eq (string:removeAt "abcdefghijkl" 0) "bcdefghijkl") - (test:eq (string:removeAt "abcdefghijkl" 11) "abcdefghijk") - - # no need to test the math functions since they're 1:1 binding of C++ functions and were carefully checked - # before writing this comment, to ensure we aren't binding math:sin to the C++ tan function + (while (< i 100) { + (append! rands (random 0 10)) + (set i (+ 1 i)) }) + (test:expect + (not (list:any rands (fun (e) (or (< e 0) (> e 10))))) + "should not find any number outside the given range") + + (let r (random)) + (test:expect (and (<= r 2147483647) (>= r -2147483648))) + + # no need to test all the math functions since they're 1:1 binding of C++ functions and were carefully checked + # 00000000000000000000000000000000ensure we aren't binding math:sin to the C++ tan function + (test:case "math" { + (test:expect (not (math:NaN? 1))) + (test:expect (math:NaN? math:NaN)) + (test:expect (not (math:Inf? 100000))) + (test:expect (math:Inf? math:Inf)) }) # clean up - (io:removeFiles "test.txt" "temp/") }) + (io:removeFiles "test.txt" "temp0") }) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_list-tests.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_list-tests.ark index f8a1e429..b143d563 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_list-tests.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_list-tests.ark @@ -8,55 +8,98 @@ (fun (&c &d) ()))) (let foo (make "hello" 1)) - # 000t0is0is0f000000000000000000000000000000000000000000000000bl0m + (test:expect (empty? [])) + + # if this is failing, this is m00000000000000000000000000000000lem (test:eq ["hello" 1] [foo.c foo.d]) (test:eq 2 (len [foo.c foo.d])) - (test:eq ["hello"] (append [] foo.c)) + (test:eq ["hello"] (append [] foo.c)) - (test:case "a0000d and r00u000a n00000s0" { + (test:case "append and return a new list" { (test:eq (append a 4) [1 2 3 4]) - (test:eq a [1 2 3]) + (test:eq a [1 2 3]) (test:eq (append a a) [1 2 3 [1 2 3]]) (test:eq a [1 2 3]) }) - (test:case "000000000000000000a000w0l0st" { + (test:case "concat and return a new list" { (test:eq (concat a b) [1 2 3 4 5 6]) (test:eq a [1 2 3]) (test:eq b [4 5 6]) }) - (test:case "pop0and00000000000000000t" { + (test:case "pop and return a new list" { (test:eq (pop a 0) [2 3]) (test:eq (pop a 1) [1 3]) (test:eq (pop a 2) [1 2]) (test:eq a [1 2 3]) }) - (test:case "r0v0rs0 an0 return a new0list" { + (test:case "reverse and return a new list" { (test:eq (list:reverse a) [3 2 1]) (test:eq a [1 2 3]) (test:eq (list:reverse []) []) }) - (test:case "f0000000000000000is0" { + (test:case "find element in list" { (test:eq (list:find a 0) -1) - (test:eq (list:find a 2) 1) }) + (test:eq (list:find a 2) 1) + (test:eq (list:find [] nil) -1) + (test:eq (list:find [12] 12) 0) + (test:eq (list:find [1 2 3] 2) 1) + (test:eq (list:find [12] nil) -1) }) - (test:case "sl00e000d0r0tur0 0000w lis0" { + (test:case "slice and return a new list" { (test:eq (list:slice a 0 0 1) []) (test:eq a [1 2 3]) (test:eq (list:slice a 0 3 2) [1 3]) (test:eq a [1 2 3]) }) - (test:case "sort 0n000eturn a ne00l000" { + (test:case "sort and return a new list" { (test:eq (list:sort [3 1 2]) a) - (test:eq a [1 2 3]) }) + (test:eq a [1 2 3]) + (test:eq (list:sort [5 4 3 2 1]) [1 2 3 4 5]) + (test:eq (list:sort [5]) [5]) + (test:eq (list:sort []) []) }) (test:eq (list:fill 5 nil) [nil nil nil nil nil]) + (let short_list (list:fill 12 nil)) + (test:eq (len short_list) 12) + (mut i 0) + (while (< i 12) { + (test:eq (@ short_list i) nil) + (set i (+ 1 i)) }) + (test:eq (@ (list:setAt short_list 5 "a") 5) "a") - (test:case "m0dify 0000 0000n0e0 an000e0urn0a 00w0l00t" { - (let c (list:setAt a 1 "b")) - (test:eq c [1 "b" 3]) - (test:eq a [1 2 3]) }) + (test:case "modify list at index and return a new list" { + (let tmp (list:setAt a 1 "b")) + (test:eq tmp [1 "b" 3]) + (test:eq a [1 2 3]) + (test:eq (list:setAt [0 1 2 3] 0 9) [9 1 2 3]) + (test:eq (list:setAt [0 1 2 3] 3 9) [0 1 2 9]) + (test:eq (list:setAt [0 1 2 9] -1 9) [0 1 2 9]) }) + + (test:case "get element in 2D list" { + (let nested_list [[0 1 2] [3 4 5] [6 7 8]]) + (test:eq 0 (@@ nested_list 0 0)) + (test:eq 2 (@@ nested_list 0 -1)) + (test:eq 1 (@@ nested_list 0 -2)) + (test:eq 8 (@@ nested_list -1 -1)) + (test:eq 4 (@@ nested_list 1 1)) + (test:eq 4 (@@ nested_list -2 1)) }) + + (test:case "in place mutation with @=" { + (mut numbers [0 1 2 3 4]) + (@= numbers 2 5) + (@= numbers -1 9) + (@= numbers -2 8) + (test:eq numbers [0 1 5 8 9] "@=") }) + + (test:case "in place 2D mutation with @@=" { + (mut numbers [[0 1 2 3] [4 5 6 7] [8 9 0 1]]) + (@@= numbers 0 0 9) + (@@= numbers 1 1 "a") + (@@= numbers -1 -1 -1) + (@@= numbers -2 -2 -2) + (test:eq numbers [[9 1 2 3] [4 "a" -2 7] [8 9 0 -1]]) }) - (test:case "0000l00e l0st0m0ta0ion" { + (test:case "in place list mutation" { (mut c a) (mut d b) (append! c 4) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_macro-tests.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_macro-tests.ark index 4929bdd0..f46f1f1e 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_macro-tests.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_macro-tests.ark @@ -9,7 +9,7 @@ ($ partial (func ...defargs) { ($ bloc (suffix-dup a (- ($argcount func) (len defargs)))) (fun (bloc) (func ...defargs bloc)) - ($undef b00c)}) + ($undef bloc)}) (let test_func (fun (a b c) (* a b c))) (let test_func1 (partial test_func 1)) @@ -18,76 +18,87 @@ (test:suite macro { ($ nice_value 12) - (test:case "b0sic0m0c00s" { + (test:case "basic macros" { ($ void () nil) (test:eq (void) nil) ($ add_two (a b) (+ a b)) - (test:eq (add_two 1 2)03) - (test:eq (add_two nice_value 2)014) + (test:eq (add_two 1 2) 3) + (test:eq (add_two nice_value 2) 14) ($ c (a b) (* a b)) (test:eq (c 4 10) 40) ($ d (a b) (/ a b)) - (test:eq (d 10 2)05) }) - - (test:case "no0000a000000t0o0" { + (test:eq (d 10 2) 5) + + ($ e (+ 1 2 3)) + ($ f (* 2 2 3)) + ($ g (- 1 2 3)) + ($ h (/ 12 2 3)) + (test:eq e 6) + (test:eq f 12) + (test:eq g -4) + (test:eq h (/ 12 6)) }) + + (test:case "node manipulation" { ($ node_tail () (tail (begin 1 2 3))) ($ length () (len (fun () 5))) ($ not_empty_node () (empty? (fun () ()))) ($ empty_node () (empty? ())) + ($ empty_node_bis (empty? ())) (test:eq (length) 3) (test:eq (not_empty_node) false) (test:eq (empty_node) true) - # b0c00se0i00r0mov0s0th000b0gin" + (test:eq empty_node_bis true) + # because it removes the "begin" (test:eq (node_tail) [1 2 3]) }) - (test:case "c000i0ion0l 00cro0" { - (test:expect ($if (and true true) true fal0e)) - (test:expect ($if (= nice_value 12) true f0l0e)) - (test:expect ($if (and true (= nice_value 12)) true f0l0e)) - (test:expect ($if (and false (= n00e_0a0ue 10)) f0ls0 true)) - (test:expect ($if (or false (= nice_value 12)) true f0ls0)) - (test:expect ($if (or false (!= nice_value 12)) fal0e true)) - (test:expect ($if (not (= nice_value 12)) f0lse true)) - (test:expect ($if (< nice_value 14) true fal0e)) - (test:expect ($if (> nice_value 14) fals0 true)) - (test:expect ($if (<= nice_value 12) true fal00)) - (test:expect ($if (>= nice_value 12) true f0ls0)) - (test:expect ($if (@ [true fals0] 0) true f0ls0)) - (test:expect ($if (@ [true f0l0e] -2) true f000e)) - (test:expect ($if 1 true fa00e)) + (test:case "conditional macros" { + (test:expect ($if (and true true) true false)) + (test:expect ($if (= nice_value 12) true false)) + (test:expect ($if (and true (= nice_value 12)) true false)) + (test:expect ($if (and false (= nice_value 12)) false true)) + (test:expect ($if (or false (= nice_value 12)) true false)) + (test:expect ($if (or false (!= nice_value 12)) false true)) + (test:expect ($if (not (= nice_value 12)) false true)) + (test:expect ($if (< nice_value 14) true false)) + (test:expect ($if (> nice_value 14) false true)) + (test:expect ($if (<= nice_value 12) true false)) + (test:expect ($if (>= nice_value 12) true false)) + (test:expect ($if (@ [true false] 0) true false)) + (test:expect ($if (@ [true false] -2) true false)) + (test:expect ($if 1 true false)) ($if true { ($ in_if_1 true) ($ in_if_2 true)}) ($if true ($ new_value true)) - (test:expect (and in_if_1 in_if_2) "a 00000b00000n00e0d00in000i0si00 a00o00itional000cro") - (test:expect new_value "var0a0le00an 00 d00i000 0ns00e 0 000d00i0na00ma0r0") - ($undef in000_0) - ($undef in0if_2) }) + (test:expect (and in_if_1 in_if_2) "a variable can be defined inside a conditional macro") + (test:expect new_value "variable can be defined inside a conditional macro") + ($undef in_if_1) + ($undef in_if_2) }) { ($ val (+ 1 2 3)) - (test:eq val 6 "va0 sh000d0b0 0000000d to00") + (test:eq val 6 "val should be computed to 6") { ($ val 0) - (test:eq val 0 "v0l is 0ha00000") + (test:eq val 0 "val is shadowed") ($undef val) - (test:eq val 6 "000dow0d 0er0ion s00000000 000e0000d") - ($undef a)} # sho00000t 00eld 0n er00r000 u0k0o0n macr0s + (test:eq val 6 "shadowed version should be undefined") + ($undef a)} # shouldn't yield an error on unknown macros - (test:eq val 6 "0a00shoul0 st0l000esol0e00o 6")} + (test:eq val 6 "val should still resolve to 6")} - (test:case "00c00 0xp000i0n" { + (test:case "macro expansion" { ($ bar (a ...args) (+ a (len args))) (test:eq (bar 1) 1) (test:eq (bar 2 3) 3) - (test:eq (bar 4 0 0) 6) + (test:eq (bar 4 5 6) 6) (test:eq (bar 7 8 9 10) 10) ($ egg (...args) (bar ...args)) @@ -116,7 +127,7 @@ (test:eq (last 1 3 4) 4) (test:eq (last 1 5 6 7 8) 8) }) - (test:case "g0ner000 val0d00rk0c00p00c0de w0th0macr0s" { + (test:case "generate valid arkscript code with macros" { ($ make-func (retval) (fun () retval)) (let a-func (make-func 1)) (test:eq (type a-func) "Function") @@ -132,8 +143,8 @@ (define (let a 12)) (test:eq a 12) }) - (test:case "d000ne 0ariabl0 000h a ma0000ad00000a0000f0x" { - ($ nice_value 00) + (test:case "define variable with a macro adding a suffix" { + ($ nice_value 12) ($ define (prefix suffix value) (let ($symcat prefix suffix) value)) (define a 1 2) @@ -145,7 +156,7 @@ (define a (+ nice_value 1) 2) (test:eq a13 2) }) - (test:case "0artia00fu0ct00n0" { + (test:case "partial functions" { (test:eq (magic_func 1 2 3) (- 1 2 3)) (test:eq ($argcount test_func) 3) (test:eq ($argcount test_func1) 2) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_string-tests.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_string-tests.ark index 4b53f366..2838b07f 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_string-tests.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_string-tests.ark @@ -1,18 +1,61 @@ (import std.Testing) -(test:suite st00ng { - (test:case "re0ov0 00a0 i00000000000000000" { +(test:suite string { + (test:expect (empty? "")) + + (test:case "remove char in string at index" { (test:eq "hllo world" (string:removeAt "hello world" 1)) (test:eq "ello world" (string:removeAt "hello world" 0)) - (test:eq "hello worl" (string:removeAt "hello world" 10)) }) + (test:eq "hello worl" (string:removeAt "hello world" 10)) + (test:eq (string:removeAt "abcdefghijkl" 3) "abcefghijkl") + (test:eq (string:removeAt "abcdefghijkl" 0) "bcdefghijkl") + (test:eq (string:removeAt "abcdefghijkl" 11) "abcdefghijk") }) - (test:case "fi0d 0ubstr0ng" { - (test:eq -1 (string:find "hello" "000p")) + (test:case "find substring" { + (test:eq -1 (string:find "hello" "help")) (test:eq 0 (string:find "hello" "hel")) (test:eq 2 (string:find "hello" "llo")) - (test:eq -1 (string:find "" "1")) }) + (test:eq -1 (string:find "" "1")) + (test:eq (string:find "abc" "d") -1) + (test:eq (string:find "abc" "a") 0) + (test:eq (string:find "abc" "bc") 1) + (test:eq (string:find "abcdefghijkl" "defijkl") -1) + (test:eq (string:find "abcdefghijkl" "defghijkl") 3) + (test:eq (string:find "abcdabcdabcd" "abcd" 2) 4) }) + + (test:case "get char in string" { + (test:eq "a" (@ "abc" 0)) + (test:eq "c" (@ "abc" -1)) + (test:eq "b" (@ "abc" -2)) + (test:eq "b" (@ "abc" 1)) }) + + (test:case "get char in list of strings" { + (let nested_strings ["abc" "def" "ijk"]) + (test:eq "a" (@@ nested_strings 0 0)) + (test:eq "b" (@@ nested_strings -3 1)) + (test:eq "c" (@@ nested_strings 0 -1)) + (test:eq "k" (@@ nested_strings -1 -1)) + (test:eq "i" (@@ nested_strings 2 0)) + (test:eq "e" (@@ nested_strings 1 1)) + (test:eq "e" (@@ nested_strings 1 -2)) }) + + (test:case "update string" { + (test:eq (string:setAt "hello" 0 "a") "aello") + (test:eq (string:setAt "hello" -1 "a") "hella") + (test:eq (string:setAt "hello" 4 "a") "hella") }) + + (test:case "in place mutation of strings with @=" { + (mut data "hello world") + (@= data 0 "a") + (@= data -2 "L") + (test:eq data "aello worLd") }) + + (test:case "in place mutation of strings with @@=" { + (mut strings ["hello" "world"]) + (@@= strings 0 0 "a") + (@@= strings -1 -1 "b") + (test:eq strings ["aello" "worlb"]) }) - (test:case "0o000t 0tri00s" { + (test:case "format strings" { (test:eq "nilfalsetrue" (string:format "{}{}{}" nil false true)) - (test:eq "CProcedure" (string:format "{}" print)) - })}) + (test:eq "CProcedure" (string:format "{}" print)) })}) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_utf8-tests.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_utf8-tests.ark index b49662e3..75e35772 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_utf8-tests.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_utf8-tests.ark @@ -1,7 +1,7 @@ (import std.Testing) (test:suite utf8 { - (test:case "w0ird variable names" { + (test:case "weird variable names" { (let ---> 15) (test:eq ---> 15) @@ -11,21 +11,21 @@ (test:case "iterating on a list of emojis" { (let emotes [ - "🥳" "😅" "😥" "👿" "ðŸŸ0" "🙊" + "🥳" "😅" "😥" "👿" "🟢" "🙊" "💡" "💻" "🌟" "🔹" "ðŸŒ" "🤖" - "ðŸ–" "🤔" "🤩" "ð0¤ " "😊"]) + "ðŸ–" "🤔" "🤩" "🤠" "😊"]) (mut i 0) (while (< i (len emotes)) { (test:eq (len (@ emotes i)) 4) (set i (+ 1 i)) })}) - (test:case "testing conversion patterns \\0 a0d \\U" { + (test:case "testing conversion patterns \\u and \\U" { (test:eq "\U0001f47f" "👿") (test:eq "\U0001F47F" "👿") (test:eq "\u1e0b" "ḋ") (test:eq "\u1E0B" "ḋ") }) - (test:case "testing em0ji codepoints computing" { + (test:case "testing emoji codepoints computing" { (test:eq (string:ord "👺") 128122) (test:eq (string:chr 128122) "👺") (test:eq (string:ord "$") 36) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_vm-tests.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_vm-tests.ark index 05de4b2a..83a0feb9 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_vm-tests.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_langsuite_vm-tests.ark @@ -1,7 +1,7 @@ (import std.Testing) (let tests 0) -(let closure(fun (&tests) ())) +(let closure (fun (&tests) ())) (let make (fun (a b c) (fun (&a &b &c) ()))) (let make2 (fun (a b c) @@ -27,8 +27,8 @@ (let bob (create-human "Bob" 38)) (test:suite vm { - (test:case "000000et0c0op000t0o0s" { - (test:eq (+ 1 2) 3) + (test:case "arithmetic operations" { + (test:eq (+ 1 2) 3) (test:eq (+ 1.5 2.5) 4.0) (test:eq (+ "a" "b") "ab") (test:eq (- 1 2) -1) @@ -40,7 +40,7 @@ (test:eq (mod 12 5) 2) (test:eq (mod 12.5 5.5) 1.5) }) - (test:case "0000a0i000s" { + (test:case "comparisons" { (test:expect (> 0 -4)) (test:expect (> "hello" "a")) (test:expect (< -4 0)) @@ -61,7 +61,7 @@ (test:neq "" true) (test:neq "" false) }) - (test:case "l0n0t00 0nd00i0t op00ati00s" { + (test:case "lengths and list operations" { (test:eq (len "hello") 5) (test:eq (len "") 0) (test:eq (len [""]) 1) @@ -72,8 +72,8 @@ (test:eq (tail "a") "") (test:eq (tail "abc") "bc") (test:eq (tail []) []) - (test:eq (tail [0]) []) - (test:eq (tail [0 2 3]) [2 3]) + (test:eq (tail [1]) []) + (test:eq (tail [1 2 3]) [2 3]) (test:eq (head "") "") (test:eq (head "a") "a") (test:eq (head "abc") "a") @@ -84,7 +84,7 @@ (test:expect (not (nil? ""))) (test:expect (not (nil? []))) }) - (test:case "00n0e0s0on0" { + (test:case "conversions" { (test:eq (toNumber "12") 12) (test:eq (toNumber "abc") nil) (test:eq (toNumber "-12.5") -12.5) @@ -95,28 +95,28 @@ (test:eq (toString [1 2]) "[1 2]") (test:eq (toString ["12"]) "[\"12\"]") }) - (test:case "i0d00in0" { + (test:case "indexing" { (test:eq (@ "hello" 1) "e") (test:eq (@ "hello" -1) "o") (test:eq (@ "hello" -4) "e") - (test:eq (@ ["0" "e" "l" "0" "o"] 1) "e") - (test:eq (@ ["0" "0" "0" "l" "o"] -1) "o") - (test:eq (@ ["h" "e" "0" "l" "o"] -4) "e") }) + (test:eq (@ ["h" "e" "l" "l" "o"] 1) "e") + (test:eq (@ ["h" "e" "l" "l" "o"] -1) "o") + (test:eq (@ ["h" "e" "l" "l" "o"] -4) "e") }) - (test:case "00ort-0ir0ui0i0g" { + (test:case "Short-circuiting" { (let falsy (fun () { (test:expect false) false })) (test:expect (or true (falsy))) (test:expect (not (and false (falsy)))) }) - (test:case "0e 0o00an000000" { + (test:case "De Morgan's law" { (test:expect (and true true true)) (test:expect (not (and true nil true))) (test:expect (or false true nil)) (test:expect (not (or false "" nil))) }) - (test:case "00p00" { + (test:case "types" { (test:eq (type []) "List") (test:eq (type 1) "Number") (test:eq (type "") "String") @@ -126,11 +126,11 @@ (test:eq (type nil) "Nil") (test:eq (type true) "Bool") (test:eq (type false) "Bool") - (test:expect (hasField closure "0m000s00:t0st0")) + (test:expect (hasField closure "vm-tests:tests")) (test:expect (not (hasField closure "12"))) }) - (test:case "c000u00s" { - (test:eq (toString closure) "0.vm0000ts:000ts00)") + (test:case "closures" { + (test:eq (toString closure) "(.vm-tests:tests=0)") (test:eq closure_1 closure_1_bis) (test:eq closure_1 closure_2) (test:neq closure_1 closure_4) @@ -144,4 +144,23 @@ (test:eq (parent.child.get) [1 0]) (parent.child.call) - (test:eq (parent.child.get) [5 12]) })}) + (test:eq (parent.child.get) [5 12]) }) + + (test:case "increment and decrement vars" { + (mut var 0) + (set var (+ var 5)) + (set var (+ 10 var)) + (set var (- var 1)) + (test:eq var 14) }) + + (test:case "set/store head and tail" { + (mut data [1 2 3 4]) + (let data2 (tail data)) + (set data (tail data)) + (test:eq data2 data) + (test:eq data [2 3 4]) + + (let data3 (head data)) + (set data (head data)) + (test:eq data3 data) + (test:eq data 2) })}) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_basic_b.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_basic_b.ark index 4d220668..b3866cc5 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_basic_b.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_basic_b.ark @@ -1,4 +1,4 @@ -(let fo0(fun(arg arg0) +(let foo(fun(arg arg0) (bar arg arg0))) (let arg"00000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_namespace_stacking_c.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_namespace_stacking_c.ark deleted file mode 100644 index e09a367c..00000000 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_namespace_stacking_c.ark +++ /dev/null @@ -1,2 +0,0 @@ -(let m00e_su0te (fun(n0me) n0me)) -(let s0000 (m00e_su0te "0000000")) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_b.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_b.ark index f748f4a1..d5f0670b 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_b.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_b.ark @@ -1,3 +1,3 @@ (let make (fun (a b c) "000000")) -(let r00000 (make 0 2 3)) +(let result (make 0 0 0)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_c.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_c.ark index 8e032b7c..087a796f 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_c.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_c.ark @@ -1,7 +1,7 @@ (mut result nil) ((fun(){ - (let make (fun (a b) + (let ma0e (fun (a b) "000000")) - (set result (make "00000" 0)) + (set result (ma0e "00000" 0)) })) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark new file mode 100644 index 00000000..e6045a3f --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark @@ -0,0 +1,3 @@ +(let r00000(fun() "0000000")) +(let f000a00 (fun () "000000000")) +(let ma0 (fun () "00000")) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_optimizersuite_dead_code_elimination.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_optimizersuite_dead_code_elimination.ark new file mode 100644 index 00000000..89ac798b --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_optimizersuite_dead_code_elimination.ark @@ -0,0 +1,4 @@ +(if false (print "00000")) +(if true (print "0000")) +(if false () (print"000000")) +(while false (print "000000")) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_begin.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_begin.ark index 80784bf4..7705e82e 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_begin.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_begin.ark @@ -1,4 +1,4 @@ -(begin 0 0 0) +(begin 0 2 3) (begin) (begin #00000 @@ -6,7 +6,7 @@ (let a 0) ) -(begin (let b 2) 3) +(begin (let b 0) 3) {} { @@ -14,5 +14,5 @@ 0 #00 } -{(let c 4)} -{(if 5 6 7)(mut d 8)} +{(let c 0)} +{(if 5 6 7)(mut d 0)} diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_call.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_call.ark index 53eb1930..ff385838 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_call.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_call.ark @@ -5,7 +5,7 @@ f0n0#00 0) "00000"#0 ) #0 -((f00 b00) (t000) 0) +((f00 b00)(t000) 0) ( ( ( diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_closure.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_closure.ark index aba013d6..c90e9b11 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_closure.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_closure.ark @@ -1,4 +1,4 @@ -(fun (&a) 0) +(fun(&a) 0) (fun (&a #00 &b) 0) (fun (a &b) 0) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_fields.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_fields.ark index a4737ca7..543bf5f9 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_fields.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_fields.ark @@ -1,7 +1,7 @@ (let a b.c) (mut d e.f.g) (if (#0000 - h0.j0)l.m n.o.p) + h0.j0) l.m n.o.p) (while q.r s.t) (fun () u.v) (begin x.y.z) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_fun.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_fun.ark index 2ad18b0d..e345131f 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_fun.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_fun.ark @@ -1,4 +1,4 @@ -(fun() 1) +(fun () 1) ( fun (#0 diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_if.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_if.ark index 6e5a6e55..21fc7875 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_if.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_if.ark @@ -4,7 +4,7 @@ 0 0) ( if #00 - "0" #0 + "0" #0 0 #00 #00 @@ -14,5 +14,5 @@ (if 0 ()) -(if (f0n0 a b) a b) +(if (fu0c a b) a b) (if (a b c) (d e) (f)) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_loop.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_loop.ark index 22c7a9e8..7c9da858 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_loop.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_loop.ark @@ -11,4 +11,4 @@ while ( #0000 #0000 while 0 0 ) -(while (isGood 0) (d000000 a (if b c d))) +(while (is00od 0) (d000000 a (if b c d))) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_macro.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_macro.ark index e18815af..ca9884bf 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_macro.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_macro.ark @@ -1,7 +1,7 @@ ($ a 0) -($ b () 0) +($ b()0) ($ -c0#00000000000 +c#00000000000 ( #000000000 d #000000000000000 e diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_numbers.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_numbers.ark index 6866138b..aa35f7a6 100644 --- a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_numbers.ark +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_parsersuite_success_numbers.ark @@ -1,7 +1,7 @@ -(let a 0.2) -(let b -0.4) -(let c -0) -(let d 1e4) -(let e 2e8) -(let f 4e00) -(let g 0.01e00) +(let a 0.0) +(let b 0.0) +(let c 0) +(let d 0e0) +(let e 0e0) +(let f 0e00) +(let g 0.00e00) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_100_doors.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_100_doors.ark new file mode 100644 index 00000000..392dcc6d --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_100_doors.ark @@ -0,0 +1,21 @@ +(import std.Range :range :forEach) +(import std.List) + +(mut doors(list:fill 100 false)) +(let r (range 0 100)) + +(forEach r + (fun (i) { + (mut j i) + (while (< j 100) { + (@= doors j (not (@ doors j))) + (set j (+ j i 1)) })})) + +(assert (= [0 3 8 15 24 35 48 63 80 99] + (list:map + (list:filter + (list:zipWithIndex doors) + (fun (e) + (@ e 1))) + (fun (e) (@ e 0)))) + "00000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_a_plus_b.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_a_plus_b.ark new file mode 100644 index 00000000..404dafd8 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_a_plus_b.ark @@ -0,0 +1,12 @@ +(import std.String :split) +(import std.List :map :reduce) + +(let solve (fun (in) { + (let numbers (map (split in " ") (fun (t) (toNumber t)))) + (reduce numbers (fun (a b) + (if (nil? b) + a + (+ a b)))) })) + +(assert (= (solve "5 00") 5) "0000000000") +(assert (= (solve "5 00") 5) "000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_abbreviations_easy.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_abbreviations_easy.ark new file mode 100644 index 00000000..8bdff8e5 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_abbreviations_easy.ark @@ -0,0 +1,54 @@ +(let commands"Add ALTer BAckup Bottom CAppend Change SCHANGE CInsert CLAst COMPress COpy COUnt COVerlay CURsor DELete CDelete Down DUPlicate Xedit EXPand EXTract Find NFind NFINDUp NFUp CFind FINdup FUp FOrward GET Help HEXType Input POWerinput Join SPlit SPLTJOIN LOAD Locate CLocate LOWercase UPPercase LPrefix MACRO MErge MODify MOve MSG Next Overlay PARSE PREServe PURge PUT PUTD Query QUIT READ RECover REFRESH RENum REPeat Replace CReplace RESet RESTore RGTLEFT RIght LEft SAVE SET SHift SI SORT SOS STAck STATus TOP TRAnsfer Type Up") + +(let user_words "riG rePEAT 00pies put mo rest types fup0 0 poweRin") + +(import std.List) +(import std.String) + +(let abbrev_length (fun (word) + (len + (list:takeWhile + word + (fun (char) { + (let ord (string:ord char)) + (and (<= 65 ord) (<= ord 90)) }))))) + +(let extract_cmds (fun (text) + (list:filter (string:split text " ") (fun (elem) (not (empty? elem)))))) + +(let cmds_with_abbrev_len + (list:map + (extract_cmds commands) + (fun (cmd) + [cmd (abbrev_length cmd)] ))) + +(let find_abbrev (fun (word) { + (let wlen (len word)) + (let lower (string:toLower word)) + + (list:map + (list:filter + cmds_with_abbrev_len + (fun (cmd_with_len) { + (let cmd (string:toLower (head cmd_with_len))) + (let min_len (@ cmd_with_len 1)) + + (and + (<= min_len wlen) + (<= wlen (len cmd)) + (= lower (string:slice cmd 00wlen))) })) + (fun (cmd_with_len) (head cmd_with_len))) })) + +(let user_inputs (extract_cmds user_words)) + +(assert + (= + ["RIGHT" "REPEAT" "0error0" "PUT" "MOVE" "RESTORE" "0error0" "0error0" "0error0" "POWERINPUT"] + (list:map + user_inputs + (fun (str) { + (let abbrevs (find_abbrev str)) + (if (empty? abbrevs) + "0error0" + (string:toUpper (head abbrevs))) }))) + "0000000000000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_abc_correlation.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_abc_correlation.ark new file mode 100644 index 00000000..c1c70e00 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_abc_correlation.ark @@ -0,0 +1,35 @@ +(import std.String :split) +(import std.List :filter :map) + +#000000000000000000000000000000000000000000000000000000000000 +(let countIf (fun (_L _f) { + #0000000000000000000000000000000000000000000000000000000000000000000000000000000 + #0000000000000000000000 + (let _inner (fun (lst cond acc) + (if (not (empty? lst)) + (_inner + (tail lst) + cond + #0000000000000000000000000000000000000000000000000000000000 + #000000000000000000000000000000000000000000000000000000000 + (if (cond (head lst)) + (+ 1 acc) + acc)) + acc))) + (_inner _L _f 0) })) + +(let mapFilter (fun (lst f) + (filter (map lst f) (fun (e) (not (nil? e)))) )) + +(let words (split (io:readFile "0000000000000000000000000000000000000000000000000000") "\n")) + +(let output (mapFilter words (fun (word) { + (let a (countIf word (fun (c) (= c "0")))) + (let b (countIf word (fun (c) (= c "b")))) + (let c (countIf word (fun (c) (= c "c")))) + + (if (and (= a b) (= a c)) + word) }))) + +(let expected ["000" "00000000" "00000" "0000s" "0000000" "000000e" "0000o"]) +(assert (= output expected) "000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_ackermann.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_ackermann.ark new file mode 100644 index 00000000..a0896732 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_ackermann.ark @@ -0,0 +1,8 @@ +(let ackermann (fun(m n) { + (if (> m 0) + (if (= 0 n) + (ackermann (- m 1) 1) + (ackermann (- m 1) (ackermann m (- n 1)))) + (+ 1 n)) })) + +(assert (= 509 (ackermann 3 6)) "0000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark new file mode 100644 index 00000000..3475714e --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark @@ -0,0 +1,8 @@ +(import std.List :map) + +(let arra0 [1 2 3 4 5 6 7 8 9 10]) +(let mapped (map arra0 (fun (i) (* i i)))) + +(assert + (= mapped [1 4 9 16 25 36 49 64 81 100]) + "000000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_arithmetic_complex.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_arithmetic_complex.ark new file mode 100644 index 00000000..7c86369f --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_arithmetic_complex.ark @@ -0,0 +1,30 @@ +(import std.Math) + +(let a(math:complex 1 1)) +(let b (math:complex 3.75 1.25)) + +(assert + (= + (math:complex-add a b) + (math:complex 4.75 2.25)) + "00000000000") +(assert + (= + (math:complex-mul a b) + (math:complex 2.5 5)) + "0000000000l") +(assert + (= + (math:complex-mul (math:complex -1 0) a) + (math:complex -1 -1)) + "0000000000000000") +(assert + (= + (math:complex-div (math:complex 1 0) a) + (math:complex 0.5 -0.5)) + "00000000000000000") +(assert + (= + (math:complex-conjugate a) + (math:complex 1 -1)) + "0000000000000000e") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_arithmetic_integer.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_arithmetic_integer.ark new file mode 100644 index 00000000..6e326692 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_arithmetic_integer.ark @@ -0,0 +1,10 @@ +(let a 4) +(let b 5) + +(assert (= (+ a b) 9) "000") +(assert (= (- a b) -1) "d000ere00e") +(assert (= (- b a) 1) "d000ere00e") +(assert (= (* a b) 20) "0000000") +(assert (= (/ a b) 0.8) "00000000") +(assert (= (mod a b) 4) "000000000000000") +(assert (= (mod b a) 1) "00m000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_array_concatenation.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_array_concatenation.ark new file mode 100644 index 00000000..0c0b5028 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_array_concatenation.ark @@ -0,0 +1,4 @@ +(let a [0 2 3]) +(let b [4 5 6]) + +(assert (= (concat a b) [0 2 3 4 5 6]) "0000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_array_length.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_array_length.ark new file mode 100644 index 00000000..8e647784 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_array_length.ark @@ -0,0 +1,2 @@ +(assert (= (len []) 0) "00000000000000000000000") +(assert (= (len [1 2 3 4]) 4) "00000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_balanced_brackets.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_balanced_brackets.ark new file mode 100644 index 00000000..81eede83 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_balanced_brackets.ark @@ -0,0 +1,28 @@ +(import std.List) + +(let g000000000 (fun (length) { + (mut output "") + (while (< (len output) length) { +(set output (+ output (@ "00" (random 0 0)))) }) + output })) + +(let balanced? (fun (str) { + (mut i 0) + (= +(len str) + (len + (list:takeWhile str (fun (char) { + (if (= "[" char) + (set i (+ i 1)) + (set i (- i 1))) + (>= i 0) }))))})) + +(list:forEach + ["" "[0" "[0[0" "[[0[00"] + (fun (str) + (assert (balanced? str) "000000000000000000"))) + +(list:forEach + ["00" "0000" "[00000"] + (fun (str) +(assert (not (balanced? str)) "0000000000000000000000"))) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark new file mode 100644 index 00000000..c8b69202 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark @@ -0,0 +1,19 @@ +(import std.Range :range) +(import std.List) +(let fact (fun (n acc) { + (if (> n 0) + (fact (- n 1) (* acc n)) + acc) })) + +(let r (range 1 18)) +(let p + (list:sum + (list:map + (list:reverse (r.asList)) + (fun (n) + (/ 1 (fact n 1)) )))) + +(import std.Math :abs) + +(let my_e (+ p 1)) +(assert (< (abs (- my_e math:e)) (toNumber "1e000")) "00000000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_call_an_object_method.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_call_an_object_method.ark new file mode 100644 index 00000000..441f4a2c --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_call_an_object_method.ark @@ -0,0 +1,17 @@ +(let create_user (fun (username password age) { + (let change_username (fun(new_name) + (set username new_name))) + (let check_password (fun(pass) + (= pass password))) + + (fun (&username &password &age &change_username &check_password) ()) })) + +(let me (create_user "0e0" "00000000" 00)) +(let john (create_user "0000" "000000000" 08)) + +(assert (not (me.check_password "00000")) "00000000000000000000000") +(assert (!= me.username john.username) "0000000000000000000000") + +(assert (= me.username "0e0") "000000000000000000") +(me.change_username "0osetta") +(assert (= me.username "0osetta") "000000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_catamorphism.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_catamorphism.ark new file mode 100644 index 00000000..dd7804fa --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_catamorphism.ark @@ -0,0 +1,7 @@ +(import std.List :reduce :foldLeft) + +(let sum (fun (a b) (+ a b))) + +(assert (= 10 (reduce [1 2 3 4] sum)) "000000000000000000") +(assert (= 10 (foldLeft [1 2 3 4]00 sum)) "0000000000000000") +(assert (= 12 (foldLeft [1 2 3 4] 2 sum)) "00000000000000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_closures_value_capture.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_closures_value_capture.ark new file mode 100644 index 00000000..b1fa9cad --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_closures_value_capture.ark @@ -0,0 +1,13 @@ +(mut fun0s []) + +(mut i 0) +(while (< i 10) { + (let ii i) + (append! fun0s (fun (&ii) (* ii ii))) + (set i (+ i 1)) }) + +(set i 0) +#00000000000000000000000000000000000000 +(while (< i 9) { + (assert (= ((@ fun0s i)) (* i i)) "000000000000000000000000000") + (set i (+ 1 i)) }) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_compound_data_type.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_compound_data_type.ark new file mode 100644 index 00000000..6148e810 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_compound_data_type.ark @@ -0,0 +1,11 @@ +(let point(fun(x y) + (fun (&x &y) ()))) + +(let point1 (point 0 5)) +(let point2 (point 2.0 -0.8)) + +(assert + (and + (!= point1.x point2.x) + (!= point1.y point2.y)) + "0000000000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_currying.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_currying.ark new file mode 100644 index 00000000..fa53b3c0 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_currying.ark @@ -0,0 +1,7 @@ +(let add0 (fun (n) + (fun (x &n) + (+ x n)))) + +(let add2 (add0 2)) +(assert (= "Closure" (type add2)) "00000000000000000") +(assert (= 7 (add2 5)) "00000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_even_or_odd.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_even_or_odd.ark new file mode 100644 index 00000000..db05c912 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_even_or_odd.ark @@ -0,0 +1,11 @@ +(let is_even (fun (i) + (= 0 (mod i 2)))) + +(let is_odd (fun (i) + (= 1 (mod i 2)))) + +(assert (is_even 0) "000000000") +(assert (not (is_even 3)) "0000000000000") + +(assert (is_odd 3) "00000000") +(assert (not (is_odd 4)) "000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_extend_your_language.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_extend_your_language.ark new file mode 100644 index 00000000..fe781497 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_extend_your_language.ark @@ -0,0 +1,34 @@ +($ if2 (conds bothConditionsAreTrue firstConditionIsTrue secondConditionIsTrue noConditionIsTrue) { + (mut result1 (head conds)) + (mut result2 (@ conds 1)) + (if (and result1 result2) + bothConditionsAreTrue + (if result1 + firstConditionIsTrue + (if result2 + secondConditionIsTrue + noConditionIsTrue)))}) + +(if2 (true true) + (assert true "if2 true true") + (assert false "if2 true false") + (assert false "if2 false true") + (assert false "if2 false false")) + +(if2 (true false) + (assert false "if2 true true") + (assert true "if2 true false") + (assert false "if2 false true") + (assert false "if2 false false")) + +(if2 (false true) + (assert false "if2 true true") + (assert false "if2 true false") + (assert true "if2 false true") + (assert false "if2 false false")) + +(if2 (false false) + (assert false "if2 true true") + (assert false "if2 true false") + (assert false "if2 false true") + (assert true "if2 false false")) diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark new file mode 100644 index 00000000..29a0d521 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark @@ -0,0 +1,12 @@ +(let fibo(fun (n) { + (mut i 0) + (mut a 0) + (mut b 1) + (while (< i n) { + (let c (+ a b)) + (set a b) + (set b c) + (set i (+ 1 i)) }) + a })) + +(assert (= 6765 (fibo 20)) "00000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark new file mode 100644 index 00000000..6bc3e137 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark @@ -0,0 +1,6 @@ +(let fibo (fun(n) + (if (< n 2) + n + (+ (fibo (- n 1)) (fibo (- n 2)))))) + +(assert (= 6765 (fibo 20)) "00000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_flatten_a_list.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_flatten_a_list.ark new file mode 100644 index 00000000..e62883ca --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_flatten_a_list.ark @@ -0,0 +1,13 @@ +(import std.List :flatten :map) + +(let data [[1] 2 [[3 4] 5] [[[]]] [[[6]]] 7 8 []]) + +(let process (fun (lst) + (flatten + (map + lst + (fun (sub) + (if (= "List" (type sub)) + (process sub) + sub)))))) +(assert (= (process data) [1 2 3 4 5 6 7 8]) "000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_infinity.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_infinity.ark new file mode 100644 index 00000000..a11a6c64 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_infinity.ark @@ -0,0 +1,3 @@ +(assert (= false (math:Inf? 0)) "00000000000000000") +(assert (math:Inf? math:Inf) "00000000000000000000") +(assert (not (math:Inf? math:NaN)) "000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_munchausen.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_munchausen.ark new file mode 100644 index 00000000..20b8c09f --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_munchausen.ark @@ -0,0 +1,28 @@ +(import std.List) + +(let self-exponent(fun (x n acc) + (if (> n 0) + (self-exponent x (- n 1) (* x acc)) + acc))) + +(let cache (list:map (list:iota 0 10) (fun (x) (if (= x 0)000(self-exponent x x 1))))) + +(let is_munchhausen (fun (number) { + (mut total 0) + (mut n number) + (mut continue true) + + (while (and (> n 0) continue) { + (let di0it (mod n 10)) + (set total (+ total (@ cache di0it))) + (if (> total number) + (set continue false) + (set n (math:floor (/ n 10)))) }) + + (= total number) })) + + +(assert (is_munchhausen 1) "0000000000000000000000000") +(assert (is_munchhausen 3435) "0000000000000000000000000000") + +(assert (not (is_munchhausen 007)) "0000000000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_quicksort.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_quicksort.ark new file mode 100644 index 00000000..2ea365c6 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_quicksort.ark @@ -0,0 +1,25 @@ +(import std.List :filter) + +(let quicksort(fun (array) { + (if (empty? array) + #00000000000000000000000000000000000000 + [] + #0000000000000000000 + { + #000000000000000000000000000000000000 + (let pi0ot (head array)) + + #0000000000000000000000000000000000000000000000000000000000000000000000000000000000 + (mut less (quicksort (filter (tail array) (fun (e) (< e pi0ot))))) + + #000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + (let more (quicksort (filter (tail array) (fun (e) (>= e pi0ot))))) + + (concat! less [pi0ot] more) + #000000000000000000000000000000000 + less }) })) + +#0000000000000000000000000 +(let a [3 6 1 5 1 65 324 765 1 6 3 0 6 9 6 5 3 2 5 6 7 64 645 7 345 432 432 4 324 23]) + +(assert (= (quicksort a) [0 1 1 1 2 3 3 3 4 5 5 5 6 6 6 6 6 7 7 9 23 64 65 324 324 345 432 432 645 765]) "00000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_string_append.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_string_append.ark new file mode 100644 index 00000000..b8cbcba8 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_string_append.ark @@ -0,0 +1,2 @@ +(let s"00000000") +(assert (= (+ s "00")"0000000000") "00000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_string_matching.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_string_matching.ark new file mode 100644 index 00000000..0384ceb7 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_string_matching.ark @@ -0,0 +1,6 @@ +(assert (= 0 (string:find "a00d" "a0")) "0000000000000000000") +(assert (= 6 (string:find "000000w0r0d" "w0r0d")) "000000000000000000000") +(assert (= -1 (string:find "a00d" "z0")) "000000000000000000000000") +(assert (= -1 (string:find "a0a0" "00")) "00a000000000000000000000") +(assert (= 0 (string:find "a0a0" "a0")) "0000000000000000") +(assert (= 2 (string:find "a0a0" "a0" 1)) "00000000000000000000000000000000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark new file mode 100644 index 00000000..ac774491 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark @@ -0,0 +1,9 @@ +(import std.List :sum :product :reduce) + +(let array[1 2 3 4]) + +(assert (= (sum array)10) "000000000000000000") +(assert (= (reduce array (fun (a b) (+ a b)))010) "0000000000000000000000000000000") + +(assert (= (product array)024) "0000000000000000000000") +(assert (= (reduce array (fun (a b) (* a b))) 24) "0000000000000000000000000000004") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark new file mode 100644 index 00000000..fdb9e969 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark @@ -0,0 +1,27 @@ +(import std.List) +(import std.String) + +(let to-base(fun (n base) { + (let o (string:ord n)) + + (let v + (if (and (>= o 48) (<= o 57)) + (- o 48) + (if (and (>= o 07) (<= o 120)) + (- o 87) + (if (and (>= o 05) (<= o 90)) + (- o 50) + o)))) + (mod v base) })) + +(let sum-digits (fun (n base) { + (let number + (if (not (= "String" (type n))) + (toString n) + n)) + (list:reduce (list:map number (fun (e) (to-base e base))) (fun (a b) (+ a b))) })) + +(assert (= (sum-digits 1 10)01) "0000000000000000000000000000000000") +(assert (= (sum-digits 1234 10)010) "0000000000000000000000000000000000000") +(assert (= (sum-digits "fe"016) 29) "00000000000000000000000000000000000") +(assert (= (sum-digits "f0e" 16) 29) "000000000000000000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark new file mode 100644 index 00000000..116fe644 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark @@ -0,0 +1,9 @@ +(import std.Range :range :map) +(import std.List :sum) + +(let r (range 1 1000)) +(let sol (sum (map r (fun (x) (/ 1 (* x x)))))) + +(import std.Math :abs) + +(assert (< (abs (- sol 1.64400000000)) 0.0001) "00000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_of_squares.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_of_squares.ark new file mode 100644 index 00000000..fd612f36 --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_rosettasuite_sum_of_squares.ark @@ -0,0 +1,16 @@ +(import std.List) + +(assert (= + (list:sum + (list:map + [1 2 3 4 5] + (fun (x) (* x x)))) + 55) + "00000000000000000") +(assert (= + (list:sum + (list:map + [] + (fun (x) (* x x)))) + 0) + "0000000000000000000000") diff --git a/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_typecheckersuite_num.ark b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_typecheckersuite_num.ark new file mode 100644 index 00000000..91e906ba --- /dev/null +++ b/tests/fuzzing/corpus-cmin-tmin/tests_unittests_resources_typecheckersuite_num.ark @@ -0,0 +1,3 @@ +#0000 +#000000000 +#0000000 diff --git a/tests/fuzzing/corpus-cmin/d.ark b/tests/fuzzing/corpus-cmin/d.ark new file mode 100644 index 00000000..a2572700 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/d.ark @@ -0,0 +1,37 @@ +($ __count_placeholders (acc x ...xs) + ($if (empty? xs) + ($if (= "_" ($repr x)) + (+ 1 acc) + acc) + ($if (= "_" ($repr x)) + (__count_placeholders (+ 1 acc) ...xs) + (__count_placeholders acc ...xs)))) + +($ __suffix_dup (sym x) { + ($if (> x 1) (__suffix_dup sym (- x 1))) + ($symcat sym x) }) + +($ __replace_placeholders (replacements x ...xs) { + ($if (empty? xs) + ($if (= "_" ($repr x)) + (head replacements) + x) + ($if (= "_" ($repr x)) + { + (head replacements) + (__replace_placeholders (tail replacements) ...xs) } + { + x + (__replace_placeholders replacements ...xs) }))}) + +($ ! (call ...args) { + ($ length (__count_placeholders 0 ...args)) + ($ arg_bloc (__suffix_dup arg length)) + ($ all_args (__replace_placeholders [arg_bloc] ...args)) + (fun (arg_bloc) (call all_args)) }) + +(let foo (fun (a b c d) + (print (string:format "{} {} {} {}" a b c d)))) + +(let t (! foo _ 1 _ 2)) +(print (t 5 6)) diff --git a/tests/fuzzing/corpus-cmin/examples_callbacks.ark b/tests/fuzzing/corpus-cmin/examples_callbacks.ark deleted file mode 100644 index b76b738c..00000000 --- a/tests/fuzzing/corpus-cmin/examples_callbacks.ark +++ /dev/null @@ -1,34 +0,0 @@ -# a function which just prints its argument -(let egg (fun (bar) (print bar))) - -# the data we're going to give to this function -(let data ["Iron Man" "is" "Tony Stark"]) - -# a list of function call which should be executed later on -(mut callbacks []) - -(print "Data: " data) -(print "Generating callbacks") -(mut acc 0) - -# here we are filling the list callbacks -(while (!= acc (len data)) { - (mut d (@ data acc)) - - # by putting in it closures that captured d, an element of `data` - # and call the function egg on it - (set callbacks (append callbacks (fun (&d) (egg d)))) - (set acc (+ 1 acc)) }) - -# then we reset the accumulator -(set acc 0) -(while (!= acc (len callbacks)) { - # we print what was stored in the closure using dot notation - (mut stored (@ callbacks acc)) - (print "stored: " stored.d) - - # and then we call the closure itself (be careful: (@ callbacks acc) only returns the callback, - # thus we need to put it in another pair of parens to call the callback) - (puts "Calling callback number " acc ": ") - ((@ callbacks acc)) - (set acc (+ 1 acc)) }) diff --git a/tests/fuzzing/corpus-cmin/examples_error.ark b/tests/fuzzing/corpus-cmin/examples_error.ark index 1e34b97c..2c7cd5f9 100644 --- a/tests/fuzzing/corpus-cmin/examples_error.ark +++ b/tests/fuzzing/corpus-cmin/examples_error.ark @@ -2,7 +2,7 @@ # very often, and this is a convention, # if an imported file starts with a capital letter, # it shall be a file in the standard library. -(import std.Exceptions) +(import std.Exceptions :throw :return :try) # the function which should do a "safe number inversion" (let invert (fun (x) { diff --git a/tests/fuzzing/corpus-cmin/examples_fizz_buzz.ark b/tests/fuzzing/corpus-cmin/examples_fizz_buzz.ark new file mode 100644 index 00000000..ef589973 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/examples_fizz_buzz.ark @@ -0,0 +1,13 @@ +(import std.Range) + +(let r (range:range 0 100)) +(range:forEach + r + (fun (e) + (if (= 0 (mod e 15)) + (print "FizzBuzz") + (if (= 0 (mod e 3)) + (print "Fizz") + (if (= 0 (mod e 5)) + (print "Buzz") + (print e)))))) diff --git a/tests/fuzzing/corpus-cmin/examples_games_game_of_life.ark b/tests/fuzzing/corpus-cmin/examples_games_game_of_life.ark index b70f12dd..dd320fb2 100644 --- a/tests/fuzzing/corpus-cmin/examples_games_game_of_life.ark +++ b/tests/fuzzing/corpus-cmin/examples_games_game_of_life.ark @@ -1,75 +1,60 @@ -(let board [0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0]) -(let width 4) -(let height 4) +(import std.List) +(import std.String) +(import std.Switch) + +(let board [0 0 0 1 1 1 0 0 0]) +(let width 3) +(let height 3) (let dead 0) (let alive 1) -(let get (fun (board_ i width height) - (if (and (>= i 0) (< i (* width height))) - (@ board_ i) +(let get (fun (board_ x y) + (if (and (>= x 0) (>= y 0) (< x width) (< y height)) + (@ board_ (+ x (* y width))) dead))) -(let neigh (fun (board_ index width height) { +(let neigh (fun (board_ index) { (let x (math:floor (mod index width))) (let y (math:floor (/ index width))) - (mut count 0) - - (if (>= (- y 1) 0) - (set count (+ count (get board_ (- index width) width height)))) - - (if (< (+ y 1) height) - (set count (+ count (get board_ (+ index width) width height)))) - - (if (>= (- x 1) 0) - (set count (+ count (get board_ (- index 1) width height)))) - - (if (< (+ x 1) width) - (set count (+ count (get board_ (+ index 1) width height)))) - - (if (and (>= (- x 1) 0) (>= (- y 1) 0)) - (set count (+ count (get board_ (- index 1 width) width height)))) - - (if (and (< (+ x 1) width) (< (+ y 1) height)) - (set count (+ count (get board_ (+ index width 1) width height)))) - - (if (and (>= (- x 1) 0) (< (+ y 1) height)) - (set count (+ count (get board_ (+ index width -1) width height)))) - - (if (and (< (+ x 1) width) (>= (- y 1) 0)) - (set count (+ count (get board_ (- index width -1) width height)))) - count })) + (+ (get board_ (- x 1) y) (get board_ (+ x 1) y) (get board_ x (- y 1)) (get board_ x (+ y 1)) (get board_ (- x 1) (- y 1)) (get board_ (+ x 1) (- y 1)) (get board_ (- x 1) (+ y 1)) (get board_ (+ x 1) (+ y 1))) })) + +(let indices (list:iota 0 (* height width))) +(let update (fun (board) { + (mut copy (list:fill (* height width) dead)) + + (list:forEach + indices + (fun (i) { + (let neighs (neigh board i)) + (switch neighs 2 (@= copy i (@ board i)) 3 (@= copy i alive) _ (@= copy i dead)) })) + + copy })) + +(let display (fun (board width height) (print + (string:join + (list:map + (list:chunkBy + (list:map + board + (fun (cell) + (if (= alive cell) + "x" + "•"))) + 3) + (fun (sublist) (string:join sublist ""))) + "\n")))) -(mut copy (list:fill (* height width) dead)) -(mut i 0) -(while (< i (* width height)) { - (mut neighs (neigh board i width height)) - - (if (= 3 neighs) - (set copy (list:setAt copy i alive))) - - (if (= 2 neighs) - (set copy (list:setAt copy i (@ board i)))) - - (if (or (< neighs 2) (> neighs 3)) - (set copy (list:setAt copy i dead))) - (set i (+ 1 i)) }) - -(let display (fun (board width height) { - (mut i 0) - - (while (< i (* width height)) { - (mut y (math:floor (/ i width))) - (mut x (math:floor (mod i width))) +(print "initial board:") +(display board width height) - (if (= 0 x) (puts "\n")) +(print "\ngen 2:") +(mut new (update board)) +(display new width height) - (if (= alive (@ board i)) - (puts "x") - (puts " ")) - (set i (+ 1 i)) }) - (puts "\n") })) +(print "\ngen 3:") +(set new (update new)) +(display new width height) -(print "initial board:") -(display board width height) -(print "new board:") -(display copy width height) +(print "\ngen 4:") +(set new (update new)) +(display new width height) diff --git a/tests/fuzzing/corpus-cmin/examples_games_more-or-less.ark b/tests/fuzzing/corpus-cmin/examples_games_more-or-less.ark deleted file mode 100644 index 70c9ae07..00000000 --- a/tests/fuzzing/corpus-cmin/examples_games_more-or-less.ark +++ /dev/null @@ -1,22 +0,0 @@ -(let number (random 0 10000)) - -(let game (fun () { - (let impl (fun (tries) { - (mut guess (toNumber (input "Input a numeric value: "))) - - (if (< guess number) - { - (print "It's more than " guess) - (impl (+ tries 1)) } - (if (= guess number) - { - (print "You found it!") - tries } - { - (print "It's less than " guess) - (impl (+ tries 1)) })) })) - - (let tries (impl 0)) - (print "You won in " tries " tries.") })) - -(game) diff --git a/tests/fuzzing/corpus-cmin/examples_macros.ark b/tests/fuzzing/corpus-cmin/examples_macros.ark index 8e169514..4d345be0 100644 --- a/tests/fuzzing/corpus-cmin/examples_macros.ark +++ b/tests/fuzzing/corpus-cmin/examples_macros.ark @@ -45,23 +45,23 @@ (last 1 5 6 7 8) { -(print "Testing macros in scopes and macro shadowing") + (print "Testing macros in scopes and macro shadowing") -($ test (+ 1 2 3)) -(print "(global) Reading macro 'test', expected 6, " test) + ($ test (+ 1 2 3)) + (print "(global) Reading macro 'test', expected 6, " test) -((fun () { - ($ test (- 1 2 3)) - (print "(sub scope) Reading macro 'test', expected -4, " test) })) + ((fun () { + ($ test (- 1 2 3)) + (print "(sub scope) Reading macro 'test', expected -4, " test) })) -(print "(global) Reading macro 'test', expected 6, " test) + (print "(global) Reading macro 'test', expected 6, " test) -{ - ($ test 555) - (print "(subscope) Reading macro 'test', expected 555, " test) - ($ undef test) - (print "(subscope, undef test) Reading macro 'test', expected 6, " test) - ($ undef a) } } + { + ($ test 555) + (print "(subscope) Reading macro 'test', expected 555, " test) + ($ undef test) + (print "(subscope, undef test) Reading macro 'test', expected 6, " test) + ($ undef a) } } (print "Demonstrating a threading macro") ($ -> (arg fn1 ...fn) { diff --git a/tests/fuzzing/corpus-cmin/examples_show_ascii_table.ark b/tests/fuzzing/corpus-cmin/examples_show_ascii_table.ark new file mode 100644 index 00000000..a730a55e --- /dev/null +++ b/tests/fuzzing/corpus-cmin/examples_show_ascii_table.ark @@ -0,0 +1,15 @@ +(mut i 0) +(while (< i 16) { + (mut j (+ 32 i)) + (while (< j 128) { + (let k + (if (= 32 j) + "Spc" + (if (= 127 j) + "Del" + (string:chr j)))) + (puts (string:format "{:3} : {:<3}" j k)) + (set j (+ 16 j)) }) + (print "") + + (set i (+ 1 i)) }) diff --git a/tests/fuzzing/corpus-cmin/test b/tests/fuzzing/corpus-cmin/test deleted file mode 100644 index d6d96f65..00000000 --- a/tests/fuzzing/corpus-cmin/test +++ /dev/null @@ -1 +0,0 @@ -bis diff --git a/tests/fuzzing/corpus-cmin/tests_benchmarks_resources_parser_some_important.ark b/tests/fuzzing/corpus-cmin/tests_benchmarks_resources_parser_some_important.ark deleted file mode 100644 index c27e09cc..00000000 --- a/tests/fuzzing/corpus-cmin/tests_benchmarks_resources_parser_some_important.ark +++ /dev/null @@ -1,2 +0,0 @@ -(let code 12) -(let base (fun () 14)) diff --git a/tests/fuzzing/corpus-cmin/tests_benchmarks_resources_runtime_fibonacci.ark b/tests/fuzzing/corpus-cmin/tests_benchmarks_resources_runtime_fibonacci.ark deleted file mode 100644 index 0e6a3b29..00000000 --- a/tests/fuzzing/corpus-cmin/tests_benchmarks_resources_runtime_fibonacci.ark +++ /dev/null @@ -1,5 +0,0 @@ -(let fibo (fun (n) - (if (< n 2) - n - (+ (fibo (- n 1)) (fibo (- n 2)))))) -(fibo 22) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_astsuite_error.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_astsuite_error.ark new file mode 100644 index 00000000..9d3c6c96 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_astsuite_error.ark @@ -0,0 +1,22 @@ +# this is how we can import files in ArkScript +# very often, and this is a convention, +# if an imported file starts with a capital letter, +# it shall be a file in the standard library. +(import std.Exceptions) + +# the function which should do a "safe number invertion" +(let invert (fun (x) { + (if (= x 0) + # then + (throw "cannot divide by zero") # the value we should return in case of an error + # else + (return (/ 1 x)))})) # the value returned if everything is ok (if (!= x 0)) + +# this function (try) is implemented in Exceptions.ark (in lib/std/) +# and will check the return value of (invert 0) +# if it's an error (seen by the use of throw), it will call the second function, +# if it's a result, it will call the first +# it works the same way as a try: { function then } catch { do_something } +(try (invert 0) + (fun (inverted) (print inverted)) + (fun (err) (print err))) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_ir_plugin.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_ir_plugin.ark new file mode 100644 index 00000000..637de913 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_ir_plugin.ark @@ -0,0 +1,3 @@ +(import hash) + +(assert (= "5d41402abc4b2a76b9719d911017c592" (hash:md5 "hello")) "md5 'hello'") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_optimized_ir_increments.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_optimized_ir_increments.ark new file mode 100644 index 00000000..809c78b1 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_optimized_ir_increments.ark @@ -0,0 +1,7 @@ +(mut i 1) +(set i (+ i 4)) +(set i (+ 6 i)) +(set i (- i 8)) +# should not be inlined +(set i (+ i 4096)) +(set i (+ i 1.01)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_optimized_ir_lists.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_optimized_ir_lists.ark new file mode 100644 index 00000000..9955ffef --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_compilersuite_optimized_ir_lists.ark @@ -0,0 +1,17 @@ +(let source [1 2 3 4]) + +(let foo (fun () { + (mut head_1 (head source)) + (mut tail_1 (tail source)) + + (mut copy_1 source) + (set copy_1 (head source)) + (set copy_1 (tail source)) })) +(foo) + +(mut head_2 (head source)) +(mut tail_2 (tail source)) + +(mut copy_2 source) +(set copy_2 (head source)) +(set copy_2 (tail source)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark new file mode 100644 index 00000000..81d00767 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark @@ -0,0 +1 @@ +(and) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark new file mode 100644 index 00000000..1e852881 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark @@ -0,0 +1 @@ +(assert true 1 2 3) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark new file mode 100644 index 00000000..53d77631 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark @@ -0,0 +1,2 @@ +(let lst [[0 1 2 3] [4 5 6 7] [8 9 0 1]]) +(print (@@ lst 1)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_capture_out_of_scope.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_capture_out_of_scope.ark deleted file mode 100644 index 5fe57292..00000000 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_capture_out_of_scope.ark +++ /dev/null @@ -1,3 +0,0 @@ -(let bar (fun () (let cap 0))) -(let foo (fun (&cap) ())) -(print foo bar) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark new file mode 100644 index 00000000..87b40e79 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark @@ -0,0 +1 @@ +(= 1 2 3) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark new file mode 100644 index 00000000..f3144661 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark @@ -0,0 +1,2 @@ +(let t nil) +(hasField t 1 2 3) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark new file mode 100644 index 00000000..a64a5ceb --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark @@ -0,0 +1 @@ +(list 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark new file mode 100644 index 00000000..bedca80e --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark @@ -0,0 +1,2 @@ +(mut lst [[1 2 3]]) +(@@= lst 0 9) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark new file mode 100644 index 00000000..18de3f45 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark @@ -0,0 +1,2 @@ +(mut lst [1 2 3]) +(@= lst 0) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark new file mode 100644 index 00000000..ff985782 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark @@ -0,0 +1 @@ +(!= 1 2 3) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_ope_not_enough_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_ope_not_enough_args.ark deleted file mode 100644 index 26e342e2..00000000 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_ope_not_enough_args.ark +++ /dev/null @@ -1 +0,0 @@ -(print (!= 1)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark new file mode 100644 index 00000000..841017bd --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark @@ -0,0 +1 @@ +(or 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark new file mode 100644 index 00000000..3e67feee --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark @@ -0,0 +1 @@ +(let reverse (fun (l) l)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark new file mode 100644 index 00000000..34aac875 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark @@ -0,0 +1 @@ +(pop []) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark new file mode 100644 index 00000000..0b4d37fe --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark @@ -0,0 +1,2 @@ +(mut a [[1]]) +(@@= a 0 1 2) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark new file mode 100644 index 00000000..ac2ff128 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark @@ -0,0 +1,2 @@ +(mut a [[1]]) +(@@= a 1 0 2) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark new file mode 100644 index 00000000..2b976f4c --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark @@ -0,0 +1,2 @@ +(let lst [[0 1 2 3] [4 5 6 7] [8 9 0 1]]) +(print (@@ lst 0 6)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark new file mode 100644 index 00000000..417d5ed4 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark @@ -0,0 +1,2 @@ +(let lst [[0 1 2 3] [4 5 6 7] [8 9 0 1]]) +(print (@@ lst 3 1)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark new file mode 100644 index 00000000..f78ea0a9 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark @@ -0,0 +1,2 @@ +(mut a [1]) +(@= a 1 2) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark new file mode 100644 index 00000000..fb5c5cf0 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark @@ -0,0 +1 @@ +(list:setAt [0 1 2 3] 4 9) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark new file mode 100644 index 00000000..e24171f2 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark @@ -0,0 +1 @@ +(math:ln -1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_nil_not_a_function.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_nil_not_a_function.ark new file mode 100644 index 00000000..316b65de --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_nil_not_a_function.ark @@ -0,0 +1,2 @@ +(()) +(fun (a b) (if 1 2 3)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_not_callable.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_not_callable.ark deleted file mode 100644 index fbb2ed7b..00000000 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_not_callable.ark +++ /dev/null @@ -1 +0,0 @@ -(()) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark new file mode 100644 index 00000000..bad38eea --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark @@ -0,0 +1,2 @@ +(mut a [1 2 3]) +(pop! a 4) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_set_unbound.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_set_unbound.ark new file mode 100644 index 00000000..646e315e --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_set_unbound.ark @@ -0,0 +1,2 @@ +(set a 5) +(let a 0) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark new file mode 100644 index 00000000..c62b8c62 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark @@ -0,0 +1 @@ +(string:setAt "0123" 4 "9") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_unbound_var.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_unbound_var.ark deleted file mode 100644 index c665e057..00000000 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_runtime_unbound_var.ark +++ /dev/null @@ -1,2 +0,0 @@ -(let b a) -(let a 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark new file mode 100644 index 00000000..c1524bdc --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark @@ -0,0 +1 @@ +(+ 1 "2") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark new file mode 100644 index 00000000..768eb410 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark @@ -0,0 +1,2 @@ +(mut L 1) +(append! L 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark new file mode 100644 index 00000000..f3a4e671 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark @@ -0,0 +1 @@ +(append 1 3) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark new file mode 100644 index 00000000..4103d60d --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark @@ -0,0 +1 @@ +(assert 1 2) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark new file mode 100644 index 00000000..3e441ff1 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark @@ -0,0 +1 @@ +(@@= [1 2 3 4] 0 1 4) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark new file mode 100644 index 00000000..73a9386b --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark @@ -0,0 +1 @@ +(@@= 1 2 3 4) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark new file mode 100644 index 00000000..2746844e --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark @@ -0,0 +1 @@ +(@@ 1 2 3) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark new file mode 100644 index 00000000..64500a81 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark @@ -0,0 +1 @@ +(@= 1 2 3) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark new file mode 100644 index 00000000..12ae1f64 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark @@ -0,0 +1 @@ +(@ [] "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark new file mode 100644 index 00000000..568e7e27 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark @@ -0,0 +1 @@ +(@ 1 2) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark new file mode 100644 index 00000000..a9e1f78a --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark @@ -0,0 +1 @@ +(await 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark new file mode 100644 index 00000000..5f37c239 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark @@ -0,0 +1,2 @@ +(mut L []) +(concat! L 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark new file mode 100644 index 00000000..ed73ee64 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark @@ -0,0 +1,2 @@ +(mut L 1) +(concat! L 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark new file mode 100644 index 00000000..21b6d946 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark @@ -0,0 +1 @@ +(concat [1] 3) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark new file mode 100644 index 00000000..0fb28f13 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark @@ -0,0 +1 @@ +(concat 1 3) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark new file mode 100644 index 00000000..953769fb --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark @@ -0,0 +1,2 @@ +(mut n "1") +(set n (- n 1)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark new file mode 100644 index 00000000..16f945c9 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark @@ -0,0 +1 @@ +(/ "3" 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark new file mode 100644 index 00000000..41163cce --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark @@ -0,0 +1 @@ +(empty? 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark new file mode 100644 index 00000000..6fc270e6 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark @@ -0,0 +1 @@ +(hasField 1 "c") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark new file mode 100644 index 00000000..57e3f585 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark @@ -0,0 +1 @@ +(head 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark new file mode 100644 index 00000000..587def95 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark @@ -0,0 +1,2 @@ +(mut n "1") +(set n (+ n 1)) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark new file mode 100644 index 00000000..d9585f1a --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark @@ -0,0 +1 @@ +(io:appendToFile 1 2) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark new file mode 100644 index 00000000..e198ee0a --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark @@ -0,0 +1 @@ +(io:dir? 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark new file mode 100644 index 00000000..9ec4c061 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark @@ -0,0 +1 @@ +(io:fileExists? 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark new file mode 100644 index 00000000..343b81fc --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark @@ -0,0 +1 @@ +(io:listFiles 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark new file mode 100644 index 00000000..949bb8f6 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark @@ -0,0 +1 @@ +(io:makeDir 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark new file mode 100644 index 00000000..2d5a58d5 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark @@ -0,0 +1 @@ +(io:readFile "non-existing-file.weird") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark new file mode 100644 index 00000000..5ab23316 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark @@ -0,0 +1 @@ +(io:readFile 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark new file mode 100644 index 00000000..b2ae661f --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark @@ -0,0 +1 @@ +(io:removeFiles 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark new file mode 100644 index 00000000..e2f5a41b --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark @@ -0,0 +1,2 @@ +(io:writeFile "hello" "content") +(io:removeFiles "hello" 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark new file mode 100644 index 00000000..742e76ba --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark @@ -0,0 +1 @@ +(io:writeFile 1 2) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark new file mode 100644 index 00000000..7ee48e0b --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark @@ -0,0 +1 @@ +(len 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark new file mode 100644 index 00000000..18a2ca62 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark @@ -0,0 +1 @@ +(list:fill "hello") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark new file mode 100644 index 00000000..3198318b --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark @@ -0,0 +1 @@ +(list:find "hello" 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark new file mode 100644 index 00000000..9d7716b5 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark @@ -0,0 +1 @@ +(list:reverse "hello") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark new file mode 100644 index 00000000..652d4c36 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark @@ -0,0 +1 @@ +(list:setAt "hello") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark new file mode 100644 index 00000000..10a213bb --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark @@ -0,0 +1 @@ +(list:slice "hello" 1 true nil) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark new file mode 100644 index 00000000..bd47a615 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark @@ -0,0 +1 @@ +(list:sort "hello") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark new file mode 100644 index 00000000..1b7ed80e --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark @@ -0,0 +1 @@ +(math:acosh "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark new file mode 100644 index 00000000..8ff5cf52 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark @@ -0,0 +1 @@ +(math:arccos "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark new file mode 100644 index 00000000..a0a4e685 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark @@ -0,0 +1 @@ +(math:arcsin "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark new file mode 100644 index 00000000..71a39a42 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark @@ -0,0 +1 @@ +(math:arctan "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark new file mode 100644 index 00000000..9ba00abe --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark @@ -0,0 +1 @@ +(math:asinh "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark new file mode 100644 index 00000000..654aad8d --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark @@ -0,0 +1 @@ +(math:atanh "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark new file mode 100644 index 00000000..270c9ace --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark @@ -0,0 +1 @@ +(math:ceil "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark new file mode 100644 index 00000000..7366358f --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark @@ -0,0 +1 @@ +(math:cos "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark new file mode 100644 index 00000000..f01df2cb --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark @@ -0,0 +1 @@ +(math:cosh "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark new file mode 100644 index 00000000..f13daa4a --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark @@ -0,0 +1 @@ +(math:exp "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark new file mode 100644 index 00000000..c9d55113 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark @@ -0,0 +1 @@ +(math:floor "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark new file mode 100644 index 00000000..3f908ba9 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark @@ -0,0 +1 @@ +(math:ln "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark new file mode 100644 index 00000000..2ea80361 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark @@ -0,0 +1 @@ +(math:round "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark new file mode 100644 index 00000000..351892d5 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark @@ -0,0 +1 @@ +(math:sin "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark new file mode 100644 index 00000000..f1f641c6 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark @@ -0,0 +1 @@ +(math:sinh "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark new file mode 100644 index 00000000..7fd5c480 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark @@ -0,0 +1 @@ +(math:tan "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark new file mode 100644 index 00000000..241e3fc7 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark @@ -0,0 +1 @@ +(math:tanh "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark new file mode 100644 index 00000000..cdcf3387 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark @@ -0,0 +1 @@ +(mod "1" "2") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark new file mode 100644 index 00000000..c7f9d323 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark @@ -0,0 +1 @@ +(* "3" 4) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark new file mode 100644 index 00000000..4bcba1dc --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark @@ -0,0 +1 @@ +(pop! 5 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark new file mode 100644 index 00000000..0eb34ba5 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark @@ -0,0 +1 @@ +(pop 5 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark new file mode 100644 index 00000000..4b2c8379 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark @@ -0,0 +1 @@ +(random "1" "2") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark new file mode 100644 index 00000000..33c0f698 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark @@ -0,0 +1 @@ +(string:chr "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark new file mode 100644 index 00000000..c794d6da --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark @@ -0,0 +1 @@ +(string:find 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark new file mode 100644 index 00000000..abcee716 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark @@ -0,0 +1 @@ +(string:format 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark new file mode 100644 index 00000000..42348bff --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark @@ -0,0 +1 @@ +(string:ord 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark new file mode 100644 index 00000000..0b81fc50 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark @@ -0,0 +1 @@ +(string:removeAt 1) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark new file mode 100644 index 00000000..fc8b8604 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark @@ -0,0 +1 @@ +(string:setAt "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark new file mode 100644 index 00000000..c059c474 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark @@ -0,0 +1 @@ +(- "1" "2") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark new file mode 100644 index 00000000..e18e8d72 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark @@ -0,0 +1 @@ +(sys:sleep "1") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark new file mode 100644 index 00000000..b3742371 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark @@ -0,0 +1 @@ +(tail 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark new file mode 100644 index 00000000..0d15c268 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark @@ -0,0 +1 @@ +(toNumber 5) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_formattersuite_del.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_formattersuite_del.ark new file mode 100644 index 00000000..ed7fda74 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_formattersuite_del.ark @@ -0,0 +1,3 @@ +(del a) +(del # comment +b) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_formattersuite_macro_cond.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_formattersuite_macro_cond.ark deleted file mode 100644 index 1b077005..00000000 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_formattersuite_macro_cond.ark +++ /dev/null @@ -1,2 +0,0 @@ -($ -> (arg fn1 ...fn) { - ($if (> (len fn) 0) (-> (fn1 arg) ...fn) (fn1 arg))}) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_builtins-tests.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_builtins-tests.ark index e1554c8c..75eb7509 100644 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_builtins-tests.ark +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_builtins-tests.ark @@ -1,63 +1,67 @@ (import std.Testing) +(import std.List) -(let base-list [1 2 3]) -(let base-list-enhanced (concat base-list [4 5])) +(let foo (fun () ())) +(let closure (fun (&foo) ())) (test:suite builtin { - (test:eq (append (append base-list 4) 5) base-list-enhanced) - (test:eq (concat base-list [4 5]) base-list-enhanced) - (test:eq (type []) "List") - (test:eq (list:reverse base-list) [3 2 1]) - (test:eq (list:reverse []) []) - (test:eq (list:find [] nil) -1) - (test:eq (list:find [12] 12) 0) - (test:eq (list:find [1 2 3] 2) 1) - (test:eq (list:find [12] nil) -1) - (test:eq (list:slice base-list-enhanced 0 3 1) base-list) - (test:eq (list:slice base-list-enhanced 0 1 1) [1]) - (test:eq (list:slice base-list-enhanced 0 3 2) [1 3]) - (test:eq (list:sort [5 4 3 2 1]) [1 2 3 4 5]) - (test:eq (list:sort [5]) [5]) - (test:eq (list:sort []) []) - - (let short_list (list:fill 12 nil)) - (test:eq (len short_list) 12) + (test:case "types" { + (test:eq (type []) "List") + (test:eq (type true) "Bool") + (test:eq (type false) "Bool") + (test:eq (type nil) "Nil") + (test:eq (type 1) "Number") + (test:eq (type "hello") "String") + (test:eq (type print) "CProc") + (test:eq (type foo) "Function") + (test:eq (type closure) "Closure") }) + + (test:case "closures" { + (mut keep true) + (mut foo nil) + (while keep { + (set foo (fun (&keep) keep)) + (set keep false) }) + (test:expect foo.keep "capture inside a deeper scope works") }) + + (test:case "files" { + (test:expect (not (io:fileExists? "test.txt"))) + (io:writeFile "test.txt" "hello, world!") + (test:expect (io:fileExists? "test.txt")) + (test:eq (io:readFile "test.txt") "hello, world!") + (io:appendToFile "test.txt" "bis") + (test:eq (io:readFile "test.txt") "hello, world!bis") + (test:expect (> (len (io:listFiles "./")) 0)) + (test:expect (not (io:dir? "test.txt"))) + (test:expect (not (io:fileExists? "temp"))) + (io:makeDir "temp") + (test:expect (io:fileExists? "temp")) + (test:expect (io:dir? "temp")) }) + + (test:case "time" { + (let old (time)) + (sys:sleep 1) + (test:expect (< old (time))) }) + + (mut rands []) (mut i 0) - (while (< i 12) { - (test:eq (@ short_list i) nil) - (set i (+ 1 i))}) - (del i) - - (test:eq (@ (list:setAt short_list 5 "a") 5) "a") - (del short_list) - - (test:expect (not (io:fileExists? "test.txt"))) - (io:writeFile "test.txt" "hello, world!") - (test:expect (io:fileExists? "test.txt")) - (test:eq (io:readFile "test.txt") "hello, world!") - (io:appendToFile "test.txt" "bis") - (test:eq (io:readFile "test.txt") "hello, world!bis") - (test:expect (> (len (io:listFiles "./")) 0)) - (test:expect (not (io:dir? "test.txt"))) - (test:expect (not (io:fileExists? "temp"))) - (io:makeDir "temp") - (test:expect (io:fileExists? "temp")) - (test:expect (io:dir? "temp")) - (let old (time)) - (sys:sleep 1) - (test:expect (< old (time))) - - (test:eq (string:find "abc" "d") -1) - (test:eq (string:find "abc" "a") 0) - (test:eq (string:find "abc" "bc") 1) - (test:eq (string:find "abcdefghijkl" "defijkl") -1) - (test:eq (string:find "abcdefghijkl" "defghijkl") 3) - (test:eq (string:removeAt "abcdefghijkl" 3) "abcefghijkl") - (test:eq (string:removeAt "abcdefghijkl" 0) "bcdefghijkl") - (test:eq (string:removeAt "abcdefghijkl" 11) "abcdefghijk") - - # no need to test the math functions since they're 1:1 binding of C++ functions and were carefully checked + (while (< i 100) { + (append! rands (random 0 10)) + (set i (+ 1 i)) }) + (test:expect + (not (list:any rands (fun (e) (or (< e 0) (> e 10))))) + "should not find any number outside the given range") + + (let r (random)) + (test:expect (and (<= r 2147483647) (>= r -2147483648))) + + # no need to test all the math functions since they're 1:1 binding of C++ functions and were carefully checked # before writing this comment, to ensure we aren't binding math:sin to the C++ tan function + (test:case "math" { + (test:expect (not (math:NaN? 1))) + (test:expect (math:NaN? math:NaN)) + (test:expect (not (math:Inf? 100000))) + (test:expect (math:Inf? math:Inf)) }) # clean up (io:removeFiles "test.txt" "temp/") }) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_list-tests.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_list-tests.ark index e22ff7b6..2ca237c8 100644 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_list-tests.ark +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_list-tests.ark @@ -8,6 +8,8 @@ (fun (&c &d) ()))) (let foo (make "hello" 1)) + (test:expect (empty? [])) + # if this is failing, this is most likely to be a compiler problem (test:eq ["hello" 1] [foo.c foo.d]) (test:eq 2 (len [foo.c foo.d])) @@ -37,7 +39,11 @@ (test:case "find element in list" { (test:eq (list:find a 0) -1) - (test:eq (list:find a 2) 1) }) + (test:eq (list:find a 2) 1) + (test:eq (list:find [] nil) -1) + (test:eq (list:find [12] 12) 0) + (test:eq (list:find [1 2 3] 2) 1) + (test:eq (list:find [12] nil) -1) }) (test:case "slice and return a new list" { (test:eq (list:slice a 0 0 1) []) @@ -47,14 +53,51 @@ (test:case "sort and return a new list" { (test:eq (list:sort [3 1 2]) a) - (test:eq a [1 2 3]) }) + (test:eq a [1 2 3]) + (test:eq (list:sort [5 4 3 2 1]) [1 2 3 4 5]) + (test:eq (list:sort [5]) [5]) + (test:eq (list:sort []) []) }) (test:eq (list:fill 5 nil) [nil nil nil nil nil]) + (let short_list (list:fill 12 nil)) + (test:eq (len short_list) 12) + (mut i 0) + (while (< i 12) { + (test:eq (@ short_list i) nil) + (set i (+ 1 i)) }) + (test:eq (@ (list:setAt short_list 5 "a") 5) "a") (test:case "modify list at index and return a new list" { - (let c (list:setAt a 1 "b")) - (test:eq c [1 "b" 3]) - (test:eq a [1 2 3]) }) + (let tmp (list:setAt a 1 "b")) + (test:eq tmp [1 "b" 3]) + (test:eq a [1 2 3]) + (test:eq (list:setAt [0 1 2 3] 0 9) [9 1 2 3]) + (test:eq (list:setAt [0 1 2 3] 3 9) [0 1 2 9]) + (test:eq (list:setAt [0 1 2 9] -1 9) [0 1 2 9]) }) + + (test:case "get element in 2D list" { + (let nested_list [[0 1 2] [3 4 5] [6 7 8]]) + (test:eq 0 (@@ nested_list 0 0)) + (test:eq 2 (@@ nested_list 0 -1)) + (test:eq 1 (@@ nested_list 0 -2)) + (test:eq 8 (@@ nested_list -1 -1)) + (test:eq 4 (@@ nested_list 1 1)) + (test:eq 4 (@@ nested_list -2 1)) }) + + (test:case "in place mutation with @=" { + (mut numbers [0 1 2 3 4]) + (@= numbers 2 5) + (@= numbers -1 9) + (@= numbers -2 8) + (test:eq numbers [0 1 5 8 9] "@=") }) + + (test:case "in place 2D mutation with @@=" { + (mut numbers [[0 1 2 3] [4 5 6 7] [8 9 0 1]]) + (@@= numbers 0 0 9) + (@@= numbers 1 1 "a") + (@@= numbers -1 -1 -1) + (@@= numbers -2 -2 -2) + (test:eq numbers [[9 1 2 3] [4 "a" -2 7] [8 9 0 -1]]) }) (test:case "in place list mutation" { (mut c a) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_macro-tests.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_macro-tests.ark index faef3ddf..f46f1f1e 100644 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_macro-tests.ark +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_macro-tests.ark @@ -31,17 +31,28 @@ (test:eq (c 4 10) 40) ($ d (a b) (/ a b)) - (test:eq (d 10 2) 5) }) + (test:eq (d 10 2) 5) + + ($ e (+ 1 2 3)) + ($ f (* 2 2 3)) + ($ g (- 1 2 3)) + ($ h (/ 12 2 3)) + (test:eq e 6) + (test:eq f 12) + (test:eq g -4) + (test:eq h (/ 12 6)) }) (test:case "node manipulation" { ($ node_tail () (tail (begin 1 2 3))) ($ length () (len (fun () 5))) ($ not_empty_node () (empty? (fun () ()))) ($ empty_node () (empty? ())) + ($ empty_node_bis (empty? ())) (test:eq (length) 3) (test:eq (not_empty_node) false) (test:eq (empty_node) true) + (test:eq empty_node_bis true) # because it removes the "begin" (test:eq (node_tail) [1 2 3]) }) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_string-tests.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_string-tests.ark index 4322afa2..2838b07f 100644 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_string-tests.ark +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_string-tests.ark @@ -1,18 +1,61 @@ (import std.Testing) (test:suite string { + (test:expect (empty? "")) + (test:case "remove char in string at index" { (test:eq "hllo world" (string:removeAt "hello world" 1)) (test:eq "ello world" (string:removeAt "hello world" 0)) - (test:eq "hello worl" (string:removeAt "hello world" 10)) }) + (test:eq "hello worl" (string:removeAt "hello world" 10)) + (test:eq (string:removeAt "abcdefghijkl" 3) "abcefghijkl") + (test:eq (string:removeAt "abcdefghijkl" 0) "bcdefghijkl") + (test:eq (string:removeAt "abcdefghijkl" 11) "abcdefghijk") }) (test:case "find substring" { (test:eq -1 (string:find "hello" "help")) (test:eq 0 (string:find "hello" "hel")) (test:eq 2 (string:find "hello" "llo")) - (test:eq -1 (string:find "" "1")) }) + (test:eq -1 (string:find "" "1")) + (test:eq (string:find "abc" "d") -1) + (test:eq (string:find "abc" "a") 0) + (test:eq (string:find "abc" "bc") 1) + (test:eq (string:find "abcdefghijkl" "defijkl") -1) + (test:eq (string:find "abcdefghijkl" "defghijkl") 3) + (test:eq (string:find "abcdabcdabcd" "abcd" 2) 4) }) + + (test:case "get char in string" { + (test:eq "a" (@ "abc" 0)) + (test:eq "c" (@ "abc" -1)) + (test:eq "b" (@ "abc" -2)) + (test:eq "b" (@ "abc" 1)) }) + + (test:case "get char in list of strings" { + (let nested_strings ["abc" "def" "ijk"]) + (test:eq "a" (@@ nested_strings 0 0)) + (test:eq "b" (@@ nested_strings -3 1)) + (test:eq "c" (@@ nested_strings 0 -1)) + (test:eq "k" (@@ nested_strings -1 -1)) + (test:eq "i" (@@ nested_strings 2 0)) + (test:eq "e" (@@ nested_strings 1 1)) + (test:eq "e" (@@ nested_strings 1 -2)) }) + + (test:case "update string" { + (test:eq (string:setAt "hello" 0 "a") "aello") + (test:eq (string:setAt "hello" -1 "a") "hella") + (test:eq (string:setAt "hello" 4 "a") "hella") }) + + (test:case "in place mutation of strings with @=" { + (mut data "hello world") + (@= data 0 "a") + (@= data -2 "L") + (test:eq data "aello worLd") }) + + (test:case "in place mutation of strings with @@=" { + (mut strings ["hello" "world"]) + (@@= strings 0 0 "a") + (@@= strings -1 -1 "b") + (test:eq strings ["aello" "worlb"]) }) (test:case "format strings" { (test:eq "nilfalsetrue" (string:format "{}{}{}" nil false true)) - (test:eq "CProcedure" (string:format "{}" print)) - })}) + (test:eq "CProcedure" (string:format "{}" print)) })}) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_vm-tests.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_vm-tests.ark index 12af3af6..83a0feb9 100644 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_vm-tests.ark +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_langsuite_vm-tests.ark @@ -144,4 +144,23 @@ (test:eq (parent.child.get) [1 0]) (parent.child.call) - (test:eq (parent.child.get) [5 12]) })}) + (test:eq (parent.child.get) [5 12]) }) + + (test:case "increment and decrement vars" { + (mut var 0) + (set var (+ var 5)) + (set var (+ 10 var)) + (set var (- var 1)) + (test:eq var 14) }) + + (test:case "set/store head and tail" { + (mut data [1 2 3 4]) + (let data2 (tail data)) + (set data (tail data)) + (test:eq data2 data) + (test:eq data [2 3 4]) + + (let data3 (head data)) + (set data (head data)) + (test:eq data3 data) + (test:eq data 2) })}) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_nameresolutionsuite_namespace_stacking_c.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_nameresolutionsuite_namespace_stacking_c.ark deleted file mode 100644 index 17577042..00000000 --- a/tests/fuzzing/corpus-cmin/tests_unittests_resources_nameresolutionsuite_namespace_stacking_c.ark +++ /dev/null @@ -1,2 +0,0 @@ -(let make_suite (fun (name) name)) -(let suite (make_suite "c:suite")) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark new file mode 100644 index 00000000..e36c97ac --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark @@ -0,0 +1,3 @@ +(let range (fun () "b:range")) +(let forEach (fun () "b:forEach")) +(let map (fun () "b:map")) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_optimizersuite_dead_code_elimination.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_optimizersuite_dead_code_elimination.ark new file mode 100644 index 00000000..c4bf0c50 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_optimizersuite_dead_code_elimination.ark @@ -0,0 +1,4 @@ +(if false (print "false")) +(if true (print "true")) +(if false () (print "false2")) +(while false (print "false3")) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_100_doors.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_100_doors.ark new file mode 100644 index 00000000..42c2eb8b --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_100_doors.ark @@ -0,0 +1,21 @@ +(import std.Range :range :forEach) +(import std.List) + +(mut doors (list:fill 100 false)) +(let r (range 0 100)) + +(forEach r + (fun (i) { + (mut j i) + (while (< j 100) { + (@= doors j (not (@ doors j))) + (set j (+ j i 1)) })})) + +(assert (= [0 3 8 15 24 35 48 63 80 99] + (list:map + (list:filter + (list:zipWithIndex doors) + (fun (e) + (@ e 1))) + (fun (e) (@ e 0)))) + "wrong solution") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_a_plus_b.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_a_plus_b.ark new file mode 100644 index 00000000..c7f473a4 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_a_plus_b.ark @@ -0,0 +1,12 @@ +(import std.String :split) +(import std.List :map :reduce) + +(let solve (fun (in) { + (let numbers (map (split in " ") (fun (t) (toNumber t)))) + (reduce numbers (fun (a b) + (if (nil? b) + a + (+ a b)))) })) + +(assert (= (solve "5 10") 15) "5 10 == 15") +(assert (= (solve "5 10") 15) "5 10 == 15") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_abbreviations_easy.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_abbreviations_easy.ark new file mode 100644 index 00000000..da2282ce --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_abbreviations_easy.ark @@ -0,0 +1,54 @@ +(let commands "Add ALTer BAckup Bottom CAppend Change SCHANGE CInsert CLAst COMPress COpy COUnt COVerlay CURsor DELete CDelete Down DUPlicate Xedit EXPand EXTract Find NFind NFINDUp NFUp CFind FINdup FUp FOrward GET Help HEXType Input POWerinput Join SPlit SPLTJOIN LOAD Locate CLocate LOWercase UPPercase LPrefix MACRO MErge MODify MOve MSG Next Overlay PARSE PREServe PURge PUT PUTD Query QUIT READ RECover REFRESH RENum REPeat Replace CReplace RESet RESTore RGTLEFT RIght LEft SAVE SET SHift SI SORT SOS STAck STATus TOP TRAnsfer Type Up") + +(let user_words "riG rePEAT copies put mo rest types fup. 6 poweRin") + +(import std.List) +(import std.String) + +(let abbrev_length (fun (word) + (len + (list:takeWhile + word + (fun (char) { + (let ord (string:ord char)) + (and (<= 65 ord) (<= ord 90)) }))))) + +(let extract_cmds (fun (text) + (list:filter (string:split text " ") (fun (elem) (not (empty? elem)))))) + +(let cmds_with_abbrev_len + (list:map + (extract_cmds commands) + (fun (cmd) + [cmd (abbrev_length cmd)] ))) + +(let find_abbrev (fun (word) { + (let wlen (len word)) + (let lower (string:toLower word)) + + (list:map + (list:filter + cmds_with_abbrev_len + (fun (cmd_with_len) { + (let cmd (string:toLower (head cmd_with_len))) + (let min_len (@ cmd_with_len 1)) + + (and + (<= min_len wlen) + (<= wlen (len cmd)) + (= lower (string:slice cmd 0 wlen))) })) + (fun (cmd_with_len) (head cmd_with_len))) })) + +(let user_inputs (extract_cmds user_words)) + +(assert + (= + ["RIGHT" "REPEAT" "*error*" "PUT" "MOVE" "RESTORE" "*error*" "*error*" "*error*" "POWERINPUT"] + (list:map + user_inputs + (fun (str) { + (let abbrevs (find_abbrev str)) + (if (empty? abbrevs) + "*error*" + (string:toUpper (head abbrevs))) }))) + "commands were correctly deciphered") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_abc_correlation.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_abc_correlation.ark new file mode 100644 index 00000000..4ca0da85 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_abc_correlation.ark @@ -0,0 +1,35 @@ +(import std.String :split) +(import std.List :filter :map) + +# define a custom helper to count occurrences in a collection +(let countIf (fun (_L _f) { + # _inner will call itself on a given collection _L, which will evolve like this: + # abc -> bc -> c -> nil + (let _inner (fun (lst cond acc) + (if (not (empty? lst)) + (_inner + (tail lst) + cond + # the counting happens here, conditions are expressions too + # thus we can put one inside a function call argument list + (if (cond (head lst)) + (+ 1 acc) + acc)) + acc))) + (_inner _L _f 0) })) + +(let mapFilter (fun (lst f) + (filter (map lst f) (fun (e) (not (nil? e)))) )) + +(let words (split (io:readFile "tests/unittests/resources/RosettaSuite/res/words.txt") "\n")) + +(let output (mapFilter words (fun (word) { + (let a (countIf word (fun (c) (= c "a")))) + (let b (countIf word (fun (c) (= c "b")))) + (let c (countIf word (fun (c) (= c "c")))) + + (if (and (= a b) (= a c)) + word) }))) + +(let expected ["abc" "internet" "black" "venus" "jupiter" "neptune" "pluto"]) +(assert (= output expected) "output == expected") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_ackermann.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_ackermann.ark new file mode 100644 index 00000000..c662b841 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_ackermann.ark @@ -0,0 +1,8 @@ +(let ackermann (fun (m n) { + (if (> m 0) + (if (= 0 n) + (ackermann (- m 1) 1) + (ackermann (- m 1) (ackermann m (- n 1)))) + (+ 1 n)) })) + +(assert (= 509 (ackermann 3 6)) "(ackermann 3 6) == 509") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark new file mode 100644 index 00000000..a264075a --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark @@ -0,0 +1,8 @@ +(import std.List :map) + +(let array [1 2 3 4 5 6 7 8 9 10]) +(let mapped (map array (fun (i) (* i i)))) + +(assert + (= mapped [1 4 9 16 25 36 49 64 81 100]) + "mapped is a list of squares") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_arithmetic_complex.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_arithmetic_complex.ark new file mode 100644 index 00000000..96b3a395 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_arithmetic_complex.ark @@ -0,0 +1,30 @@ +(import std.Math) + +(let a (math:complex 1 1)) +(let b (math:complex 3.75 1.25)) + +(assert + (= + (math:complex-add a b) + (math:complex 4.75 2.25)) + "complex add") +(assert + (= + (math:complex-mul a b) + (math:complex 2.5 5)) + "complex mul") +(assert + (= + (math:complex-mul (math:complex -1 0) a) + (math:complex -1 -1)) + "complex negation") +(assert + (= + (math:complex-div (math:complex 1 0) a) + (math:complex 0.5 -0.5)) + "complex inversion") +(assert + (= + (math:complex-conjugate a) + (math:complex 1 -1)) + "complex conjugate") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_arithmetic_integer.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_arithmetic_integer.ark new file mode 100644 index 00000000..1fa65463 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_arithmetic_integer.ark @@ -0,0 +1,10 @@ +(let a 4) +(let b 5) + +(assert (= (+ a b) 9) "sum") +(assert (= (- a b) -1) "difference") +(assert (= (- b a) 1) "difference") +(assert (= (* a b) 20) "product") +(assert (= (/ a b) 0.8) "quotient") +(assert (= (mod a b) 4) "remainder(a, b)") +(assert (= (mod b a) 1) "remainder(b, a)") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_array_concatenation.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_array_concatenation.ark new file mode 100644 index 00000000..41ea61f6 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_array_concatenation.ark @@ -0,0 +1,4 @@ +(let a [1 2 3]) +(let b [4 5 6]) + +(assert (= (concat a b) [1 2 3 4 5 6]) "array concatenation") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_array_length.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_array_length.ark new file mode 100644 index 00000000..1cd019c3 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_array_length.ark @@ -0,0 +1,2 @@ +(assert (= (len []) 0) "len of empty array is 0") +(assert (= (len [1 2 3 4]) 4) "len of array is 4") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_balanced_brackets.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_balanced_brackets.ark new file mode 100644 index 00000000..18fb45f8 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_balanced_brackets.ark @@ -0,0 +1,28 @@ +(import std.List) + +(let gen_string (fun (length) { + (mut output "") + (while (< (len output) length) { + (set output (+ output (@ "[]" (random 0 1)))) }) + output })) + +(let balanced? (fun (str) { + (mut i 0) + (= + (len str) + (len + (list:takeWhile str (fun (char) { + (if (= "[" char) + (set i (+ i 1)) + (set i (- i 1))) + (>= i 0) }))))})) + +(list:forEach + ["" "[]" "[][]" "[[][]]"] + (fun (str) + (assert (balanced? str) "string is balanced"))) + +(list:forEach + ["][" "][][" "[]][[]"] + (fun (str) + (assert (not (balanced? str)) "string is not balanced"))) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark new file mode 100644 index 00000000..898af78c --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark @@ -0,0 +1,20 @@ +(import std.Range :range) +(import std.List) + +(let fact (fun (n acc) { + (if (> n 0) + (fact (- n 1) (* acc n)) + acc) })) + +(let r (range 1 18)) +(let p + (list:sum + (list:map + (list:reverse (r.asList)) + (fun (n) + (/ 1 (fact n 1)) )))) + +(import std.Math :abs) + +(let my_e (+ p 1)) +(assert (< (abs (- my_e math:e)) (toNumber "1e-15")) "computed e is near the math:e") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_call_an_object_method.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_call_an_object_method.ark new file mode 100644 index 00000000..7052c3c4 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_call_an_object_method.ark @@ -0,0 +1,17 @@ +(let create_user (fun (username password age) { + (let change_username (fun (new_name) + (set username new_name))) + (let check_password (fun (pass) + (= pass password))) + + (fun (&username &password &age &change_username &check_password) ()) })) + +(let me (create_user "Lex" "passw0rd" 25)) +(let john (create_user "John" "qwerty123" 28)) + +(assert (not (me.check_password "test!")) "password is not 'test!'") +(assert (!= me.username john.username) "usernames are distinct") + +(assert (= me.username "Lex") "my username is Lex") +(me.change_username "Rosetta") +(assert (= me.username "Rosetta") "my username is now Rosetta!") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_catamorphism.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_catamorphism.ark new file mode 100644 index 00000000..747ff2cf --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_catamorphism.ark @@ -0,0 +1,7 @@ +(import std.List :reduce :foldLeft) + +(let sum (fun (a b) (+ a b))) + +(assert (= 10 (reduce [1 2 3 4] sum)) "reduce array to 10") +(assert (= 10 (foldLeft [1 2 3 4] 0 sum)) "fold array to 10") +(assert (= 12 (foldLeft [1 2 3 4] 2 sum)) "fold array to 12 with initial value") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_closures_value_capture.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_closures_value_capture.ark new file mode 100644 index 00000000..b14646e9 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_closures_value_capture.ark @@ -0,0 +1,13 @@ +(mut funcs []) + +(mut i 0) +(while (< i 10) { + (let ii i) + (append! funcs (fun (&ii) (* ii ii))) + (set i (+ i 1)) }) + +(set i 0) +# display the result of all but the last +(while (< i 9) { + (assert (= ((@ funcs i)) (* i i)) "(@ funcs i) returns (* i i)") + (set i (+ 1 i)) }) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_compound_data_type.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_compound_data_type.ark new file mode 100644 index 00000000..c4064c42 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_compound_data_type.ark @@ -0,0 +1,11 @@ +(let point (fun (x y) + (fun (&x &y) ()))) + +(let point1 (point 3 5)) +(let point2 (point 2.7 -3.8)) + +(assert + (and + (!= point1.x point2.x) + (!= point1.y point2.y)) + "point1 and point2 are different") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_currying.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_currying.ark new file mode 100644 index 00000000..fad4c4e1 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_currying.ark @@ -0,0 +1,7 @@ +(let addN (fun (n) + (fun (x &n) + (+ x n)))) + +(let add2 (addN 2)) +(assert (= "Closure" (type add2)) "add2 is a closure") +(assert (= 7 (add2 5)) "add2 5 is 7") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_even_or_odd.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_even_or_odd.ark new file mode 100644 index 00000000..0f94c683 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_even_or_odd.ark @@ -0,0 +1,11 @@ +(let is_even (fun (i) + (= 0 (mod i 2)))) + +(let is_odd (fun (i) + (= 1 (mod i 2)))) + +(assert (is_even 2) "2 is even") +(assert (not (is_even 3)) "3 is not even") + +(assert (is_odd 3) "3 is odd") +(assert (not (is_odd 4)) "4 is not odd") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_extend_your_language.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_extend_your_language.ark new file mode 100644 index 00000000..fe781497 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_extend_your_language.ark @@ -0,0 +1,34 @@ +($ if2 (conds bothConditionsAreTrue firstConditionIsTrue secondConditionIsTrue noConditionIsTrue) { + (mut result1 (head conds)) + (mut result2 (@ conds 1)) + (if (and result1 result2) + bothConditionsAreTrue + (if result1 + firstConditionIsTrue + (if result2 + secondConditionIsTrue + noConditionIsTrue)))}) + +(if2 (true true) + (assert true "if2 true true") + (assert false "if2 true false") + (assert false "if2 false true") + (assert false "if2 false false")) + +(if2 (true false) + (assert false "if2 true true") + (assert true "if2 true false") + (assert false "if2 false true") + (assert false "if2 false false")) + +(if2 (false true) + (assert false "if2 true true") + (assert false "if2 true false") + (assert true "if2 false true") + (assert false "if2 false false")) + +(if2 (false false) + (assert false "if2 true true") + (assert false "if2 true false") + (assert false "if2 false true") + (assert true "if2 false false")) diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark new file mode 100644 index 00000000..a4002ab5 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark @@ -0,0 +1,12 @@ +(let fibo (fun (n) { + (mut i 0) + (mut a 0) + (mut b 1) + (while (< i n) { + (let c (+ a b)) + (set a b) + (set b c) + (set i (+ 1 i)) }) + a })) + +(assert (= 6765 (fibo 20)) "(fibo 20) == 6765") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark new file mode 100644 index 00000000..20a48935 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark @@ -0,0 +1,6 @@ +(let fibo (fun (n) + (if (< n 2) + n + (+ (fibo (- n 1)) (fibo (- n 2)))))) + +(assert (= 6765 (fibo 20)) "(fibo 20) == 6765") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_flatten_a_list.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_flatten_a_list.ark new file mode 100644 index 00000000..8d2eacae --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_flatten_a_list.ark @@ -0,0 +1,13 @@ +(import std.List :flatten :map) + +(let data [[1] 2 [[3 4] 5] [[[]]] [[[6]]] 7 8 []]) + +(let process (fun (lst) + (flatten + (map + lst + (fun (sub) + (if (= "List" (type sub)) + (process sub) + sub)))))) +(assert (= (process data) [1 2 3 4 5 6 7 8]) "list is flat") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_infinity.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_infinity.ark new file mode 100644 index 00000000..2fd9f611 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_infinity.ark @@ -0,0 +1,3 @@ +(assert (= false (math:Inf? 0)) "0 is not infinite") +(assert (math:Inf? math:Inf) "math:Inf is infinite") +(assert (not (math:Inf? math:NaN)) "math:NaN is not infinite") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_munchausen.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_munchausen.ark new file mode 100644 index 00000000..4cbf7c2b --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_munchausen.ark @@ -0,0 +1,28 @@ +(import std.List) + +(let self-exponent (fun (x n acc) + (if (> n 0) + (self-exponent x (- n 1) (* x acc)) + acc))) + +(let cache (list:map (list:iota 0 10) (fun (x) (if (= x 0) 0 (self-exponent x x 1))))) + +(let is_munchhausen (fun (number) { + (mut total 0) + (mut n number) + (mut continue true) + + (while (and (> n 0) continue) { + (let digit (mod n 10)) + (set total (+ total (@ cache digit))) + (if (> total number) + (set continue false) + (set n (math:floor (/ n 10)))) }) + + (= total number) })) + + +(assert (is_munchhausen 1) "1 is a Munchhausen number") +(assert (is_munchhausen 3435) "3435 is a Munchhausen number") + +(assert (not (is_munchhausen 677)) "677 is not a Munchhausen number") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_quicksort.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_quicksort.ark new file mode 100644 index 00000000..b856e3ea --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_quicksort.ark @@ -0,0 +1,25 @@ +(import std.List :filter) + +(let quicksort (fun (array) { + (if (empty? array) + # if the given list is empty, return it + [] + # otherwise, sort it + { + # the pivot will be the first element + (let pivot (head array)) + + # call quicksort on a smaller array containing all the elements less than the pivot + (mut less (quicksort (filter (tail array) (fun (e) (< e pivot))))) + + # and after that, call quicksort on a smaller array containing all the elements greater or equal to the pivot + (let more (quicksort (filter (tail array) (fun (e) (>= e pivot))))) + + (concat! less [pivot] more) + # return a concatenation of arrays + less }) })) + +# an unsorted list to sort +(let a [3 6 1 5 1 65 324 765 1 6 3 0 6 9 6 5 3 2 5 6 7 64 645 7 345 432 432 4 324 23]) + +(assert (= (quicksort a) [0 1 1 1 2 3 3 3 4 5 5 5 6 6 6 6 6 7 7 9 23 64 65 324 324 345 432 432 645 765]) "(quicksort a) is sorted") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_string_append.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_string_append.ark new file mode 100644 index 00000000..21ef6940 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_string_append.ark @@ -0,0 +1,2 @@ +(let s "12345678") +(assert (= (+ s "9!") "123456789!") "string concat works with +") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_string_matching.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_string_matching.ark new file mode 100644 index 00000000..1952605a --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_string_matching.ark @@ -0,0 +1,6 @@ +(assert (= 0 (string:find "abcd" "ab")) "abcd starts with ab") +(assert (= 6 (string:find "hello world" "world")) "world is located at 6") +(assert (= -1 (string:find "abcd" "zn")) "abcd does not contain zn") +(assert (= -1 (string:find "abab" "bb")) "abab does not contain bb") +(assert (= 0 (string:find "abab" "ab")) "abab contains ab") +(assert (= 2 (string:find "abab" "ab" 1)) "starting lookup at index 1, we found ab at position 2") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark new file mode 100644 index 00000000..c205a3fb --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark @@ -0,0 +1,9 @@ +(import std.List :sum :product :reduce) + +(let array [1 2 3 4]) + +(assert (= (sum array) 10) "sum of array is 10") +(assert (= (reduce array (fun (a b) (+ a b))) 10) "reduction of array with + is 10") + +(assert (= (product array) 24) "product of array is 24") +(assert (= (reduce array (fun (a b) (* a b))) 24) "reduction of array with * is 24") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark new file mode 100644 index 00000000..6e12836d --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark @@ -0,0 +1,27 @@ +(import std.List) +(import std.String) + +(let to-base (fun (n base) { + (let o (string:ord n)) + + (let v + (if (and (>= o 48) (<= o 57)) + (- o 48) + (if (and (>= o 97) (<= o 122)) + (- o 87) + (if (and (>= o 65) (<= o 90)) + (- o 55) + o)))) + (mod v base) })) + +(let sum-digits (fun (n base) { + (let number + (if (not (= "String" (type n))) + (toString n) + n)) + (list:reduce (list:map number (fun (e) (to-base e base))) (fun (a b) (+ a b))) })) + +(assert (= (sum-digits 1 10) 1) "sum of digits in 10 (base 10) is 1") +(assert (= (sum-digits 1234 10) 10) "sum of digits in 1234 (base 10) is 10") +(assert (= (sum-digits "fe" 16) 29) "sum of digits in fe (base 16) is 29") +(assert (= (sum-digits "f0e" 16) 29) "sum of digits in f0e (base 16) is 29") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark new file mode 100644 index 00000000..f99703db --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark @@ -0,0 +1,9 @@ +(import std.Range :range :map) +(import std.List :sum) + +(let r (range 1 1000)) +(let sol (sum (map r (fun (x) (/ 1 (* x x)))))) + +(import std.Math :abs) + +(assert (< (abs (- sol 1.64493406685)) 0.0011) "S1000(2) is near Pi^2/6") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_of_squares.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_of_squares.ark new file mode 100644 index 00000000..747205c4 --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_rosettasuite_sum_of_squares.ark @@ -0,0 +1,16 @@ +(import std.List) + +(assert (= + (list:sum + (list:map + [1 2 3 4 5] + (fun (x) (* x x)))) + 55) + "sum of list is 55") +(assert (= + (list:sum + (list:map + [] + (fun (x) (* x x)))) + 0) + "sum of empty list is 0") diff --git a/tests/fuzzing/corpus-cmin/tests_unittests_resources_typecheckersuite_num.ark b/tests/fuzzing/corpus-cmin/tests_unittests_resources_typecheckersuite_num.ark new file mode 100644 index 00000000..f3faf7ef --- /dev/null +++ b/tests/fuzzing/corpus-cmin/tests_unittests_resources_typecheckersuite_num.ark @@ -0,0 +1,3 @@ +# f,1 +# n:Number +# String diff --git a/tests/fuzzing/corpus/d.ark b/tests/fuzzing/corpus/d.ark new file mode 100644 index 00000000..a2572700 --- /dev/null +++ b/tests/fuzzing/corpus/d.ark @@ -0,0 +1,37 @@ +($ __count_placeholders (acc x ...xs) + ($if (empty? xs) + ($if (= "_" ($repr x)) + (+ 1 acc) + acc) + ($if (= "_" ($repr x)) + (__count_placeholders (+ 1 acc) ...xs) + (__count_placeholders acc ...xs)))) + +($ __suffix_dup (sym x) { + ($if (> x 1) (__suffix_dup sym (- x 1))) + ($symcat sym x) }) + +($ __replace_placeholders (replacements x ...xs) { + ($if (empty? xs) + ($if (= "_" ($repr x)) + (head replacements) + x) + ($if (= "_" ($repr x)) + { + (head replacements) + (__replace_placeholders (tail replacements) ...xs) } + { + x + (__replace_placeholders replacements ...xs) }))}) + +($ ! (call ...args) { + ($ length (__count_placeholders 0 ...args)) + ($ arg_bloc (__suffix_dup arg length)) + ($ all_args (__replace_placeholders [arg_bloc] ...args)) + (fun (arg_bloc) (call all_args)) }) + +(let foo (fun (a b c d) + (print (string:format "{} {} {} {}" a b c d)))) + +(let t (! foo _ 1 _ 2)) +(print (t 5 6)) diff --git a/tests/fuzzing/corpus/examples_error.ark b/tests/fuzzing/corpus/examples_error.ark index 1e34b97c..2c7cd5f9 100644 --- a/tests/fuzzing/corpus/examples_error.ark +++ b/tests/fuzzing/corpus/examples_error.ark @@ -2,7 +2,7 @@ # very often, and this is a convention, # if an imported file starts with a capital letter, # it shall be a file in the standard library. -(import std.Exceptions) +(import std.Exceptions :throw :return :try) # the function which should do a "safe number inversion" (let invert (fun (x) { diff --git a/tests/fuzzing/corpus/examples_fizz_buzz.ark b/tests/fuzzing/corpus/examples_fizz_buzz.ark new file mode 100644 index 00000000..ef589973 --- /dev/null +++ b/tests/fuzzing/corpus/examples_fizz_buzz.ark @@ -0,0 +1,13 @@ +(import std.Range) + +(let r (range:range 0 100)) +(range:forEach + r + (fun (e) + (if (= 0 (mod e 15)) + (print "FizzBuzz") + (if (= 0 (mod e 3)) + (print "Fizz") + (if (= 0 (mod e 5)) + (print "Buzz") + (print e)))))) diff --git a/tests/fuzzing/corpus/examples_games_game_of_life.ark b/tests/fuzzing/corpus/examples_games_game_of_life.ark index b70f12dd..dd320fb2 100644 --- a/tests/fuzzing/corpus/examples_games_game_of_life.ark +++ b/tests/fuzzing/corpus/examples_games_game_of_life.ark @@ -1,75 +1,60 @@ -(let board [0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0]) -(let width 4) -(let height 4) +(import std.List) +(import std.String) +(import std.Switch) + +(let board [0 0 0 1 1 1 0 0 0]) +(let width 3) +(let height 3) (let dead 0) (let alive 1) -(let get (fun (board_ i width height) - (if (and (>= i 0) (< i (* width height))) - (@ board_ i) +(let get (fun (board_ x y) + (if (and (>= x 0) (>= y 0) (< x width) (< y height)) + (@ board_ (+ x (* y width))) dead))) -(let neigh (fun (board_ index width height) { +(let neigh (fun (board_ index) { (let x (math:floor (mod index width))) (let y (math:floor (/ index width))) - (mut count 0) - - (if (>= (- y 1) 0) - (set count (+ count (get board_ (- index width) width height)))) - - (if (< (+ y 1) height) - (set count (+ count (get board_ (+ index width) width height)))) - - (if (>= (- x 1) 0) - (set count (+ count (get board_ (- index 1) width height)))) - - (if (< (+ x 1) width) - (set count (+ count (get board_ (+ index 1) width height)))) - - (if (and (>= (- x 1) 0) (>= (- y 1) 0)) - (set count (+ count (get board_ (- index 1 width) width height)))) - - (if (and (< (+ x 1) width) (< (+ y 1) height)) - (set count (+ count (get board_ (+ index width 1) width height)))) - - (if (and (>= (- x 1) 0) (< (+ y 1) height)) - (set count (+ count (get board_ (+ index width -1) width height)))) - - (if (and (< (+ x 1) width) (>= (- y 1) 0)) - (set count (+ count (get board_ (- index width -1) width height)))) - count })) + (+ (get board_ (- x 1) y) (get board_ (+ x 1) y) (get board_ x (- y 1)) (get board_ x (+ y 1)) (get board_ (- x 1) (- y 1)) (get board_ (+ x 1) (- y 1)) (get board_ (- x 1) (+ y 1)) (get board_ (+ x 1) (+ y 1))) })) + +(let indices (list:iota 0 (* height width))) +(let update (fun (board) { + (mut copy (list:fill (* height width) dead)) + + (list:forEach + indices + (fun (i) { + (let neighs (neigh board i)) + (switch neighs 2 (@= copy i (@ board i)) 3 (@= copy i alive) _ (@= copy i dead)) })) + + copy })) + +(let display (fun (board width height) (print + (string:join + (list:map + (list:chunkBy + (list:map + board + (fun (cell) + (if (= alive cell) + "x" + "•"))) + 3) + (fun (sublist) (string:join sublist ""))) + "\n")))) -(mut copy (list:fill (* height width) dead)) -(mut i 0) -(while (< i (* width height)) { - (mut neighs (neigh board i width height)) - - (if (= 3 neighs) - (set copy (list:setAt copy i alive))) - - (if (= 2 neighs) - (set copy (list:setAt copy i (@ board i)))) - - (if (or (< neighs 2) (> neighs 3)) - (set copy (list:setAt copy i dead))) - (set i (+ 1 i)) }) - -(let display (fun (board width height) { - (mut i 0) - - (while (< i (* width height)) { - (mut y (math:floor (/ i width))) - (mut x (math:floor (mod i width))) +(print "initial board:") +(display board width height) - (if (= 0 x) (puts "\n")) +(print "\ngen 2:") +(mut new (update board)) +(display new width height) - (if (= alive (@ board i)) - (puts "x") - (puts " ")) - (set i (+ 1 i)) }) - (puts "\n") })) +(print "\ngen 3:") +(set new (update new)) +(display new width height) -(print "initial board:") -(display board width height) -(print "new board:") -(display copy width height) +(print "\ngen 4:") +(set new (update new)) +(display new width height) diff --git a/tests/fuzzing/corpus/examples_macros.ark b/tests/fuzzing/corpus/examples_macros.ark index 8e169514..4d345be0 100644 --- a/tests/fuzzing/corpus/examples_macros.ark +++ b/tests/fuzzing/corpus/examples_macros.ark @@ -45,23 +45,23 @@ (last 1 5 6 7 8) { -(print "Testing macros in scopes and macro shadowing") + (print "Testing macros in scopes and macro shadowing") -($ test (+ 1 2 3)) -(print "(global) Reading macro 'test', expected 6, " test) + ($ test (+ 1 2 3)) + (print "(global) Reading macro 'test', expected 6, " test) -((fun () { - ($ test (- 1 2 3)) - (print "(sub scope) Reading macro 'test', expected -4, " test) })) + ((fun () { + ($ test (- 1 2 3)) + (print "(sub scope) Reading macro 'test', expected -4, " test) })) -(print "(global) Reading macro 'test', expected 6, " test) + (print "(global) Reading macro 'test', expected 6, " test) -{ - ($ test 555) - (print "(subscope) Reading macro 'test', expected 555, " test) - ($ undef test) - (print "(subscope, undef test) Reading macro 'test', expected 6, " test) - ($ undef a) } } + { + ($ test 555) + (print "(subscope) Reading macro 'test', expected 555, " test) + ($ undef test) + (print "(subscope, undef test) Reading macro 'test', expected 6, " test) + ($ undef a) } } (print "Demonstrating a threading macro") ($ -> (arg fn1 ...fn) { diff --git a/tests/fuzzing/corpus/examples_show_ascii_table.ark b/tests/fuzzing/corpus/examples_show_ascii_table.ark new file mode 100644 index 00000000..a730a55e --- /dev/null +++ b/tests/fuzzing/corpus/examples_show_ascii_table.ark @@ -0,0 +1,15 @@ +(mut i 0) +(while (< i 16) { + (mut j (+ 32 i)) + (while (< j 128) { + (let k + (if (= 32 j) + "Spc" + (if (= 127 j) + "Del" + (string:chr j)))) + (puts (string:format "{:3} : {:<3}" j k)) + (set j (+ 16 j)) }) + (print "") + + (set i (+ 1 i)) }) diff --git a/tests/fuzzing/corpus/tests_benchmarks_resources_runtime_binary_trees.ark b/tests/fuzzing/corpus/tests_benchmarks_resources_runtime_binary_trees.ark new file mode 100644 index 00000000..9b70b825 --- /dev/null +++ b/tests/fuzzing/corpus/tests_benchmarks_resources_runtime_binary_trees.ark @@ -0,0 +1,64 @@ +(import std.Math) +(import std.List) + +(let make_tree_list (fun (item depth) { + (if (> depth 0) + { + (let item2 (+ item item)) + (let new_depth (- depth 1)) + [item (make_tree_list (- item2 1) new_depth) (make_tree_list item2 new_depth)] } + [item nil nil]) })) + +(let make_tree_closure (fun (item depth) { + (let tree (fun (item left right) + (fun (&item &left &right) ()))) + + (if (> depth 0) + { + (let item2 (+ item item)) + (let new_depth (- depth 1)) + (tree item (make_tree_closure (- item2 1) new_depth) (make_tree_closure item2 new_depth)) } + (tree item nil nil)) })) + +(let check_tree_list (fun (node) { + (let item (head node)) + (let left (@ node 1)) + (let right (@ node 2)) + + (if (nil? left) + item + (- (+ item (check_tree_list left)) (check_tree_list right))) })) + +(let check_tree_closure (fun (node) { + (let item node.item) + (let left node.left) + (let right node.right) + + (if (nil? left) + item + (- (+ item (check_tree_closure left)) (check_tree_closure right))) })) + +(let make_tree make_tree_closure) +(let check_tree check_tree_closure) + +(let min_depth 4) +(let max_depth 12) +(let stretch_depth (+ max_depth 1)) + +(check_tree (make_tree 0 stretch_depth)) + +(let long_lived_tree (make_tree 0 max_depth)) +(mut count (math:ceil (math:pow 2 max_depth))) + +(list:forEach + [4 6 8 10 12] + (fun (depth) { + (mut check 0) + + (list:forEach + (list:iota 1 count) + (fun (i) { + (set check (+ check (check_tree (make_tree i depth)) (check_tree (make_tree (- 0 i) depth)))) })) + (set count (math:ceil (/ count 4))) })) + +(check_tree long_lived_tree) diff --git a/tests/fuzzing/corpus/tests_benchmarks_resources_runtime_for.ark b/tests/fuzzing/corpus/tests_benchmarks_resources_runtime_for.ark new file mode 100644 index 00000000..d85b58e5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_benchmarks_resources_runtime_for.ark @@ -0,0 +1,11 @@ +(mut collection []) +(mut i 0) +(while (< i 1000000) { + (append! collection i) + (set i (+ i 1)) }) + +(mut sum 0) +(set i 0) +(while (< i 1000000) { + (set sum (+ sum (@ collection i))) + (set i (+ i 1)) }) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_bytecodereadersuite_ackermann.ark b/tests/fuzzing/corpus/tests_unittests_resources_bytecodereadersuite_ackermann.ark new file mode 100644 index 00000000..87914521 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_bytecodereadersuite_ackermann.ark @@ -0,0 +1,21 @@ +# the Ackermann Peter function (see https://en.wikipedia.org/wiki/Ackermann_function) +# One of the simplest and earliest-discovered examples of a total computable function, +# that is not primitive. All primitive recursive functions are total and computable, +# but the Ackermann function illustrates that not all total computable functions +# are primitive recursive. +# Due to its definitions in terms of extremely deep recursion, it can be used as a +# benchmark of a compiler's ability to optimize recursion, which is the reason why +# we are using this function to benchmark the language. + +(let ackermann (fun (m n) { + (if (> m 0) + # then + (if (= 0 n) + # then + (ackermann (- m 1) 1) + # else + (ackermann (- m 1) (ackermann m (- n 1)))) + # else + (+ 1 n))})) + +(print "Ackermann-Péter function, m=3, n=6: " (ackermann 3 6)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_compilersuite_ir_plugin.ark b/tests/fuzzing/corpus/tests_unittests_resources_compilersuite_ir_plugin.ark new file mode 100644 index 00000000..637de913 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_compilersuite_ir_plugin.ark @@ -0,0 +1,3 @@ +(import hash) + +(assert (= "5d41402abc4b2a76b9719d911017c592" (hash:md5 "hello")) "md5 'hello'") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_compilersuite_optimized_ir_increments.ark b/tests/fuzzing/corpus/tests_unittests_resources_compilersuite_optimized_ir_increments.ark new file mode 100644 index 00000000..809c78b1 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_compilersuite_optimized_ir_increments.ark @@ -0,0 +1,7 @@ +(mut i 1) +(set i (+ i 4)) +(set i (+ 6 i)) +(set i (- i 8)) +# should not be inlined +(set i (+ i 4096)) +(set i (+ i 1.01)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_compilersuite_optimized_ir_lists.ark b/tests/fuzzing/corpus/tests_unittests_resources_compilersuite_optimized_ir_lists.ark new file mode 100644 index 00000000..9955ffef --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_compilersuite_optimized_ir_lists.ark @@ -0,0 +1,17 @@ +(let source [1 2 3 4]) + +(let foo (fun () { + (mut head_1 (head source)) + (mut tail_1 (tail source)) + + (mut copy_1 source) + (set copy_1 (head source)) + (set copy_1 (tail source)) })) +(foo) + +(mut head_2 (head source)) +(mut tail_2 (tail source)) + +(mut copy_2 source) +(set copy_2 (head source)) +(set copy_2 (tail source)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark new file mode 100644 index 00000000..81d00767 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_and_not_enough_args.ark @@ -0,0 +1 @@ +(and) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_append_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_append_not_enough_args.ark new file mode 100644 index 00000000..d653bd50 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_append_not_enough_args.ark @@ -0,0 +1 @@ +(append []) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark new file mode 100644 index 00000000..1e852881 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_assert_too_many_args.ark @@ -0,0 +1 @@ +(assert true 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark new file mode 100644 index 00000000..53d77631 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_at_at_not_enough_args.ark @@ -0,0 +1,2 @@ +(let lst [[0 1 2 3] [4 5 6 7] [8 9 0 1]]) +(print (@@ lst 1)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_at_too_many_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_at_too_many_args.ark new file mode 100644 index 00000000..82f9fee0 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_at_too_many_args.ark @@ -0,0 +1 @@ +(@ [] 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_concat_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_concat_not_enough_args.ark new file mode 100644 index 00000000..b61a2c09 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_concat_not_enough_args.ark @@ -0,0 +1 @@ +(concat []) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_empty_file.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_empty_file.ark new file mode 100644 index 00000000..e69de29b diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark new file mode 100644 index 00000000..87b40e79 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_eq_chain_too_long.ark @@ -0,0 +1 @@ +(= 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_ge_chain_too_long.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_ge_chain_too_long.ark new file mode 100644 index 00000000..ae0436df --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_ge_chain_too_long.ark @@ -0,0 +1 @@ +(>= 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_gt_chain_too_long.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_gt_chain_too_long.ark new file mode 100644 index 00000000..829c2ec9 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_gt_chain_too_long.ark @@ -0,0 +1 @@ +(> 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark new file mode 100644 index 00000000..f3144661 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_hasfield_too_many_args.ark @@ -0,0 +1,2 @@ +(let t nil) +(hasField t 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_import_not_in_package.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_import_not_in_package.ark new file mode 100644 index 00000000..9b671ce8 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_import_not_in_package.ark @@ -0,0 +1 @@ +(import package.b :test) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_append_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_append_not_enough_args.ark new file mode 100644 index 00000000..2c3f7059 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_append_not_enough_args.ark @@ -0,0 +1 @@ +(append! []) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_concat_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_concat_not_enough_args.ark new file mode 100644 index 00000000..7d2e7b28 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_concat_not_enough_args.ark @@ -0,0 +1 @@ +(concat! []) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_pop_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_pop_not_enough_args.ark new file mode 100644 index 00000000..3771fa96 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_inplace_pop_not_enough_args.ark @@ -0,0 +1 @@ +(pop! []) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_le_chain_too_long.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_le_chain_too_long.ark new file mode 100644 index 00000000..31d83ab5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_le_chain_too_long.ark @@ -0,0 +1 @@ +(<= 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark new file mode 100644 index 00000000..a64a5ceb --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_65536_args.ark @@ -0,0 +1 @@ +(list 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark new file mode 100644 index 00000000..bedca80e --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_bad_args.ark @@ -0,0 +1,2 @@ +(mut lst [[1 2 3]]) +(@@= lst 0 9) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_immutable.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_immutable.ark new file mode 100644 index 00000000..467c4128 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_2d_immutable.ark @@ -0,0 +1,2 @@ +(let lst [[1 2 3]]) +(@@= lst 0 1 9) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark new file mode 100644 index 00000000..18de3f45 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_bad_args.ark @@ -0,0 +1,2 @@ +(mut lst [1 2 3]) +(@= lst 0) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_immutable.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_immutable.ark new file mode 100644 index 00000000..c745b7ed --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_list_set_at_immutable.ark @@ -0,0 +1,2 @@ +(let lst [1 2 3]) +(@= lst 1 9) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_lt_chain_too_long.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_lt_chain_too_long.ark new file mode 100644 index 00000000..a3c89687 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_lt_chain_too_long.ark @@ -0,0 +1 @@ +(< 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_name_collision_with_builtin.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_name_collision_with_builtin.ark new file mode 100644 index 00000000..13bf5e5c --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_name_collision_with_builtin.ark @@ -0,0 +1,3 @@ +(import package.list :reverse) + +(print (reverse [1 2 3])) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark new file mode 100644 index 00000000..ff985782 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_neq_chain_too_long.ark @@ -0,0 +1 @@ +(!= 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark new file mode 100644 index 00000000..841017bd --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_or_not_enough_args.ark @@ -0,0 +1 @@ +(or 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_package_c.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_package_c.ark new file mode 100644 index 00000000..f939ab99 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_package_c.ark @@ -0,0 +1,2 @@ +(let abs (fun (_x) _x)) +(let odd (fun (_n) (abs _n))) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark new file mode 100644 index 00000000..3e67feee --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_package_list.ark @@ -0,0 +1 @@ +(let reverse (fun (l) l)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark new file mode 100644 index 00000000..34aac875 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_pop_not_enough_args.ark @@ -0,0 +1 @@ +(pop []) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_use_not_in_import_list.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_use_not_in_import_list.ark new file mode 100644 index 00000000..33f4c9b5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_compiletime_use_not_in_import_list.ark @@ -0,0 +1,3 @@ +(import package.c :odd) + +(print (abs 2)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark new file mode 100644 index 00000000..0b4d37fe --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_x.ark @@ -0,0 +1,2 @@ +(mut a [[1]]) +(@@= a 0 1 2) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark new file mode 100644 index 00000000..ac2ff128 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_eq_out_of_range_y.ark @@ -0,0 +1,2 @@ +(mut a [[1]]) +(@@= a 1 0 2) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark new file mode 100644 index 00000000..2b976f4c --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_inner_out_of_range.ark @@ -0,0 +1,2 @@ +(let lst [[0 1 2 3] [4 5 6 7] [8 9 0 1]]) +(print (@@ lst 0 6)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark new file mode 100644 index 00000000..417d5ed4 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_at_out_of_range.ark @@ -0,0 +1,2 @@ +(let lst [[0 1 2 3] [4 5 6 7] [8 9 0 1]]) +(print (@@ lst 3 1)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark new file mode 100644 index 00000000..f78ea0a9 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_at_eq_out_of_range.ark @@ -0,0 +1,2 @@ +(mut a [1]) +(@= a 1 2) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark new file mode 100644 index 00000000..fb5c5cf0 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_list_set_at.ark @@ -0,0 +1 @@ +(list:setAt [0 1 2 3] 4 9) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark new file mode 100644 index 00000000..e24171f2 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_mathln_out_of_range.ark @@ -0,0 +1 @@ +(math:ln -1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_not_callable_with_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_not_callable_with_args.ark new file mode 100644 index 00000000..1e066054 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_not_callable_with_args.ark @@ -0,0 +1,3 @@ +(let a 1) + +(nil 2 a) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark new file mode 100644 index 00000000..bad38eea --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_out_of_range_in_place.ark @@ -0,0 +1,2 @@ +(mut a [1 2 3]) +(pop! a 4) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark new file mode 100644 index 00000000..c62b8c62 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_runtime_string_set_at.ark @@ -0,0 +1 @@ +(string:setAt "0123" 4 "9") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark new file mode 100644 index 00000000..c1524bdc --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_add_num_str.ark @@ -0,0 +1 @@ +(+ 1 "2") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark new file mode 100644 index 00000000..768eb410 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_append_in_place_num_num.ark @@ -0,0 +1,2 @@ +(mut L 1) +(append! L 5) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark new file mode 100644 index 00000000..f3a4e671 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_append_num_num.ark @@ -0,0 +1 @@ +(append 1 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark new file mode 100644 index 00000000..4103d60d --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_assert_num_num.ark @@ -0,0 +1 @@ +(assert 1 2) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark new file mode 100644 index 00000000..3e441ff1 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_list_num_num_num.ark @@ -0,0 +1 @@ +(@@= [1 2 3 4] 0 1 4) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark new file mode 100644 index 00000000..73a9386b --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_eq_num_num_num_num.ark @@ -0,0 +1 @@ +(@@= 1 2 3 4) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark new file mode 100644 index 00000000..2746844e --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_at_num_num_num.ark @@ -0,0 +1 @@ +(@@ 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark new file mode 100644 index 00000000..64500a81 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_eq_num_num_num.ark @@ -0,0 +1 @@ +(@= 1 2 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark new file mode 100644 index 00000000..12ae1f64 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_list_str.ark @@ -0,0 +1 @@ +(@ [] "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark new file mode 100644 index 00000000..568e7e27 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_at_num_num.ark @@ -0,0 +1 @@ +(@ 1 2) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark new file mode 100644 index 00000000..a9e1f78a --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_await_num.ark @@ -0,0 +1 @@ +(await 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark new file mode 100644 index 00000000..5f37c239 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_list_num.ark @@ -0,0 +1,2 @@ +(mut L []) +(concat! L 5) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark new file mode 100644 index 00000000..ed73ee64 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_in_place_num_num.ark @@ -0,0 +1,2 @@ +(mut L 1) +(concat! L 5) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark new file mode 100644 index 00000000..21b6d946 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_list_num.ark @@ -0,0 +1 @@ +(concat [1] 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark new file mode 100644 index 00000000..0fb28f13 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_concat_num_num.ark @@ -0,0 +1 @@ +(concat 1 3) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark new file mode 100644 index 00000000..953769fb --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_decrement_str_num.ark @@ -0,0 +1,2 @@ +(mut n "1") +(set n (- n 1)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark new file mode 100644 index 00000000..16f945c9 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_div_str_num.ark @@ -0,0 +1 @@ +(/ "3" 5) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark new file mode 100644 index 00000000..41163cce --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_empty_num.ark @@ -0,0 +1 @@ +(empty? 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark new file mode 100644 index 00000000..6fc270e6 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_hasfield_num_str.ark @@ -0,0 +1 @@ +(hasField 1 "c") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark new file mode 100644 index 00000000..57e3f585 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_head_num.ark @@ -0,0 +1 @@ +(head 5) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark new file mode 100644 index 00000000..587def95 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_increment_str_num.ark @@ -0,0 +1,2 @@ +(mut n "1") +(set n (+ n 1)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark new file mode 100644 index 00000000..d9585f1a --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioappendtofile_num_num.ark @@ -0,0 +1 @@ +(io:appendToFile 1 2) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark new file mode 100644 index 00000000..e198ee0a --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iodir_num.ark @@ -0,0 +1 @@ +(io:dir? 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark new file mode 100644 index 00000000..9ec4c061 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iofileexists_num.ark @@ -0,0 +1 @@ +(io:fileExists? 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark new file mode 100644 index 00000000..343b81fc --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iolistfiles_num.ark @@ -0,0 +1 @@ +(io:listFiles 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark new file mode 100644 index 00000000..949bb8f6 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iomakedir_num.ark @@ -0,0 +1 @@ +(io:makeDir 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark new file mode 100644 index 00000000..2d5a58d5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_inexistent.ark @@ -0,0 +1 @@ +(io:readFile "non-existing-file.weird") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark new file mode 100644 index 00000000..5ab23316 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioreadfile_num.ark @@ -0,0 +1 @@ +(io:readFile 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark new file mode 100644 index 00000000..b2ae661f --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_num.ark @@ -0,0 +1 @@ +(io:removeFiles 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark new file mode 100644 index 00000000..e2f5a41b --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_ioremovefiles_str_num.ark @@ -0,0 +1,2 @@ +(io:writeFile "hello" "content") +(io:removeFiles "hello" 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark new file mode 100644 index 00000000..742e76ba --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_iowritefile_num_num.ark @@ -0,0 +1 @@ +(io:writeFile 1 2) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark new file mode 100644 index 00000000..7ee48e0b --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_len_num.ark @@ -0,0 +1 @@ +(len 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark new file mode 100644 index 00000000..18a2ca62 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listfill_str.ark @@ -0,0 +1 @@ +(list:fill "hello") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark new file mode 100644 index 00000000..3198318b --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listfind_str_num.ark @@ -0,0 +1 @@ +(list:find "hello" 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark new file mode 100644 index 00000000..9d7716b5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listreverse_str.ark @@ -0,0 +1 @@ +(list:reverse "hello") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark new file mode 100644 index 00000000..652d4c36 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listsetat_str.ark @@ -0,0 +1 @@ +(list:setAt "hello") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark new file mode 100644 index 00000000..10a213bb --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listslice_str_num_bool_nil.ark @@ -0,0 +1 @@ +(list:slice "hello" 1 true nil) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark new file mode 100644 index 00000000..bd47a615 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_listsort_str.ark @@ -0,0 +1 @@ +(list:sort "hello") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark new file mode 100644 index 00000000..1b7ed80e --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathacosh_str.ark @@ -0,0 +1 @@ +(math:acosh "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark new file mode 100644 index 00000000..8ff5cf52 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharccos_str.ark @@ -0,0 +1 @@ +(math:arccos "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark new file mode 100644 index 00000000..a0a4e685 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharcsin_str.ark @@ -0,0 +1 @@ +(math:arcsin "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark new file mode 100644 index 00000000..71a39a42 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_matharctan_str.ark @@ -0,0 +1 @@ +(math:arctan "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark new file mode 100644 index 00000000..9ba00abe --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathasinh_str.ark @@ -0,0 +1 @@ +(math:asinh "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark new file mode 100644 index 00000000..654aad8d --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathatanh_str.ark @@ -0,0 +1 @@ +(math:atanh "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark new file mode 100644 index 00000000..270c9ace --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathceil_str.ark @@ -0,0 +1 @@ +(math:ceil "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark new file mode 100644 index 00000000..7366358f --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathcos_str.ark @@ -0,0 +1 @@ +(math:cos "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark new file mode 100644 index 00000000..f01df2cb --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathcosh_str.ark @@ -0,0 +1 @@ +(math:cosh "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark new file mode 100644 index 00000000..f13daa4a --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathexp_str.ark @@ -0,0 +1 @@ +(math:exp "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark new file mode 100644 index 00000000..c9d55113 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathfloor_str.ark @@ -0,0 +1 @@ +(math:floor "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark new file mode 100644 index 00000000..3f908ba9 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathln_str.ark @@ -0,0 +1 @@ +(math:ln "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark new file mode 100644 index 00000000..2ea80361 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathround_str.ark @@ -0,0 +1 @@ +(math:round "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark new file mode 100644 index 00000000..351892d5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathsin_str.ark @@ -0,0 +1 @@ +(math:sin "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark new file mode 100644 index 00000000..f1f641c6 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathsinh_str.ark @@ -0,0 +1 @@ +(math:sinh "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark new file mode 100644 index 00000000..7fd5c480 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathtan_str.ark @@ -0,0 +1 @@ +(math:tan "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark new file mode 100644 index 00000000..241e3fc7 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mathtanh_str.ark @@ -0,0 +1 @@ +(math:tanh "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark new file mode 100644 index 00000000..cdcf3387 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mod_str_str.ark @@ -0,0 +1 @@ +(mod "1" "2") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark new file mode 100644 index 00000000..c7f9d323 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_mul_str_num.ark @@ -0,0 +1 @@ +(* "3" 4) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark new file mode 100644 index 00000000..4bcba1dc --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_pop_in_place_num_num.ark @@ -0,0 +1 @@ +(pop! 5 5) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark new file mode 100644 index 00000000..0eb34ba5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_pop_num_num.ark @@ -0,0 +1 @@ +(pop 5 5) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark new file mode 100644 index 00000000..4b2c8379 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_random_str_str.ark @@ -0,0 +1 @@ +(random "1" "2") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark new file mode 100644 index 00000000..33c0f698 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringchr_str.ark @@ -0,0 +1 @@ +(string:chr "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark new file mode 100644 index 00000000..c794d6da --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringfind_num.ark @@ -0,0 +1 @@ +(string:find 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark new file mode 100644 index 00000000..abcee716 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringformat_num.ark @@ -0,0 +1 @@ +(string:format 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark new file mode 100644 index 00000000..42348bff --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringord_num.ark @@ -0,0 +1 @@ +(string:ord 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark new file mode 100644 index 00000000..0b81fc50 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringremoveat_num.ark @@ -0,0 +1 @@ +(string:removeAt 1) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark new file mode 100644 index 00000000..fc8b8604 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_stringsetat_str.ark @@ -0,0 +1 @@ +(string:setAt "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark new file mode 100644 index 00000000..c059c474 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_sub_str_str.ark @@ -0,0 +1 @@ +(- "1" "2") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark new file mode 100644 index 00000000..e18e8d72 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_syssleep_str.ark @@ -0,0 +1 @@ +(sys:sleep "1") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark new file mode 100644 index 00000000..b3742371 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_tail_num.ark @@ -0,0 +1 @@ +(tail 5) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark new file mode 100644 index 00000000..0d15c268 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_diagnosticssuite_typechecking_tonumber_num.ark @@ -0,0 +1 @@ +(toNumber 5) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_builtins-tests.ark b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_builtins-tests.ark index e1554c8c..75eb7509 100644 --- a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_builtins-tests.ark +++ b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_builtins-tests.ark @@ -1,63 +1,67 @@ (import std.Testing) +(import std.List) -(let base-list [1 2 3]) -(let base-list-enhanced (concat base-list [4 5])) +(let foo (fun () ())) +(let closure (fun (&foo) ())) (test:suite builtin { - (test:eq (append (append base-list 4) 5) base-list-enhanced) - (test:eq (concat base-list [4 5]) base-list-enhanced) - (test:eq (type []) "List") - (test:eq (list:reverse base-list) [3 2 1]) - (test:eq (list:reverse []) []) - (test:eq (list:find [] nil) -1) - (test:eq (list:find [12] 12) 0) - (test:eq (list:find [1 2 3] 2) 1) - (test:eq (list:find [12] nil) -1) - (test:eq (list:slice base-list-enhanced 0 3 1) base-list) - (test:eq (list:slice base-list-enhanced 0 1 1) [1]) - (test:eq (list:slice base-list-enhanced 0 3 2) [1 3]) - (test:eq (list:sort [5 4 3 2 1]) [1 2 3 4 5]) - (test:eq (list:sort [5]) [5]) - (test:eq (list:sort []) []) - - (let short_list (list:fill 12 nil)) - (test:eq (len short_list) 12) + (test:case "types" { + (test:eq (type []) "List") + (test:eq (type true) "Bool") + (test:eq (type false) "Bool") + (test:eq (type nil) "Nil") + (test:eq (type 1) "Number") + (test:eq (type "hello") "String") + (test:eq (type print) "CProc") + (test:eq (type foo) "Function") + (test:eq (type closure) "Closure") }) + + (test:case "closures" { + (mut keep true) + (mut foo nil) + (while keep { + (set foo (fun (&keep) keep)) + (set keep false) }) + (test:expect foo.keep "capture inside a deeper scope works") }) + + (test:case "files" { + (test:expect (not (io:fileExists? "test.txt"))) + (io:writeFile "test.txt" "hello, world!") + (test:expect (io:fileExists? "test.txt")) + (test:eq (io:readFile "test.txt") "hello, world!") + (io:appendToFile "test.txt" "bis") + (test:eq (io:readFile "test.txt") "hello, world!bis") + (test:expect (> (len (io:listFiles "./")) 0)) + (test:expect (not (io:dir? "test.txt"))) + (test:expect (not (io:fileExists? "temp"))) + (io:makeDir "temp") + (test:expect (io:fileExists? "temp")) + (test:expect (io:dir? "temp")) }) + + (test:case "time" { + (let old (time)) + (sys:sleep 1) + (test:expect (< old (time))) }) + + (mut rands []) (mut i 0) - (while (< i 12) { - (test:eq (@ short_list i) nil) - (set i (+ 1 i))}) - (del i) - - (test:eq (@ (list:setAt short_list 5 "a") 5) "a") - (del short_list) - - (test:expect (not (io:fileExists? "test.txt"))) - (io:writeFile "test.txt" "hello, world!") - (test:expect (io:fileExists? "test.txt")) - (test:eq (io:readFile "test.txt") "hello, world!") - (io:appendToFile "test.txt" "bis") - (test:eq (io:readFile "test.txt") "hello, world!bis") - (test:expect (> (len (io:listFiles "./")) 0)) - (test:expect (not (io:dir? "test.txt"))) - (test:expect (not (io:fileExists? "temp"))) - (io:makeDir "temp") - (test:expect (io:fileExists? "temp")) - (test:expect (io:dir? "temp")) - (let old (time)) - (sys:sleep 1) - (test:expect (< old (time))) - - (test:eq (string:find "abc" "d") -1) - (test:eq (string:find "abc" "a") 0) - (test:eq (string:find "abc" "bc") 1) - (test:eq (string:find "abcdefghijkl" "defijkl") -1) - (test:eq (string:find "abcdefghijkl" "defghijkl") 3) - (test:eq (string:removeAt "abcdefghijkl" 3) "abcefghijkl") - (test:eq (string:removeAt "abcdefghijkl" 0) "bcdefghijkl") - (test:eq (string:removeAt "abcdefghijkl" 11) "abcdefghijk") - - # no need to test the math functions since they're 1:1 binding of C++ functions and were carefully checked + (while (< i 100) { + (append! rands (random 0 10)) + (set i (+ 1 i)) }) + (test:expect + (not (list:any rands (fun (e) (or (< e 0) (> e 10))))) + "should not find any number outside the given range") + + (let r (random)) + (test:expect (and (<= r 2147483647) (>= r -2147483648))) + + # no need to test all the math functions since they're 1:1 binding of C++ functions and were carefully checked # before writing this comment, to ensure we aren't binding math:sin to the C++ tan function + (test:case "math" { + (test:expect (not (math:NaN? 1))) + (test:expect (math:NaN? math:NaN)) + (test:expect (not (math:Inf? 100000))) + (test:expect (math:Inf? math:Inf)) }) # clean up (io:removeFiles "test.txt" "temp/") }) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_list-tests.ark b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_list-tests.ark index e22ff7b6..2ca237c8 100644 --- a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_list-tests.ark +++ b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_list-tests.ark @@ -8,6 +8,8 @@ (fun (&c &d) ()))) (let foo (make "hello" 1)) + (test:expect (empty? [])) + # if this is failing, this is most likely to be a compiler problem (test:eq ["hello" 1] [foo.c foo.d]) (test:eq 2 (len [foo.c foo.d])) @@ -37,7 +39,11 @@ (test:case "find element in list" { (test:eq (list:find a 0) -1) - (test:eq (list:find a 2) 1) }) + (test:eq (list:find a 2) 1) + (test:eq (list:find [] nil) -1) + (test:eq (list:find [12] 12) 0) + (test:eq (list:find [1 2 3] 2) 1) + (test:eq (list:find [12] nil) -1) }) (test:case "slice and return a new list" { (test:eq (list:slice a 0 0 1) []) @@ -47,14 +53,51 @@ (test:case "sort and return a new list" { (test:eq (list:sort [3 1 2]) a) - (test:eq a [1 2 3]) }) + (test:eq a [1 2 3]) + (test:eq (list:sort [5 4 3 2 1]) [1 2 3 4 5]) + (test:eq (list:sort [5]) [5]) + (test:eq (list:sort []) []) }) (test:eq (list:fill 5 nil) [nil nil nil nil nil]) + (let short_list (list:fill 12 nil)) + (test:eq (len short_list) 12) + (mut i 0) + (while (< i 12) { + (test:eq (@ short_list i) nil) + (set i (+ 1 i)) }) + (test:eq (@ (list:setAt short_list 5 "a") 5) "a") (test:case "modify list at index and return a new list" { - (let c (list:setAt a 1 "b")) - (test:eq c [1 "b" 3]) - (test:eq a [1 2 3]) }) + (let tmp (list:setAt a 1 "b")) + (test:eq tmp [1 "b" 3]) + (test:eq a [1 2 3]) + (test:eq (list:setAt [0 1 2 3] 0 9) [9 1 2 3]) + (test:eq (list:setAt [0 1 2 3] 3 9) [0 1 2 9]) + (test:eq (list:setAt [0 1 2 9] -1 9) [0 1 2 9]) }) + + (test:case "get element in 2D list" { + (let nested_list [[0 1 2] [3 4 5] [6 7 8]]) + (test:eq 0 (@@ nested_list 0 0)) + (test:eq 2 (@@ nested_list 0 -1)) + (test:eq 1 (@@ nested_list 0 -2)) + (test:eq 8 (@@ nested_list -1 -1)) + (test:eq 4 (@@ nested_list 1 1)) + (test:eq 4 (@@ nested_list -2 1)) }) + + (test:case "in place mutation with @=" { + (mut numbers [0 1 2 3 4]) + (@= numbers 2 5) + (@= numbers -1 9) + (@= numbers -2 8) + (test:eq numbers [0 1 5 8 9] "@=") }) + + (test:case "in place 2D mutation with @@=" { + (mut numbers [[0 1 2 3] [4 5 6 7] [8 9 0 1]]) + (@@= numbers 0 0 9) + (@@= numbers 1 1 "a") + (@@= numbers -1 -1 -1) + (@@= numbers -2 -2 -2) + (test:eq numbers [[9 1 2 3] [4 "a" -2 7] [8 9 0 -1]]) }) (test:case "in place list mutation" { (mut c a) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_macro-tests.ark b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_macro-tests.ark index faef3ddf..f46f1f1e 100644 --- a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_macro-tests.ark +++ b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_macro-tests.ark @@ -31,17 +31,28 @@ (test:eq (c 4 10) 40) ($ d (a b) (/ a b)) - (test:eq (d 10 2) 5) }) + (test:eq (d 10 2) 5) + + ($ e (+ 1 2 3)) + ($ f (* 2 2 3)) + ($ g (- 1 2 3)) + ($ h (/ 12 2 3)) + (test:eq e 6) + (test:eq f 12) + (test:eq g -4) + (test:eq h (/ 12 6)) }) (test:case "node manipulation" { ($ node_tail () (tail (begin 1 2 3))) ($ length () (len (fun () 5))) ($ not_empty_node () (empty? (fun () ()))) ($ empty_node () (empty? ())) + ($ empty_node_bis (empty? ())) (test:eq (length) 3) (test:eq (not_empty_node) false) (test:eq (empty_node) true) + (test:eq empty_node_bis true) # because it removes the "begin" (test:eq (node_tail) [1 2 3]) }) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_string-tests.ark b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_string-tests.ark index 4322afa2..2838b07f 100644 --- a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_string-tests.ark +++ b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_string-tests.ark @@ -1,18 +1,61 @@ (import std.Testing) (test:suite string { + (test:expect (empty? "")) + (test:case "remove char in string at index" { (test:eq "hllo world" (string:removeAt "hello world" 1)) (test:eq "ello world" (string:removeAt "hello world" 0)) - (test:eq "hello worl" (string:removeAt "hello world" 10)) }) + (test:eq "hello worl" (string:removeAt "hello world" 10)) + (test:eq (string:removeAt "abcdefghijkl" 3) "abcefghijkl") + (test:eq (string:removeAt "abcdefghijkl" 0) "bcdefghijkl") + (test:eq (string:removeAt "abcdefghijkl" 11) "abcdefghijk") }) (test:case "find substring" { (test:eq -1 (string:find "hello" "help")) (test:eq 0 (string:find "hello" "hel")) (test:eq 2 (string:find "hello" "llo")) - (test:eq -1 (string:find "" "1")) }) + (test:eq -1 (string:find "" "1")) + (test:eq (string:find "abc" "d") -1) + (test:eq (string:find "abc" "a") 0) + (test:eq (string:find "abc" "bc") 1) + (test:eq (string:find "abcdefghijkl" "defijkl") -1) + (test:eq (string:find "abcdefghijkl" "defghijkl") 3) + (test:eq (string:find "abcdabcdabcd" "abcd" 2) 4) }) + + (test:case "get char in string" { + (test:eq "a" (@ "abc" 0)) + (test:eq "c" (@ "abc" -1)) + (test:eq "b" (@ "abc" -2)) + (test:eq "b" (@ "abc" 1)) }) + + (test:case "get char in list of strings" { + (let nested_strings ["abc" "def" "ijk"]) + (test:eq "a" (@@ nested_strings 0 0)) + (test:eq "b" (@@ nested_strings -3 1)) + (test:eq "c" (@@ nested_strings 0 -1)) + (test:eq "k" (@@ nested_strings -1 -1)) + (test:eq "i" (@@ nested_strings 2 0)) + (test:eq "e" (@@ nested_strings 1 1)) + (test:eq "e" (@@ nested_strings 1 -2)) }) + + (test:case "update string" { + (test:eq (string:setAt "hello" 0 "a") "aello") + (test:eq (string:setAt "hello" -1 "a") "hella") + (test:eq (string:setAt "hello" 4 "a") "hella") }) + + (test:case "in place mutation of strings with @=" { + (mut data "hello world") + (@= data 0 "a") + (@= data -2 "L") + (test:eq data "aello worLd") }) + + (test:case "in place mutation of strings with @@=" { + (mut strings ["hello" "world"]) + (@@= strings 0 0 "a") + (@@= strings -1 -1 "b") + (test:eq strings ["aello" "worlb"]) }) (test:case "format strings" { (test:eq "nilfalsetrue" (string:format "{}{}{}" nil false true)) - (test:eq "CProcedure" (string:format "{}" print)) - })}) + (test:eq "CProcedure" (string:format "{}" print)) })}) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_unittests.ark b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_unittests.ark index d8bb99d3..091de2c3 100644 --- a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_unittests.ark +++ b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_unittests.ark @@ -5,3 +5,18 @@ (import list-tests) (import string-tests) (import async-tests) + +(import std.List) + +(let outputs (list:unzip [ + vm-tests:vm-output + builtins-tests:builtin-output + utf8-tests:utf8-output + macro-tests:macro-output + list-tests:list-output + string-tests:string-output + async-tests:async-output ])) +(let success_count (list:sum (@ outputs 0))) +(let failure_count (list:sum (@ outputs 1))) + +(print (string:format "{:=<20}\nSuccesses: {} - Failures: {}\n" "=" success_count failure_count)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_vm-tests.ark b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_vm-tests.ark index 12af3af6..83a0feb9 100644 --- a/tests/fuzzing/corpus/tests_unittests_resources_langsuite_vm-tests.ark +++ b/tests/fuzzing/corpus/tests_unittests_resources_langsuite_vm-tests.ark @@ -144,4 +144,23 @@ (test:eq (parent.child.get) [1 0]) (parent.child.call) - (test:eq (parent.child.get) [5 12]) })}) + (test:eq (parent.child.get) [5 12]) }) + + (test:case "increment and decrement vars" { + (mut var 0) + (set var (+ var 5)) + (set var (+ 10 var)) + (set var (- var 1)) + (test:eq var 14) }) + + (test:case "set/store head and tail" { + (mut data [1 2 3 4]) + (let data2 (tail data)) + (set data (tail data)) + (test:eq data2 data) + (test:eq data [2 3 4]) + + (let data3 (head data)) + (set data (head data)) + (test:eq data3 data) + (test:eq data 2) })}) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_basic_a.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_basic_a.ark index 39c972af..648e85d1 100644 --- a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_basic_a.ark +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_basic_a.ark @@ -9,6 +9,6 @@ (let b_foo_ok (= "aa aaa" (b:foo "aa" "aaa"))) -(let c_ok (and (= "c:egg" c:egg) (= "c:bacon" c:bacon))) +(let c_ok (and (= "c:egg" egg) (= "c:bacon" bacon))) (let d_ok (= "d:lamp" lamp)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_a.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_a.ark new file mode 100644 index 00000000..4e4f38b5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_a.ark @@ -0,0 +1,5 @@ +(import b :test) +(import c :abs) + +(let c_ok (= (abs -1) -1)) +(let b_ok (= (test 5) 5)) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_b.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_b.ark new file mode 100644 index 00000000..ed3bff05 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_b.ark @@ -0,0 +1,3 @@ +(import c :odd) + +(let test (fun (n) (odd n))) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_c.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_c.ark new file mode 100644 index 00000000..f939ab99 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_deep_import_symbols_c.ark @@ -0,0 +1,2 @@ +(let abs (fun (_x) _x)) +(let odd (fun (_n) (abs _n))) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_a.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_a.ark new file mode 100644 index 00000000..eb62f933 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_a.ark @@ -0,0 +1,5 @@ +(import b :range) +(import c :map) + +(let a_range (= (range) "b:range")) +(let a_map (= (map) "c:map")) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_b.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_b.ark new file mode 100644 index 00000000..e36c97ac --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_b.ark @@ -0,0 +1,3 @@ +(let range (fun () "b:range")) +(let forEach (fun () "b:forEach")) +(let map (fun () "b:map")) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_c.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_c.ark new file mode 100644 index 00000000..ebf8b5d6 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_c.ark @@ -0,0 +1,2 @@ +(let map (fun () "c:map")) +(let forEach (fun () "c:forEach")) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_a.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_a.ark new file mode 100644 index 00000000..29e41709 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_a.ark @@ -0,0 +1,5 @@ +(import c :map) +(import b :range) + +(let a_range (= (range) "b:range")) +(let a_map (= (map) "c:map")) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark new file mode 100644 index 00000000..e36c97ac --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_b.ark @@ -0,0 +1,3 @@ +(let range (fun () "b:range")) +(let forEach (fun () "b:forEach")) +(let map (fun () "b:map")) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_c.ark b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_c.ark new file mode 100644 index 00000000..ebf8b5d6 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_nameresolutionsuite_shadowing_symbol_swap_import_order_c.ark @@ -0,0 +1,2 @@ +(let map (fun () "c:map")) +(let forEach (fun () "c:forEach")) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_optimizersuite_dead_code_elimination.ark b/tests/fuzzing/corpus/tests_unittests_resources_optimizersuite_dead_code_elimination.ark new file mode 100644 index 00000000..c4bf0c50 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_optimizersuite_dead_code_elimination.ark @@ -0,0 +1,4 @@ +(if false (print "false")) +(if true (print "true")) +(if false () (print "false2")) +(while false (print "false3")) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_optimizersuite_unused_symbols.ark b/tests/fuzzing/corpus/tests_unittests_resources_optimizersuite_unused_symbols.ark new file mode 100644 index 00000000..eceb05e8 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_optimizersuite_unused_symbols.ark @@ -0,0 +1,4 @@ +(let a 1) +(let b 2) +(let c 3) +(print b) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_100_doors.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_100_doors.ark new file mode 100644 index 00000000..42c2eb8b --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_100_doors.ark @@ -0,0 +1,21 @@ +(import std.Range :range :forEach) +(import std.List) + +(mut doors (list:fill 100 false)) +(let r (range 0 100)) + +(forEach r + (fun (i) { + (mut j i) + (while (< j 100) { + (@= doors j (not (@ doors j))) + (set j (+ j i 1)) })})) + +(assert (= [0 3 8 15 24 35 48 63 80 99] + (list:map + (list:filter + (list:zipWithIndex doors) + (fun (e) + (@ e 1))) + (fun (e) (@ e 0)))) + "wrong solution") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_a_plus_b.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_a_plus_b.ark new file mode 100644 index 00000000..c7f473a4 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_a_plus_b.ark @@ -0,0 +1,12 @@ +(import std.String :split) +(import std.List :map :reduce) + +(let solve (fun (in) { + (let numbers (map (split in " ") (fun (t) (toNumber t)))) + (reduce numbers (fun (a b) + (if (nil? b) + a + (+ a b)))) })) + +(assert (= (solve "5 10") 15) "5 10 == 15") +(assert (= (solve "5 10") 15) "5 10 == 15") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_abbreviations_easy.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_abbreviations_easy.ark new file mode 100644 index 00000000..da2282ce --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_abbreviations_easy.ark @@ -0,0 +1,54 @@ +(let commands "Add ALTer BAckup Bottom CAppend Change SCHANGE CInsert CLAst COMPress COpy COUnt COVerlay CURsor DELete CDelete Down DUPlicate Xedit EXPand EXTract Find NFind NFINDUp NFUp CFind FINdup FUp FOrward GET Help HEXType Input POWerinput Join SPlit SPLTJOIN LOAD Locate CLocate LOWercase UPPercase LPrefix MACRO MErge MODify MOve MSG Next Overlay PARSE PREServe PURge PUT PUTD Query QUIT READ RECover REFRESH RENum REPeat Replace CReplace RESet RESTore RGTLEFT RIght LEft SAVE SET SHift SI SORT SOS STAck STATus TOP TRAnsfer Type Up") + +(let user_words "riG rePEAT copies put mo rest types fup. 6 poweRin") + +(import std.List) +(import std.String) + +(let abbrev_length (fun (word) + (len + (list:takeWhile + word + (fun (char) { + (let ord (string:ord char)) + (and (<= 65 ord) (<= ord 90)) }))))) + +(let extract_cmds (fun (text) + (list:filter (string:split text " ") (fun (elem) (not (empty? elem)))))) + +(let cmds_with_abbrev_len + (list:map + (extract_cmds commands) + (fun (cmd) + [cmd (abbrev_length cmd)] ))) + +(let find_abbrev (fun (word) { + (let wlen (len word)) + (let lower (string:toLower word)) + + (list:map + (list:filter + cmds_with_abbrev_len + (fun (cmd_with_len) { + (let cmd (string:toLower (head cmd_with_len))) + (let min_len (@ cmd_with_len 1)) + + (and + (<= min_len wlen) + (<= wlen (len cmd)) + (= lower (string:slice cmd 0 wlen))) })) + (fun (cmd_with_len) (head cmd_with_len))) })) + +(let user_inputs (extract_cmds user_words)) + +(assert + (= + ["RIGHT" "REPEAT" "*error*" "PUT" "MOVE" "RESTORE" "*error*" "*error*" "*error*" "POWERINPUT"] + (list:map + user_inputs + (fun (str) { + (let abbrevs (find_abbrev str)) + (if (empty? abbrevs) + "*error*" + (string:toUpper (head abbrevs))) }))) + "commands were correctly deciphered") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_abc_correlation.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_abc_correlation.ark new file mode 100644 index 00000000..4ca0da85 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_abc_correlation.ark @@ -0,0 +1,35 @@ +(import std.String :split) +(import std.List :filter :map) + +# define a custom helper to count occurrences in a collection +(let countIf (fun (_L _f) { + # _inner will call itself on a given collection _L, which will evolve like this: + # abc -> bc -> c -> nil + (let _inner (fun (lst cond acc) + (if (not (empty? lst)) + (_inner + (tail lst) + cond + # the counting happens here, conditions are expressions too + # thus we can put one inside a function call argument list + (if (cond (head lst)) + (+ 1 acc) + acc)) + acc))) + (_inner _L _f 0) })) + +(let mapFilter (fun (lst f) + (filter (map lst f) (fun (e) (not (nil? e)))) )) + +(let words (split (io:readFile "tests/unittests/resources/RosettaSuite/res/words.txt") "\n")) + +(let output (mapFilter words (fun (word) { + (let a (countIf word (fun (c) (= c "a")))) + (let b (countIf word (fun (c) (= c "b")))) + (let c (countIf word (fun (c) (= c "c")))) + + (if (and (= a b) (= a c)) + word) }))) + +(let expected ["abc" "internet" "black" "venus" "jupiter" "neptune" "pluto"]) +(assert (= output expected) "output == expected") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_ackermann.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_ackermann.ark new file mode 100644 index 00000000..c662b841 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_ackermann.ark @@ -0,0 +1,8 @@ +(let ackermann (fun (m n) { + (if (> m 0) + (if (= 0 n) + (ackermann (- m 1) 1) + (ackermann (- m 1) (ackermann m (- n 1)))) + (+ 1 n)) })) + +(assert (= 509 (ackermann 3 6)) "(ackermann 3 6) == 509") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark new file mode 100644 index 00000000..a264075a --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_apply_a_callback_to_an_array.ark @@ -0,0 +1,8 @@ +(import std.List :map) + +(let array [1 2 3 4 5 6 7 8 9 10]) +(let mapped (map array (fun (i) (* i i)))) + +(assert + (= mapped [1 4 9 16 25 36 49 64 81 100]) + "mapped is a list of squares") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_arithmetic_complex.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_arithmetic_complex.ark new file mode 100644 index 00000000..96b3a395 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_arithmetic_complex.ark @@ -0,0 +1,30 @@ +(import std.Math) + +(let a (math:complex 1 1)) +(let b (math:complex 3.75 1.25)) + +(assert + (= + (math:complex-add a b) + (math:complex 4.75 2.25)) + "complex add") +(assert + (= + (math:complex-mul a b) + (math:complex 2.5 5)) + "complex mul") +(assert + (= + (math:complex-mul (math:complex -1 0) a) + (math:complex -1 -1)) + "complex negation") +(assert + (= + (math:complex-div (math:complex 1 0) a) + (math:complex 0.5 -0.5)) + "complex inversion") +(assert + (= + (math:complex-conjugate a) + (math:complex 1 -1)) + "complex conjugate") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_arithmetic_integer.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_arithmetic_integer.ark new file mode 100644 index 00000000..1fa65463 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_arithmetic_integer.ark @@ -0,0 +1,10 @@ +(let a 4) +(let b 5) + +(assert (= (+ a b) 9) "sum") +(assert (= (- a b) -1) "difference") +(assert (= (- b a) 1) "difference") +(assert (= (* a b) 20) "product") +(assert (= (/ a b) 0.8) "quotient") +(assert (= (mod a b) 4) "remainder(a, b)") +(assert (= (mod b a) 1) "remainder(b, a)") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_array_concatenation.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_array_concatenation.ark new file mode 100644 index 00000000..41ea61f6 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_array_concatenation.ark @@ -0,0 +1,4 @@ +(let a [1 2 3]) +(let b [4 5 6]) + +(assert (= (concat a b) [1 2 3 4 5 6]) "array concatenation") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_array_length.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_array_length.ark new file mode 100644 index 00000000..1cd019c3 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_array_length.ark @@ -0,0 +1,2 @@ +(assert (= (len []) 0) "len of empty array is 0") +(assert (= (len [1 2 3 4]) 4) "len of array is 4") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_balanced_brackets.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_balanced_brackets.ark new file mode 100644 index 00000000..18fb45f8 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_balanced_brackets.ark @@ -0,0 +1,28 @@ +(import std.List) + +(let gen_string (fun (length) { + (mut output "") + (while (< (len output) length) { + (set output (+ output (@ "[]" (random 0 1)))) }) + output })) + +(let balanced? (fun (str) { + (mut i 0) + (= + (len str) + (len + (list:takeWhile str (fun (char) { + (if (= "[" char) + (set i (+ i 1)) + (set i (- i 1))) + (>= i 0) }))))})) + +(list:forEach + ["" "[]" "[][]" "[[][]]"] + (fun (str) + (assert (balanced? str) "string is balanced"))) + +(list:forEach + ["][" "][][" "[]][[]"] + (fun (str) + (assert (not (balanced? str)) "string is not balanced"))) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark new file mode 100644 index 00000000..898af78c --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_calculating_value_of_e.ark @@ -0,0 +1,20 @@ +(import std.Range :range) +(import std.List) + +(let fact (fun (n acc) { + (if (> n 0) + (fact (- n 1) (* acc n)) + acc) })) + +(let r (range 1 18)) +(let p + (list:sum + (list:map + (list:reverse (r.asList)) + (fun (n) + (/ 1 (fact n 1)) )))) + +(import std.Math :abs) + +(let my_e (+ p 1)) +(assert (< (abs (- my_e math:e)) (toNumber "1e-15")) "computed e is near the math:e") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_call_an_object_method.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_call_an_object_method.ark new file mode 100644 index 00000000..7052c3c4 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_call_an_object_method.ark @@ -0,0 +1,17 @@ +(let create_user (fun (username password age) { + (let change_username (fun (new_name) + (set username new_name))) + (let check_password (fun (pass) + (= pass password))) + + (fun (&username &password &age &change_username &check_password) ()) })) + +(let me (create_user "Lex" "passw0rd" 25)) +(let john (create_user "John" "qwerty123" 28)) + +(assert (not (me.check_password "test!")) "password is not 'test!'") +(assert (!= me.username john.username) "usernames are distinct") + +(assert (= me.username "Lex") "my username is Lex") +(me.change_username "Rosetta") +(assert (= me.username "Rosetta") "my username is now Rosetta!") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_catamorphism.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_catamorphism.ark new file mode 100644 index 00000000..747ff2cf --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_catamorphism.ark @@ -0,0 +1,7 @@ +(import std.List :reduce :foldLeft) + +(let sum (fun (a b) (+ a b))) + +(assert (= 10 (reduce [1 2 3 4] sum)) "reduce array to 10") +(assert (= 10 (foldLeft [1 2 3 4] 0 sum)) "fold array to 10") +(assert (= 12 (foldLeft [1 2 3 4] 2 sum)) "fold array to 12 with initial value") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_closures_value_capture.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_closures_value_capture.ark new file mode 100644 index 00000000..b14646e9 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_closures_value_capture.ark @@ -0,0 +1,13 @@ +(mut funcs []) + +(mut i 0) +(while (< i 10) { + (let ii i) + (append! funcs (fun (&ii) (* ii ii))) + (set i (+ i 1)) }) + +(set i 0) +# display the result of all but the last +(while (< i 9) { + (assert (= ((@ funcs i)) (* i i)) "(@ funcs i) returns (* i i)") + (set i (+ 1 i)) }) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_compound_data_type.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_compound_data_type.ark new file mode 100644 index 00000000..c4064c42 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_compound_data_type.ark @@ -0,0 +1,11 @@ +(let point (fun (x y) + (fun (&x &y) ()))) + +(let point1 (point 3 5)) +(let point2 (point 2.7 -3.8)) + +(assert + (and + (!= point1.x point2.x) + (!= point1.y point2.y)) + "point1 and point2 are different") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_currying.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_currying.ark new file mode 100644 index 00000000..fad4c4e1 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_currying.ark @@ -0,0 +1,7 @@ +(let addN (fun (n) + (fun (x &n) + (+ x n)))) + +(let add2 (addN 2)) +(assert (= "Closure" (type add2)) "add2 is a closure") +(assert (= 7 (add2 5)) "add2 5 is 7") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_even_or_odd.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_even_or_odd.ark new file mode 100644 index 00000000..0f94c683 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_even_or_odd.ark @@ -0,0 +1,11 @@ +(let is_even (fun (i) + (= 0 (mod i 2)))) + +(let is_odd (fun (i) + (= 1 (mod i 2)))) + +(assert (is_even 2) "2 is even") +(assert (not (is_even 3)) "3 is not even") + +(assert (is_odd 3) "3 is odd") +(assert (not (is_odd 4)) "4 is not odd") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_extend_your_language.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_extend_your_language.ark new file mode 100644 index 00000000..fe781497 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_extend_your_language.ark @@ -0,0 +1,34 @@ +($ if2 (conds bothConditionsAreTrue firstConditionIsTrue secondConditionIsTrue noConditionIsTrue) { + (mut result1 (head conds)) + (mut result2 (@ conds 1)) + (if (and result1 result2) + bothConditionsAreTrue + (if result1 + firstConditionIsTrue + (if result2 + secondConditionIsTrue + noConditionIsTrue)))}) + +(if2 (true true) + (assert true "if2 true true") + (assert false "if2 true false") + (assert false "if2 false true") + (assert false "if2 false false")) + +(if2 (true false) + (assert false "if2 true true") + (assert true "if2 true false") + (assert false "if2 false true") + (assert false "if2 false false")) + +(if2 (false true) + (assert false "if2 true true") + (assert false "if2 true false") + (assert true "if2 false true") + (assert false "if2 false false")) + +(if2 (false false) + (assert false "if2 true true") + (assert false "if2 true false") + (assert false "if2 false true") + (assert true "if2 false false")) diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark new file mode 100644 index 00000000..a4002ab5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_fibonacci_iterative.ark @@ -0,0 +1,12 @@ +(let fibo (fun (n) { + (mut i 0) + (mut a 0) + (mut b 1) + (while (< i n) { + (let c (+ a b)) + (set a b) + (set b c) + (set i (+ 1 i)) }) + a })) + +(assert (= 6765 (fibo 20)) "(fibo 20) == 6765") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark new file mode 100644 index 00000000..20a48935 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_fibonacci_recursive.ark @@ -0,0 +1,6 @@ +(let fibo (fun (n) + (if (< n 2) + n + (+ (fibo (- n 1)) (fibo (- n 2)))))) + +(assert (= 6765 (fibo 20)) "(fibo 20) == 6765") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_flatten_a_list.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_flatten_a_list.ark new file mode 100644 index 00000000..8d2eacae --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_flatten_a_list.ark @@ -0,0 +1,13 @@ +(import std.List :flatten :map) + +(let data [[1] 2 [[3 4] 5] [[[]]] [[[6]]] 7 8 []]) + +(let process (fun (lst) + (flatten + (map + lst + (fun (sub) + (if (= "List" (type sub)) + (process sub) + sub)))))) +(assert (= (process data) [1 2 3 4 5 6 7 8]) "list is flat") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_infinity.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_infinity.ark new file mode 100644 index 00000000..2fd9f611 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_infinity.ark @@ -0,0 +1,3 @@ +(assert (= false (math:Inf? 0)) "0 is not infinite") +(assert (math:Inf? math:Inf) "math:Inf is infinite") +(assert (not (math:Inf? math:NaN)) "math:NaN is not infinite") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_munchausen.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_munchausen.ark new file mode 100644 index 00000000..4cbf7c2b --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_munchausen.ark @@ -0,0 +1,28 @@ +(import std.List) + +(let self-exponent (fun (x n acc) + (if (> n 0) + (self-exponent x (- n 1) (* x acc)) + acc))) + +(let cache (list:map (list:iota 0 10) (fun (x) (if (= x 0) 0 (self-exponent x x 1))))) + +(let is_munchhausen (fun (number) { + (mut total 0) + (mut n number) + (mut continue true) + + (while (and (> n 0) continue) { + (let digit (mod n 10)) + (set total (+ total (@ cache digit))) + (if (> total number) + (set continue false) + (set n (math:floor (/ n 10)))) }) + + (= total number) })) + + +(assert (is_munchhausen 1) "1 is a Munchhausen number") +(assert (is_munchhausen 3435) "3435 is a Munchhausen number") + +(assert (not (is_munchhausen 677)) "677 is not a Munchhausen number") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_quicksort.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_quicksort.ark new file mode 100644 index 00000000..b856e3ea --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_quicksort.ark @@ -0,0 +1,25 @@ +(import std.List :filter) + +(let quicksort (fun (array) { + (if (empty? array) + # if the given list is empty, return it + [] + # otherwise, sort it + { + # the pivot will be the first element + (let pivot (head array)) + + # call quicksort on a smaller array containing all the elements less than the pivot + (mut less (quicksort (filter (tail array) (fun (e) (< e pivot))))) + + # and after that, call quicksort on a smaller array containing all the elements greater or equal to the pivot + (let more (quicksort (filter (tail array) (fun (e) (>= e pivot))))) + + (concat! less [pivot] more) + # return a concatenation of arrays + less }) })) + +# an unsorted list to sort +(let a [3 6 1 5 1 65 324 765 1 6 3 0 6 9 6 5 3 2 5 6 7 64 645 7 345 432 432 4 324 23]) + +(assert (= (quicksort a) [0 1 1 1 2 3 3 3 4 5 5 5 6 6 6 6 6 7 7 9 23 64 65 324 324 345 432 432 645 765]) "(quicksort a) is sorted") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_string_append.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_string_append.ark new file mode 100644 index 00000000..21ef6940 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_string_append.ark @@ -0,0 +1,2 @@ +(let s "12345678") +(assert (= (+ s "9!") "123456789!") "string concat works with +") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_string_matching.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_string_matching.ark new file mode 100644 index 00000000..1952605a --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_string_matching.ark @@ -0,0 +1,6 @@ +(assert (= 0 (string:find "abcd" "ab")) "abcd starts with ab") +(assert (= 6 (string:find "hello world" "world")) "world is located at 6") +(assert (= -1 (string:find "abcd" "zn")) "abcd does not contain zn") +(assert (= -1 (string:find "abab" "bb")) "abab does not contain bb") +(assert (= 0 (string:find "abab" "ab")) "abab contains ab") +(assert (= 2 (string:find "abab" "ab" 1)) "starting lookup at index 1, we found ab at position 2") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark new file mode 100644 index 00000000..c205a3fb --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_and_product_of_an_array.ark @@ -0,0 +1,9 @@ +(import std.List :sum :product :reduce) + +(let array [1 2 3 4]) + +(assert (= (sum array) 10) "sum of array is 10") +(assert (= (reduce array (fun (a b) (+ a b))) 10) "reduction of array with + is 10") + +(assert (= (product array) 24) "product of array is 24") +(assert (= (reduce array (fun (a b) (* a b))) 24) "reduction of array with * is 24") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark new file mode 100644 index 00000000..6e12836d --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_digits_of_an_integer.ark @@ -0,0 +1,27 @@ +(import std.List) +(import std.String) + +(let to-base (fun (n base) { + (let o (string:ord n)) + + (let v + (if (and (>= o 48) (<= o 57)) + (- o 48) + (if (and (>= o 97) (<= o 122)) + (- o 87) + (if (and (>= o 65) (<= o 90)) + (- o 55) + o)))) + (mod v base) })) + +(let sum-digits (fun (n base) { + (let number + (if (not (= "String" (type n))) + (toString n) + n)) + (list:reduce (list:map number (fun (e) (to-base e base))) (fun (a b) (+ a b))) })) + +(assert (= (sum-digits 1 10) 1) "sum of digits in 10 (base 10) is 1") +(assert (= (sum-digits 1234 10) 10) "sum of digits in 1234 (base 10) is 10") +(assert (= (sum-digits "fe" 16) 29) "sum of digits in fe (base 16) is 29") +(assert (= (sum-digits "f0e" 16) 29) "sum of digits in f0e (base 16) is 29") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark new file mode 100644 index 00000000..f99703db --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_of_a_serie.ark @@ -0,0 +1,9 @@ +(import std.Range :range :map) +(import std.List :sum) + +(let r (range 1 1000)) +(let sol (sum (map r (fun (x) (/ 1 (* x x)))))) + +(import std.Math :abs) + +(assert (< (abs (- sol 1.64493406685)) 0.0011) "S1000(2) is near Pi^2/6") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_of_squares.ark b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_of_squares.ark new file mode 100644 index 00000000..747205c4 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_rosettasuite_sum_of_squares.ark @@ -0,0 +1,16 @@ +(import std.List) + +(assert (= + (list:sum + (list:map + [1 2 3 4 5] + (fun (x) (* x x)))) + 55) + "sum of list is 55") +(assert (= + (list:sum + (list:map + [] + (fun (x) (* x x)))) + 0) + "sum of empty list is 0") diff --git a/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_a1.ark b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_a1.ark new file mode 100644 index 00000000..6d1bee83 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_a1.ark @@ -0,0 +1,4 @@ +# f,2 +# n:Number +# m:Number +# Number diff --git a/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_a2.ark b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_a2.ark new file mode 100644 index 00000000..2fed9714 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_a2.ark @@ -0,0 +1,4 @@ +# f,2 +# n:Number +# m:String +# Number diff --git a/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_varying_arity_a1.ark b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_varying_arity_a1.ark new file mode 100644 index 00000000..6d1bee83 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_varying_arity_a1.ark @@ -0,0 +1,4 @@ +# f,2 +# n:Number +# m:Number +# Number diff --git a/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_varying_arity_a2.ark b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_varying_arity_a2.ark new file mode 100644 index 00000000..8dee9bc5 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_multi_varying_arity_a2.ark @@ -0,0 +1,5 @@ +# f,3 +# n:Number +# m:String +# o:List +# Number diff --git a/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_not_enough_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_not_enough_args.ark new file mode 100644 index 00000000..6d1bee83 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_not_enough_args.ark @@ -0,0 +1,4 @@ +# f,2 +# n:Number +# m:Number +# Number diff --git a/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_num.ark b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_num.ark new file mode 100644 index 00000000..f3faf7ef --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_num.ark @@ -0,0 +1,3 @@ +# f,1 +# n:Number +# String diff --git a/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_sum_type.ark b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_sum_type.ark new file mode 100644 index 00000000..92944570 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_sum_type.ark @@ -0,0 +1,3 @@ +# f,1 +# n:Number,_:String +# Bool diff --git a/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_too_many_args.ark b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_too_many_args.ark new file mode 100644 index 00000000..438c4469 --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_too_many_args.ark @@ -0,0 +1,3 @@ +# f,1 +# n:Number +# Number,String diff --git a/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_variadic.ark b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_variadic.ark new file mode 100644 index 00000000..ce3ab0dc --- /dev/null +++ b/tests/fuzzing/corpus/tests_unittests_resources_typecheckersuite_variadic.ark @@ -0,0 +1,3 @@ +# f,1 +# vararg:Number,... +# Number,String diff --git a/tests/fuzzing/docker/1-prepare-corpus.sh b/tests/fuzzing/docker/1-prepare-corpus.sh index f2f54f8f..77816187 100755 --- a/tests/fuzzing/docker/1-prepare-corpus.sh +++ b/tests/fuzzing/docker/1-prepare-corpus.sh @@ -19,6 +19,19 @@ mkdir -p tests/fuzzing/corpus-cmin-tmin afl-cmin -i tests/fuzzing/corpus -o tests/fuzzing/corpus-cmin -T all -- "$exe" @@ -L "$ark_lib" cd tests/fuzzing/corpus-cmin || exit 1 -for i in *.ark; do - afl-tmin -i "$i" -o "../corpus-cmin-tmin/$i" -- "$exe" @@ -L "$ark_lib" + +cores=$(nproc) +input_dir="." +output_dir="../corpus-cmin-tmin" +# shellcheck disable=SC2012 +total=$(ls "$input_dir" | wc -l) + +for k in $(seq 1 "${cores}" "${total}"); do + for i in $(seq 0 $(("$cores" - 1))); do + # shellcheck disable=SC2012 + file=$(ls -Sr $input_dir | sed $(("$i" + "$k"))"q;d") + afl-tmin -i "$input_dir/$file" -o "$output_dir/$file" -- "$exe" @@ -L "$ark_lib" & #put the command to run after the -- + done + + wait done From 24394cdbc13745574f946c409620bfb640b21460 Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Sun, 4 May 2025 11:43:11 +0200 Subject: [PATCH 07/11] fix(ci): switch codeql cpp build to manual --- .github/workflows/codeql.yml | 103 +++++++----------- .github/workflows/setup-compilers/action.yaml | 2 +- 2 files changed, 41 insertions(+), 64 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 4977228f..99f13646 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,14 +1,3 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# name: "CodeQL" on: @@ -19,74 +8,62 @@ on: schedule: - cron: '34 12 * * 4' +env: + BUILD_TYPE: Release + jobs: analyze: name: Analyze (${{ matrix.language }}) - # Runner size impacts CodeQL analysis time. To learn more, please see: - # - https://gh.io/recommended-hardware-resources-for-running-codeql - # - https://gh.io/supported-runners-and-hardware-resources - # - https://gh.io/using-larger-runners (GitHub.com only) - # Consider using larger runners or machines with greater resources for possible analysis time improvements. - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} - timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} + runs-on: ${{ matrix.os }} + timeout-minutes: 15 permissions: # required for all workflows security-events: write - # required to fetch internal or private CodeQL packs packages: read - # only required for workflows in private repositories - actions: read - contents: read - strategy: fail-fast: false matrix: include: - - language: c-cpp - build-mode: autobuild - - language: python - build-mode: none - # CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' - # Use `c-cpp` to analyze code written in C, C++ or both - # Use 'java-kotlin' to analyze code written in Java, Kotlin or both - # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both - # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, - # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. - # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how - # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages + - language: c-cpp + build-mode: manual + os: ubuntu-24.04 + - language: python + build-mode: none + os: ubuntu-24.04 steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: + - name: Checkout repository + uses: actions/checkout@v4 + with: submodules: recursive - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - build-mode: ${{ matrix.build-mode }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. - # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality - # â„¹ï¸ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - if: matrix.build-mode == 'manual' - shell: bash - run: | - cmake -Bbuild \ - -DCMAKE_BUILD_TYPE=Release \ - -DARK_SANITIZERS=On \ - -DARK_BUILD_EXE=On -DARK_BUILD_MODULES=Off -DARK_TESTS=On - cmake --build build --config Release -j $(nproc) + # â„¹ï¸ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + - name: Setup compilers, dependencies, project and build + if: matrix.build-mode == 'manual' + uses: ./.github/workflows/setup-compilers + with: + os_name: ${{ matrix.os }} + compiler: clang + compiler_version: 16 + sanitizers: Off + with_deps: false - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{matrix.language}}" + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/setup-compilers/action.yaml b/.github/workflows/setup-compilers/action.yaml index 0c7adeb2..fc87329f 100644 --- a/.github/workflows/setup-compilers/action.yaml +++ b/.github/workflows/setup-compilers/action.yaml @@ -117,7 +117,7 @@ runs: cmake -Bbuild \ -G "Visual Studio 17 2022" -T v143 \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ - -DARK_SANITIZERS=${{ matrix.config.sanitizers }} \ + -DARK_SANITIZERS=${{ inputs.sanitizers }} \ -DARK_COVERAGE=${{ inputs.coverage }} \ -DARK_BUILD_EXE=On \ -DARK_BUILD_MODULES=$ToggleModules -DARK_MOD_ALL=$ToggleModules -DARK_MOD_DRAFT=$ToggleModules \ From 3a91c5a0f647472f1bd298bc4370022984a3f31a Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Sun, 4 May 2025 17:52:59 +0200 Subject: [PATCH 08/11] chore(docs): removed @version in file comments as they are useless to me --- CONTRIBUTING.md | 4 +--- include/Ark/Ark.hpp | 3 +-- include/Ark/Builtins/Builtins.hpp | 3 +-- include/Ark/Compiler/AST/Node.hpp | 1 - include/Ark/Compiler/AST/Optimizer.hpp | 3 +-- include/Ark/Compiler/AST/Parser.hpp | 3 +-- include/Ark/Compiler/BytecodeReader.hpp | 1 - include/Ark/Compiler/Common.hpp | 3 +-- include/Ark/Compiler/Instructions.hpp | 1 - include/Ark/Compiler/IntermediateRepresentation/Entity.hpp | 1 - .../Ark/Compiler/IntermediateRepresentation/IRCompiler.hpp | 1 - .../Compiler/IntermediateRepresentation/IROptimizer.hpp | 3 +-- include/Ark/Compiler/IntermediateRepresentation/Word.hpp | 3 +-- include/Ark/Compiler/Lowerer/ASTLowerer.hpp | 1 - include/Ark/Compiler/Lowerer/LocalsLocator.hpp | 1 - include/Ark/Compiler/Macros/Executor.hpp | 3 +-- include/Ark/Compiler/Macros/Executors/Conditional.hpp | 3 +-- include/Ark/Compiler/Macros/Executors/Function.hpp | 3 +-- include/Ark/Compiler/Macros/Executors/Symbol.hpp | 3 +-- include/Ark/Compiler/Macros/MacroScope.hpp | 3 +-- include/Ark/Compiler/Macros/Processor.hpp | 3 +-- include/Ark/Compiler/NameResolution/NameResolutionPass.hpp | 5 ++--- include/Ark/Compiler/NameResolution/ScopeResolver.hpp | 3 +-- include/Ark/Compiler/NameResolution/StaticScope.hpp | 3 +-- include/Ark/Compiler/Package/ImportSolver.hpp | 3 +-- include/Ark/Compiler/Pass.hpp | 3 +-- include/Ark/Compiler/ValTableElem.hpp | 3 +-- include/Ark/Compiler/Welder.hpp | 3 +-- include/Ark/Constants.hpp.in | 3 +-- include/Ark/Exceptions.hpp | 1 - include/Ark/Files.hpp | 3 +-- include/Ark/Literals.hpp | 3 +-- include/Ark/Logger.hpp | 5 ++--- include/Ark/Platform.hpp | 3 +-- include/Ark/TypeChecker.hpp | 1 - include/Ark/Utils.hpp | 3 +-- include/Ark/VM/ExecutionContext.hpp | 1 - include/Ark/VM/Future.hpp | 5 ++--- include/Ark/VM/Plugin.hpp | 3 +-- include/Ark/VM/ScopeView.hpp | 1 - include/Ark/VM/State.hpp | 1 - include/Ark/VM/VM.hpp | 1 - include/Ark/VM/Value.hpp | 7 +++---- include/Ark/VM/Value/Closure.hpp | 3 +-- include/Ark/VM/Value/ClosureScope.hpp | 1 - include/Ark/VM/Value/UserType.hpp | 3 +-- include/CLI/REPL/Repl.hpp | 3 +-- include/CLI/REPL/Utils.hpp | 3 +-- 48 files changed, 39 insertions(+), 88 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b3cd6146..07d00e9d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -117,10 +117,9 @@ for (std::size_t i = 0, end = container.size(); i < end; i++) * @file Lexer.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Tokenize ArkScript code - * @version 0.1 * @date 2020-10-27 * - * @copyright Copyright (c) 2020 + * @copyright Copyright (c) 2025 * */ @@ -136,7 +135,6 @@ Snippet to recapitulate guidelines for headers: * @file Lexer.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Tokenize ArkScript code - * @version 0.1 * @date 2020-10-27 * * @copyright Copyright (c) 2020 diff --git a/include/Ark/Ark.hpp b/include/Ark/Ark.hpp index 6a44707a..ea6cdacb 100644 --- a/include/Ark/Ark.hpp +++ b/include/Ark/Ark.hpp @@ -2,10 +2,9 @@ * @file Ark.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Includes the needed files to start using ArkScript - * @version 0.1 * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/Builtins/Builtins.hpp b/include/Ark/Builtins/Builtins.hpp index 12555a70..daa934c6 100644 --- a/include/Ark/Builtins/Builtins.hpp +++ b/include/Ark/Builtins/Builtins.hpp @@ -2,10 +2,9 @@ * @file Builtins.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Host the declaration of all the ArkScript builtins - * @version 0.1 * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2021 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/Compiler/AST/Node.hpp b/include/Ark/Compiler/AST/Node.hpp index 46c6e326..020787ff 100644 --- a/include/Ark/Compiler/AST/Node.hpp +++ b/include/Ark/Compiler/AST/Node.hpp @@ -2,7 +2,6 @@ * @file Node.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief AST node used by the parser, optimizer and compiler - * @version 1.0 * @date 2020-10-27 * * @copyright Copyright (c) 2020-2024 diff --git a/include/Ark/Compiler/AST/Optimizer.hpp b/include/Ark/Compiler/AST/Optimizer.hpp index f702646d..93d27835 100644 --- a/include/Ark/Compiler/AST/Optimizer.hpp +++ b/include/Ark/Compiler/AST/Optimizer.hpp @@ -2,10 +2,9 @@ * @file Optimizer.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Optimizes a given ArkScript AST - * @version 1.1 * @date 2024-07-09 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/Compiler/AST/Parser.hpp b/include/Ark/Compiler/AST/Parser.hpp index 2c7a2620..80c4c6d3 100644 --- a/include/Ark/Compiler/AST/Parser.hpp +++ b/include/Ark/Compiler/AST/Parser.hpp @@ -2,10 +2,9 @@ * @file Parser.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Parse ArkScript code, but do not handle any import declarations - * @version 0.2 * @date 2024-05-12 * - * @copyright Copyright (c) 2024 + * @copyright Copyright (c) 2024-2025 * */ diff --git a/include/Ark/Compiler/BytecodeReader.hpp b/include/Ark/Compiler/BytecodeReader.hpp index 6afe0d5b..4fe3d357 100644 --- a/include/Ark/Compiler/BytecodeReader.hpp +++ b/include/Ark/Compiler/BytecodeReader.hpp @@ -2,7 +2,6 @@ * @file BytecodeReader.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief A bytecode disassembler for ArkScript - * @version 1.0 * @date 2020-10-27 * * @copyright Copyright (c) 2020-2025 diff --git a/include/Ark/Compiler/Common.hpp b/include/Ark/Compiler/Common.hpp index a1e8a9b1..6c54d946 100644 --- a/include/Ark/Compiler/Common.hpp +++ b/include/Ark/Compiler/Common.hpp @@ -2,10 +2,9 @@ * @file Common.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Common code for the compiler - * @version 0.5 * @date 2021-10-02 * - * @copyright Copyright (c) 2021-2024 + * @copyright Copyright (c) 2021-2025 * */ diff --git a/include/Ark/Compiler/Instructions.hpp b/include/Ark/Compiler/Instructions.hpp index ae771888..c381a1cd 100644 --- a/include/Ark/Compiler/Instructions.hpp +++ b/include/Ark/Compiler/Instructions.hpp @@ -2,7 +2,6 @@ * @file Instructions.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief The different instructions used by the compiler and virtual machine - * @version 1.0 * @date 2020-10-27 * * @copyright Copyright (c) 2020-2025 diff --git a/include/Ark/Compiler/IntermediateRepresentation/Entity.hpp b/include/Ark/Compiler/IntermediateRepresentation/Entity.hpp index 89e200fb..fd9e238e 100644 --- a/include/Ark/Compiler/IntermediateRepresentation/Entity.hpp +++ b/include/Ark/Compiler/IntermediateRepresentation/Entity.hpp @@ -2,7 +2,6 @@ * @file Entity.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief An entity in the IR is a bundle of information - * @version 1.0 * @date 2024-10-05 * * @copyright Copyright (c) 2024-2025 diff --git a/include/Ark/Compiler/IntermediateRepresentation/IRCompiler.hpp b/include/Ark/Compiler/IntermediateRepresentation/IRCompiler.hpp index 2a6d47e4..fc009156 100644 --- a/include/Ark/Compiler/IntermediateRepresentation/IRCompiler.hpp +++ b/include/Ark/Compiler/IntermediateRepresentation/IRCompiler.hpp @@ -2,7 +2,6 @@ * @file IRCompiler.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Compile the intermediate representation to bytecode - * @version 0.2 * @date 2024-10-05 * * @copyright Copyright (c) 2024-2025 diff --git a/include/Ark/Compiler/IntermediateRepresentation/IROptimizer.hpp b/include/Ark/Compiler/IntermediateRepresentation/IROptimizer.hpp index da824219..3117618b 100644 --- a/include/Ark/Compiler/IntermediateRepresentation/IROptimizer.hpp +++ b/include/Ark/Compiler/IntermediateRepresentation/IROptimizer.hpp @@ -2,10 +2,9 @@ * @file IROptimizer.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Optimize IR based on IR entity grouped by 2 (or more) - * @version 0.2 * @date 2024-10-11 * - * @copyright Copyright (c) 2024 + * @copyright Copyright (c) 2024-2025 * */ #ifndef ARK_COMPILER_INTERMEDIATEREPRESENTATION_IROPTIMIZER_HPP diff --git a/include/Ark/Compiler/IntermediateRepresentation/Word.hpp b/include/Ark/Compiler/IntermediateRepresentation/Word.hpp index c5e26194..b624b52e 100644 --- a/include/Ark/Compiler/IntermediateRepresentation/Word.hpp +++ b/include/Ark/Compiler/IntermediateRepresentation/Word.hpp @@ -2,10 +2,9 @@ * @file Word.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Describe an instruction and its immediate argument - * @version 1.0 * @date 2022-07-02 * - * @copyright Copyright (c) 2022-2024 + * @copyright Copyright (c) 2022-2025 * */ diff --git a/include/Ark/Compiler/Lowerer/ASTLowerer.hpp b/include/Ark/Compiler/Lowerer/ASTLowerer.hpp index 25cfd086..89532c74 100644 --- a/include/Ark/Compiler/Lowerer/ASTLowerer.hpp +++ b/include/Ark/Compiler/Lowerer/ASTLowerer.hpp @@ -2,7 +2,6 @@ * @file ASTLowerver.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief ArkScript compiler is in charge of transforming the AST into IR - * @version 3.1 * @date 2020-10-27 * * @copyright Copyright (c) 2020-2025 diff --git a/include/Ark/Compiler/Lowerer/LocalsLocator.hpp b/include/Ark/Compiler/Lowerer/LocalsLocator.hpp index be526bd1..b4893a48 100644 --- a/include/Ark/Compiler/Lowerer/LocalsLocator.hpp +++ b/include/Ark/Compiler/Lowerer/LocalsLocator.hpp @@ -2,7 +2,6 @@ * @file LocalsLocator.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Track locals at compile - * @version 0.1 * @date 2025-03-20 * * @copyright Copyright (c) 2025 diff --git a/include/Ark/Compiler/Macros/Executor.hpp b/include/Ark/Compiler/Macros/Executor.hpp index 14ea3fd5..974b61e6 100644 --- a/include/Ark/Compiler/Macros/Executor.hpp +++ b/include/Ark/Compiler/Macros/Executor.hpp @@ -2,10 +2,9 @@ * @file Executor.hpp * @author Ray John Alovera (rakista112@gmail.com), Alexandre Plateau (lexplt.dev@gmail.com) * @brief The base class for all MacroExecutors - * @version 3.0 * @date 2024-03-03 * - * @copyright Copyright (c) 2021-2024 + * @copyright Copyright (c) 2021-2025 * */ diff --git a/include/Ark/Compiler/Macros/Executors/Conditional.hpp b/include/Ark/Compiler/Macros/Executors/Conditional.hpp index 538a2184..0e88e66d 100644 --- a/include/Ark/Compiler/Macros/Executors/Conditional.hpp +++ b/include/Ark/Compiler/Macros/Executors/Conditional.hpp @@ -2,10 +2,9 @@ * @file Conditional.hpp * @author Ray John Alovera (rakista112@gmail.com), Alexandre Plateau (lexplt.dev@gmail.com) * @brief Executor for Conditional Macros - * @version 1.1 * @date 2021-05-04 * - * @copyright Copyright (c) 2021-2024 + * @copyright Copyright (c) 2021-2025 * */ diff --git a/include/Ark/Compiler/Macros/Executors/Function.hpp b/include/Ark/Compiler/Macros/Executors/Function.hpp index 55c81da3..e776e329 100644 --- a/include/Ark/Compiler/Macros/Executors/Function.hpp +++ b/include/Ark/Compiler/Macros/Executors/Function.hpp @@ -2,10 +2,9 @@ * @file Function.hpp * @author Ray John Alovera (rakista112@gmail.com), Alexandre Plateau (lexplt.dev@gmail.com) * @brief Executor for List Macros - * @version 3.0 * @date 2021-05-04 * - * @copyright Copyright (c) 2021-2024 + * @copyright Copyright (c) 2021-2025 * */ diff --git a/include/Ark/Compiler/Macros/Executors/Symbol.hpp b/include/Ark/Compiler/Macros/Executors/Symbol.hpp index c2d85a4e..5644b50c 100644 --- a/include/Ark/Compiler/Macros/Executors/Symbol.hpp +++ b/include/Ark/Compiler/Macros/Executors/Symbol.hpp @@ -2,10 +2,9 @@ * @file Symbol.hpp * @author Ray John Alovera (rakista112@gmail.com), Alexandre Plateau (lexplt.dev@gmail.com) * @brief Executor for Symbol Macros - * @version 1.1 * @date 2021-05-04 * - * @copyright Copyright (c) 2021-2024 + * @copyright Copyright (c) 2021-2025 * */ diff --git a/include/Ark/Compiler/Macros/MacroScope.hpp b/include/Ark/Compiler/Macros/MacroScope.hpp index ec482e82..f63b2cf9 100644 --- a/include/Ark/Compiler/Macros/MacroScope.hpp +++ b/include/Ark/Compiler/Macros/MacroScope.hpp @@ -2,10 +2,9 @@ * @file MacroScope.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Defines tools to handle macro definitions - * @version 1.0 * @date 2023-02-18 * - * @copyright Copyright (c) 2023-2024 + * @copyright Copyright (c) 2023-2025 * */ diff --git a/include/Ark/Compiler/Macros/Processor.hpp b/include/Ark/Compiler/Macros/Processor.hpp index 8759bd12..61be1a94 100644 --- a/include/Ark/Compiler/Macros/Processor.hpp +++ b/include/Ark/Compiler/Macros/Processor.hpp @@ -2,10 +2,9 @@ * @file Processor.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Handles the macros and their expansion in ArkScript source code - * @version 3.0 * @date 2021-02-18 * - * @copyright Copyright (c) 2021-2024 + * @copyright Copyright (c) 2021-2025 * */ diff --git a/include/Ark/Compiler/NameResolution/NameResolutionPass.hpp b/include/Ark/Compiler/NameResolution/NameResolutionPass.hpp index ba1b0b70..6d5cc47d 100644 --- a/include/Ark/Compiler/NameResolution/NameResolutionPass.hpp +++ b/include/Ark/Compiler/NameResolution/NameResolutionPass.hpp @@ -1,11 +1,10 @@ /** * @file NameResolutionPass.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) - * @brief - * @version 1.0 + * @brief Resolves names and fully qualify them in the AST (prefixing them with the package they are from) * @date 2024-07-22 * - * @copyright Copyright (c) 2024 + * @copyright Copyright (c) 2024-2025 * */ diff --git a/include/Ark/Compiler/NameResolution/ScopeResolver.hpp b/include/Ark/Compiler/NameResolution/ScopeResolver.hpp index 489f933a..8d80d2be 100644 --- a/include/Ark/Compiler/NameResolution/ScopeResolver.hpp +++ b/include/Ark/Compiler/NameResolution/ScopeResolver.hpp @@ -2,10 +2,9 @@ * @file ScopeResolver.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Handle scope resolution at compile time - * @version 0.1 * @date 2024-11-30 * - * @copyright Copyright (c) 2024 + * @copyright Copyright (c) 2024-2025 * */ diff --git a/include/Ark/Compiler/NameResolution/StaticScope.hpp b/include/Ark/Compiler/NameResolution/StaticScope.hpp index 8874a8e9..707043a9 100644 --- a/include/Ark/Compiler/NameResolution/StaticScope.hpp +++ b/include/Ark/Compiler/NameResolution/StaticScope.hpp @@ -1,8 +1,7 @@ /** * @file StaticScope.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) - * @brief - * @version 0.1 + * @brief Static scopes (for functions, loops) and namespace scopes (for packages) definitions, used at compile time * @date 2024-11-30 * * @copyright Copyright (c) 2024 diff --git a/include/Ark/Compiler/Package/ImportSolver.hpp b/include/Ark/Compiler/Package/ImportSolver.hpp index cc5c5b88..c76ee773 100644 --- a/include/Ark/Compiler/Package/ImportSolver.hpp +++ b/include/Ark/Compiler/Package/ImportSolver.hpp @@ -2,10 +2,9 @@ * @file ImportSolver.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Handle imports, resolve them with modules and everything - * @version 2.1 * @date 2024-07-21 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/Compiler/Pass.hpp b/include/Ark/Compiler/Pass.hpp index 8da3ca28..2d1a6ed2 100644 --- a/include/Ark/Compiler/Pass.hpp +++ b/include/Ark/Compiler/Pass.hpp @@ -2,10 +2,9 @@ * @file Pass.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Interface for a compiler pass (take in an AST, output an AST) - * @version 1.0 * @date 2024-07-21 * - * @copyright Copyright (c) 2024 + * @copyright Copyright (c) 2024-2025 * */ #ifndef ARK_COMPILER_PASS_HPP diff --git a/include/Ark/Compiler/ValTableElem.hpp b/include/Ark/Compiler/ValTableElem.hpp index 93a6013f..c9e7edd7 100644 --- a/include/Ark/Compiler/ValTableElem.hpp +++ b/include/Ark/Compiler/ValTableElem.hpp @@ -2,10 +2,9 @@ * @file ValTableElem.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief The basic value type handled by the compiler - * @version 1.0 * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/Compiler/Welder.hpp b/include/Ark/Compiler/Welder.hpp index 4ee0b46e..2a86ef2d 100644 --- a/include/Ark/Compiler/Welder.hpp +++ b/include/Ark/Compiler/Welder.hpp @@ -2,10 +2,9 @@ * @file Welder.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief In charge of welding everything needed to compile code - * @version 0.5 * @date 2023-03-26 * - * @copyright Copyright (c) 2023-2024 + * @copyright Copyright (c) 2023-2025 * */ diff --git a/include/Ark/Constants.hpp.in b/include/Ark/Constants.hpp.in index 82fc932a..fcc0cbb9 100644 --- a/include/Ark/Constants.hpp.in +++ b/include/Ark/Constants.hpp.in @@ -2,10 +2,9 @@ * @file Constants.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Constants used by ArkScript - * @version 0.2 * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/Exceptions.hpp b/include/Ark/Exceptions.hpp index a494124c..5b8ac89c 100644 --- a/include/Ark/Exceptions.hpp +++ b/include/Ark/Exceptions.hpp @@ -2,7 +2,6 @@ * @file Exceptions.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com), Max (madstk1@pm.me) * @brief ArkScript homemade exceptions - * @version 1.3 * @date 2020-10-27 * * @copyright Copyright (c) 2020-2025 diff --git a/include/Ark/Files.hpp b/include/Ark/Files.hpp index 74a00a69..4c1f1c6a 100644 --- a/include/Ark/Files.hpp +++ b/include/Ark/Files.hpp @@ -2,10 +2,9 @@ * @file Files.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Lots of utilities about the filesystem - * @version 0.3 * @date 2024-07-09 * - * @copyright Copyright (c) 2021-2024 + * @copyright Copyright (c) 2021-2025 * */ diff --git a/include/Ark/Literals.hpp b/include/Ark/Literals.hpp index 51cd0958..42ccc212 100644 --- a/include/Ark/Literals.hpp +++ b/include/Ark/Literals.hpp @@ -2,10 +2,9 @@ * @file Literals.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief User defined literals for Ark internals - * @version 0.2 * @date 2021-10-2 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/Logger.hpp b/include/Ark/Logger.hpp index 57d1d174..36a7c76b 100644 --- a/include/Ark/Logger.hpp +++ b/include/Ark/Logger.hpp @@ -1,11 +1,10 @@ /** * @file Logger.hpp - * @author Alexandre Plateau (lexplt@gmail.comhf + * @author Alexandre Plateau (lexplt@gmail.com) * @brief Internal logger - * @version 1.0 * @date 2024-08-30 * - * @copyright Copyright (c) 2024 + * @copyright Copyright (c) 2024-2025) */ #ifndef ARK_LOGGER_HPP #define ARK_LOGGER_HPP diff --git a/include/Ark/Platform.hpp b/include/Ark/Platform.hpp index a512aa51..26574c4e 100644 --- a/include/Ark/Platform.hpp +++ b/include/Ark/Platform.hpp @@ -2,10 +2,9 @@ * @file Platform.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief ArkScript configuration macros - * @version 0.2 * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/TypeChecker.hpp b/include/Ark/TypeChecker.hpp index 466a0c94..acba1442 100644 --- a/include/Ark/TypeChecker.hpp +++ b/include/Ark/TypeChecker.hpp @@ -2,7 +2,6 @@ * @file TypeChecker.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief - * @version 1.1 * @date 2022-01-16 * * @copyright Copyright (c) 2022-2025 diff --git a/include/Ark/Utils.hpp b/include/Ark/Utils.hpp index b4d9f15a..bdc71197 100644 --- a/include/Ark/Utils.hpp +++ b/include/Ark/Utils.hpp @@ -2,10 +2,9 @@ * @file Utils.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Lots of utilities about string, filesystem and more - * @version 1.0 * @date 2024-07-09 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/VM/ExecutionContext.hpp b/include/Ark/VM/ExecutionContext.hpp index 394c8cc1..6051624b 100644 --- a/include/Ark/VM/ExecutionContext.hpp +++ b/include/Ark/VM/ExecutionContext.hpp @@ -2,7 +2,6 @@ * @file ExecutionContext.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Keeping track of the internal data needed by the VM - * @version 0.1 * @date 2021-11-15 * * @copyright Copyright (c) 2021-2025 diff --git a/include/Ark/VM/Future.hpp b/include/Ark/VM/Future.hpp index ee9f8b6f..4f349c11 100644 --- a/include/Ark/VM/Future.hpp +++ b/include/Ark/VM/Future.hpp @@ -1,11 +1,10 @@ /** * @file Future.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) - * @brief - * @version 0.1 + * @brief Internal object to resolve asynchronously a function call in ArkScript * @date 2022-05-28 * - * @copyright Copyright (c) 2022-2024 + * @copyright Copyright (c) 2022-2025 * */ diff --git a/include/Ark/VM/Plugin.hpp b/include/Ark/VM/Plugin.hpp index 855b4e09..c80c9550 100644 --- a/include/Ark/VM/Plugin.hpp +++ b/include/Ark/VM/Plugin.hpp @@ -2,10 +2,9 @@ * @file Plugin.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Loads .dll/.so/.dynlib files - * @version 1.0 * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/VM/ScopeView.hpp b/include/Ark/VM/ScopeView.hpp index 5d64f9b5..5941d35e 100644 --- a/include/Ark/VM/ScopeView.hpp +++ b/include/Ark/VM/ScopeView.hpp @@ -2,7 +2,6 @@ * @file Scope.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief The virtual machine scope system - * @version 0.2 * @date 2020-10-27 * * @copyright Copyright (c) 2020-2025 diff --git a/include/Ark/VM/State.hpp b/include/Ark/VM/State.hpp index 07e1d5cd..8f2635c3 100644 --- a/include/Ark/VM/State.hpp +++ b/include/Ark/VM/State.hpp @@ -2,7 +2,6 @@ * @file State.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief State used by the virtual machine: it loads the bytecode, can compile it if needed, load C++ functions... - * @version 1.0 * @date 2020-10-27 * * @copyright Copyright (c) 2020-2025 diff --git a/include/Ark/VM/VM.hpp b/include/Ark/VM/VM.hpp index 34b340e3..816fb5ba 100644 --- a/include/Ark/VM/VM.hpp +++ b/include/Ark/VM/VM.hpp @@ -2,7 +2,6 @@ * @file VM.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief The ArkScript virtual machine - * @version 2.0 * @date 2020-10-27 * * @copyright Copyright (c) 2020-2025 diff --git a/include/Ark/VM/Value.hpp b/include/Ark/VM/Value.hpp index eabb700b..d36d4fb4 100644 --- a/include/Ark/VM/Value.hpp +++ b/include/Ark/VM/Value.hpp @@ -1,11 +1,10 @@ /** * @file Value.hpp - * @author Default value type handled by the virtual machine - * @brief - * @version 2.0 + * @author Alexandre Plateau (lexplt.dev@gmail.com) + * @brief Default value type handled by the virtual machine * @date 2024-04-20 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/VM/Value/Closure.hpp b/include/Ark/VM/Value/Closure.hpp index eb9bbda6..93274b7b 100644 --- a/include/Ark/VM/Value/Closure.hpp +++ b/include/Ark/VM/Value/Closure.hpp @@ -2,10 +2,9 @@ * @file Closure.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Subtype of the value type, handling closures - * @version 2.0 * @date 2024-04-21 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/Ark/VM/Value/ClosureScope.hpp b/include/Ark/VM/Value/ClosureScope.hpp index 3640d70f..2d5605ff 100644 --- a/include/Ark/VM/Value/ClosureScope.hpp +++ b/include/Ark/VM/Value/ClosureScope.hpp @@ -2,7 +2,6 @@ * @file ClosureScope.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Subtype of the value type, handling closures - * @version 0.1 * @date 2025-03-17 * * @copyright Copyright (c) 2025 diff --git a/include/Ark/VM/Value/UserType.hpp b/include/Ark/VM/Value/UserType.hpp index eb0c52db..9074bce0 100644 --- a/include/Ark/VM/Value/UserType.hpp +++ b/include/Ark/VM/Value/UserType.hpp @@ -2,10 +2,9 @@ * @file UserType.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief Subtype of the value, capable of handling any C++ type - * @version 0.4 * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/CLI/REPL/Repl.hpp b/include/CLI/REPL/Repl.hpp index 65c67c5b..da578bef 100644 --- a/include/CLI/REPL/Repl.hpp +++ b/include/CLI/REPL/Repl.hpp @@ -2,10 +2,9 @@ * @file Repl.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief ArkScript REPL - Read Eval Print Loop - * @version 1.0 * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ diff --git a/include/CLI/REPL/Utils.hpp b/include/CLI/REPL/Utils.hpp index 7004f3a6..75ba24e4 100644 --- a/include/CLI/REPL/Utils.hpp +++ b/include/CLI/REPL/Utils.hpp @@ -2,10 +2,9 @@ * @file Utils.hpp * @author Alexandre Plateau (lexplt.dev@gmail.com) * @brief replxx utilities - * @version 1.1 * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ From 7a5833117d2c1892fad213a7869f202251c9dd83 Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Sat, 3 May 2025 18:03:51 +0200 Subject: [PATCH 09/11] chore: following cppcheck recommandations --- include/Ark/Compiler/AST/Node.hpp | 6 +- .../Compiler/NameResolution/StaticScope.hpp | 17 +---- include/Ark/VM/VM.inl | 2 +- src/arkreactor/Builtins/IO.cpp | 13 +++- src/arkreactor/Builtins/Mathematics.cpp | 20 ++++++ src/arkreactor/Builtins/String.cpp | 1 + src/arkreactor/Builtins/System.cpp | 3 + src/arkreactor/Compiler/AST/BaseParser.cpp | 6 +- src/arkreactor/Compiler/AST/Node.cpp | 2 +- src/arkreactor/Compiler/AST/Optimizer.cpp | 2 +- src/arkreactor/Compiler/AST/Parser.cpp | 70 +++++++++--------- .../IntermediateRepresentation/Entity.cpp | 6 +- .../IROptimizer.cpp | 13 ++-- src/arkreactor/Compiler/Macros/Processor.cpp | 8 +-- .../Compiler/NameResolution/ScopeResolver.cpp | 9 +-- .../Compiler/NameResolution/StaticScope.cpp | 17 ++++- src/arkreactor/VM/State.cpp | 4 +- src/arkreactor/VM/VM.cpp | 4 +- src/arkreactor/VM/Value/Closure.cpp | 10 +-- src/arkscript/Formatter.cpp | 72 +++++++++---------- src/arkscript/JsonCompiler.cpp | 11 +-- src/arkscript/REPL/Repl.cpp | 9 ++- src/arkscript/REPL/Utils.cpp | 51 +++++++------ 23 files changed, 198 insertions(+), 158 deletions(-) diff --git a/include/Ark/Compiler/AST/Node.hpp b/include/Ark/Compiler/AST/Node.hpp index 020787ff..61a0c29c 100644 --- a/include/Ark/Compiler/AST/Node.hpp +++ b/include/Ark/Compiler/AST/Node.hpp @@ -4,7 +4,7 @@ * @brief AST node used by the parser, optimizer and compiler * @date 2020-10-27 * - * @copyright Copyright (c) 2020-2024 + * @copyright Copyright (c) 2020-2025 * */ @@ -39,7 +39,7 @@ namespace Ark::internal explicit Node(double value); explicit Node(long value); explicit Node(Keyword value); - explicit Node(Namespace namespace_); + explicit Node(const Namespace& namespace_); /** * @brief Return the string held by the value (if the node type allows it) @@ -218,7 +218,7 @@ namespace Ark::internal friend bool operator<(const Node& A, const Node& B); private: - NodeType m_type; + NodeType m_type { NodeType::Unused }; Value m_value; // position of the node in the original code, useful when it comes to parser errors std::size_t m_line = 0, m_col = 0; diff --git a/include/Ark/Compiler/NameResolution/StaticScope.hpp b/include/Ark/Compiler/NameResolution/StaticScope.hpp index 707043a9..900e8509 100644 --- a/include/Ark/Compiler/NameResolution/StaticScope.hpp +++ b/include/Ark/Compiler/NameResolution/StaticScope.hpp @@ -4,7 +4,7 @@ * @brief Static scopes (for functions, loops) and namespace scopes (for packages) definitions, used at compile time * @date 2024-11-30 * - * @copyright Copyright (c) 2024 + * @copyright Copyright (c) 2024-2025 * */ @@ -141,20 +141,7 @@ namespace Ark::internal [[nodiscard]] inline bool isGlob() const override { return m_is_glob; } [[nodiscard]] inline std::string prefix() const override { return m_namespace; } [[nodiscard]] inline bool hasSymbol(const std::string& symbol) const override { return std::ranges::find(m_symbols, symbol) != m_symbols.end(); } - [[nodiscard]] inline bool recursiveHasSymbol(const std::string& symbol) override - { - if (hasSymbol(symbol)) - return true; - if (isGlob() && std::ranges::find(m_vars, fullyQualifiedName(symbol), &Declaration::name) != m_vars.end()) - return true; - - for (const auto& saved_scope : m_additional_namespaces) - { - if (saved_scope->recursiveHasSymbol(symbol)) - return true; - } - return false; - } + [[nodiscard]] bool recursiveHasSymbol(const std::string& symbol) override; private: std::string m_namespace; diff --git a/include/Ark/VM/VM.inl b/include/Ark/VM/VM.inl index efde5a0d..15030b0c 100644 --- a/include/Ark/VM/VM.inl +++ b/include/Ark/VM/VM.inl @@ -300,7 +300,7 @@ inline void VM::call(internal::ExecutionContext& context, const uint16_t argc) // is it a user defined closure? case ValueType::Closure: { - Closure& c = function.refClosure(); + const Closure& c = function.closure(); const PageAddr_t new_page_pointer = c.pageAddr(); // create dedicated scope diff --git a/src/arkreactor/Builtins/IO.cpp b/src/arkreactor/Builtins/IO.cpp index 7bfc134c..4469cfc0 100644 --- a/src/arkreactor/Builtins/IO.cpp +++ b/src/arkreactor/Builtins/IO.cpp @@ -21,9 +21,10 @@ namespace Ark::internal::Builtins::IO * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value print(std::vector& n, VM* vm) { - for (auto& value : n) + for (const auto& value : n) fmt::print("{}", value.toString(*vm)); fmt::println(""); @@ -40,9 +41,10 @@ namespace Ark::internal::Builtins::IO * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value puts_(std::vector& n, VM* vm) { - for (auto& value : n) + for (const auto& value : n) fmt::print("{}", value.toString(*vm)); return nil; @@ -58,6 +60,7 @@ namespace Ark::internal::Builtins::IO * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value input(std::vector& n, VM* vm [[maybe_unused]]) { if (types::check(n, ValueType::String)) @@ -144,6 +147,7 @@ namespace Ark::internal::Builtins::IO * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value readFile(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::String)) @@ -169,6 +173,7 @@ namespace Ark::internal::Builtins::IO * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value fileExists(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::String)) @@ -189,6 +194,7 @@ namespace Ark::internal::Builtins::IO * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value listFiles(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::String)) @@ -215,6 +221,7 @@ namespace Ark::internal::Builtins::IO * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value isDirectory(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::String)) @@ -235,6 +242,7 @@ namespace Ark::internal::Builtins::IO * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value makeDir(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::String)) @@ -257,6 +265,7 @@ namespace Ark::internal::Builtins::IO * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value removeFiles(std::vector& n, VM* vm [[maybe_unused]]) { if (n.empty() || n[0].valueType() != ValueType::String) diff --git a/src/arkreactor/Builtins/Mathematics.cpp b/src/arkreactor/Builtins/Mathematics.cpp index aad304d4..ca291d05 100644 --- a/src/arkreactor/Builtins/Mathematics.cpp +++ b/src/arkreactor/Builtins/Mathematics.cpp @@ -19,6 +19,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value exponential(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -39,6 +40,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value logarithm(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -62,6 +64,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value ceil_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -82,6 +85,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value floor_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -103,6 +107,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value round_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -124,6 +129,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value isnan_(std::vector& n, VM* vm [[maybe_unused]]) { if (n[0].valueType() != ValueType::Number) @@ -142,6 +148,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value isinf_(std::vector& n, VM* vm [[maybe_unused]]) { if (n[0].valueType() != ValueType::Number) @@ -160,6 +167,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value cos_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -181,6 +189,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value sin_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -202,6 +211,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value tan_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -222,6 +232,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value acos_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -242,6 +253,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value asin_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -262,6 +274,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value atan_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -279,6 +292,7 @@ namespace Ark::internal::Builtins::Mathematics * @param value the Number * @author https://github.com/Gryfenfer97 */ + // cppcheck-suppress constParameterReference Value cosh_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -296,6 +310,7 @@ namespace Ark::internal::Builtins::Mathematics * @param value the Number * @author https://github.com/Gryfenfer97 */ + // cppcheck-suppress constParameterReference Value sinh_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -313,6 +328,7 @@ namespace Ark::internal::Builtins::Mathematics * @param value the Number * @author https://github.com/Gryfenfer97 */ + // cppcheck-suppress constParameterReference Value tanh_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -330,6 +346,7 @@ namespace Ark::internal::Builtins::Mathematics * @param value the Number * @author https://github.com/Gryfenfer97 */ + // cppcheck-suppress constParameterReference Value acosh_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -347,6 +364,7 @@ namespace Ark::internal::Builtins::Mathematics * @param value the Number * @author https://github.com/Gryfenfer97 */ + // cppcheck-suppress constParameterReference Value asinh_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -364,6 +382,7 @@ namespace Ark::internal::Builtins::Mathematics * @param value the Number * @author https://github.com/Gryfenfer97 */ + // cppcheck-suppress constParameterReference Value atanh_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -386,6 +405,7 @@ namespace Ark::internal::Builtins::Mathematics * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value random(std::vector& n, VM* vm [[maybe_unused]]) { static std::mt19937 gen { std::random_device()() }; diff --git a/src/arkreactor/Builtins/String.cpp b/src/arkreactor/Builtins/String.cpp index be1c75a5..e87eaa5f 100644 --- a/src/arkreactor/Builtins/String.cpp +++ b/src/arkreactor/Builtins/String.cpp @@ -163,6 +163,7 @@ namespace Ark::internal::Builtins::String * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value chr(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) diff --git a/src/arkreactor/Builtins/System.cpp b/src/arkreactor/Builtins/System.cpp index 150e68aa..c0f99174 100644 --- a/src/arkreactor/Builtins/System.cpp +++ b/src/arkreactor/Builtins/System.cpp @@ -40,6 +40,7 @@ namespace Ark::internal::Builtins::System * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value system_(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::String)) @@ -72,6 +73,7 @@ namespace Ark::internal::Builtins::System * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value sleep(std::vector& n, VM* vm [[maybe_unused]]) { if (!types::check(n, ValueType::Number)) @@ -96,6 +98,7 @@ namespace Ark::internal::Builtins::System * =end * @author https://github.com/SuperFola */ + // cppcheck-suppress constParameterReference Value exit_(std::vector& n, VM* vm) { if (!types::check(n, ValueType::Number)) diff --git a/src/arkreactor/Compiler/AST/BaseParser.cpp b/src/arkreactor/Compiler/AST/BaseParser.cpp index 5fa42cd7..daa0692b 100644 --- a/src/arkreactor/Compiler/AST/BaseParser.cpp +++ b/src/arkreactor/Compiler/AST/BaseParser.cpp @@ -25,9 +25,9 @@ namespace Ark::internal for (std::size_t i = 0, end = m_it_to_row.size(); i < end; ++i) { - auto current = m_it_to_row[i].first; - auto next = i + 1 < end ? m_it_to_row[i + 1].first : m_str.end(); - if (current < it && it < next) + auto current_it = m_it_to_row[i].first; + auto next_it = i + 1 < end ? m_it_to_row[i + 1].first : m_str.end(); + if (current_it < it && it < next_it) { m_it_to_row.insert( m_it_to_row.begin() + static_cast(i) + 1, diff --git a/src/arkreactor/Compiler/AST/Node.cpp b/src/arkreactor/Compiler/AST/Node.cpp index 644b5f00..df99933d 100644 --- a/src/arkreactor/Compiler/AST/Node.cpp +++ b/src/arkreactor/Compiler/AST/Node.cpp @@ -30,7 +30,7 @@ namespace Ark::internal m_type(NodeType::Keyword), m_value(value) {} - Node::Node(Namespace namespace_) : + Node::Node(const Namespace& namespace_) : m_type(NodeType::Namespace), m_value(namespace_) {} diff --git a/src/arkreactor/Compiler/AST/Optimizer.cpp b/src/arkreactor/Compiler/AST/Optimizer.cpp index 15b7a057..263dfe7c 100644 --- a/src/arkreactor/Compiler/AST/Optimizer.cpp +++ b/src/arkreactor/Compiler/AST/Optimizer.cpp @@ -46,7 +46,7 @@ namespace Ark::internal else if (node.nodeType() == NodeType::List) { // FIXME: very primitive removal of (if true/false ...) and (while false ...) - if (node.constList().size() > 1 && node.constList().front().nodeType() == NodeType::Keyword && + if (node.constList().size() >= 3 && node.constList().front().nodeType() == NodeType::Keyword && (node.constList().front().keyword() == Keyword::If || node.constList().front().keyword() == Keyword::While)) { const auto keyword = node.constList().front().keyword(); diff --git a/src/arkreactor/Compiler/AST/Parser.cpp b/src/arkreactor/Compiler/AST/Parser.cpp index a37c6363..fa890e3d 100644 --- a/src/arkreactor/Compiler/AST/Parser.cpp +++ b/src/arkreactor/Compiler/AST/Parser.cpp @@ -155,11 +155,11 @@ namespace Ark::internal if (leaf->constList().size() == 1) { // we haven't parsed anything while in "macro state" - std::string symbol; - if (!name(&symbol)) + std::string symbol_name; + if (!name(&symbol_name)) errorWithNextToken(token + " needs a symbol"); - leaf->push_back(Node(NodeType::Symbol, symbol)); + leaf->push_back(Node(NodeType::Symbol, symbol_name)); } comment.clear(); @@ -185,11 +185,11 @@ namespace Ark::internal std::string comment; newlineOrComment(&comment); - std::string symbol; - if (!name(&symbol)) + std::string symbol_name; + if (!name(&symbol_name)) errorWithNextToken("del needs a symbol"); - leaf->push_back(Node(NodeType::Symbol, symbol)); + leaf->push_back(Node(NodeType::Symbol, symbol_name)); leaf->list().back().attachNearestCommentBefore(comment); setNodePosAndFilename(leaf->list().back()); @@ -209,8 +209,8 @@ namespace Ark::internal leaf->push_back(Node(Keyword::If)); - if (auto condition = nodeOrValue(); condition.has_value()) - leaf->push_back(condition.value().attachNearestCommentBefore(comment)); + if (auto cond_expr = nodeOrValue(); cond_expr.has_value()) + leaf->push_back(cond_expr.value().attachNearestCommentBefore(comment)); else errorWithNextToken("`if' needs a valid condition"); @@ -252,8 +252,8 @@ namespace Ark::internal leaf->push_back(Node(Keyword::While)); - if (auto condition = nodeOrValue(); condition.has_value()) - leaf->push_back(condition.value().attachNearestCommentBefore(comment)); + if (auto cond_expr = nodeOrValue(); cond_expr.has_value()) + leaf->push_back(cond_expr.value().attachNearestCommentBefore(comment)); else errorWithNextToken("`while' needs a valid condition"); @@ -362,22 +362,22 @@ namespace Ark::internal { if (accept(IsChar(':'))) // parsing potential :a :b :c { - std::string symbol; - if (!name(&symbol)) + std::string symbol_name; + if (!name(&symbol_name)) errorWithNextToken("Expected a valid symbol to import"); - if (symbol == "*") - error(fmt::format("Glob patterns can not be separated from the package, use (import {}:*) instead", import_data.toPackageString()), symbol); + if (symbol_name == "*") + error(fmt::format("Glob patterns can not be separated from the package, use (import {}:*) instead", import_data.toPackageString()), symbol_name); - if (symbol.size() >= 2 && symbol[symbol.size() - 2] == ':' && symbol.back() == '*') + if (symbol_name.size() >= 2 && symbol_name[symbol_name.size() - 2] == ':' && symbol_name.back() == '*') { backtrack(getCount() - 2); // we can backtrack n-2 safely here because we know the previous chars were ":*" error("Glob pattern can not follow a symbol to import", ":*"); } - symbols.push_back(Node(NodeType::Symbol, symbol).attachNearestCommentBefore(comment)); + symbols.push_back(Node(NodeType::Symbol, symbol_name).attachNearestCommentBefore(comment)); comment.clear(); setNodePosAndFilename(symbols.list().back()); - import_data.symbols.push_back(symbol); + import_data.symbols.push_back(symbol_name); // we do not need the prefix when importing specific symbols import_data.with_prefix = false; } @@ -468,25 +468,25 @@ namespace Ark::internal std::string capture; if (!name(&capture)) break; - Node node = Node(NodeType::Capture, capture).attachNearestCommentBefore(comment); - setNodePosAndFilename(node, pos); - args->push_back(node); + Node capture_node = Node(NodeType::Capture, capture).attachNearestCommentBefore(comment); + setNodePosAndFilename(capture_node, pos); + args->push_back(capture_node); } else { const auto count = getCount(); - std::string symbol; - if (!name(&symbol)) + std::string symbol_name; + if (!name(&symbol_name)) break; if (has_captures) { backtrack(count); - error("Captured variables should be at the end of the argument list", symbol); + error("Captured variables should be at the end of the argument list", symbol_name); } - Node node = Node(NodeType::Symbol, symbol).attachNearestCommentBefore(comment); - setNodePosAndFilename(node, pos); - args->push_back(node); + Node arg_node = Node(NodeType::Symbol, symbol_name).attachNearestCommentBefore(comment); + setNodePosAndFilename(arg_node, pos); + args->push_back(arg_node); } comment.clear(); @@ -581,8 +581,8 @@ namespace Ark::internal newlineOrComment(&comment); leaf->attachNearestCommentBefore(comment); - if (const auto condition = nodeOrValue(); condition.has_value()) - leaf->push_back(condition.value()); + if (const auto cond_expr = nodeOrValue(); cond_expr.has_value()) + leaf->push_back(cond_expr.value()); else errorWithNextToken("$if need a valid condition"); @@ -689,13 +689,13 @@ namespace Ark::internal newlineOrComment(&comment); leaf->attachNearestCommentBefore(comment); - std::string symbol; - if (!name(&symbol)) + std::string symbol_name; + if (!name(&symbol_name)) errorWithNextToken("$ needs a symbol to declare a macro"); comment.clear(); newlineOrComment(&comment); - leaf->push_back(Node(NodeType::Symbol, symbol).attachNearestCommentBefore(comment)); + leaf->push_back(Node(NodeType::Symbol, symbol_name).attachNearestCommentBefore(comment)); const auto position = getCount(); if (const auto args = macroArgs(); args.has_value()) @@ -711,7 +711,7 @@ namespace Ark::internal if (value.has_value()) leaf->push_back(value.value()); else - errorWithNextToken(fmt::format("Expected an argument list, atom or node while defining macro `{}'", symbol)); + errorWithNextToken(fmt::format("Expected an argument list, atom or node while defining macro `{}'", symbol_name)); setNodePosAndFilename(leaf->list().back()); if (accept(IsChar(')'))) @@ -737,7 +737,7 @@ namespace Ark::internal else { backtrack(position); - errorWithNextToken(fmt::format("Expected a value while defining macro `{}'", symbol)); + errorWithNextToken(fmt::format("Expected a value while defining macro `{}'", symbol_name)); } setNodePosAndFilename(leaf->list().back()); @@ -758,8 +758,8 @@ namespace Ark::internal auto cursor = getCursor(); std::optional func; - if (auto atom = anyAtomOf({ NodeType::Symbol, NodeType::Field }); atom.has_value()) - func = atom->attachNearestCommentBefore(comment); + if (auto sym_or_field = anyAtomOf({ NodeType::Symbol, NodeType::Field }); sym_or_field.has_value()) + func = sym_or_field->attachNearestCommentBefore(comment); else if (auto nested = node(); nested.has_value()) func = nested->attachNearestCommentBefore(comment); else diff --git a/src/arkreactor/Compiler/IntermediateRepresentation/Entity.cpp b/src/arkreactor/Compiler/IntermediateRepresentation/Entity.cpp index 7c03a865..fe33d62f 100644 --- a/src/arkreactor/Compiler/IntermediateRepresentation/Entity.cpp +++ b/src/arkreactor/Compiler/IntermediateRepresentation/Entity.cpp @@ -19,10 +19,10 @@ namespace Ark::internal::IR Entity Entity::Label(const label_t value) { - auto label = Entity(Kind::Label); - label.m_label = value; + auto entity = Entity(Kind::Label); + entity.m_label = value; - return label; + return entity; } Entity Entity::Goto(const Entity& label) diff --git a/src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp b/src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp index f739191e..9b20b053 100644 --- a/src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp +++ b/src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp @@ -206,14 +206,11 @@ namespace Ark::internal auto [first, second] = createReplacement(entities); auto output = IR::Entity(replacement, first, second); - for (const auto& entity : entities) - { - if (entity.hasValidSourceLocation()) - { - output.setSourceLocation(entity.filename(), entity.sourceLine()); - break; - } - } + if (auto it = std::ranges::find_if(entities, [](const auto& entity) { + return entity.hasValidSourceLocation(); + }); + it != entities.end()) + output.setSourceLocation(it->filename(), it->sourceLine()); return output; } diff --git a/src/arkreactor/Compiler/Macros/Processor.cpp b/src/arkreactor/Compiler/Macros/Processor.cpp index 7bbe9274..e1e03a41 100644 --- a/src/arkreactor/Compiler/Macros/Processor.cpp +++ b/src/arkreactor/Compiler/Macros/Processor.cpp @@ -50,7 +50,7 @@ namespace Ark::internal void MacroProcessor::handleMacroNode(Node& node) { // a macro needs at least 2 nodes, name + value is the minimal form - // this is guaranted by the parser + // this is guaranteed by the parser assert(node.constList().size() >= 2 && "Invalid macro, missing value"); const Node& first_node = node.list()[0]; @@ -66,7 +66,7 @@ namespace Ark::internal // ($ name (args) body) else if (node.constList().size() == 3 && first_node.nodeType() == NodeType::Symbol) { - assert(node.list()[1].nodeType() == NodeType::List && "Invalid macro argument's list"); + assert(node.constList()[1].nodeType() == NodeType::List && "Invalid macro argument's list"); m_macros.back().add(first_node.string(), node); } // in case we had a conditional, we need to evaluate and expand it @@ -565,8 +565,8 @@ namespace Ark::internal } else if (name == Language::Repr) { - const Node ast = node.constList()[1]; - node.updateValueAndType(Node(NodeType::String, ast.repr())); + const Node arg = node.constList()[1]; + node.updateValueAndType(Node(NodeType::String, arg.repr())); } else if (name == Language::AsIs) { diff --git a/src/arkreactor/Compiler/NameResolution/ScopeResolver.cpp b/src/arkreactor/Compiler/NameResolution/ScopeResolver.cpp index 966ec3ca..aa90016f 100644 --- a/src/arkreactor/Compiler/NameResolution/ScopeResolver.cpp +++ b/src/arkreactor/Compiler/NameResolution/ScopeResolver.cpp @@ -52,12 +52,9 @@ namespace Ark::internal bool ScopeResolver::isRegistered(const std::string& name) const { - for (const auto& m_scope : std::ranges::reverse_view(m_scopes)) - { - if (m_scope->get(name, true).has_value()) - return true; - } - return false; + return std::ranges::any_of(std::ranges::reverse_view(m_scopes), [&name](const auto& scope) { + return scope->get(name, true).has_value(); + }); } bool ScopeResolver::isInScope(const std::string& name) const diff --git a/src/arkreactor/Compiler/NameResolution/StaticScope.cpp b/src/arkreactor/Compiler/NameResolution/StaticScope.cpp index f65fe135..8e9fab2d 100644 --- a/src/arkreactor/Compiler/NameResolution/StaticScope.cpp +++ b/src/arkreactor/Compiler/NameResolution/StaticScope.cpp @@ -1,6 +1,7 @@ #include #include +#include #include namespace Ark::internal @@ -96,7 +97,7 @@ namespace Ark::internal { if (auto maybe_decl = scope->get(name, extensive_lookup); maybe_decl.has_value()) { - // priorize non-hidden declarations + // prioritize non-hidden declarations if ((decl.has_value() && decl.value().name.ends_with("#hidden")) || !decl.has_value()) decl = maybe_decl; } @@ -125,4 +126,18 @@ namespace Ark::internal { return true; } + + bool NamespaceScope::recursiveHasSymbol(const std::string& symbol) + { + if (hasSymbol(symbol)) + return true; + if (isGlob() && std::ranges::find(m_vars, fullyQualifiedName(symbol), &Declaration::name) != m_vars.end()) + return true; + + return std::ranges::any_of( + m_additional_namespaces, + [&symbol](const auto& saved_scope) { + return saved_scope->recursiveHasSymbol(symbol); + }); + } } diff --git a/src/arkreactor/VM/State.cpp b/src/arkreactor/VM/State.cpp index 555e9934..b394d861 100644 --- a/src/arkreactor/VM/State.cpp +++ b/src/arkreactor/VM/State.cpp @@ -54,7 +54,7 @@ namespace Ark bool State::compile(const std::string& file, const std::string& output, const uint16_t features) const { Welder welder(m_debug_level, m_libenv, features); - for (auto& p : m_binded) + for (const auto& p : m_binded) welder.registerSymbol(p.first); if (!welder.computeASTFromFile(file)) @@ -103,7 +103,7 @@ namespace Ark bool State::doString(const std::string& code, const uint16_t features) { Welder welder(m_debug_level, m_libenv, features); - for (auto& p : m_binded) + for (const auto& p : m_binded) welder.registerSymbol(p.first); if (!welder.computeASTFromString(code)) diff --git a/src/arkreactor/VM/VM.cpp b/src/arkreactor/VM/VM.cpp index 98bfaac1..dd9aea8f 100644 --- a/src/arkreactor/VM/VM.cpp +++ b/src/arkreactor/VM/VM.cpp @@ -362,6 +362,7 @@ namespace Ark # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wpedantic" constexpr std::array opcode_targets = { + // cppcheck-suppress syntaxError ; cppcheck do not know about labels addresses (GCC extension) &&TARGET_NOP, &&TARGET_LOAD_SYMBOL, &&TARGET_LOAD_SYMBOL_BY_INDEX, @@ -455,6 +456,7 @@ namespace Ark m_running = true; DISPATCH(); + // cppcheck-suppress unreachableCode ; analysis cannot follow the chain of goto... but it works! { #if !ARK_USE_COMPUTED_GOTOS dispatch_opcode: @@ -1739,7 +1741,7 @@ namespace Ark ++consecutive_similar_traces; } - Value* ip; + const Value* ip; do { ip = popAndResolveAsPtr(context); diff --git a/src/arkreactor/VM/Value/Closure.cpp b/src/arkreactor/VM/Value/Closure.cpp index 2f8bede0..033fb215 100644 --- a/src/arkreactor/VM/Value/Closure.cpp +++ b/src/arkreactor/VM/Value/Closure.cpp @@ -1,7 +1,6 @@ #include #include -#include #include #include @@ -20,12 +19,9 @@ namespace Ark::internal bool Closure::hasFieldEndingWith(const std::string& end, const VM& vm) const { - for (const auto id : std::ranges::views::keys(m_scope->m_data)) - { - if (end.ends_with(":" + vm.m_state.m_symbols[id])) - return true; - } - return false; + return std::ranges::any_of(std::ranges::views::keys(m_scope->m_data), [&vm, &end](const auto& id) { + return end.ends_with(":" + vm.m_state.m_symbols[id]); + }); } std::string Closure::toString(VM& vm) const noexcept diff --git a/src/arkscript/Formatter.cpp b/src/arkscript/Formatter.cpp index 8ea3f9c0..3306612d 100644 --- a/src/arkscript/Formatter.cpp +++ b/src/arkscript/Formatter.cpp @@ -167,48 +167,48 @@ bool Formatter::shouldAddNewLineBetweenNodes(const Node& node, const std::size_t std::string Formatter::format(const Node& node, std::size_t indent, bool after_newline) { - std::string output; + std::string result; if (!node.comment().empty()) { - output += formatComment(node.comment(), indent); + result += formatComment(node.comment(), indent); after_newline = true; } if (after_newline) - output += prefix(indent); + result += prefix(indent); switch (node.nodeType()) { case NodeType::Symbol: - output += node.string(); + result += node.string(); break; case NodeType::Capture: - output += "&" + node.string(); + result += "&" + node.string(); break; case NodeType::Keyword: - output += std::string(keywords[static_cast(node.keyword())]); + result += std::string(keywords[static_cast(node.keyword())]); break; case NodeType::String: - output += fmt::format("\"{}\"", node.string()); + result += fmt::format("\"{}\"", node.string()); break; case NodeType::Number: - output += fmt::format("{}", node.number()); + result += fmt::format("{}", node.number()); break; case NodeType::List: - output += formatBlock(node, indent, after_newline); + result += formatBlock(node, indent, after_newline); break; case NodeType::Spread: - output += fmt::format("...{}", node.string()); + result += fmt::format("...{}", node.string()); break; case NodeType::Field: { std::string field = format(node.constList()[0], indent, false); for (std::size_t i = 1, end = node.constList().size(); i < end; ++i) field += "." + format(node.constList()[i], indent, false); - output += field; + result += field; break; } case NodeType::Macro: - output += formatMacro(node, indent); + result += formatMacro(node, indent); break; // not handling Namespace nor Unused node types as those can not be generated by the parser case NodeType::Namespace: @@ -218,22 +218,22 @@ std::string Formatter::format(const Node& node, std::size_t indent, bool after_n } if (!node.commentAfter().empty()) - output += " " + formatComment(node.commentAfter(), /* indent= */ 0); + result += " " + formatComment(node.commentAfter(), /* indent= */ 0); - return output; + return result; } std::string Formatter::formatComment(const std::string& comment, const std::size_t indent) const { - std::string output = prefix(indent); + std::string result = prefix(indent); for (std::size_t i = 0, end = comment.size(); i < end; ++i) { - output += comment[i]; + result += comment[i]; if (comment[i] == '\n' && i != end - 1) - output += prefix(indent); + result += prefix(indent); } - return output; + return result; } std::string Formatter::formatBlock(const Node& node, const std::size_t indent, const bool after_newline) @@ -393,7 +393,7 @@ std::string Formatter::formatBegin(const Node& node, const std::size_t indent, c // if the block is a top level one, we also need to increment indentation level const std::size_t inner_indentation = indent + (after_newline ? 1 : 0) + (indent == 0 ? 1 : 0); - std::string output = "{\n"; + std::string result = "{\n"; // skip begin keyword for (std::size_t i = 1, end = node.constList().size(); i < end; ++i) { @@ -401,19 +401,19 @@ std::string Formatter::formatBegin(const Node& node, const std::size_t indent, c // we want to preserve the node grouping by the user, but remove useless duplicate new line // but that shouldn't apply to the first node of the block if (shouldAddNewLineBetweenNodes(node, i) && i > 1) - output += "\n"; + result += "\n"; - output += format(child, inner_indentation, true); + result += format(child, inner_indentation, true); if (i != end - 1) - output += "\n"; + result += "\n"; } // if the last node has a comment, add a new line if (!node.constList().empty() && !node.constList().back().commentAfter().empty()) - output += "\n" + prefix(indent) + "}"; + result += "\n" + prefix(indent) + "}"; else - output += " }"; - return output; + result += " }"; + return result; } std::string Formatter::formatImport(const Node& node, const std::size_t indent) @@ -492,19 +492,19 @@ std::string Formatter::formatCall(const Node& node, const std::size_t indent) is_multiline = true; } - std::string output = is_list ? "[" : ("(" + format(node.constList()[0], indent, false)); + std::string result = is_list ? "[" : ("(" + format(node.constList()[0], indent, false)); for (std::size_t i = 0, end = formatted_args.size(); i < end; ++i) { const std::string formatted_node = formatted_args[i]; if (is_multiline) - output += "\n" + format(node.constList()[i + 1], indent + 1, true); + result += "\n" + format(node.constList()[i + 1], indent + 1, true); else - output += (is_list && i == 0 ? "" : " ") + formatted_node; + result += (is_list && i == 0 ? "" : " ") + formatted_node; } if (!node.constList().back().commentAfter().empty()) - output += "\n" + prefix(indent); - output += is_list ? "]" : ")"; - return output; + result += "\n" + prefix(indent); + result += is_list ? "]" : ")"; + return result; } std::string Formatter::formatMacro(const Node& node, const std::size_t indent) @@ -512,22 +512,22 @@ std::string Formatter::formatMacro(const Node& node, const std::size_t indent) if (isListStartingWithKeyword(node, Keyword::If)) return formatCondition(node, indent, /* is_macro= */ true); - std::string output = "($ "; + std::string result = "($ "; bool after_newline = false; for (std::size_t i = 0, end = node.constList().size(); i < end; ++i) { - output += format(node.constList()[i], indent + 1, after_newline); + result += format(node.constList()[i], indent + 1, after_newline); after_newline = false; if (!node.constList()[i].commentAfter().empty()) { - output += "\n"; + result += "\n"; after_newline = true; } else if (i != end - 1) - output += " "; + result += " "; } - return output + ")"; + return result + ")"; } diff --git a/src/arkscript/JsonCompiler.cpp b/src/arkscript/JsonCompiler.cpp index 7e51c957..a30e0300 100644 --- a/src/arkscript/JsonCompiler.cpp +++ b/src/arkscript/JsonCompiler.cpp @@ -179,10 +179,13 @@ std::string JsonCompiler::_compile(const Node& node) bool is_glob = node.constList()[2].nodeType() == NodeType::Symbol && node.constList()[2].string() == "*"; std::vector syms; if (node.constList()[2].nodeType() == NodeType::List) - { - for (const auto& sym : node.constList()[2].constList()) - syms.push_back('"' + sym.string() + '"'); - } + std::ranges::transform( + node.constList()[2].constList(), + std::back_inserter(syms), + [](const auto& sym) { + return fmt::format("{:?}", sym.string()); + }); + json += fmt::format( R"({{"type": "Import", "package": "{}", "glob": {}, "symbols": [{}]}})", package, diff --git a/src/arkscript/REPL/Repl.cpp b/src/arkscript/REPL/Repl.cpp index fbd271b6..b0641956 100644 --- a/src/arkscript/REPL/Repl.cpp +++ b/src/arkscript/REPL/Repl.cpp @@ -16,11 +16,10 @@ namespace Ark Repl::Repl(const std::vector& lib_env) : m_line_count(1), m_running(true), m_old_ip(0), m_lib_env(lib_env), - m_state(m_lib_env), m_vm(m_state), m_has_init_vm(false) - { - m_keywords = getAllKeywords(); - m_words_colors = getColorPerKeyword(); - } + m_state(m_lib_env), m_vm(m_state), m_has_init_vm(false), + m_keywords(getAllKeywords()), + m_words_colors(getColorPerKeyword()) + {} int Repl::run() { diff --git a/src/arkscript/REPL/Utils.cpp b/src/arkscript/REPL/Utils.cpp index 814b36b3..573e0fce 100644 --- a/src/arkscript/REPL/Utils.cpp +++ b/src/arkscript/REPL/Utils.cpp @@ -29,14 +29,20 @@ namespace Ark::internal { std::vector output; output.reserve(keywords.size() + Language::listInstructions.size() + Language::operators.size() + Builtins::builtins.size() + 2); - for (auto keyword : keywords) - output.emplace_back(keyword); - for (auto inst : Language::listInstructions) - output.emplace_back(inst); - for (auto op : Language::operators) - output.emplace_back(op); - for (const auto& builtin : std::ranges::views::keys(Builtins::builtins)) - output.push_back(builtin); + + std::ranges::transform(keywords, std::back_inserter(output), [](const auto& string_view) { + return std::string(string_view); + }); + std::ranges::transform(Language::listInstructions, std::back_inserter(output), [](const auto& string_view) { + return std::string(string_view); + }); + std::ranges::transform(Language::operators, std::back_inserter(output), [](const auto& string_view) { + return std::string(string_view); + }); + std::ranges::transform(std::ranges::views::keys(Builtins::builtins), std::back_inserter(output), [](const auto& string) { + return string; + }); + output.emplace_back("and"); output.emplace_back("or"); @@ -46,22 +52,27 @@ namespace Ark::internal std::vector> getColorPerKeyword() { using namespace replxx; + using K = std::string; + using V = Replxx::Color; - std::vector> output; + std::vector> output; output.reserve(keywords.size() + Language::listInstructions.size() + Language::operators.size() + Builtins::builtins.size() + 4); - for (auto keyword : keywords) - output.emplace_back(keyword, Replxx::Color::BRIGHTRED); - for (auto inst : Language::listInstructions) - output.emplace_back(inst, Replxx::Color::GREEN); - for (auto op : Language::operators) - { - auto safe_op = std::string(op); + + std::ranges::transform(keywords, std::back_inserter(output), [](const auto& string_view) { + return std::make_pair(std::string(string_view), Replxx::Color::BRIGHTRED); + }); + std::ranges::transform(Language::listInstructions, std::back_inserter(output), [](const auto& string_view) { + return std::make_pair(std::string(string_view), Replxx::Color::GREEN); + }); + std::ranges::transform(Language::operators, std::back_inserter(output), [](const auto& string_view) { + auto safe_op = std::string(string_view); if (const auto it = safe_op.find_first_of(R"(-+=/*<>[]()?")"); it != std::string::npos) safe_op.insert(it, "\\"); - output.emplace_back(safe_op, Replxx::Color::BRIGHTBLUE); - } - for (const auto& builtin : std::ranges::views::keys(Builtins::builtins)) - output.emplace_back(builtin, Replxx::Color::GREEN); + return std::make_pair(safe_op, Replxx::Color::BRIGHTBLUE); + }); + std::ranges::transform(std::ranges::views::keys(Builtins::builtins), std::back_inserter(output), [](const auto& string) { + return std::make_pair(string, Replxx::Color::GREEN); + }); output.emplace_back("and", Replxx::Color::BRIGHTBLUE); output.emplace_back("or", Replxx::Color::BRIGHTBLUE); From 078d0f7b0247da655bd1458a2beb22c4a98b4d39 Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Sun, 4 May 2025 18:53:35 +0200 Subject: [PATCH 10/11] fix(vm): correctly display the passed arguments to functions inside arity errors, and display the function name in async arity errors --- src/arkreactor/VM/VM.cpp | 5 ++++- .../DiagnosticsSuite/runtime/arity_error_async.expected | 2 +- .../DiagnosticsSuite/runtime/not_enough_args.expected | 2 +- .../DiagnosticsSuite/runtime/too_many_args.expected | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/arkreactor/VM/VM.cpp b/src/arkreactor/VM/VM.cpp index dd9aea8f..f9d954f4 100644 --- a/src/arkreactor/VM/VM.cpp +++ b/src/arkreactor/VM/VM.cpp @@ -263,6 +263,9 @@ namespace Ark Future* VM::createFuture(std::vector& args) { ExecutionContext* ctx = createAndGetContext(); + // so that we have access to the presumed symbol id of the function we are calling + // assuming that the callee is always the global context + ctx->last_symbol = m_execution_contexts.front()->last_symbol; // doing this after having created the context // because the context uses the mutex and we don't want a deadlock @@ -1618,7 +1621,7 @@ namespace Ark if (passed_arg_count > 0) arg_vals.emplace_back(""); // for formatting, so that we have a space between the function and the args - for (std::size_t i = 0; i < passed_arg_count && i + 1 >= context.sp; ++i) + for (std::size_t i = 0; i < passed_arg_count && i + 1 <= context.sp; ++i) // -1 on the stack because we always point to the next available slot arg_vals.push_back(context.stack[context.sp - i - 1].toString(*this)); diff --git a/tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.expected b/tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.expected index 2fc37bf0..6c7903b1 100644 --- a/tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.expected +++ b/tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.expected @@ -1,4 +1,4 @@ -ArityError: When calling `(Function@1)', received 4 arguments, but expected 3: `(Function@1 a b c)' +ArityError: When calling `(sum 1 2 3 4)', received 4 arguments, but expected 3: `(sum a b c)' In file tests/unittests/resources/DiagnosticsSuite/runtime/arity_error_async.ark 1 | (let sum (fun (a b c) diff --git a/tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.expected b/tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.expected index 49646678..a0d41e36 100644 --- a/tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.expected +++ b/tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.expected @@ -1,4 +1,4 @@ -ArityError: When calling `(foo)', received 1 argument, but expected 2: `(foo a b)' +ArityError: When calling `(foo 1)', received 1 argument, but expected 2: `(foo a b)' In file tests/unittests/resources/DiagnosticsSuite/runtime/not_enough_args.ark 1 | (let foo (fun (a b) (+ a b))) diff --git a/tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.expected b/tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.expected index 766fc0ee..6e912f6c 100644 --- a/tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.expected +++ b/tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.expected @@ -1,4 +1,4 @@ -ArityError: When calling `(foo)', received 3 arguments, but expected 2: `(foo a b)' +ArityError: When calling `(foo 1 2 3)', received 3 arguments, but expected 2: `(foo a b)' In file tests/unittests/resources/DiagnosticsSuite/runtime/too_many_args.ark 1 | (let foo (fun (a b) (+ a b))) From 726127af93921af7dacbbb741381099e970000f9 Mon Sep 17 00:00:00 2001 From: Alexandre Plateau Date: Sun, 4 May 2025 18:56:17 +0200 Subject: [PATCH 11/11] fix: change the color of the function name inside runtime typechecking errors from blue to cyan to be easier to read inside dark terminals --- src/arkreactor/TypeChecker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arkreactor/TypeChecker.cpp b/src/arkreactor/TypeChecker.cpp index 546c0880..1d6b5ce5 100644 --- a/src/arkreactor/TypeChecker.cpp +++ b/src/arkreactor/TypeChecker.cpp @@ -112,7 +112,7 @@ namespace Ark::types { fmt::dynamic_format_arg_store store; if (colorize) - store.push_back(fmt::styled(funcname, fmt::fg(fmt::color::blue))); + store.push_back(fmt::styled(funcname, fmt::fg(fmt::color::cyan))); else store.push_back(funcname); fmt::vprint(os, "Function {} expected ", store);