From bf74cad4775af085b7cfba829a0a1c23208c5586 Mon Sep 17 00:00:00 2001 From: Tess Strickland Date: Thu, 25 Mar 2021 13:47:03 +0000 Subject: [PATCH 1/4] [vm/compiler] Change when parents of local functions are retained. Now they are only retained if one of the following is true: * The parent is Future.wait or Future.timeout. * The local function is a generated body of an async/async*/sync* function. * Symbolic stack traces are enabled. When a local closure's parent is dropped, the parent name will be printed as `` in places like exceptions. Changes in Flutter gallery in release-sizeopt mode: * ARM7: ROData -1.41%, Isolate snapshot -2.35%, Total snapshot -0.54%, Isolate heap -1.38%, Total heap -1.38% * ARM8: ROData -1.55%, Isolate snapshot -2.34%, Total snapshot -0.65%, Isolate heap -1.41%, Total heap -1.41% TEST=Existing tests on CI. Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-nnbd-linux-release-x64-try, vm-kernel-precomp-dwarf-linux-product-x64-try Change-Id: I9d05f9e0e30e9f428eff16a15b0f1eeb974419c8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/190023 Commit-Queue: Tess Strickland Reviewed-by: Martin Kustermann --- pkg/expect/lib/expect.dart | 11 +++ runtime/vm/compiler/aot/precompiler.cc | 89 ++++++++++++------- runtime/vm/object.cc | 79 +++++++++------- runtime/vm/object.h | 10 +++ runtime/vm/raw_object.h | 5 ++ .../no_such_args_error_message_vm_test.dart | 9 +- .../no_such_args_error_message_vm_test.dart | 9 +- 7 files changed, 144 insertions(+), 68 deletions(-) diff --git a/pkg/expect/lib/expect.dart b/pkg/expect/lib/expect.dart index 47ada711c366c..e6cf6e5fcf6b5 100644 --- a/pkg/expect/lib/expect.dart +++ b/pkg/expect/lib/expect.dart @@ -451,6 +451,17 @@ class Expect { } } + /// Checks that [haystack] contains one of the given substrings [needles]. + /// + /// For example, this succeeds: + /// + /// Expect.containsOneOf(["a", "h"], "abcdefg"); + static void containsOneOf(Iterable needles, String haystack) { + if (!needles.any((s) => haystack.contains(s))) { + _fail("None of the strings '$needles' found within '$haystack'"); + } + } + /// Checks that [actual] contains a given list of [substrings] in order. /// /// For example, this succeeds: diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc index 11c57fc1f0e1f..e84949fe6c6dd 100644 --- a/runtime/vm/compiler/aot/precompiler.cc +++ b/runtime/vm/compiler/aot/precompiler.cc @@ -111,6 +111,8 @@ struct RetainReasons : public AllStatic { static constexpr const char* kImplicitClosure = "implicit closure"; // The object is a local closure. static constexpr const char* kLocalClosure = "local closure"; + // The object is a sync or async function or in the parent chain of one. + static constexpr const char* kIsSyncAsyncFunction = "sync or async function"; // The object is the initializer for a static field. static constexpr const char* kStaticFieldInitializer = "static field initializer"; @@ -810,9 +812,16 @@ void Precompiler::AddCalleesOf(const Function& function, intptr_t gop_offset) { for (auto& view : static_calls) { entry = view.Get(); if (entry.IsFunction()) { - AddFunction(Function::Cast(entry), FLAG_retain_function_objects - ? RetainReasons::kForcedRetain - : nullptr); + // Since generally function objects are retained when symbolic stack + // traces are enabled, only return kForcedRetain to mark that retention + // was otherwise forced. + const char* const reason = + FLAG_retain_function_objects + ? (!FLAG_dwarf_stack_traces_mode + ? RetainReasons::kSymbolicStackTraces + : RetainReasons::kForcedRetain) + : nullptr; + AddFunction(Function::Cast(entry), reason); ASSERT(view.Get() == Code::null()); continue; } @@ -960,12 +969,13 @@ void Precompiler::AddRetainReason(const Object& obj, const char* reason) { void Precompiler::AddTypesOf(const Function& function) { if (function.IsNull()) return; + if (functions_to_retain_.ContainsKey(function)) return; + functions_to_retain_.Insert(function); + if (retained_reasons_writer_ != nullptr && !retained_reasons_writer_->HasReason(function)) { FATAL("no retaining reasons given"); } - if (functions_to_retain_.ContainsKey(function)) return; - functions_to_retain_.Insert(function); if (function.NeedsMonomorphicCheckedEntry(Z) || Function::IsDynamicInvocationForwarderName(function.name())) { @@ -983,16 +993,51 @@ void Precompiler::AddTypesOf(const Function& function) { ASSERT(defaults.IsCanonical()); AddTypeArguments(defaults); } - // A function can always be inlined and have only a nested local function - // remain. - const Function& parent = Function::Handle(Z, function.parent_function()); - if (!parent.IsNull()) { - AddRetainReason(parent, RetainReasons::kLocalParent); - AddTypesOf(parent); - } + // A class may have all functions inlined except a local function. const Class& owner = Class::Handle(Z, function.Owner()); AddTypesOf(owner); + + const auto& parent_function = Function::Handle(Z, function.parent_function()); + if (parent_function.IsNull()) { + return; + } + + // It can happen that all uses of a function are inlined, leaving + // a compiled local function with an uncompiled parent. Retain such + // parents and their enclosing classes and libraries when needed. + + // We always retain parents if symbolic stack traces are enabled. + if (!FLAG_dwarf_stack_traces_mode) { + AddRetainReason(parent_function, RetainReasons::kSymbolicStackTraces); + AddTypesOf(parent_function); + return; + } + + // Special case to allow walking of lazy async stacks to work. + // Should match parent checks in CallerClosureFinder::FindCaller. + if (parent_function.recognized_kind() == MethodRecognizer::kFutureTimeout || + parent_function.recognized_kind() == MethodRecognizer::kFutureWait) { + AddRetainReason(parent_function, RetainReasons::kIsSyncAsyncFunction); + AddTypesOf(parent_function); + return; + } + + // Preserve parents for generated bodies in async/async*/sync* functions, + // since predicates like Function::IsAsyncClosure(), etc. need that info. + if (function.is_generated_body()) { + AddRetainReason(parent_function, RetainReasons::kIsSyncAsyncFunction); + AddTypesOf(parent_function); + return; + } + + // We're not retaining the parent due to this function, so wrap it with + // a weak serialization reference. + const auto& data = ClosureData::CheckedHandle(Z, function.data()); + const auto& wsr = WeakSerializationReference::Handle( + Z, WeakSerializationReference::New(parent_function, + Object::null_function())); + data.set_parent_function(wsr); } void Precompiler::AddType(const AbstractType& abstype) { @@ -1792,8 +1837,7 @@ void Precompiler::TraceForRetainedFunctions() { if (fields_to_retain_.HasKey(&field) && field.HasInitializerFunction()) { function = field.InitializerFunction(); - bool retain = possibly_retained_functions_.ContainsKey(function); - if (retain) { + if (possibly_retained_functions_.ContainsKey(function)) { AddTypesOf(function); } } @@ -1814,24 +1858,9 @@ void Precompiler::TraceForRetainedFunctions() { } } - auto& parent_function = Function::Handle(Z); ClosureFunctionsCache::ForAllClosureFunctions([&](const Function& function) { - bool retain = possibly_retained_functions_.ContainsKey(function); - if (retain) { + if (possibly_retained_functions_.ContainsKey(function)) { AddTypesOf(function); - - cls = function.Owner(); - AddTypesOf(cls); - - // It can happen that all uses of a function are inlined, leaving - // a compiled local function with an uncompiled parent. Retain such - // parents and their enclosing classes and libraries. - parent_function = function.parent_function(); - while (!parent_function.IsNull()) { - AddRetainReason(parent_function, RetainReasons::kLocalParent); - AddTypesOf(parent_function); - parent_function = parent_function.parent_function(); - } } return true; // Continue iteration. }); diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc index 12b22df4cb0e3..05a38c99cee05 100644 --- a/runtime/vm/object.cc +++ b/runtime/vm/object.cc @@ -7082,9 +7082,16 @@ void Function::set_accessor_field(const Field& value) const { FunctionPtr Function::parent_function() const { if (!IsClosureFunction()) return Function::null(); - const Object& obj = Object::Handle(untag()->data()); + Object& obj = Object::Handle(untag()->data()); ASSERT(!obj.IsNull()); +#if defined(DART_PRECOMPILER) + obj = ClosureData::Cast(obj).parent_function(); + obj = WeakSerializationReference::Unwrap(obj); + if (!obj.IsFunction()) return Function::null(); + return Function::RawCast(obj.ptr()); +#else return ClosureData::Cast(obj).parent_function(); +#endif } void Function::set_parent_function(const Function& value) const { @@ -7168,8 +7175,7 @@ TypeArgumentsPtr Function::default_type_arguments( if (!CachesDefaultTypeArguments()) { UNREACHABLE(); } - const auto& closure_data = - ClosureData::Handle(ClosureData::RawCast(untag()->data())); + const auto& closure_data = ClosureData::Handle(ClosureData::RawCast(data())); ASSERT(!closure_data.IsNull()); if (kind_out != nullptr) { *kind_out = closure_data.default_type_arguments_kind(); @@ -7181,8 +7187,7 @@ void Function::set_default_type_arguments(const TypeArguments& value) const { if (!CachesDefaultTypeArguments()) { UNREACHABLE(); } - const auto& closure_data = - ClosureData::Handle(ClosureData::RawCast(untag()->data())); + const auto& closure_data = ClosureData::Handle(ClosureData::RawCast(data())); ASSERT(!closure_data.IsNull()); auto kind = DefaultTypeArgumentsKindFor(value); ASSERT(kind != DefaultTypeArgumentsKind::kInvalid); @@ -7226,7 +7231,7 @@ FunctionPtr Function::implicit_closure_function() const { IsFieldInitializer() || IsFfiTrampoline()) { return Function::null(); } - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(obj.IsNull() || obj.IsScript() || obj.IsFunction() || obj.IsArray()); if (obj.IsNull() || obj.IsScript()) { return Function::null(); @@ -7242,7 +7247,7 @@ FunctionPtr Function::implicit_closure_function() const { void Function::set_implicit_closure_function(const Function& value) const { ASSERT(!IsClosureFunction()); - const Object& old_data = Object::Handle(untag()->data()); + const Object& old_data = Object::Handle(data()); if (is_native()) { ASSERT(old_data.IsArray()); ASSERT((Array::Cast(old_data).At(1) == Object::null()) || value.IsNull()); @@ -7261,14 +7266,14 @@ void Function::set_implicit_closure_function(const Function& value) const { void Function::SetFfiCSignature(const FunctionType& sig) const { ASSERT(IsFfiTrampoline()); - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(!obj.IsNull()); FfiTrampolineData::Cast(obj).set_c_signature(sig); } FunctionTypePtr Function::FfiCSignature() const { ASSERT(IsFfiTrampoline()); - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(!obj.IsNull()); return FfiTrampolineData::Cast(obj).c_signature(); } @@ -7299,42 +7304,42 @@ bool Function::FfiCSignatureReturnsStruct() const { int32_t Function::FfiCallbackId() const { ASSERT(IsFfiTrampoline()); - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(!obj.IsNull()); return FfiTrampolineData::Cast(obj).callback_id(); } void Function::SetFfiCallbackId(int32_t value) const { ASSERT(IsFfiTrampoline()); - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(!obj.IsNull()); FfiTrampolineData::Cast(obj).set_callback_id(value); } FunctionPtr Function::FfiCallbackTarget() const { ASSERT(IsFfiTrampoline()); - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(!obj.IsNull()); return FfiTrampolineData::Cast(obj).callback_target(); } void Function::SetFfiCallbackTarget(const Function& target) const { ASSERT(IsFfiTrampoline()); - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(!obj.IsNull()); FfiTrampolineData::Cast(obj).set_callback_target(target); } InstancePtr Function::FfiCallbackExceptionalReturn() const { ASSERT(IsFfiTrampoline()); - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(!obj.IsNull()); return FfiTrampolineData::Cast(obj).callback_exceptional_return(); } void Function::SetFfiCallbackExceptionalReturn(const Instance& value) const { ASSERT(IsFfiTrampoline()); - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(!obj.IsNull()); FfiTrampolineData::Cast(obj).set_callback_exceptional_return(value); } @@ -7346,7 +7351,7 @@ const char* Function::KindToCString(UntaggedFunction::Kind kind) { FunctionPtr Function::ForwardingTarget() const { ASSERT(kind() == UntaggedFunction::kDynamicInvocationForwarder); Array& checks = Array::Handle(); - checks ^= untag()->data(); + checks ^= data(); return Function::RawCast(checks.At(0)); } @@ -7393,7 +7398,7 @@ void Function::set_owner(const Object& value) const { RegExpPtr Function::regexp() const { ASSERT(kind() == UntaggedFunction::kIrregexpFunction); - const Array& pair = Array::Cast(Object::Handle(untag()->data())); + const Array& pair = Array::Cast(Object::Handle(data())); return RegExp::RawCast(pair.At(0)); } @@ -7404,13 +7409,13 @@ class StringSpecializationCid intptr_t Function::string_specialization_cid() const { ASSERT(kind() == UntaggedFunction::kIrregexpFunction); - const Array& pair = Array::Cast(Object::Handle(untag()->data())); + const Array& pair = Array::Cast(Object::Handle(data())); return StringSpecializationCid::decode(Smi::Value(Smi::RawCast(pair.At(1)))); } bool Function::is_sticky_specialization() const { ASSERT(kind() == UntaggedFunction::kIrregexpFunction); - const Array& pair = Array::Cast(Object::Handle(untag()->data())); + const Array& pair = Array::Cast(Object::Handle(data())); return StickySpecialization::decode(Smi::Value(Smi::RawCast(pair.At(1)))); } @@ -7419,7 +7424,7 @@ void Function::SetRegExpData(const RegExp& regexp, bool sticky) const { ASSERT(kind() == UntaggedFunction::kIrregexpFunction); ASSERT(IsStringClassId(string_specialization_cid)); - ASSERT(untag()->data() == Object::null()); + ASSERT(data() == Object::null()); const Array& pair = Array::Handle(Array::New(2, Heap::kOld)); pair.SetAt(0, regexp); pair.SetAt(1, Smi::Handle(Smi::New(StickySpecialization::encode(sticky) | @@ -7430,7 +7435,7 @@ void Function::SetRegExpData(const RegExp& regexp, StringPtr Function::native_name() const { ASSERT(is_native()); - const Object& obj = Object::Handle(untag()->data()); + const Object& obj = Object::Handle(data()); ASSERT(obj.IsArray()); return String::RawCast(Array::Cast(obj).At(0)); } @@ -7447,7 +7452,7 @@ void Function::set_native_name(const String& value) const { // closure function. // // We therefore handle both cases. - const Object& old_data = Object::Handle(zone, untag()->data()); + const Object& old_data = Object::Handle(zone, data()); ASSERT(old_data.IsNull() || (old_data.IsFunction() && Function::Handle(zone, Function::RawCast(old_data.ptr())) @@ -9260,7 +9265,7 @@ void Function::SetKernelDataAndScript(const Script& script, ScriptPtr Function::script() const { // NOTE(turnidge): If you update this function, you probably want to // update Class::PatchFieldsAndFunctions() at the same time. - const Object& data = Object::Handle(untag()->data()); + const Object& data = Object::Handle(this->data()); if (IsDynamicInvocationForwarder()) { const auto& forwarding_target = Function::Handle(ForwardingTarget()); return forwarding_target.script(); @@ -9288,14 +9293,18 @@ ScriptPtr Function::script() const { return PatchClass::Cast(obj).script(); } if (IsClosureFunction()) { - return Function::Handle(parent_function()).script(); + const Function& function = Function::Handle(parent_function()); +#if defined(DART_PRECOMPILED_RUNTIME) + if (function.IsNull()) return Script::null(); +#endif + return function.script(); } ASSERT(obj.IsClass()); return Class::Cast(obj).script(); } ExternalTypedDataPtr Function::KernelData() const { - Object& data = Object::Handle(untag()->data()); + Object& data = Object::Handle(this->data()); if (data.IsArray()) { Object& script = Object::Handle(Array::Cast(data).At(0)); if (script.IsScript()) { @@ -9322,7 +9331,7 @@ intptr_t Function::KernelDataProgramOffset() const { IsFfiTrampoline()) { return 0; } - Object& data = Object::Handle(untag()->data()); + Object& data = Object::Handle(this->data()); if (data.IsArray()) { Object& script = Object::Handle(Array::Cast(data).At(0)); if (script.IsScript()) { @@ -9400,10 +9409,14 @@ const char* Function::QualifiedUserVisibleNameCString() const { static void FunctionPrintNameHelper(const Function& fun, const NameFormattingParams& params, BaseTextBuffer* printer) { - if (fun.IsLocalFunction()) { + if (fun.IsNonImplicitClosureFunction()) { if (params.include_parent_name) { const auto& parent = Function::Handle(fun.parent_function()); - parent.PrintName(params, printer); + if (parent.IsNull()) { + printer->AddString(Symbols::OptimizedOut().ToCString()); + } else { + parent.PrintName(params, printer); + } // A function's scrubbed name and its user visible name are identical. printer->AddString("."); } @@ -9919,10 +9932,10 @@ const char* ClosureData::ToCString() const { buffer.Printf("ClosureData: context_scope: 0x%" Px "", static_cast(context_scope())); buffer.AddString(" parent_function: "); - if (parent_function() == Function::null()) { + if (parent_function() == Object::null()) { buffer.AddString("null"); } else { - buffer.AddString(Function::Handle(zone, parent_function()).ToCString()); + buffer.AddString(Object::Handle(parent_function()).ToCString()); } buffer.Printf(" implicit_static_closure: 0x%" Px "", static_cast(implicit_static_closure())); @@ -10061,9 +10074,15 @@ void ClosureData::set_implicit_static_closure(const Instance& closure) const { untag()->set_closure(closure.ptr()); } +#if defined(DART_PRECOMPILER) +void ClosureData::set_parent_function(const Object& value) const { + untag()->set_parent_function(value.ptr()); +} +#else void ClosureData::set_parent_function(const Function& value) const { untag()->set_parent_function(value.ptr()); } +#endif void FfiTrampolineData::set_c_signature(const FunctionType& value) const { untag()->set_c_signature(value.ptr()); diff --git a/runtime/vm/object.h b/runtime/vm/object.h index fd021df8334ee..5a0d154a77ba5 100644 --- a/runtime/vm/object.h +++ b/runtime/vm/object.h @@ -3726,6 +3726,8 @@ class Function : public Object { void set_eval_script(const Script& value) const; void set_num_optional_parameters(intptr_t value) const; // Encoded value. void set_kind_tag(uint32_t value) const; + + ObjectPtr data() const { return untag()->data(); } void set_data(const Object& value) const; static FunctionPtr New(Heap::Space space = Heap::kOld); @@ -3739,6 +3741,7 @@ class Function : public Object { friend class UntaggedFunction; friend class ClassFinalizer; // To reset parent_function. friend class Type; // To adjust parent_function. + friend class Precompiler; // To access closure data. friend class ProgramVisitor; // For set_parameter_types/names. }; @@ -3763,8 +3766,14 @@ class ClosureData : public Object { void set_context_scope(const ContextScope& value) const; // Enclosing function of this local function. +#if defined(DART_PRECOMPILER) + // Can be WSR wrapped in the precompiler. + ObjectPtr parent_function() const { return untag()->parent_function(); } + void set_parent_function(const Object& value) const; +#else FunctionPtr parent_function() const { return untag()->parent_function(); } void set_parent_function(const Function& value) const; +#endif InstancePtr implicit_static_closure() const { return untag()->closure(); @@ -3785,6 +3794,7 @@ class ClosureData : public Object { friend class Class; friend class Function; friend class HeapProfiler; + friend class Precompiler; // To wrap parent functions in WSRs. }; enum class EntryPointPragma { diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h index a4f0b8aa191e9..5776c386533ee 100644 --- a/runtime/vm/raw_object.h +++ b/runtime/vm/raw_object.h @@ -1284,7 +1284,12 @@ class UntaggedClosureData : public UntaggedObject { VISIT_FROM(CompressedObjectPtr, context_scope) COMPRESSED_POINTER_FIELD(ContextScopePtr, context_scope) // Enclosing function of this local function. +#if defined(DART_PRECOMPILER) + // Can be wrapped by a WSR in the precompiler. + COMPRESSED_POINTER_FIELD(ObjectPtr, parent_function) +#else COMPRESSED_POINTER_FIELD(FunctionPtr, parent_function) +#endif // Closure object for static implicit closures. COMPRESSED_POINTER_FIELD(InstancePtr, closure) // Instantiate-to-bounds TAV for use when no TAV is provided. diff --git a/tests/language/vm/no_such_args_error_message_vm_test.dart b/tests/language/vm/no_such_args_error_message_vm_test.dart index d3ca510069206..34299076ef559 100644 --- a/tests/language/vm/no_such_args_error_message_vm_test.dart +++ b/tests/language/vm/no_such_args_error_message_vm_test.dart @@ -15,10 +15,11 @@ testClosureMessage() { try { call_with_bar(() {}); } catch (e) { - final expectedStrings = [ - 'Tried calling: testClosureMessage.("bar")', - ]; - Expect.stringContainsInOrder(e.toString(), expectedStrings); + // The latter may happen if in --dwarf-stack-traces mode. + final possibleNames = ['testClosureMessage', '']; + Expect.containsOneOf( + possibleNames.map((s) => s + '.("bar")'), + e.toString()); } } diff --git a/tests/language_2/vm/no_such_args_error_message_vm_test.dart b/tests/language_2/vm/no_such_args_error_message_vm_test.dart index d3ca510069206..34299076ef559 100644 --- a/tests/language_2/vm/no_such_args_error_message_vm_test.dart +++ b/tests/language_2/vm/no_such_args_error_message_vm_test.dart @@ -15,10 +15,11 @@ testClosureMessage() { try { call_with_bar(() {}); } catch (e) { - final expectedStrings = [ - 'Tried calling: testClosureMessage.("bar")', - ]; - Expect.stringContainsInOrder(e.toString(), expectedStrings); + // The latter may happen if in --dwarf-stack-traces mode. + final possibleNames = ['testClosureMessage', '']; + Expect.containsOneOf( + possibleNames.map((s) => s + '.("bar")'), + e.toString()); } } From 5fc5c0ba6d7aa6b1b3e7905553f27bb9154670c3 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Thu, 25 Mar 2021 14:43:23 +0000 Subject: [PATCH 2/4] Migration: Properly escape strings in calls to querySelector. Fixes #45326. Bug: https://github.com/dart-lang/sdk/issues/45326 Change-Id: I990b230b7ee1df6d998dbb412814daa668c25e76 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/191383 Reviewed-by: Samuel Rawlins Commit-Queue: Paul Berry --- .../src/front_end/resources/resources.g.dart | 5549 +++++++++-------- .../lib/src/front_end/web/migration.dart | 5 +- 2 files changed, 2778 insertions(+), 2776 deletions(-) diff --git a/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart b/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart index 76fa78249ce70..0a76fa7b98d51 100644 --- a/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart +++ b/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart @@ -7708,7 +7708,7 @@ anMtbWV0YSB7CiAgY29sb3I6ICM2Mjc5Nzg7Cn0K '''; String _migration_js; -// migration_dart md5 is '23d7b6a103ce64da5f9b0357ebaec290' +// migration_dart md5 is 'd7a96da05fdcf155b1c5d194bf72fa1a' String _migration_js_base64 = ''' KGZ1bmN0aW9uIGRhcnRQcm9ncmFtKCl7ZnVuY3Rpb24gY29weVByb3BlcnRpZXMoYSxiKXt2YXIgcz1P YmplY3Qua2V5cyhhKQpmb3IodmFyIHI9MDtyPHMubGVuZ3RoO3IrKyl7dmFyIHE9c1tyXQpiW3FdPWFb @@ -9077,2779 +9077,2780 @@ YSl7dGhpcy5hPWF9LApUejpmdW5jdGlvbiBUeihhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApjbzpm dW5jdGlvbiBjbygpe30sCm5kOmZ1bmN0aW9uIG5kKCl7fSwKS2U6ZnVuY3Rpb24gS2UoYSl7dGhpcy5h PWF9LApoaTpmdW5jdGlvbiBoaSgpe319LFc9ewp4MzpmdW5jdGlvbigpe3JldHVybiB3aW5kb3d9LApa cjpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sCko2OmZ1bmN0aW9uKGEpe3ZhciBzPWRvY3VtZW50 -LmNyZWF0ZUVsZW1lbnQoImEiKQppZihhIT1udWxsKUMueG4uc0xVKHMsYSkKcmV0dXJuIHN9LApVOTpm -dW5jdGlvbihhLGIsYyl7dmFyIHMscj1kb2N1bWVudC5ib2R5CnIudG9TdHJpbmcKcz1DLlJZLnI2KHIs -YSxiLGMpCnMudG9TdHJpbmcKcj10LmFjCnI9bmV3IEguVTUobmV3IFcuZTcocyksci5DKCJhMihsRC5F -KSIpLmEobmV3IFcuQ3YoKSksci5DKCJVNTxsRC5FPiIpKQpyZXR1cm4gdC5oLmEoci5ncjgocikpfSwK -clM6ZnVuY3Rpb24oYSl7dmFyIHMscixxPSJlbGVtZW50IHRhZyB1bmF2YWlsYWJsZSIKdHJ5e3M9Si5Z -RShhKQppZih0eXBlb2Ygcy5nbnMoYSk9PSJzdHJpbmciKXE9cy5nbnMoYSl9Y2F0Y2gocil7SC5SdShy -KX1yZXR1cm4gcX0sCkMwOmZ1bmN0aW9uKGEsYil7YT1hK2ImNTM2ODcwOTExCmE9YSsoKGEmNTI0Mjg3 -KTw8MTApJjUzNjg3MDkxMQpyZXR1cm4gYV5hPj4+Nn0sCnJFOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBz -PVcuQzAoVy5DMChXLkMwKFcuQzAoMCxhKSxiKSxjKSxkKSxyPXMrKChzJjY3MTA4ODYzKTw8MykmNTM2 -ODcwOTExCnJePXI+Pj4xMQpyZXR1cm4gcisoKHImMTYzODMpPDwxNSkmNTM2ODcwOTExfSwKVE46ZnVu -Y3Rpb24oYSxiKXt2YXIgcyxyLHE9YS5jbGFzc0xpc3QKZm9yKHM9Yi5sZW5ndGgscj0wO3I8Yi5sZW5n -dGg7Yi5sZW5ndGg9PT1zfHwoMCxILmxrKShiKSwrK3IpcS5hZGQoYltyXSl9LApKRTpmdW5jdGlvbihh -LGIsYyxkLGUpe3ZhciBzPVcuYUYobmV3IFcudk4oYyksdC5CKQppZihzIT1udWxsJiYhMClKLmRaKGEs -YixzLCExKQpyZXR1cm4gbmV3IFcueEMoYSxiLHMsITEsZS5DKCJ4QzwwPiIpKX0sClR3OmZ1bmN0aW9u -KGEpe3ZhciBzPVcuSjYobnVsbCkscj13aW5kb3cubG9jYXRpb24Kcz1uZXcgVy5KUShuZXcgVy5tayhz -LHIpKQpzLkNZKGEpCnJldHVybiBzfSwKcUQ6ZnVuY3Rpb24oYSxiLGMsZCl7dC5oLmEoYSkKSC5oKGIp -CkguaChjKQp0LmNyLmEoZCkKcmV0dXJuITB9LApuWjpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcyxyLHEK -dC5oLmEoYSkKSC5oKGIpCkguaChjKQpzPXQuY3IuYShkKS5hCnI9cy5hCkMueG4uc0xVKHIsYykKcT1y -Lmhvc3RuYW1lCnM9cy5iCmlmKCEocT09cy5ob3N0bmFtZSYmci5wb3J0PT1zLnBvcnQmJnIucHJvdG9j -b2w9PXMucHJvdG9jb2wpKWlmKHE9PT0iIilpZihyLnBvcnQ9PT0iIil7cz1yLnByb3RvY29sCnM9cz09 -PSI6Inx8cz09PSIifWVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBzPSEwCnJldHVybiBzfSwKQmw6ZnVu -Y3Rpb24oKXt2YXIgcz10Lk4scj1QLnRNKEMuUXgscykscT10LmQwLmEobmV3IFcuSUEoKSkscD1ILlZN -KFsiVEVNUExBVEUiXSx0LnMpCnM9bmV3IFcuY3QocixQLkxzKHMpLFAuTHMocyksUC5McyhzKSxudWxs -KQpzLkNZKG51bGwsbmV3IEgubEooQy5ReCxxLHQuZmopLHAsbnVsbCkKcmV0dXJuIHN9LApxYzpmdW5j -dGlvbihhKXt2YXIgcwppZihhPT1udWxsKXJldHVybiBudWxsCmlmKCJwb3N0TWVzc2FnZSIgaW4gYSl7 -cz1XLlAxKGEpCmlmKHQuYVMuYihzKSlyZXR1cm4gcwpyZXR1cm4gbnVsbH1lbHNlIHJldHVybiB0LmNo -LmEoYSl9LApQMTpmdW5jdGlvbihhKXtpZihhPT09d2luZG93KXJldHVybiB0LmNpLmEoYSkKZWxzZSBy -ZXR1cm4gbmV3IFcuZFcoKX0sCmFGOmZ1bmN0aW9uKGEsYil7dmFyIHM9JC5YMwppZihzPT09Qy5OVSly -ZXR1cm4gYQpyZXR1cm4gcy5QeShhLGIpfSwKcUU6ZnVuY3Rpb24gcUUoKXt9LApHaDpmdW5jdGlvbiBH -aCgpe30sCmZZOmZ1bmN0aW9uIGZZKCl7fSwKbkI6ZnVuY3Rpb24gbkIoKXt9LApBejpmdW5jdGlvbiBB -eigpe30sClFQOmZ1bmN0aW9uIFFQKCl7fSwKbng6ZnVuY3Rpb24gbngoKXt9LApvSjpmdW5jdGlvbiBv -Sigpe30sCmlkOmZ1bmN0aW9uIGlkKCl7fSwKUUY6ZnVuY3Rpb24gUUYoKXt9LApOaDpmdW5jdGlvbiBO -aCgpe30sCmFlOmZ1bmN0aW9uIGFlKCl7fSwKSUI6ZnVuY3Rpb24gSUIoKXt9LApuNzpmdW5jdGlvbiBu -Nygpe30sCnd6OmZ1bmN0aW9uIHd6KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCmN2OmZ1bmN0aW9u -IGN2KCl7fSwKQ3Y6ZnVuY3Rpb24gQ3YoKXt9LAplYTpmdW5jdGlvbiBlYSgpe30sCkQwOmZ1bmN0aW9u -IEQwKCl7fSwKaEg6ZnVuY3Rpb24gaEgoKXt9LApoNDpmdW5jdGlvbiBoNCgpe30sCmJyOmZ1bmN0aW9u -IGJyKCl7fSwKVmI6ZnVuY3Rpb24gVmIoKXt9LApmSjpmdW5jdGlvbiBmSigpe30sCndhOmZ1bmN0aW9u -IHdhKCl7fSwKU2c6ZnVuY3Rpb24gU2coKXt9LAp3NzpmdW5jdGlvbiB3Nygpe30sCkFqOmZ1bmN0aW9u -IEFqKCl7fSwKZTc6ZnVuY3Rpb24gZTcoYSl7dGhpcy5hPWF9LAp1SDpmdW5jdGlvbiB1SCgpe30sCkJI -OmZ1bmN0aW9uIEJIKCl7fSwKU046ZnVuY3Rpb24gU04oKXt9LApldzpmdW5jdGlvbiBldygpe30sCmxw -OmZ1bmN0aW9uIGxwKCl7fSwKVGI6ZnVuY3Rpb24gVGIoKXt9LApJdjpmdW5jdGlvbiBJdigpe30sCldQ -OmZ1bmN0aW9uIFdQKCl7fSwKeVk6ZnVuY3Rpb24geVkoKXt9LAp3NjpmdW5jdGlvbiB3Nigpe30sCks1 -OmZ1bmN0aW9uIEs1KCl7fSwKQ206ZnVuY3Rpb24gQ20oKXt9LApDUTpmdW5jdGlvbiBDUSgpe30sCnc0 -OmZ1bmN0aW9uIHc0KCl7fSwKcmg6ZnVuY3Rpb24gcmgoKXt9LApjZjpmdW5jdGlvbiBjZigpe30sCmk3 -OmZ1bmN0aW9uIGk3KGEpe3RoaXMuYT1hfSwKU3k6ZnVuY3Rpb24gU3koYSl7dGhpcy5hPWF9LApLUzpm -dW5jdGlvbiBLUyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKQTM6ZnVuY3Rpb24gQTMoYSxiKXt0aGlz -LmE9YQp0aGlzLmI9Yn0sCkk0OmZ1bmN0aW9uIEk0KGEpe3RoaXMuYT1hfSwKRms6ZnVuY3Rpb24gRmso -YSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKUk86ZnVuY3Rpb24gUk8oYSxiLGMsZCl7dmFyIF89dGhp -cwpfLmE9YQpfLmI9YgpfLmM9YwpfLiR0aT1kfSwKZXU6ZnVuY3Rpb24gZXUoYSxiLGMsZCl7dmFyIF89 -dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLiR0aT1kfSwKeEM6ZnVuY3Rpb24geEMoYSxiLGMsZCxlKXt2 -YXIgXz10aGlzCl8uYj1hCl8uYz1iCl8uZD1jCl8uZT1kCl8uJHRpPWV9LAp2TjpmdW5jdGlvbiB2Tihh -KXt0aGlzLmE9YX0sCkpROmZ1bmN0aW9uIEpRKGEpe3RoaXMuYT1hfSwKR206ZnVuY3Rpb24gR20oKXt9 -LAp2RDpmdW5jdGlvbiB2RChhKXt0aGlzLmE9YX0sClV2OmZ1bmN0aW9uIFV2KGEpe3RoaXMuYT1hfSwK -RWc6ZnVuY3Rpb24gRWcoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKbTY6ZnVuY3Rp -b24gbTYoKXt9LApFbzpmdW5jdGlvbiBFbygpe30sCldrOmZ1bmN0aW9uIFdrKCl7fSwKY3Q6ZnVuY3Rp -b24gY3QoYSxiLGMsZCxlKXt2YXIgXz10aGlzCl8uZT1hCl8uYT1iCl8uYj1jCl8uYz1kCl8uZD1lfSwK -SUE6ZnVuY3Rpb24gSUEoKXt9LApPdzpmdW5jdGlvbiBPdygpe30sClc5OmZ1bmN0aW9uIFc5KGEsYixj -KXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz0tMQpfLmQ9bnVsbApfLiR0aT1jfSwKZFc6ZnVuY3Rp -b24gZFcoKXt9LAptazpmdW5jdGlvbiBtayhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKS286ZnVuY3Rp -b24gS28oYSl7dGhpcy5hPWEKdGhpcy5iPSExfSwKZm06ZnVuY3Rpb24gZm0oYSl7dGhpcy5hPWF9LApM -ZTpmdW5jdGlvbiBMZSgpe30sCks3OmZ1bmN0aW9uIEs3KCl7fSwKckI6ZnVuY3Rpb24gckIoKXt9LApY -VzpmdW5jdGlvbiBYVygpe30sCm9hOmZ1bmN0aW9uIG9hKCl7fX0sVT17CmpmOmZ1bmN0aW9uKGEpe3Zh -ciBzLHIscSxwCmlmKGE9PW51bGwpcz1udWxsCmVsc2V7cz1ILlZNKFtdLHQuZDcpCmZvcihyPUouSVQo -dC5VLmEoYSkpO3IuRigpOyl7cT1yLmdsKCkKcD1KLlU2KHEpCnMucHVzaChuZXcgVS5TZShILmgocC5x -KHEsImRlc2NyaXB0aW9uIikpLEguaChwLnEocSwiaHJlZiIpKSkpfX1yZXR1cm4gc30sCk5kOmZ1bmN0 -aW9uKGEpe3ZhciBzLHIKaWYoYT09bnVsbClzPW51bGwKZWxzZXtzPUguVk0oW10sdC5hQSkKZm9yKHI9 -Si5JVCh0LlUuYShhKSk7ci5GKCk7KXMucHVzaChVLk5mKHIuZ2woKSkpfXJldHVybiBzfSwKTmY6ZnVu -Y3Rpb24oYSl7dmFyIHM9Si5VNihhKSxyPUguaChzLnEoYSwiZGVzY3JpcHRpb24iKSkscT1ILlZNKFtd -LHQuYUopCmZvcihzPUouSVQodC5VLmEocy5xKGEsImVudHJpZXMiKSkpO3MuRigpOylxLnB1c2goVS5S -aihzLmdsKCkpKQpyZXR1cm4gbmV3IFUueUQocixxKX0sClJqOmZ1bmN0aW9uKGEpe3ZhciBzLHI9Si5V -NihhKSxxPUguaChyLnEoYSwiZGVzY3JpcHRpb24iKSkscD1ILmgoci5xKGEsImZ1bmN0aW9uIikpLG89 -ci5xKGEsImxpbmsiKQppZihvPT1udWxsKW89bnVsbAplbHNle3M9Si5VNihvKQpvPW5ldyBVLk1sKEgu -aChzLnEobywiaHJlZiIpKSxILnVQKHMucShvLCJsaW5lIikpLEguaChzLnEobywicGF0aCIpKSl9cj10 -LmZLLmEoci5xKGEsImhpbnRBY3Rpb25zIikpCnI9cj09bnVsbD9udWxsOkouTTEocixuZXcgVS5hTigp -LHQuYVgpCnI9cj09bnVsbD9udWxsOnIuYnIoMCkKcmV0dXJuIG5ldyBVLndiKHEscCxvLHI9PW51bGw/ -Qy5kbjpyKX0sCmQyOmZ1bmN0aW9uIGQyKGEsYixjLGQsZSxmKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1i -Cl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mfSwKU2U6ZnVuY3Rpb24gU2UoYSxiKXt0aGlzLmE9YQp0aGlz -LmI9Yn0sCk1sOmZ1bmN0aW9uIE1sKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnlE -OmZ1bmN0aW9uIHlEKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LAp3YjpmdW5jdGlvbiB3YihhLGIsYyxk -KXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kfSwKYU46ZnVuY3Rpb24gYU4oKXt9LApi -MDpmdW5jdGlvbiBiMCgpe319LEI9ewp3UjpmdW5jdGlvbigpe3JldHVybiBuZXcgQi5xcCgiIiwiIiwi -IixDLkR4KX0sCllmOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsaz1ILmgoYS5xKDAsInJl -Z2lvbnMiKSksaj1ILmgoYS5xKDAsIm5hdmlnYXRpb25Db250ZW50IikpLGk9SC5oKGEucSgwLCJzb3Vy -Y2VDb2RlIikpLGg9UC5GbCh0LlgsdC5kXykKZm9yKHM9dC50LmEoYS5xKDAsImVkaXRzIikpLHM9cy5n -UHUocykscz1zLmdtKHMpLHI9dC5VLHE9dC5oNDtzLkYoKTspe3A9cy5nbCgpCm89cC5hCm49SC5WTShb -XSxxKQpmb3IocD1KLklUKHIuYShwLmIpKTtwLkYoKTspe209cC5nbCgpCmw9Si5VNihtKQpuLnB1c2go -bmV3IEIuajgoSC51UChsLnEobSwibGluZSIpKSxILmgobC5xKG0sImV4cGxhbmF0aW9uIikpLEgudVAo -bC5xKG0sIm9mZnNldCIpKSkpfWguWTUoMCxvLG4pfXJldHVybiBuZXcgQi5xcChrLGosaSxoKX0sCmo4 -OmZ1bmN0aW9uIGo4KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnFwOmZ1bmN0aW9u -IHFwKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWR9LApmdjpmdW5jdGlv -biBmdigpe30sCk9TOmZ1bmN0aW9uKGEpe3ZhciBzCmlmKCEoYT49NjUmJmE8PTkwKSlzPWE+PTk3JiZh -PD0xMjIKZWxzZSBzPSEwCnJldHVybiBzfSwKWXU6ZnVuY3Rpb24oYSxiKXt2YXIgcz1hLmxlbmd0aCxy -PWIrMgppZihzPHIpcmV0dXJuITEKaWYoIUIuT1MoQy54Qi5PKGEsYikpKXJldHVybiExCmlmKEMueEIu -TyhhLGIrMSkhPT01OClyZXR1cm4hMQppZihzPT09cilyZXR1cm4hMApyZXR1cm4gQy54Qi5PKGEscik9 -PT00N319LFQ9e21ROmZ1bmN0aW9uIG1RKCl7fX0sTD17CklxOmZ1bmN0aW9uKCl7Qy5CWi5CKGRvY3Vt -ZW50LCJET01Db250ZW50TG9hZGVkIixuZXcgTC5lKCkpCkMub2wuQih3aW5kb3csInBvcHN0YXRlIixu -ZXcgTC5MKCkpfSwKa3o6ZnVuY3Rpb24oYSl7dmFyIHMscj10LmcuYShhLnBhcmVudE5vZGUpLnF1ZXJ5 -U2VsZWN0b3IoIjpzY29wZSA+IHVsIikscT1yLnN0eWxlLHA9IiIrQy5DRC56UShyLm9mZnNldEhlaWdo -dCkqMisicHgiCnEubWF4SGVpZ2h0PXAKcT1KLnFGKGEpCnA9cS4kdGkKcz1wLkMoIn4oMSk/IikuYShu -ZXcgTC5XeChyLGEpKQp0LlouYShudWxsKQpXLkpFKHEuYSxxLmIscywhMSxwLmMpfSwKeVg6ZnVuY3Rp -b24oYSxiKXt2YXIgcyxyLHEscCxvLG4sbT0icXVlcnlTZWxlY3RvckFsbCIsbD1kb2N1bWVudC5xdWVy -eVNlbGVjdG9yKGEpLGs9dC5nCmwudG9TdHJpbmcKcz10LmgKSC5EaChrLHMsIlQiLG0pCnI9dC5SCnE9 -bmV3IFcud3oobC5xdWVyeVNlbGVjdG9yQWxsKCIubmF2LWxpbmsiKSxyKQpxLksocSxuZXcgTC5BTyhi -KSkKSC5EaChrLHMsIlQiLG0pCnA9bmV3IFcud3oobC5xdWVyeVNlbGVjdG9yQWxsKCIucmVnaW9uIiks -cikKaWYoIXAuZ2wwKHApKXtvPWwucXVlcnlTZWxlY3RvcigidGFibGVbZGF0YS1wYXRoXSIpCm8udG9T -dHJpbmcKcC5LKHAsbmV3IEwuSG8oby5nZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgVy5TeShuZXcgVy5p -NyhvKSkuT1UoInBhdGgiKSkpKX1ILkRoKGsscywiVCIsbSkKbj1uZXcgVy53eihsLnF1ZXJ5U2VsZWN0 -b3JBbGwoIi5hZGQtaGludC1saW5rIikscikKbi5LKG4sbmV3IEwuSUMoKSl9LApRNjpmdW5jdGlvbihh -LGIsYyl7dmFyIHM9bmV3IFhNTEh0dHBSZXF1ZXN0KCkKQy5EdC5lbyhzLCJHRVQiLEwuUTQoYSxiKSwh -MCkKcy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9qc29uOyBjaGFy -c2V0PVVURi04IikKcmV0dXJuIEwuTFUocyxudWxsLGMuQygiMCoiKSl9LAp0eTpmdW5jdGlvbihhLGIp -e3ZhciBzPW5ldyBYTUxIdHRwUmVxdWVzdCgpLHI9dC5YCkMuRHQuZW8ocywiUE9TVCIsTC5RNChhLFAu -RmwocixyKSksITApCnMuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24v -anNvbjsgY2hhcnNldD1VVEYtOCIpCnJldHVybiBMLkxVKHMsYix0LnQpfSwKTFU6ZnVuY3Rpb24oYSxi -LGMpe3JldHVybiBMLlRnKGEsYixjLGMuQygiMCoiKSl9LApUZzpmdW5jdGlvbihhLGIsYyxkKXt2YXIg -cz0wLHI9UC5GWChkKSxxLHA9MixvLG49W10sbSxsLGssaixpLGgsZyxmLGUKdmFyICRhc3luYyRMVT1Q -Lmx6KGZ1bmN0aW9uKGEwLGExKXtpZihhMD09PTEpe289YTEKcz1wfXdoaWxlKHRydWUpc3dpdGNoKHMp -e2Nhc2UgMDpoPW5ldyBQLlpmKG5ldyBQLnZzKCQuWDMsdC5nViksdC5iQykKZz10LmViCmY9Zy5hKG5l -dyBMLmZDKGgsYSkpCnQuWi5hKG51bGwpCms9dC5lUQpXLkpFKGEsImxvYWQiLGYsITEsaykKVy5KRShh -LCJlcnJvciIsZy5hKGguZ1lKKCkpLCExLGspCmEuc2VuZChiPT1udWxsP251bGw6Qy5DdC5PQihiLG51 -bGwpKQpwPTQKcz03CnJldHVybiBQLmpRKGguYSwkYXN5bmMkTFUpCmNhc2UgNzpwPTIKcz02CmJyZWFr -CmNhc2UgNDpwPTMKZT1vCkguUnUoZSkKbT1ILnRzKGUpCmc9YS5yZWFkeVN0YXRlCmlmKGc9PT00JiZh -LnN0YXR1cz09PTApdGhyb3cgSC5iKEwuVEcoIkVycm9yIHJlYWNoaW5nIG1pZ3JhdGlvbiBwcmV2aWV3 -IHNlcnZlciIsIlRoaXMgdXN1YWxseSBoYXBwZW5zIGJlY2F1c2UgdGhlIG1pZ3JhdGlvbiBwcmV2aWV3 -IHNlcnZlciBoYXMgZXhpdGVkLiAgRm9yXG5leGFtcGxlIGl0IG1heSBoYXZlIGJlZW4gYWJvcnRlZCB3 -aXRoIEN0cmwtQywgb3IgeW91IG1heSBoYXZlIGNvbXBsZXRlZCB0aGlzXG5taWdyYXRpb24sIG9yIGFu -IGV4Y2VwdGlvbiBtYXkgaGF2ZSBvY2N1cnJlZC4gIFBsZWFzZSBjaGVjayB0aGUgY29uc29sZSB3aGVy -ZVxueW91IGludm9rZWQgYGRhcnQgbWlncmF0ZWAgdG8gdmVyaWZ5IHRoYXQgdGhlIHByZXZpZXcgc2Vy -dmVyIGlzIHN0aWxsIHJ1bm5pbmcuXG4iKSkKZWxzZXtsPW5ldyBILmxKKEguVk0oWyJyZWFkeVN0YXRl -PSIrSC5FaihnKSwicmVzcG9uc2VUZXh0PSIrQy5DdC5PQihhLnJlc3BvbnNlVGV4dCxudWxsKSwicmVz -cG9uc2VUeXBlPSIrQy5DdC5PQihhLnJlc3BvbnNlVHlwZSxudWxsKSwicmVzcG9uc2VVcmw9IitDLkN0 -Lk9CKGEucmVzcG9uc2VVUkwsbnVsbCksInN0YXR1cz0iK0guRWooYS5zdGF0dXMpLCJzdGF0dXNUZXh0 -PSIrQy5DdC5PQihhLnN0YXR1c1RleHQsbnVsbCldLHQuaSksdC5lcS5hKG5ldyBMLlRtKCkpLHQuZlAp -LmsoMCwiLCAiKQp0aHJvdyBILmIoUC5UbCgiRXJyb3IgcmVhY2hpbmcgbWlncmF0aW9uIHByZXZpZXcg -c2VydmVyOiAiK0guRWoobCksbSkpfXM9NgpicmVhawpjYXNlIDM6cz0yCmJyZWFrCmNhc2UgNjppZihh -LnN0YXR1cz09PTQwMSl0aHJvdyBILmIoTC5URygiVW5hdXRob3JpemVkIHJlc3BvbnNlIGZyb20gbWln -cmF0aW9uIHByZXZpZXcgc2VydmVyIiwiVGhlIG1pZ3JhdGlvbiBwcmV2aWV3IHNlcnZlciBoYXMgZGV0 -ZWN0ZWQgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBhdXRoVG9rZW4gaW5cbnlvdXIgVVJMIGFuZCB0aGUg -dG9rZW4gdGhhdCB3YXMgZ2VuZXJhdGVkIGF0IHRoZSB0aW1lIHRoYXQgYGRhcnQgbWlncmF0ZWAgd2Fz -XG5ydW4uICBIYXZlIHlvdSByZXN0YXJ0ZWQgdGhlIG1pZ3JhdGlvbiBzZXJ2ZXIgcmVjZW50bHk/ICBJ -ZiBzbywgeW91J2xsIG5lZWQgdG9cbmNoZWNrIGl0cyBvdXRwdXQgZm9yIGEgZnJlc2ggVVJMLCBhbmQg -dXNlIHRoYXQgVVJMIHRvIHBlcmZvcm0geW91ciBtaWdyYXRpb24uXG4iKSkKaT1DLkN0LnBXKDAsYS5y -ZXNwb25zZVRleHQsbnVsbCkKaWYoYS5zdGF0dXM9PT0yMDApe3E9Yy5DKCIwKiIpLmEoaSkKcz0xCmJy -ZWFrfWVsc2UgdGhyb3cgSC5iKGkpCmNhc2UgMTpyZXR1cm4gUC55QyhxLHIpCmNhc2UgMjpyZXR1cm4g -UC5mMyhvLHIpfX0pCnJldHVybiBQLkRJKCRhc3luYyRMVSxyKX0sCmFLOmZ1bmN0aW9uKGEpe3ZhciBz -PVAuaEsoYSkuZ2hZKCkucSgwLCJsaW5lIikKcmV0dXJuIHM9PW51bGw/bnVsbDpILkhwKHMsbnVsbCl9 -LApHNjpmdW5jdGlvbihhKXt2YXIgcz1QLmhLKGEpLmdoWSgpLnEoMCwib2Zmc2V0IikKcmV0dXJuIHM9 -PW51bGw/bnVsbDpILkhwKHMsbnVsbCl9LAppNjpmdW5jdGlvbihhKXtyZXR1cm4gTC5uVyh0Lk8uYShh -KSl9LApuVzpmdW5jdGlvbihhKXt2YXIgcz0wLHI9UC5GWCh0LnopLHE9MSxwLG89W10sbixtLGwsayxq -LGksaAp2YXIgJGFzeW5jJGk2PVAubHooZnVuY3Rpb24oYixjKXtpZihiPT09MSl7cD1jCnM9cX13aGls -ZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6aT10LmcuYShXLnFjKGEuY3VycmVudFRhcmdldCkpLmdldEF0 -dHJpYnV0ZSgiaHJlZiIpCmEucHJldmVudERlZmF1bHQoKQpxPTMKaz1kb2N1bWVudApuPUMuQ0QuelEo -ay5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpLnNjcm9sbFRvcCkKcz02CnJldHVybiBQLmpRKEwudHko -aSxudWxsKSwkYXN5bmMkaTYpCmNhc2UgNjpzPTcKcmV0dXJuIFAualEoTC5HNyh3aW5kb3cubG9jYXRp -b24ucGF0aG5hbWUsbnVsbCxudWxsLCExLG51bGwpLCRhc3luYyRpNikKY2FzZSA3Oms9ay5xdWVyeVNl -bGVjdG9yKCIuY29udGVudCIpCmsudG9TdHJpbmcKay5zY3JvbGxUb3A9Si5WdShuKQpxPTEKcz01CmJy -ZWFrCmNhc2UgMzpxPTIKaD1wCm09SC5SdShoKQpsPUgudHMoaCkKTC5DMigiY291bGRuJ3QgYWRkL3Jl -bW92ZSBoaW50IixtLGwpCnM9NQpicmVhawpjYXNlIDI6cz0xCmJyZWFrCmNhc2UgNTpyZXR1cm4gUC55 -QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5mMyhwLHIpfX0pCnJldHVybiBQLkRJKCRhc3luYyRpNixy -KX0sCkMyOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHEscCxvLG49ImV4Y2VwdGlvbiIsbT0ic3RhY2tU -cmFjZSIKaWYodC50LmIoYikmJkouUk0oYi5xKDAsInN1Y2Nlc3MiKSwhMSkmJmIueDQobikmJmIueDQo -bSkpe3M9Si5VNihiKQpyPUguaChzLnEoYixuKSkKYz1zLnEoYixtKQpxPW51bGx9ZWxzZSBpZihiIGlu -c3RhbmNlb2YgTC5RVyl7cj1iLmEKcT1iLmJ9ZWxzZXtyPUouaihiKQpxPW51bGx9aWYocT09bnVsbClx -PWMKcz1kb2N1bWVudApwPXMucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUiKQpwLnF1ZXJ5U2VsZWN0 -b3IoImgyIikuaW5uZXJUZXh0PWEKcC5xdWVyeVNlbGVjdG9yKCJwIikuaW5uZXJUZXh0PXIKcC5xdWVy -eVNlbGVjdG9yKCJwcmUiKS5pbm5lclRleHQ9Si5qKHEpCm89dC5kZC5hKHAucXVlcnlTZWxlY3Rvcigi -YS5ib3R0b20iKSk7KG8mJkMueG4pLnNMVShvLFAuWGQoImh0dHBzIiwiZ2l0aHViLmNvbSIsImRhcnQt -bGFuZy9zZGsvaXNzdWVzL25ldyIsUC5FRihbInRpdGxlIiwiQ3VzdG9tZXItcmVwb3J0ZWQgaXNzdWUg -d2l0aCBOTkJEIG1pZ3JhdGlvbiB0b29sOiAiK2EsImxhYmVscyIsdS5kLCJib2R5IixhKyJcblxuRXJy -b3I6ICIrSC5FaihyKSsiXG5cblBsZWFzZSBmaWxsIGluIHRoZSBmb2xsb3dpbmc6XG5cbioqTmFtZSBv -ZiBwYWNrYWdlIGJlaW5nIG1pZ3JhdGVkIChpZiBwdWJsaWMpKio6XG4qKldoYXQgSSB3YXMgZG9pbmcg -d2hlbiB0aGlzIGlzc3VlIG9jY3VycmVkKio6XG4qKklzIGl0IHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5k -IHRoaXMgaXNzdWUqKjpcbioqSGFzIHRoaXMgaXNzdWUgaGFwcGVuZWQgYmVmb3JlLCBhbmQgaWYgc28s -IGhvdyBvZnRlbioqOlxuKipEYXJ0IFNESyB2ZXJzaW9uKio6ICIrSC5FaihzLmdldEVsZW1lbnRCeUlk -KCJzZGstdmVyc2lvbiIpLnRleHRDb250ZW50KSsiXG4qKkFkZGl0aW9uYWwgZGV0YWlscyoqOlxuXG5U -aGFua3MgZm9yIGZpbGluZyFcblxuU3RhY2t0cmFjZTogX2F1dG8gcG9wdWxhdGVkIGJ5IG1pZ3JhdGlv -biBwcmV2aWV3IHRvb2wuX1xuXG5gYGBcbiIrSC5FaihjKSsiXG5gYGBcbiJdLHQuWCx0LnopKS5nbkQo -KSkKcz1vLnN0eWxlCnMuZGlzcGxheT0iaW5pdGlhbCIKcz1wLnN0eWxlCnMuZGlzcGxheT0iaW5pdGlh -bCIKcz1hKyI6ICIrSC5FaihiKQp3aW5kb3cKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdp -bmRvdy5jb25zb2xlLmVycm9yKHMpCndpbmRvdwpzPUguRWooYykKaWYodHlwZW9mIGNvbnNvbGUhPSJ1 -bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLmVycm9yKHMpfSwKdDI6ZnVuY3Rpb24oYSxiKXt2YXIgcyxy -LHEscCxvPXQuZy5hKFcucWMoYS5jdXJyZW50VGFyZ2V0KSkKYS5wcmV2ZW50RGVmYXVsdCgpCnM9by5n -ZXRBdHRyaWJ1dGUoImhyZWYiKQpyPUwuVXMocykKcT1MLkc2KHMpCnA9TC5hSyhzKQppZihxIT1udWxs -KUwuYWYocixxLHAsYixuZXcgTC5uVChyLHEscCkpCmVsc2UgTC5hZihyLG51bGwsbnVsbCxiLG5ldyBM -Lk5ZKHIpKX0sCkswOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io -Ii5wb3B1cC1wYW5lIikKcC5xdWVyeVNlbGVjdG9yKCJoMiIpLmlubmVyVGV4dD0iRmFpbGVkIHRvIHJl -cnVuIGZyb20gc291cmNlcyIKcC5xdWVyeVNlbGVjdG9yKCJwIikuaW5uZXJUZXh0PSJTb3VyY2VzIGNv -bnRhaW4gc3RhdGljIGFuYWx5c2lzIGVycm9yczoiCnM9cC5xdWVyeVNlbGVjdG9yKCJwcmUiKQpyPUou -RWwoYSx0LmF3KQpxPUguTGgocikKcy5pbm5lclRleHQ9bmV3IEgubEoocixxLkMoInFVKihsRC5FKSIp -LmEobmV3IEwudWUoKSkscS5DKCJsSjxsRC5FLHFVKj4iKSkuaygwLCJcbiIpCnE9cC5xdWVyeVNlbGVj -dG9yKCJhLmJvdHRvbSIpLnN0eWxlCnEuZGlzcGxheT0ibm9uZSIKcz1wLnN0eWxlCnMuZGlzcGxheT0i -aW5pdGlhbCJ9LAp2VTpmdW5jdGlvbigpe3ZhciBzPWRvY3VtZW50CkguRGgodC5nLHQuaCwiVCIsInF1 -ZXJ5U2VsZWN0b3JBbGwiKQpzPW5ldyBXLnd6KHMucXVlcnlTZWxlY3RvckFsbCgiLmNvZGUiKSx0LlIp -CnMuSyhzLG5ldyBMLmVYKCkpfSwKaFg6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBMLll3KGEsYixjKX0s -Cll3OmZ1bmN0aW9uKGEsYixjKXt2YXIgcz0wLHI9UC5GWCh0LnopLHE9MSxwLG89W10sbixtLGwsayxq -LGksaCxnCnZhciAkYXN5bmMkaFg9UC5seihmdW5jdGlvbihkLGUpe2lmKGQ9PT0xKXtwPWUKcz1xfXdo -aWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpxPTMKaj10LlgKcz02CnJldHVybiBQLmpRKEwuUTYoYSxQ -LkVGKFsicmVnaW9uIiwicmVnaW9uIiwib2Zmc2V0IixILkVqKGIpXSxqLGopLHQudCksJGFzeW5jJGhY -KQpjYXNlIDY6bj1lCmo9bgppPUouVTYoaikKbT1uZXcgVS5kMihVLmpmKGkucShqLCJlZGl0cyIpKSxI -LmgoaS5xKGosImV4cGxhbmF0aW9uIikpLEgudVAoaS5xKGosImxpbmUiKSksSC5oKGkucShqLCJkaXNw -bGF5UGF0aCIpKSxILmgoaS5xKGosInVyaVBhdGgiKSksVS5OZChpLnEoaiwidHJhY2VzIikpKQpMLlQx -KG0pCkwuRnIoYSxiLGMpCkwueVgoIi5lZGl0LXBhbmVsIC5wYW5lbC1jb250ZW50IiwhMSkKcT0xCnM9 -NQpicmVhawpjYXNlIDM6cT0yCmc9cApsPUguUnUoZykKaz1ILnRzKGcpCkwuQzIoImNvdWxkbid0IGxv -YWQgZWRpdCBkZXRhaWxzIixsLGspCnM9NQpicmVhawpjYXNlIDI6cz0xCmJyZWFrCmNhc2UgNTpyZXR1 -cm4gUC55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5mMyhwLHIpfX0pCnJldHVybiBQLkRJKCRhc3lu -YyRoWCxyKX0sCkc3OmZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJuIEwuTDUoYSxiLGMsZCxlKX0sCkw1 -OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHM9MCxyPVAuRlgodC5IKSxxLHA9MixvLG49W10sbSxsLGss -aixpLGgsZwp2YXIgJGFzeW5jJEc3PVAubHooZnVuY3Rpb24oZixhMCl7aWYoZj09PTEpe289YTAKcz1w -fXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDppZighSi5wNChhLCIuZGFydCIpKXtMLkJFKGEsQi53 -UigpLGQpCkwuQlgoYSxudWxsKQppZihlIT1udWxsKWUuJDAoKQpzPTEKYnJlYWt9cD00Cmk9dC5YCnM9 -NwpyZXR1cm4gUC5qUShMLlE2KGEsUC5FRihbImlubGluZSIsInRydWUiXSxpLGkpLHQudCksJGFzeW5j -JEc3KQpjYXNlIDc6bT1hMApMLkJFKGEsQi5ZZihtKSxkKQpMLmZHKGIsYykKbD1MLlVzKGEpCkwuQlgo -bCxiKQppZihlIT1udWxsKWUuJDAoKQpwPTIKcz02CmJyZWFrCmNhc2UgNDpwPTMKZz1vCms9SC5SdShn -KQpqPUgudHMoZykKTC5DMigiY291bGRuJ3QgbG9hZCBkYXJ0IGZpbGUgIithLGssaikKcz02CmJyZWFr -CmNhc2UgMzpzPTIKYnJlYWsKY2FzZSA2OmNhc2UgMTpyZXR1cm4gUC55QyhxLHIpCmNhc2UgMjpyZXR1 -cm4gUC5mMyhvLHIpfX0pCnJldHVybiBQLkRJKCRhc3luYyRHNyxyKX0sCkdlOmZ1bmN0aW9uKCl7dmFy -IHM9MCxyPVAuRlgodC56KSxxPTEscCxvPVtdLG4sbSxsLGssaixpLGgsZwp2YXIgJGFzeW5jJEdlPVAu -bHooZnVuY3Rpb24oYSxiKXtpZihhPT09MSl7cD1iCnM9cX13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNl -IDA6aD0iL19wcmV2aWV3L25hdmlnYXRpb25UcmVlLmpzb24iCnE9MwpzPTYKcmV0dXJuIFAualEoTC5R -NihoLEMuQ00sdC5lRSksJGFzeW5jJEdlKQpjYXNlIDY6bj1iCm09ZG9jdW1lbnQucXVlcnlTZWxlY3Rv -cigiLm5hdi10cmVlIikKSi5sNShtLCIiKQpqPUwubUsobikKJC5JUj1qCkwudFgobSxqLCEwKQpxPTEK -cz01CmJyZWFrCmNhc2UgMzpxPTIKZz1wCmw9SC5SdShnKQprPUgudHMoZykKTC5DMigiY291bGRuJ3Qg -bG9hZCBuYXZpZ2F0aW9uIHRyZWUiLGwsaykKcz01CmJyZWFrCmNhc2UgMjpzPTEKYnJlYWsKY2FzZSA1 -OnJldHVybiBQLnlDKG51bGwscikKY2FzZSAxOnJldHVybiBQLmYzKHAscil9fSkKcmV0dXJuIFAuREko -JGFzeW5jJEdlLHIpfSwKcU86ZnVuY3Rpb24oYSl7dmFyIHMscj1hLmdldEJvdW5kaW5nQ2xpZW50UmVj -dCgpLHE9Qy5DRC56USgkLmZpKCkub2Zmc2V0SGVpZ2h0KSxwPXdpbmRvdy5pbm5lckhlaWdodCxvPUMu -Q0QuelEoJC5EVygpLm9mZnNldEhlaWdodCkKaWYodHlwZW9mIHAhPT0ibnVtYmVyIilyZXR1cm4gcC5I -TigpCnM9ci5ib3R0b20Kcy50b1N0cmluZwppZihzPnAtKG8rMTQpKUouZGgoYSkKZWxzZXtwPXIudG9w -CnAudG9TdHJpbmcKaWYocDxxKzE0KUouZGgoYSl9fSwKZkc6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEs -cCxvCmlmKGEhPW51bGwpe3M9ZG9jdW1lbnQKcj1zLmdldEVsZW1lbnRCeUlkKCJvIitILkVqKGEpKQpx -PXMucXVlcnlTZWxlY3RvcigiLmxpbmUtIitILkVqKGIpKQppZihyIT1udWxsKXtMLnFPKHIpCkouZFIo -cikuaSgwLCJ0YXJnZXQiKX1lbHNlIGlmKHEhPW51bGwpTC5xTyhxLnBhcmVudEVsZW1lbnQpCmlmKHEh -PW51bGwpSi5kUih0LmcuYShxLnBhcmVudE5vZGUpKS5pKDAsImhpZ2hsaWdodCIpfWVsc2V7cz1kb2N1 -bWVudApwPXQuZwpILkRoKHAsdC5oLCJUIiwicXVlcnlTZWxlY3RvckFsbCIpCnM9cy5xdWVyeVNlbGVj -dG9yQWxsKCIubGluZS1ubyIpCm89bmV3IFcud3oocyx0LlIpCmlmKG8uZ0Eobyk9PT0wKXJldHVybgpM -LnFPKHAuYShDLnQ1Lmd0SChzKSkpfX0sCmFmOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHMscixxPUwu -RzYod2luZG93LmxvY2F0aW9uLmhyZWYpLHA9TC5hSyh3aW5kb3cubG9jYXRpb24uaHJlZikKaWYocSE9 -bnVsbCl7cz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibyIrSC5FaihxKSkKaWYocyE9bnVsbClKLmRS -KHMpLlIoMCwidGFyZ2V0Iil9aWYocCE9bnVsbCl7cj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubGlu -ZS0iK0guRWoocCkpCmlmKHIhPW51bGwpSi5kUihyLnBhcmVudEVsZW1lbnQpLlIoMCwiaGlnaGxpZ2h0 -Iil9aWYoYT09d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKXtMLmZHKGIsYykKZS4kMCgpfWVsc2UgTC5H -NyhhLGIsYyxkLGUpfSwKUTQ6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHE9UC5oSyhhKSxwPXQuWApwPVAu -RmwocCxwKQpmb3Iocz1xLmdoWSgpLHM9cy5nUHUocykscz1zLmdtKHMpO3MuRigpOyl7cj1zLmdsKCkK -cC5ZNSgwLHIuYSxyLmIpfWZvcihzPWIuZ1B1KGIpLHM9cy5nbShzKTtzLkYoKTspe3I9cy5nbCgpCnAu -WTUoMCxyLmEsci5iKX1wLlk1KDAsImF1dGhUb2tlbiIsJC5VRSgpKQpyZXR1cm4gcS5ubSgwLHApLmdu -RCgpfSwKVDE6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGo9JC5oTCgpCkoubDUoaiwi -IikKaWYoYT09bnVsbCl7cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikKQy5MdC5zYTQocywiU2Vl -IGRldGFpbHMgYWJvdXQgYSBwcm9wb3NlZCBlZGl0LiIpCkMuTHQuc1AocyxILlZNKFsicGxhY2Vob2xk -ZXIiXSx0LmkpKQpqLmFwcGVuZENoaWxkKHMpCkMuTHQuRkYocykKcmV0dXJufXI9YS5kCnE9JC5uVSgp -CnA9cS56ZihyKQpvPWEuYgpuPWRvY3VtZW50Cm09cS5IUChyLEouVDAobi5xdWVyeVNlbGVjdG9yKCIu -cm9vdCIpLnRleHRDb250ZW50KSkKbD1hLmMKaz1uLmNyZWF0ZUVsZW1lbnQoInAiKQpqLmFwcGVuZENo -aWxkKGspCmsuYXBwZW5kQ2hpbGQobi5jcmVhdGVUZXh0Tm9kZShILkVqKG8pKyIgYXQgIikpCnE9dC5Y -CnE9Vy5KNihMLlE0KGEuZSxQLkVGKFsibGluZSIsSi5qKGwpXSxxLHEpKSkKcS5hcHBlbmRDaGlsZChu -LmNyZWF0ZVRleHROb2RlKEguRWoobSkrIjoiK0guRWoobCkrIi4iKSkKay5hcHBlbmRDaGlsZChxKQpK -LmRoKGspCkwuQ0MoYSxqLHApCkwuRnooYSxqKX0sCkxIOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHEs -cCxvLG4sbSxsLGssaixpLGgsZyxmLGU9JC55UCgpCkoubDUoZSwiIikKaWYoYi5nQShiKT09PTApe3M9 -ZG9jdW1lbnQKcj1zLmNyZWF0ZUVsZW1lbnQoInAiKQplLmFwcGVuZENoaWxkKHIpCnIuYXBwZW5kQ2hp -bGQocy5jcmVhdGVUZXh0Tm9kZSgiTm8gcHJvcG9zZWQgZWRpdHMiKSl9ZWxzZSBmb3IoZT1iLmdQdShi -KSxlPWUuZ20oZSkscz10LlgscT10LmsscD1xLkMoIn4oMSk/Iiksbz10LloscT1xLmM7ZS5GKCk7KXtu -PWUuZ2woKQptPWRvY3VtZW50CnI9bS5jcmVhdGVFbGVtZW50KCJwIikKbD0kLnlQKCkKbC5hcHBlbmRD -aGlsZChyKQpyLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoSC5FaihuLmEpKyI6IikpCms9bS5j -cmVhdGVFbGVtZW50KCJ1bCIpCmwuYXBwZW5kQ2hpbGQoaykKZm9yKG49Si5JVChuLmIpO24uRigpOyl7 -bD1uLmdsKCkKaj1tLmNyZWF0ZUVsZW1lbnQoImxpIikKay5hcHBlbmRDaGlsZChqKQpKLmRSKGopLmko -MCwiZWRpdCIpCmk9bS5jcmVhdGVFbGVtZW50KCJhIikKai5hcHBlbmRDaGlsZChpKQppLmNsYXNzTGlz -dC5hZGQoImVkaXQtbGluayIpCmg9bC5jCmc9SC5FaihoKQppLnNldEF0dHJpYnV0ZSgiZGF0YS0iK25l -dyBXLlN5KG5ldyBXLmk3KGkpKS5PVSgib2Zmc2V0IiksZykKZj1sLmEKZz1ILkVqKGYpCmkuc2V0QXR0 -cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcuaTcoaSkpLk9VKCJsaW5lIiksZykKaS5hcHBlbmRD -aGlsZChtLmNyZWF0ZVRleHROb2RlKCJsaW5lICIrSC5FaihmKSkpCmkuc2V0QXR0cmlidXRlKCJocmVm -IixMLlE0KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxQLkVGKFsibGluZSIsSC5FaihmKSwib2Zmc2V0 -IixILkVqKGgpXSxzLHMpKSkKZz1wLmEobmV3IEwuRUUoaCxmLGEpKQpvLmEobnVsbCkKVy5KRShpLCJj -bGljayIsZywhMSxxKQpqLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIjogIitILkVqKGwuYikp -KX19aWYoYylMLlQxKG51bGwpfSwKRnI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIscT13aW5kb3cubG9j -YXRpb24scD1QLmhLKChxJiZDLkV4KS5nRHIocSkrSC5FaihhKSkKcT10LlgKcT1QLkZsKHEscSkKaWYo -YiE9bnVsbClxLlk1KDAsIm9mZnNldCIsSC5FaihiKSkKaWYoYyE9bnVsbClxLlk1KDAsImxpbmUiLEgu -RWooYykpCnEuWTUoMCwiYXV0aFRva2VuIiwkLlVFKCkpCnA9cC5ubSgwLHEpCnE9d2luZG93Lmhpc3Rv -cnkKcz10LnoKcj1wLmduRCgpCnEudG9TdHJpbmcKcS5wdXNoU3RhdGUobmV3IFAuQmYoW10sW10pLlB2 -KFAuRmwocyxzKSksIiIscil9LApFbjpmdW5jdGlvbihhKXt2YXIgcz1KLmJiKGRvY3VtZW50LnF1ZXJ5 -U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQsIi8iKQppZihDLnhCLm4oYSxzKSlyZXR1cm4gQy54 -Qi55bihhLHMubGVuZ3RoKQplbHNlIHJldHVybiBhfSwKT3Q6ZnVuY3Rpb24oYSl7c3dpdGNoKGEucil7 -Y2FzZSBDLmN3OmJyZWFrCmNhc2UgQy5XRDphLnI9Qy5YagpicmVhawpjYXNlIEMuWGo6YS5yPUMuV0QK -YnJlYWsKY2FzZSBDLmRjOnRocm93IEguYihQLlBWKCJGaWxlICIrSC5FaihhLmMpKyIgc2hvdWxkIG5v -dCBoYXZlIGluZGV0ZXJtaW5hdGUgbWlncmF0aW9uIHN0YXR1cyIpKX19LAp0YTpmdW5jdGlvbihhLGIp -e3ZhciBzLHI9ImNoZWNrX2JveCIscT0idGl0bGUiLHA9Im9wdGVkLW91dCIsbz0ibWlncmF0aW5nIgpz -d2l0Y2goYil7Y2FzZSBDLmN3OmEuaW5uZXJUZXh0PXIKcz1KLllFKGEpCnMuZ1AoYSkuaSgwLCJhbHJl -YWR5LW1pZ3JhdGVkIikKcy5nUChhKS5pKDAsImRpc2FibGVkIikKYS5zZXRBdHRyaWJ1dGUocSwiQWxy -ZWFkeSBtaWdyYXRlZCIpCmJyZWFrCmNhc2UgQy5XRDphLmlubmVyVGV4dD1yCnM9Si5ZRShhKQpzLmdQ -KGEpLlIoMCxwKQpzLmdQKGEpLmkoMCxvKQphLnNldEF0dHJpYnV0ZShxLCJNaWdyYXRpbmcgdG8gbnVs -bCBzYWZldHkiKQpicmVhawpjYXNlIEMuWGo6YS5pbm5lclRleHQ9ImNoZWNrX2JveF9vdXRsaW5lX2Js -YW5rIgpzPUouWUUoYSkKcy5nUChhKS5SKDAsbykKcy5nUChhKS5pKDAscCkKYS5zZXRBdHRyaWJ1dGUo -cSwiT3B0aW5nIG91dCBvZiBudWxsIHNhZmV0eSIpCmJyZWFrCmRlZmF1bHQ6YS5pbm5lclRleHQ9Imlu -ZGV0ZXJtaW5hdGVfY2hlY2tfYm94IgpzPUouWUUoYSkKcy5nUChhKS5SKDAsbykKcy5nUChhKS5pKDAs -cCkKYS5zZXRBdHRyaWJ1dGUocSwiTWl4ZWQgc3RhdHVzZXMgb2YgJ21pZ3JhdGluZycgYW5kICdvcHRp -bmcgb3V0JyIpCmJyZWFrfX0sCnhuOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPSJkaXNhYmxlZCIscD1i -LmdMKCkKTC50YShhLHApCmlmKGIuYz09JC5EOSgpLmlubmVyVGV4dCl7cz1iIGluc3RhbmNlb2YgTC5j -RCYmIUgub1QoYi54KQpyPUouWUUoYSkKaWYocylyLmdQKGEpLmkoMCxxKQplbHNlIHIuZ1AoYSkuUigw -LHEpCkwudGEoJC5jMCgpLHApfX0sCkJYOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPXt9CnEuYT1hCmE9 -TC5FbihhKQpxLmE9YQpKLmRyKCQuRDkoKSxhKQpzPWRvY3VtZW50CkguRGgodC5nLHQuaCwiVCIsInF1 -ZXJ5U2VsZWN0b3JBbGwiKQpzPW5ldyBXLnd6KHMucXVlcnlTZWxlY3RvckFsbCgiLm5hdi1wYW5lbCAu -bmF2LWxpbmsiKSx0LlIpCnMuSyhzLG5ldyBMLlZTKHEpKQpzPSQuSVIKcj1zPT1udWxsP251bGw6TC55 -dyhzLHEuYSkKaWYocj09bnVsbClKLmRSKCQuYk4oKSkuUigwLCJ2aXNpYmxlIikKZWxzZXtKLmRSKCQu -Yk4oKSkuaSgwLCJ2aXNpYmxlIikKTC50YSgkLmMwKCksci5nTCgpKX19LApBUjpmdW5jdGlvbihhLGIp -e3ZhciBzLHIscT1iLmIKaWYocSE9bnVsbCl7cz10LmcKcj1zLmEocy5hKGEucGFyZW50Tm9kZSkucGFy -ZW50Tm9kZSkKTC54bihyLnF1ZXJ5U2VsZWN0b3IoIjpzY29wZSA+IC5zdGF0dXMtaWNvbiIpLHEpCkwu -QVIocixxKX19LApobDpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbixtPSI6c2NvcGUgPiAuc3Rh -dHVzLWljb24iCmZvcihzPWIuZCxyPXMubGVuZ3RoLHE9dC5nLHA9MDtwPHMubGVuZ3RoO3MubGVuZ3Ro -PT09cnx8KDAsSC5saykocyksKytwKXtvPXNbcF0Kbj1hLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW5hbWUq -PSInK0guRWooby5jKSsnIl0nKQppZihvIGluc3RhbmNlb2YgTC52dCl7TC5obChuLG8pCkwueG4obi5x -dWVyeVNlbGVjdG9yKG0pLGIpfWVsc2UgTC54bihxLmEobi5wYXJlbnROb2RlKS5xdWVyeVNlbGVjdG9y -KG0pLG8pfX0sCkJFOmZ1bmN0aW9uKGEsYixjKXt2YXIgcz0iLnJlZ2lvbnMiLHI9ZG9jdW1lbnQscT1y -LnF1ZXJ5U2VsZWN0b3IocykscD1yLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlIikKSi50SChxLGIuYSwkLktH -KCkpCkoudEgocCxiLmIsJC5LRygpKQpMLkxIKGEsYi5kLGMpCmlmKGIuYy5sZW5ndGg8MmU1KUwudlUo -KQpMLnlYKCIuY29kZSIsITApCkwueVgocywhMCl9LAp0WDpmdW5jdGlvbihhMSxhMixhMyl7dmFyIHMs -cixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYz0ibWF0ZXJpYWwtaWNvbnMiLGI9InN0YXR1cy1p -Y29uIixhPWRvY3VtZW50LGEwPWEuY3JlYXRlRWxlbWVudCgidWwiKQphMS5hcHBlbmRDaGlsZChhMCkK -Zm9yKHM9YTIubGVuZ3RoLHI9dC5YLHE9dC5aLHA9MDtwPGEyLmxlbmd0aDthMi5sZW5ndGg9PT1zfHwo -MCxILmxrKShhMiksKytwKXtvPWEyW3BdCm49YS5jcmVhdGVFbGVtZW50KCJsaSIpCmEwLmFwcGVuZENo -aWxkKG4pCmlmKG8gaW5zdGFuY2VvZiBMLnZ0KXttPUouWUUobikKbS5nUChuKS5pKDAsImRpciIpCm4u -c2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcuaTcobikpLk9VKCJuYW1lIiksby5jKQps -PWEuY3JlYXRlRWxlbWVudCgic3BhbiIpCm4uYXBwZW5kQ2hpbGQobCkKaz1KLllFKGwpCmsuZ1AobCku -aSgwLCJhcnJvdyIpCmsuc2hmKGwsIiYjeDI1QkM7IikKaj1hLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpK -LmRSKGopLmkoMCxjKQpqLmlubmVyVGV4dD0iZm9sZGVyX29wZW4iCm4uYXBwZW5kQ2hpbGQoaikKbi5h -cHBlbmRDaGlsZChhLmNyZWF0ZVRleHROb2RlKG8uYSkpCkwudFgobixvLmQsITApCmk9YS5jcmVhdGVF -bGVtZW50KCJzcGFuIikKaz1KLllFKGkpCmsuZ1AoaSkuaSgwLGMpCmkuaW5uZXJUZXh0PSJpbmRldGVy -bWluYXRlX2NoZWNrX2JveCIKay5nUChpKS5pKDAsYikKTC54bihpLG8pCms9ay5nVmwoaSkKaD1rLiR0 -aQpnPWguQygifigxKT8iKS5hKG5ldyBMLlREKG8sbixpKSkKcS5hKG51bGwpClcuSkUoay5hLGsuYixn -LCExLGguYykKbS5tSyhuLGksaikKTC5reihsKX1lbHNlIGlmKG8gaW5zdGFuY2VvZiBMLmNEKXtpPWEu -Y3JlYXRlRWxlbWVudCgic3BhbiIpCm09Si5ZRShpKQptLmdQKGkpLmkoMCxjKQppLmlubmVyVGV4dD0i -IgptLmdQKGkpLmkoMCxiKQprPUgub1Qoby54KQppZighayltLmdQKGkpLmkoMCwiZGlzYWJsZWQiKQpM -LnhuKGksbykKaWYoayl7bT1tLmdWbChpKQprPW0uJHRpCmg9ay5DKCJ+KDEpPyIpLmEobmV3IEwuSWYo -byxpLG4pKQpxLmEobnVsbCkKVy5KRShtLmEsbS5iLGgsITEsay5jKX1uLmFwcGVuZENoaWxkKGkpCm09 -YS5jcmVhdGVFbGVtZW50KCJzcGFuIikKSi5kUihtKS5pKDAsYykKbS5pbm5lclRleHQ9Imluc2VydF9k -cml2ZV9maWxlIgpuLmFwcGVuZENoaWxkKG0pCmY9YS5jcmVhdGVFbGVtZW50KCJhIikKbi5hcHBlbmRD -aGlsZChmKQptPUouWUUoZikKbS5nUChmKS5pKDAsIm5hdi1saW5rIikKZi5zZXRBdHRyaWJ1dGUoImRh -dGEtIituZXcgVy5TeShuZXcgVy5pNyhmKSkuT1UoIm5hbWUiKSxvLmMpCmYuc2V0QXR0cmlidXRlKCJo -cmVmIixMLlE0KG8uZCxQLkZsKHIscikpKQpmLmFwcGVuZENoaWxkKGEuY3JlYXRlVGV4dE5vZGUoby5h -KSkKbT1tLmdWbChmKQprPW0uJHRpCmg9ay5DKCJ+KDEpPyIpLmEobmV3IEwudEIoKSkKcS5hKG51bGwp -ClcuSkUobS5hLG0uYixoLCExLGsuYykKZT1vLmUKaWYodHlwZW9mIGUhPT0ibnVtYmVyIilyZXR1cm4g -ZS5vcygpCmlmKGU+MCl7ZD1hLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpuLmFwcGVuZENoaWxkKGQpCkou -ZFIoZCkuaSgwLCJlZGl0LWNvdW50IikKbT0iIitlKyIgIgppZihlPT09MSlrPSJwcm9wb3NlZCBlZGl0 -IgplbHNlIGs9InByb3Bvc2VkIGVkaXRzIgpkLnNldEF0dHJpYnV0ZSgidGl0bGUiLG0raykKZC5hcHBl -bmRDaGlsZChhLmNyZWF0ZVRleHROb2RlKEMuam4udyhlKSkpfX19fSwKdXo6ZnVuY3Rpb24oYSxiLGMp -e3ZhciBzPWRvY3VtZW50LHI9cy5jcmVhdGVFbGVtZW50KCJidXR0b24iKSxxPXQuayxwPXEuQygifigx -KT8iKS5hKG5ldyBMLm0yKGEsYykpCnQuWi5hKG51bGwpClcuSkUociwiY2xpY2siLHAsITEscS5jKQpy -LmFwcGVuZENoaWxkKHMuY3JlYXRlVGV4dE5vZGUoUi5PWChhLmEpKSkKYi5hcHBlbmRDaGlsZChyKX0s -CkZ6OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoPWEuYQppZihoPT1udWxs -KXJldHVybgpzPWRvY3VtZW50CnI9cy5jcmVhdGVFbGVtZW50KCJwIikKcT1iLmFwcGVuZENoaWxkKHIp -CnI9cy5jcmVhdGVFbGVtZW50KCJzcGFuIikKcD10LmkKSi5NdShyLEguVk0oWyJ0eXBlLWRlc2NyaXB0 -aW9uIl0scCkpCnIuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiQWN0aW9ucyIpKQpxLmFwcGVu -ZENoaWxkKHIpCnEuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiOiIpKQpvPXMuY3JlYXRlRWxl -bWVudCgicCIpCmIuYXBwZW5kQ2hpbGQobykKZm9yKHI9aC5sZW5ndGgsbj10LlEsbT0wO208aC5sZW5n -dGg7aC5sZW5ndGg9PT1yfHwoMCxILmxrKShoKSwrK20pe2w9aFttXQprPXMuY3JlYXRlRWxlbWVudCgi -YSIpCm8uYXBwZW5kQ2hpbGQoaykKay5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKGwuYSkpCmsu -c2V0QXR0cmlidXRlKCJocmVmIixsLmIpCmo9bi5hKEguVk0oWyJhZGQtaGludC1saW5rIiwiYmVmb3Jl -LWFwcGx5IiwiYnV0dG9uIl0scCkpCmk9Si5kUihrKQppLlYxKDApCmkuRlYoMCxqKX19LApDQzpmdW5j -dGlvbihhNCxhNSxhNil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGEsYTAs -YTEsYTIsYTMKZm9yKHM9YTQuZixyPXMubGVuZ3RoLHE9dC5pLHA9dC5RLG89MDtvPHMubGVuZ3RoO3Mu -bGVuZ3RoPT09cnx8KDAsSC5saykocyksKytvKXtuPXNbb10KbT1kb2N1bWVudApsPW0uY3JlYXRlRWxl -bWVudCgicCIpCms9cC5hKEguVk0oWyJ0cmFjZSJdLHEpKQpqPUouZFIobCkKai5WMSgwKQpqLkZWKDAs -aykKaT1hNS5hcHBlbmRDaGlsZChsKQpsPW0uY3JlYXRlRWxlbWVudCgic3BhbiIpCms9cC5hKEguVk0o -WyJ0eXBlLWRlc2NyaXB0aW9uIl0scSkpCmo9Si5kUihsKQpqLlYxKDApCmouRlYoMCxrKQpsLmFwcGVu -ZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUobi5hKSkKaS5hcHBlbmRDaGlsZChsKQppLmFwcGVuZENoaWxk -KG0uY3JlYXRlVGV4dE5vZGUoIjoiKSkKbD1tLmNyZWF0ZUVsZW1lbnQoInVsIikKaz1wLmEoSC5WTShb -InRyYWNlIl0scSkpCmo9Si5kUihsKQpqLlYxKDApCmouRlYoMCxrKQpoPWkuYXBwZW5kQ2hpbGQobCkK -Zm9yKGw9bi5iLGs9bC5sZW5ndGgsZz0wO2c8bC5sZW5ndGg7bC5sZW5ndGg9PT1rfHwoMCxILmxrKShs -KSwrK2cpe2Y9bFtnXQplPW0uY3JlYXRlRWxlbWVudCgibGkiKQpoLmFwcGVuZENoaWxkKGUpCmQ9bS5j -cmVhdGVFbGVtZW50KCJzcGFuIikKYz1wLmEoSC5WTShbImZ1bmN0aW9uIl0scSkpCmo9Si5kUihkKQpq -LlYxKDApCmouRlYoMCxjKQpjPWYuYgpMLldqKGQsYz09bnVsbD8idW5rbm93biI6YykKZS5hcHBlbmRD -aGlsZChkKQpiPWYuYwppZihiIT1udWxsKXtlLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIiAo -IikpCmE9Yi5iCmEwPW0uY3JlYXRlRWxlbWVudCgiYSIpCmEwLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4 -dE5vZGUoSC5FaihiLmMpKyI6IitILkVqKGEpKSkKYTAuc2V0QXR0cmlidXRlKCJocmVmIixiLmEpCmEw -LmNsYXNzTGlzdC5hZGQoIm5hdi1saW5rIikKZS5hcHBlbmRDaGlsZChhMCkKZS5hcHBlbmRDaGlsZCht -LmNyZWF0ZVRleHROb2RlKCIpIikpfWUuYXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9kZSgiOiAiKSkK -ZD1mLmEKTC5XaihlLGQ9PW51bGw/InVua25vd24iOmQpCmQ9Zi5kCmlmKGQubGVuZ3RoIT09MCl7Yz1t -LmNyZWF0ZUVsZW1lbnQoInAiKQphMT1wLmEoSC5WTShbImRyYXdlciIsImJlZm9yZS1hcHBseSJdLHEp -KQpqPUouZFIoYykKai5WMSgwKQpqLkZWKDAsYTEpCmEyPWUuYXBwZW5kQ2hpbGQoYykKZm9yKGM9ZC5s -ZW5ndGgsYTM9MDthMzxkLmxlbmd0aDtkLmxlbmd0aD09PWN8fCgwLEgubGspKGQpLCsrYTMpTC51eihk -W2EzXSxhMixiKX19fX0sClVzOmZ1bmN0aW9uKGEpe3JldHVybiBKLlU2KGEpLnRnKGEsIj8iKT9DLnhC -Lk5qKGEsMCxDLnhCLk9ZKGEsIj8iKSk6YX0sClRHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBMLlFX -KGEsYil9LAp5dzpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwCmZvcihzPWEubGVuZ3RoLHI9MDtyPGEu -bGVuZ3RoO2EubGVuZ3RoPT09c3x8KDAsSC5saykoYSksKytyKXtxPWFbcl0KaWYocSBpbnN0YW5jZW9m -IEwudnQpe3A9TC55dyhxLmQsYikKaWYocCE9bnVsbClyZXR1cm4gcH1lbHNlIGlmKHEuYz09YilyZXR1 -cm4gcX1yZXR1cm4gbnVsbH0sCldqOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPUguVk0oYi5zcGxpdCgi -LiIpLHQucykscD1DLk5tLmd0SChxKSxvPWRvY3VtZW50CmEuYXBwZW5kQ2hpbGQoby5jcmVhdGVUZXh0 -Tm9kZShwKSkKZm9yKHA9SC5xQyhxLDEsbnVsbCx0Lk4pLHA9bmV3IEguYTcocCxwLmdBKHApLHAuJHRp -LkMoImE3PGFMLkU+IikpLHM9Si5ZRShhKTtwLkYoKTspe3I9cC5kCnMubnooYSwiYmVmb3JlZW5kIiwi -JiM4MjAzOy4iLG51bGwsbnVsbCkKYS5hcHBlbmRDaGlsZChvLmNyZWF0ZVRleHROb2RlKHIpKX19LApl -OmZ1bmN0aW9uIGUoKXt9LApWVzpmdW5jdGlvbiBWVyhhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhp -cy5jPWN9LApvWjpmdW5jdGlvbiBvWigpe30sCmpyOmZ1bmN0aW9uIGpyKCl7fSwKcWw6ZnVuY3Rpb24g -cWwoKXt9LApIaTpmdW5jdGlvbiBIaSgpe30sCkJUOmZ1bmN0aW9uIEJUKCl7fSwKUFk6ZnVuY3Rpb24g -UFkoKXt9LAp1ODpmdW5jdGlvbiB1OCgpe30sCkw6ZnVuY3Rpb24gTCgpe30sCld4OmZ1bmN0aW9uIFd4 -KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApBTzpmdW5jdGlvbiBBTyhhKXt0aGlzLmE9YX0sCmROOmZ1 -bmN0aW9uIGROKGEpe3RoaXMuYT1hfSwKSG86ZnVuY3Rpb24gSG8oYSl7dGhpcy5hPWF9LAp4ejpmdW5j -dGlvbiB4eihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSUM6ZnVuY3Rpb24gSUMoKXt9LApmQzpmdW5j -dGlvbiBmQyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKVG06ZnVuY3Rpb24gVG0oKXt9LApuVDpmdW5j -dGlvbiBuVChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApOWTpmdW5jdGlvbiBOWShh -KXt0aGlzLmE9YX0sCnVlOmZ1bmN0aW9uIHVlKCl7fSwKZVg6ZnVuY3Rpb24gZVgoKXt9LApFRTpmdW5j -dGlvbiBFRShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApRTDpmdW5jdGlvbiBRTChh -LGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKVlM6ZnVuY3Rpb24gVlMoYSl7dGhpcy5hPWF9LApURDpmdW5j -dGlvbiBURChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApJZjpmdW5jdGlvbiBJZihh -LGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAp0QjpmdW5jdGlvbiB0Qigpe30sCm0yOmZ1 -bmN0aW9uIG0yKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApRVzpmdW5jdGlvbiBRVyhhLGIpe3RoaXMu -YT1hCnRoaXMuYj1ifSwKWEE6ZnVuY3Rpb24gWEEoKXt9LApaczpmdW5jdGlvbihhKXt2YXIgcyxyLHE9 -Si5VNihhKQppZihMLnAyKEguaChxLnEoYSwidHlwZSIpKSk9PT1DLlkyKXtzPUguaChxLnEoYSwibmFt -ZSIpKQpyPUguaChxLnEoYSwicGF0aCIpKQpxPXEucShhLCJzdWJ0cmVlIikKcT1uZXcgTC52dChxPT1u -dWxsP251bGw6TC5tSyhxKSxzLHIpCnEuTFYoKQpyZXR1cm4gcX1lbHNle3M9SC5oKHEucShhLCJuYW1l -IikpCnI9SC5oKHEucShhLCJwYXRoIikpCnJldHVybiBuZXcgTC5jRChILmgocS5xKGEsImhyZWYiKSks -SC51UChxLnEoYSwiZWRpdENvdW50IikpLEgueTgocS5xKGEsIndhc0V4cGxpY2l0bHlPcHRlZE91dCIp -KSxMLnZCKEgudVAocS5xKGEsIm1pZ3JhdGlvblN0YXR1cyIpKSksSC55OChxLnEoYSwibWlncmF0aW9u -U3RhdHVzQ2FuQmVDaGFuZ2VkIikpLHMscil9fSwKbUs6ZnVuY3Rpb24oYSl7dmFyIHMscj1ILlZNKFtd -LHQuY1EpCmZvcihzPUouSVQodC5VLmEoYSkpO3MuRigpOylyLnB1c2goTC5acyhzLmdsKCkpKQpyZXR1 -cm4gcn0sClZEOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT1ILlZNKFtdLHQuRykKZm9yKHM9YS5sZW5ndGgs -cj0wO3I8YS5sZW5ndGg7YS5sZW5ndGg9PT1zfHwoMCxILmxrKShhKSwrK3IpcS5wdXNoKGFbcl0uTHQo -KSkKcmV0dXJuIHF9LAp2QjpmdW5jdGlvbihhKXtpZihhPT1udWxsKXJldHVybiBudWxsCmlmKGE+Pj4w -IT09YXx8YT49NClyZXR1cm4gSC5PSChDLmwwLGEpCnJldHVybiBDLmwwW2FdfSwKcDI6ZnVuY3Rpb24o -YSl7c3dpdGNoKGEpe2Nhc2UiZGlyZWN0b3J5IjpyZXR1cm4gQy5ZMgpjYXNlImZpbGUiOnJldHVybiBD -LnJmCmRlZmF1bHQ6dGhyb3cgSC5iKFAuUFYoIlVucmVjb2duaXplZCBuYXZpZ2F0aW9uIHRyZWUgbm9k -ZSB0eXBlOiAiK0guRWooYSkpKX19LAp2dDpmdW5jdGlvbiB2dChhLGIsYyl7dmFyIF89dGhpcwpfLmQ9 -YQpfLmE9YgpfLmI9bnVsbApfLmM9Y30sCmNEOmZ1bmN0aW9uIGNEKGEsYixjLGQsZSxmLGcpe3ZhciBf -PXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWQKXy54PWUKXy5hPWYKXy5iPW51bGwKXy5jPWd9LApE -ODpmdW5jdGlvbiBEOCgpe30sCk85OmZ1bmN0aW9uIE85KGEpe3RoaXMuYj1hfSwKR2I6ZnVuY3Rpb24g -R2IoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCklWOmZ1bmN0aW9uIElWKGEsYixjLGQpe3ZhciBfPXRo -aXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWR9fSxSPXsKbno6ZnVuY3Rpb24oYSl7dmFyIHM9SC51UChh -LnEoMCwibm9kZUlkIikpCnJldHVybiBuZXcgUi5MTChDLk5tLkh0KEMucmssbmV3IFIuTUQoYSkpLHMp -fSwKT1g6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgQy5BZDpyZXR1cm4iQWRkIC8qPyovIGhpbnQi -CmNhc2UgQy5uZTpyZXR1cm4iQWRkIC8qISovIGhpbnQiCmNhc2UgQy53VjpyZXR1cm4iUmVtb3ZlIC8q -PyovIGhpbnQiCmNhc2UgQy5mUjpyZXR1cm4iUmVtb3ZlIC8qISovIGhpbnQiCmNhc2UgQy5teTpyZXR1 -cm4iQ2hhbmdlIHRvIC8qPyovIGhpbnQiCmNhc2UgQy5yeDpyZXR1cm4iQ2hhbmdlIHRvIC8qISovIGhp -bnQifXJldHVybiBudWxsfSwKTEw6ZnVuY3Rpb24gTEwoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk1E -OmZ1bmN0aW9uIE1EKGEpe3RoaXMuYT1hfSwKSDc6ZnVuY3Rpb24gSDcoYSxiKXt0aGlzLmE9YQp0aGlz -LmI9Yn19LE09ewpZRjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbixtLGwKZm9yKHM9Yi5sZW5n -dGgscj0xO3I8czsrK3Ipe2lmKGJbcl09PW51bGx8fGJbci0xXSE9bnVsbCljb250aW51ZQpmb3IoO3M+ -PTE7cz1xKXtxPXMtMQppZihiW3FdIT1udWxsKWJyZWFrfXA9bmV3IFAuUm4oIiIpCm89YSsiKCIKcC5h -PW8Kbj1ILnQ2KGIpCm09bi5DKCJuSDwxPiIpCmw9bmV3IEgubkgoYiwwLHMsbSkKbC5IZChiLDAscyxu -LmMpCm09bytuZXcgSC5sSihsLG0uQygicVUoYUwuRSkiKS5hKG5ldyBNLk5vKCkpLG0uQygibEo8YUwu -RSxxVT4iKSkuaygwLCIsICIpCnAuYT1tCnAuYT1tKygiKTogcGFydCAiKyhyLTEpKyIgd2FzIG51bGws -IGJ1dCBwYXJ0ICIrcisiIHdhcyBub3QuIikKdGhyb3cgSC5iKFAueFkocC53KDApKSl9fSwKbEk6ZnVu -Y3Rpb24gbEkoYSl7dGhpcy5hPWF9LApxNzpmdW5jdGlvbiBxNygpe30sCk5vOmZ1bmN0aW9uIE5vKCl7 -fX0sWD17CkNMOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbyxuPWIueFooYSkKYi5oSyhhKQppZihu -IT1udWxsKWE9Si5LVihhLG4ubGVuZ3RoKQpzPXQucwpyPUguVk0oW10scykKcT1ILlZNKFtdLHMpCnM9 -YS5sZW5ndGgKaWYocyE9PTAmJmIucjQoQy54Qi5XKGEsMCkpKXtpZigwPj1zKXJldHVybiBILk9IKGEs -MCkKQy5ObS5pKHEsYVswXSkKcD0xfWVsc2V7Qy5ObS5pKHEsIiIpCnA9MH1mb3Iobz1wO288czsrK28p -aWYoYi5yNChDLnhCLlcoYSxvKSkpe0MuTm0uaShyLEMueEIuTmooYSxwLG8pKQpDLk5tLmkocSxhW29d -KQpwPW8rMX1pZihwPHMpe0MuTm0uaShyLEMueEIueW4oYSxwKSkKQy5ObS5pKHEsIiIpfXJldHVybiBu -ZXcgWC5XRChiLG4scixxKX0sCldEOmZ1bmN0aW9uIFdEKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEK -Xy5iPWIKXy5kPWMKXy5lPWR9LApJNzpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFguZHYoYSl9LApkdjpm -dW5jdGlvbiBkdihhKXt0aGlzLmE9YX19LE89ewpSaDpmdW5jdGlvbigpe3ZhciBzLHI9bnVsbAppZihQ -LnVvKCkuZ0ZpKCkhPT0iZmlsZSIpcmV0dXJuICQuRWIoKQpzPVAudW8oKQppZighQy54Qi5UYyhzLmdJ -aShzKSwiLyIpKXJldHVybiAkLkViKCkKaWYoUC5LTChyLCJhL2IiLHIscixyLHIscikudDQoKT09PSJh -XFxiIilyZXR1cm4gJC5LaygpCnJldHVybiAkLmJEKCl9LAp6TDpmdW5jdGlvbiB6TCgpe319LEU9e09G -OmZ1bmN0aW9uIE9GKGEsYixjKXt0aGlzLmQ9YQp0aGlzLmU9Ygp0aGlzLmY9Y319LEY9e3J1OmZ1bmN0 -aW9uIHJ1KGEsYixjLGQpe3ZhciBfPXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWR9fSxEPXsKYWI6 -ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvPW51bGwKdHJ5e289UC51bygpfWNhdGNoKHMpe2lmKHQuZzgu -YihILlJ1KHMpKSl7cj0kLkZmCmlmKHIhPW51bGwpcmV0dXJuIHIKdGhyb3cgc31lbHNlIHRocm93IHN9 -aWYoSi5STShvLCQuSTYpKXtyPSQuRmYKci50b1N0cmluZwpyZXR1cm4gcn0kLkk2PW8KaWYoJC5Iaygp -PT0kLkViKCkpcj0kLkZmPW8uWkkoIi4iKS53KDApCmVsc2V7cT1vLnQ0KCkKcD1xLmxlbmd0aC0xCnI9 -JC5GZj1wPT09MD9xOkMueEIuTmoocSwwLHApfXIudG9TdHJpbmcKcmV0dXJuIHJ9fQp2YXIgdz1bQyxI -LEosUCxXLFUsQixULEwsUixNLFgsTyxFLEYsRF0KaHVua0hlbHBlcnMuc2V0RnVuY3Rpb25OYW1lc0lm -TmVjZXNzYXJ5KHcpCnZhciAkPXt9CkguRksucHJvdG90eXBlPXt9CkouR3YucHJvdG90eXBlPXsKRE46 -ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWJ9LApnaU86ZnVuY3Rpb24oYSl7cmV0dXJuIEguZVEoYSl9 -LAp3OmZ1bmN0aW9uKGEpe3JldHVybiJJbnN0YW5jZSBvZiAnIitILkVqKEguTShhKSkrIicifSwKZTc6 -ZnVuY3Rpb24oYSxiKXt0Lm8uYShiKQp0aHJvdyBILmIoUC5scihhLGIuZ1dhKCksYi5nbmQoKSxiLmdW -bSgpKSl9fQpKLnlFLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKX0sCmdp -TzpmdW5jdGlvbihhKXtyZXR1cm4gYT81MTkwMTg6MjE4MTU5fSwKJGlhMjoxfQpKLndlLnByb3RvdHlw -ZT17CkROOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWJ9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiJu -dWxsIn0sCmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gMH0sCmU3OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRo -aXMuU2ooYSx0Lm8uYShiKSl9LAokaWM4OjF9CkouTUYucHJvdG90eXBlPXsKZ2lPOmZ1bmN0aW9uKGEp -e3JldHVybiAwfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEpfSwKJGl2bToxfQpKLmlDLnBy -b3RvdHlwZT17fQpKLmtkLnByb3RvdHlwZT17fQpKLmM1LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7 -dmFyIHM9YVskLncoKV0KaWYocz09bnVsbClyZXR1cm4gdGhpcy50KGEpCnJldHVybiJKYXZhU2NyaXB0 -IGZ1bmN0aW9uIGZvciAiK0guRWooSi5qKHMpKX0sCiRpRUg6MX0KSi5qZC5wcm90b3R5cGU9ewpkcjpm -dW5jdGlvbihhLGIpe3JldHVybiBuZXcgSC5qVihhLEgudDYoYSkuQygiQDwxPiIpLktxKGIpLkMoImpW -PDEsMj4iKSl9LAppOmZ1bmN0aW9uKGEsYil7SC50NihhKS5jLmEoYikKaWYoISFhLmZpeGVkJGxlbmd0 -aClILnYoUC5MNCgiYWRkIikpCmEucHVzaChiKX0sClc0OmZ1bmN0aW9uKGEsYil7dmFyIHMKaWYoISFh -LmZpeGVkJGxlbmd0aClILnYoUC5MNCgicmVtb3ZlQXQiKSkKcz1hLmxlbmd0aAppZihiPj1zKXRocm93 -IEguYihQLk83KGIsbnVsbCkpCnJldHVybiBhLnNwbGljZShiLDEpWzBdfSwKVUc6ZnVuY3Rpb24oYSxi -LGMpe3ZhciBzLHIKSC50NihhKS5DKCJjWDwxPiIpLmEoYykKaWYoISFhLmZpeGVkJGxlbmd0aClILnYo -UC5MNCgiaW5zZXJ0QWxsIikpClAud0EoYiwwLGEubGVuZ3RoLCJpbmRleCIpCmlmKCF0LmQuYihjKSlj -PUouUlgoYykKcz1KLkhtKGMpCmEubGVuZ3RoPWEubGVuZ3RoK3MKcj1iK3MKdGhpcy5ZVyhhLHIsYS5s -ZW5ndGgsYSxiKQp0aGlzLnZnKGEsYixyLGMpfSwKRlY6ZnVuY3Rpb24oYSxiKXt2YXIgcwpILnQ2KGEp -LkMoImNYPDE+IikuYShiKQppZighIWEuZml4ZWQkbGVuZ3RoKUgudihQLkw0KCJhZGRBbGwiKSkKaWYo -QXJyYXkuaXNBcnJheShiKSl7dGhpcy5LaChhLGIpCnJldHVybn1mb3Iocz1KLklUKGIpO3MuRigpOylh -LnB1c2gocy5nbCgpKX0sCktoOmZ1bmN0aW9uKGEsYil7dmFyIHMscgp0LmIuYShiKQpzPWIubGVuZ3Ro -CmlmKHM9PT0wKXJldHVybgppZihhPT09Yil0aHJvdyBILmIoUC5hNChhKSkKZm9yKHI9MDtyPHM7Kyty -KWEucHVzaChiW3JdKX0sCkUyOmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1ILnQ2KGEpCnJldHVybiBuZXcg -SC5sSihhLHMuS3EoYykuQygiMSgyKSIpLmEoYikscy5DKCJAPDE+IikuS3EoYykuQygibEo8MSwyPiIp -KX0sCms6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPVAuTzgoYS5sZW5ndGgsIiIsITEsdC5OKQpmb3Iocz0w -O3M8YS5sZW5ndGg7KytzKXRoaXMuWTUocixzLEguRWooYVtzXSkpCnJldHVybiByLmpvaW4oYil9LApl -UjpmdW5jdGlvbihhLGIpe3JldHVybiBILnFDKGEsYixudWxsLEgudDYoYSkuYyl9LApOMDpmdW5jdGlv -bihhLGIsYyxkKXt2YXIgcyxyLHEKZC5hKGIpCkgudDYoYSkuS3EoZCkuQygiMSgxLDIpIikuYShjKQpz -PWEubGVuZ3RoCmZvcihyPWIscT0wO3E8czsrK3Epe3I9Yy4kMihyLGFbcV0pCmlmKGEubGVuZ3RoIT09 -cyl0aHJvdyBILmIoUC5hNChhKSl9cmV0dXJuIHJ9LApIdDpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxw -LG8KSC50NihhKS5DKCJhMigxKSIpLmEoYikKcz1hLmxlbmd0aApmb3Iocj1udWxsLHE9ITEscD0wO3A8 -czsrK3Ape289YVtwXQppZihILm9UKGIuJDEobykpKXtpZihxKXRocm93IEguYihILkFtKCkpCnI9bwpx -PSEwfWlmKHMhPT1hLmxlbmd0aCl0aHJvdyBILmIoUC5hNChhKSl9aWYocSlyZXR1cm4gcgp0aHJvdyBI -LmIoSC5XcCgpKX0sCkU6ZnVuY3Rpb24oYSxiKXtpZihiPDB8fGI+PWEubGVuZ3RoKXJldHVybiBILk9I -KGEsYikKcmV0dXJuIGFbYl19LApndEg6ZnVuY3Rpb24oYSl7aWYoYS5sZW5ndGg+MClyZXR1cm4gYVsw -XQp0aHJvdyBILmIoSC5XcCgpKX0sCmdyWjpmdW5jdGlvbihhKXt2YXIgcz1hLmxlbmd0aAppZihzPjAp -cmV0dXJuIGFbcy0xXQp0aHJvdyBILmIoSC5XcCgpKX0sCllXOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFy -IHMscixxLHAsbwpILnQ2KGEpLkMoImNYPDE+IikuYShkKQppZighIWEuaW1tdXRhYmxlJGxpc3QpSC52 -KFAuTDQoInNldFJhbmdlIikpClAuakIoYixjLGEubGVuZ3RoKQpzPWMtYgppZihzPT09MClyZXR1cm4K -UC5rMShlLCJza2lwQ291bnQiKQppZih0LmouYihkKSl7cj1kCnE9ZX1lbHNle3I9Si5BNShkLGUpLnR0 -KDAsITEpCnE9MH1wPUouVTYocikKaWYocStzPnAuZ0EocikpdGhyb3cgSC5iKEguYXIoKSkKaWYocTxi -KWZvcihvPXMtMTtvPj0wOy0tbylhW2Irb109cC5xKHIscStvKQplbHNlIGZvcihvPTA7bzxzOysrbylh -W2Irb109cC5xKHIscStvKX0sCnZnOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLllXKGEsYixj -LGQsMCl9LApWcjpmdW5jdGlvbihhLGIpe3ZhciBzLHIKSC50NihhKS5DKCJhMigxKSIpLmEoYikKcz1h -Lmxlbmd0aApmb3Iocj0wO3I8czsrK3Ipe2lmKEgub1QoYi4kMShhW3JdKSkpcmV0dXJuITAKaWYoYS5s -ZW5ndGghPT1zKXRocm93IEguYihQLmE0KGEpKX1yZXR1cm4hMX0sCnRnOmZ1bmN0aW9uKGEsYil7dmFy -IHMKZm9yKHM9MDtzPGEubGVuZ3RoOysrcylpZihKLlJNKGFbc10sYikpcmV0dXJuITAKcmV0dXJuITF9 -LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RoPT09MH0sCmdvcjpmdW5jdGlvbihhKXtyZXR1 -cm4gYS5sZW5ndGghPT0wfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gUC5XRShhLCJbIiwiXSIpfSwKdHQ6 -ZnVuY3Rpb24oYSxiKXt2YXIgcz1ILlZNKGEuc2xpY2UoMCksSC50NihhKSkKcmV0dXJuIHN9LApicjpm -dW5jdGlvbihhKXtyZXR1cm4gdGhpcy50dChhLCEwKX0sCmdtOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcg -Si5tMShhLGEubGVuZ3RoLEgudDYoYSkuQygibTE8MT4iKSl9LApnaU86ZnVuY3Rpb24oYSl7cmV0dXJu -IEguZVEoYSl9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LApzQTpmdW5jdGlvbihhLGIp -e2lmKCEhYS5maXhlZCRsZW5ndGgpSC52KFAuTDQoInNldCBsZW5ndGgiKSkKaWYoYjwwKXRocm93IEgu -YihQLlRFKGIsMCxudWxsLCJuZXdMZW5ndGgiLG51bGwpKQphLmxlbmd0aD1ifSwKcTpmdW5jdGlvbihh -LGIpe0gudVAoYikKaWYoYj49YS5sZW5ndGh8fGI8MCl0aHJvdyBILmIoSC5IWShhLGIpKQpyZXR1cm4g -YVtiXX0sClk1OmZ1bmN0aW9uKGEsYixjKXtILnQ2KGEpLmMuYShjKQppZighIWEuaW1tdXRhYmxlJGxp -c3QpSC52KFAuTDQoImluZGV4ZWQgc2V0IikpCmlmKGI+PWEubGVuZ3RofHxiPDApdGhyb3cgSC5iKEgu -SFkoYSxiKSkKYVtiXT1jfSwKJGliUToxLAokaWNYOjEsCiRpek06MX0KSi5Qby5wcm90b3R5cGU9e30K -Si5tMS5wcm90b3R5cGU9ewpnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LApGOmZ1bmN0aW9uKCl7 -dmFyIHMscj10aGlzLHE9ci5hLHA9cS5sZW5ndGgKaWYoci5iIT09cCl0aHJvdyBILmIoSC5sayhxKSkK -cz1yLmMKaWYocz49cCl7ci5zTShudWxsKQpyZXR1cm4hMX1yLnNNKHFbc10pOysrci5jCnJldHVybiEw -fSwKc006ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLkMoIjE/IikuYShhKX0sCiRpQW46MX0KSi5x -SS5wcm90b3R5cGU9ewp6UTpmdW5jdGlvbihhKXtpZihhPjApe2lmKGEhPT0xLzApcmV0dXJuIE1hdGgu -cm91bmQoYSl9ZWxzZSBpZihhPi0xLzApcmV0dXJuIDAtTWF0aC5yb3VuZCgwLWEpCnRocm93IEguYihQ -Lkw0KCIiK2ErIi5yb3VuZCgpIikpfSwKdzpmdW5jdGlvbihhKXtpZihhPT09MCYmMS9hPDApcmV0dXJu -Ii0wLjAiCmVsc2UgcmV0dXJuIiIrYX0sCmdpTzpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxvPWF8MApp -ZihhPT09bylyZXR1cm4gbyY1MzY4NzA5MTEKcz1NYXRoLmFicyhhKQpyPU1hdGgubG9nKHMpLzAuNjkz -MTQ3MTgwNTU5OTQ1M3wwCnE9TWF0aC5wb3coMixyKQpwPXM8MT9zL3E6cS9zCnJldHVybigocCo5MDA3 -MTk5MjU0NzQwOTkyfDApKyhwKjM1NDIyNDMxODExNzY1MjF8MCkpKjU5OTE5NytyKjEyNTkmNTM2ODcw -OTExfSwKelk6ZnVuY3Rpb24oYSxiKXt2YXIgcz1hJWIKaWYocz09PTApcmV0dXJuIDAKaWYocz4wKXJl -dHVybiBzCmlmKGI8MClyZXR1cm4gcy1iCmVsc2UgcmV0dXJuIHMrYn0sCkJVOmZ1bmN0aW9uKGEsYil7 -cmV0dXJuKGF8MCk9PT1hP2EvYnwwOnRoaXMuREooYSxiKX0sCkRKOmZ1bmN0aW9uKGEsYil7dmFyIHM9 -YS9iCmlmKHM+PS0yMTQ3NDgzNjQ4JiZzPD0yMTQ3NDgzNjQ3KXJldHVybiBzfDAKaWYocz4wKXtpZihz -IT09MS8wKXJldHVybiBNYXRoLmZsb29yKHMpfWVsc2UgaWYocz4tMS8wKXJldHVybiBNYXRoLmNlaWwo -cykKdGhyb3cgSC5iKFAuTDQoIlJlc3VsdCBvZiB0cnVuY2F0aW5nIGRpdmlzaW9uIGlzICIrSC5Faihz -KSsiOiAiK0guRWooYSkrIiB+LyAiK2IpKX0sCndHOmZ1bmN0aW9uKGEsYil7dmFyIHMKaWYoYT4wKXM9 -dGhpcy5wMyhhLGIpCmVsc2V7cz1iPjMxPzMxOmIKcz1hPj5zPj4+MH1yZXR1cm4gc30sCmJmOmZ1bmN0 -aW9uKGEsYil7aWYoYjwwKXRocm93IEguYihILnRMKGIpKQpyZXR1cm4gdGhpcy5wMyhhLGIpfSwKcDM6 -ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj4zMT8wOmE+Pj5ifSwKJGlDUDoxLAokaVpaOjF9CkouYlUucHJv -dG90eXBlPXskaUlqOjF9Ckoua0QucHJvdG90eXBlPXt9CkouRHIucHJvdG90eXBlPXsKTzpmdW5jdGlv -bihhLGIpe2lmKGI8MCl0aHJvdyBILmIoSC5IWShhLGIpKQppZihiPj1hLmxlbmd0aClILnYoSC5IWShh -LGIpKQpyZXR1cm4gYS5jaGFyQ29kZUF0KGIpfSwKVzpmdW5jdGlvbihhLGIpe2lmKGI+PWEubGVuZ3Ro -KXRocm93IEguYihILkhZKGEsYikpCnJldHVybiBhLmNoYXJDb2RlQXQoYil9LApkZDpmdW5jdGlvbihh -LGIpe3JldHVybiBuZXcgSC51bihiLGEsMCl9LApoOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGIhPSJz -dHJpbmciKXRocm93IEguYihQLkwzKGIsbnVsbCxudWxsKSkKcmV0dXJuIGErYn0sClRjOmZ1bmN0aW9u -KGEsYil7dmFyIHM9Yi5sZW5ndGgscj1hLmxlbmd0aAppZihzPnIpcmV0dXJuITEKcmV0dXJuIGI9PT10 -aGlzLnluKGEsci1zKX0sCmk3OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzPVAuakIoYixjLGEubGVuZ3Ro -KSxyPWEuc3Vic3RyaW5nKDAsYikscT1hLnN1YnN0cmluZyhzKQpyZXR1cm4gcitkK3F9LApRaTpmdW5j -dGlvbihhLGIsYyl7dmFyIHMKaWYoYzwwfHxjPmEubGVuZ3RoKXRocm93IEguYihQLlRFKGMsMCxhLmxl -bmd0aCxudWxsLG51bGwpKQpzPWMrYi5sZW5ndGgKaWYocz5hLmxlbmd0aClyZXR1cm4hMQpyZXR1cm4g -Yj09PWEuc3Vic3RyaW5nKGMscyl9LApuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuUWkoYSxiLDAp -fSwKTmo6ZnVuY3Rpb24oYSxiLGMpe2lmKGM9PW51bGwpYz1hLmxlbmd0aAppZihiPDApdGhyb3cgSC5i -KFAuTzcoYixudWxsKSkKaWYoYj5jKXRocm93IEguYihQLk83KGIsbnVsbCkpCmlmKGM+YS5sZW5ndGgp -dGhyb3cgSC5iKFAuTzcoYyxudWxsKSkKcmV0dXJuIGEuc3Vic3RyaW5nKGIsYyl9LAp5bjpmdW5jdGlv -bihhLGIpe3JldHVybiB0aGlzLk5qKGEsYixudWxsKX0sCmhjOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRv -TG93ZXJDYXNlKCl9LApiUzpmdW5jdGlvbihhKXt2YXIgcyxyLHEscD1hLnRyaW0oKSxvPXAubGVuZ3Ro -CmlmKG89PT0wKXJldHVybiBwCmlmKHRoaXMuVyhwLDApPT09MTMzKXtzPUoubW0ocCwxKQppZihzPT09 -bylyZXR1cm4iIn1lbHNlIHM9MApyPW8tMQpxPXRoaXMuTyhwLHIpPT09MTMzP0ouYzEocCxyKTpvCmlm -KHM9PT0wJiZxPT09bylyZXR1cm4gcApyZXR1cm4gcC5zdWJzdHJpbmcocyxxKX0sClQ6ZnVuY3Rpb24o -YSxiKXt2YXIgcyxyCmlmKDA+PWIpcmV0dXJuIiIKaWYoYj09PTF8fGEubGVuZ3RoPT09MClyZXR1cm4g -YQppZihiIT09Yj4+PjApdGhyb3cgSC5iKEMuRXEpCmZvcihzPWEscj0iIjshMDspe2lmKChiJjEpPT09 -MSlyPXMrcgpiPWI+Pj4xCmlmKGI9PT0wKWJyZWFrCnMrPXN9cmV0dXJuIHJ9LApYVTpmdW5jdGlvbihh -LGIsYyl7dmFyIHMKaWYoYzwwfHxjPmEubGVuZ3RoKXRocm93IEguYihQLlRFKGMsMCxhLmxlbmd0aCxu -dWxsLG51bGwpKQpzPWEuaW5kZXhPZihiLGMpCnJldHVybiBzfSwKT1k6ZnVuY3Rpb24oYSxiKXtyZXR1 -cm4gdGhpcy5YVShhLGIsMCl9LApQazpmdW5jdGlvbihhLGIsYyl7dmFyIHMscgppZihjPT1udWxsKWM9 -YS5sZW5ndGgKZWxzZSBpZihjPDB8fGM+YS5sZW5ndGgpdGhyb3cgSC5iKFAuVEUoYywwLGEubGVuZ3Ro -LG51bGwsbnVsbCkpCnM9Yi5sZW5ndGgKcj1hLmxlbmd0aAppZihjK3M+ciljPXItcwpyZXR1cm4gYS5s -YXN0SW5kZXhPZihiLGMpfSwKY246ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5QayhhLGIsbnVsbCl9 -LApJczpmdW5jdGlvbihhLGIsYyl7dmFyIHM9YS5sZW5ndGgKaWYoYz5zKXRocm93IEguYihQLlRFKGMs -MCxzLG51bGwsbnVsbCkpCnJldHVybiBILlNRKGEsYixjKX0sCnRnOmZ1bmN0aW9uKGEsYil7cmV0dXJu -IHRoaXMuSXMoYSxiLDApfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gYX0sCmdpTzpmdW5jdGlvbihhKXt2 -YXIgcyxyLHEKZm9yKHM9YS5sZW5ndGgscj0wLHE9MDtxPHM7KytxKXtyPXIrYS5jaGFyQ29kZUF0KHEp -JjUzNjg3MDkxMQpyPXIrKChyJjUyNDI4Nyk8PDEwKSY1MzY4NzA5MTEKcl49cj4+Nn1yPXIrKChyJjY3 -MTA4ODYzKTw8MykmNTM2ODcwOTExCnJePXI+PjExCnJldHVybiByKygociYxNjM4Myk8PDE1KSY1MzY4 -NzA5MTF9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LApxOmZ1bmN0aW9uKGEsYil7SC51 -UChiKQppZihiPj1hLmxlbmd0aHx8ITEpdGhyb3cgSC5iKEguSFkoYSxiKSkKcmV0dXJuIGFbYl19LAok -aXZYOjEsCiRpcVU6MX0KSC5CUi5wcm90b3R5cGU9ewpnbTpmdW5jdGlvbihhKXt2YXIgcz1ILkxoKHRo -aXMpCnJldHVybiBuZXcgSC5FNyhKLklUKHRoaXMuZ09OKCkpLHMuQygiQDwxPiIpLktxKHMuUVsxXSku -QygiRTc8MSwyPiIpKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiBKLkhtKHRoaXMuZ09OKCkpfSwKZ2ww -OmZ1bmN0aW9uKGEpe3JldHVybiBKLnVVKHRoaXMuZ09OKCkpfSwKZ29yOmZ1bmN0aW9uKGEpe3JldHVy -biBKLkY3KHRoaXMuZ09OKCkpfSwKZVI6ZnVuY3Rpb24oYSxiKXt2YXIgcz1ILkxoKHRoaXMpCnJldHVy -biBILkdKKEouQTUodGhpcy5nT04oKSxiKSxzLmMscy5RWzFdKX0sCkU6ZnVuY3Rpb24oYSxiKXtyZXR1 -cm4gSC5MaCh0aGlzKS5RWzFdLmEoSi5HQSh0aGlzLmdPTigpLGIpKX0sCnc6ZnVuY3Rpb24oYSl7cmV0 -dXJuIEouaih0aGlzLmdPTigpKX19CkguRTcucHJvdG90eXBlPXsKRjpmdW5jdGlvbigpe3JldHVybiB0 -aGlzLmEuRigpfSwKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGkuUVsxXS5hKHRoaXMuYS5nbCgp -KX0sCiRpQW46MX0KSC5aeS5wcm90b3R5cGU9ewpnT046ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfX0K -SC5vbC5wcm90b3R5cGU9eyRpYlE6MX0KSC5VcS5wcm90b3R5cGU9ewpxOmZ1bmN0aW9uKGEsYil7cmV0 -dXJuIHRoaXMuJHRpLlFbMV0uYShKLng5KHRoaXMuYSxILnVQKGIpKSl9LApZNTpmdW5jdGlvbihhLGIs -Yyl7dmFyIHM9dGhpcy4kdGkKSi51OSh0aGlzLmEsYixzLmMuYShzLlFbMV0uYShjKSkpfSwKJGliUTox -LAokaXpNOjF9CkgualYucHJvdG90eXBlPXsKZHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEgualYo -dGhpcy5hLHRoaXMuJHRpLkMoIkA8MT4iKS5LcShiKS5DKCJqVjwxLDI+IikpfSwKZ09OOmZ1bmN0aW9u -KCl7cmV0dXJuIHRoaXMuYX19Ckgubi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMu -YQpyZXR1cm4gcyE9bnVsbD8iTGF0ZUluaXRpYWxpemF0aW9uRXJyb3I6ICIrczoiTGF0ZUluaXRpYWxp -emF0aW9uRXJyb3IifX0KSC5yMy5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPSJSZWFjaGFi -aWxpdHlFcnJvcjogIit0aGlzLmEKcmV0dXJuIHN9fQpILnFqLnByb3RvdHlwZT17CmdBOmZ1bmN0aW9u -KGEpe3JldHVybiB0aGlzLmEubGVuZ3RofSwKcTpmdW5jdGlvbihhLGIpe3JldHVybiBDLnhCLk8odGhp -cy5hLEgudVAoYikpfX0KSC5HTS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJOdWxsIGlz -IG5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyICciK3RoaXMuYSsiJyBvZiB0eXBlICci -K0guS3godGhpcy4kdGkuYykudygwKSsiJyJ9fQpILmJRLnByb3RvdHlwZT17fQpILmFMLnByb3RvdHlw -ZT17CmdtOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMKcmV0dXJuIG5ldyBILmE3KHMscy5nQShzKSxILkxo -KHMpLkMoImE3PGFMLkU+IikpfSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdBKHRoaXMpPT09 -MH0sCms6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscD10aGlzLG89cC5nQShwKQppZihiLmxlbmd0aCE9 -PTApe2lmKG89PT0wKXJldHVybiIiCnM9SC5FaihwLkUoMCwwKSkKaWYobyE9PXAuZ0EocCkpdGhyb3cg -SC5iKFAuYTQocCkpCmZvcihyPXMscT0xO3E8bzsrK3Epe3I9citiK0guRWoocC5FKDAscSkpCmlmKG8h -PT1wLmdBKHApKXRocm93IEguYihQLmE0KHApKX1yZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn1l -bHNle2ZvcihxPTAscj0iIjtxPG87KytxKXtyKz1ILkVqKHAuRSgwLHEpKQppZihvIT09cC5nQShwKSl0 -aHJvdyBILmIoUC5hNChwKSl9cmV0dXJuIHIuY2hhckNvZGVBdCgwKT09MD9yOnJ9fSwKZXY6ZnVuY3Rp -b24oYSxiKXtyZXR1cm4gdGhpcy5HRygwLEguTGgodGhpcykuQygiYTIoYUwuRSkiKS5hKGIpKX0sCkUy -OmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1ILkxoKHRoaXMpCnJldHVybiBuZXcgSC5sSih0aGlzLHMuS3Eo -YykuQygiMShhTC5FKSIpLmEoYikscy5DKCJAPGFMLkU+IikuS3EoYykuQygibEo8MSwyPiIpKX0sCmVS -OmZ1bmN0aW9uKGEsYil7cmV0dXJuIEgucUModGhpcyxiLG51bGwsSC5MaCh0aGlzKS5DKCJhTC5FIikp -fSwKdHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUC5ZMSh0aGlzLCEwLEguTGgodGhpcykuQygiYUwuRSIp -KX0sCmJyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnR0KGEsITApfX0KSC5uSC5wcm90b3R5cGU9ewpI -ZDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcyxyPXRoaXMuYgpQLmsxKHIsInN0YXJ0IikKcz10aGlzLmMK -aWYocyE9bnVsbCl7UC5rMShzLCJlbmQiKQppZihyPnMpdGhyb3cgSC5iKFAuVEUociwwLHMsInN0YXJ0 -IixudWxsKSl9fSwKZ1VEOmZ1bmN0aW9uKCl7dmFyIHM9Si5IbSh0aGlzLmEpLHI9dGhpcy5jCmlmKHI9 -PW51bGx8fHI+cylyZXR1cm4gcwpyZXR1cm4gcn0sCmdBczpmdW5jdGlvbigpe3ZhciBzPUouSG0odGhp -cy5hKSxyPXRoaXMuYgppZihyPnMpcmV0dXJuIHMKcmV0dXJuIHJ9LApnQTpmdW5jdGlvbihhKXt2YXIg -cyxyPUouSG0odGhpcy5hKSxxPXRoaXMuYgppZihxPj1yKXJldHVybiAwCnM9dGhpcy5jCmlmKHM9PW51 -bGx8fHM+PXIpcmV0dXJuIHItcQppZih0eXBlb2YgcyE9PSJudW1iZXIiKXJldHVybiBzLkhOKCkKcmV0 -dXJuIHMtcX0sCkU6ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlzLHI9cy5nQXMoKStiCmlmKGI8MHx8cj49 -cy5nVUQoKSl0aHJvdyBILmIoUC5DZihiLHMsImluZGV4IixudWxsLG51bGwpKQpyZXR1cm4gSi5HQShz -LmEscil9LAplUjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscT10aGlzClAuazEoYiwiY291bnQiKQpzPXEu -YitiCnI9cS5jCmlmKHIhPW51bGwmJnM+PXIpcmV0dXJuIG5ldyBILk1CKHEuJHRpLkMoIk1CPDE+Iikp -CnJldHVybiBILnFDKHEuYSxzLHIscS4kdGkuYyl9LAp0dDpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxw -PXRoaXMsbz1wLmIsbj1wLmEsbT1KLlU2KG4pLGw9bS5nQShuKSxrPXAuYwppZihrIT1udWxsJiZrPGwp -bD1rCmlmKHR5cGVvZiBsIT09Im51bWJlciIpcmV0dXJuIGwuSE4oKQpzPWwtbwppZihzPD0wKXtuPUou -UWkoMCxwLiR0aS5jKQpyZXR1cm4gbn1yPVAuTzgocyxtLkUobixvKSwhMSxwLiR0aS5jKQpmb3IocT0x -O3E8czsrK3Epe0MuTm0uWTUocixxLG0uRShuLG8rcSkpCmlmKG0uZ0Eobik8bCl0aHJvdyBILmIoUC5h -NChwKSl9cmV0dXJuIHJ9fQpILmE3LnByb3RvdHlwZT17CmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu -ZH0sCkY6ZnVuY3Rpb24oKXt2YXIgcyxyPXRoaXMscT1yLmEscD1KLlU2KHEpLG89cC5nQShxKQppZihy -LmIhPT1vKXRocm93IEguYihQLmE0KHEpKQpzPXIuYwppZihzPj1vKXtyLnNJKG51bGwpCnJldHVybiEx -fXIuc0kocC5FKHEscykpOysrci5jCnJldHVybiEwfSwKc0k6ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMu -JHRpLkMoIjE/IikuYShhKX0sCiRpQW46MX0KSC5pMS5wcm90b3R5cGU9ewpnbTpmdW5jdGlvbihhKXt2 -YXIgcz1ILkxoKHRoaXMpCnJldHVybiBuZXcgSC5NSChKLklUKHRoaXMuYSksdGhpcy5iLHMuQygiQDwx -PiIpLktxKHMuUVsxXSkuQygiTUg8MSwyPiIpKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiBKLkhtKHRo -aXMuYSl9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIEoudVUodGhpcy5hKX0sCkU6ZnVuY3Rpb24oYSxi -KXtyZXR1cm4gdGhpcy5iLiQxKEouR0EodGhpcy5hLGIpKX19CkgueHkucHJvdG90eXBlPXskaWJROjF9 -CkguTUgucHJvdG90eXBlPXsKRjpmdW5jdGlvbigpe3ZhciBzPXRoaXMscj1zLmIKaWYoci5GKCkpe3Mu -c0kocy5jLiQxKHIuZ2woKSkpCnJldHVybiEwfXMuc0kobnVsbCkKcmV0dXJuITF9LApnbDpmdW5jdGlv -bigpe3JldHVybiB0aGlzLmF9LApzSTpmdW5jdGlvbihhKXt0aGlzLmE9dGhpcy4kdGkuQygiMj8iKS5h -KGEpfX0KSC5sSi5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gSi5IbSh0aGlzLmEpfSwK -RTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmIuJDEoSi5HQSh0aGlzLmEsYikpfX0KSC5VNS5wcm90 -b3R5cGU9ewpnbTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEguU08oSi5JVCh0aGlzLmEpLHRoaXMuYix0 -aGlzLiR0aS5DKCJTTzwxPiIpKX19CkguU08ucHJvdG90eXBlPXsKRjpmdW5jdGlvbigpe3ZhciBzLHIK -Zm9yKHM9dGhpcy5hLHI9dGhpcy5iO3MuRigpOylpZihILm9UKHIuJDEocy5nbCgpKSkpcmV0dXJuITAK -cmV0dXJuITF9LApnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2woKX19CkguQU0ucHJvdG90eXBl -PXsKZVI6ZnVuY3Rpb24oYSxiKXtQLmsxKGIsImNvdW50IikKcmV0dXJuIG5ldyBILkFNKHRoaXMuYSx0 -aGlzLmIrYixILkxoKHRoaXMpLkMoIkFNPDE+IikpfSwKZ206ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBI -LlUxKEouSVQodGhpcy5hKSx0aGlzLmIsSC5MaCh0aGlzKS5DKCJVMTwxPiIpKX19CkguZDUucHJvdG90 -eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7dmFyIHM9Si5IbSh0aGlzLmEpLXRoaXMuYgppZihzPj0wKXJldHVy -biBzCnJldHVybiAwfSwKZVI6ZnVuY3Rpb24oYSxiKXtQLmsxKGIsImNvdW50IikKcmV0dXJuIG5ldyBI -LmQ1KHRoaXMuYSx0aGlzLmIrYix0aGlzLiR0aSl9LAokaWJROjF9CkguVTEucHJvdG90eXBlPXsKRjpm -dW5jdGlvbigpe3ZhciBzLHIKZm9yKHM9dGhpcy5hLHI9MDtyPHRoaXMuYjsrK3Ipcy5GKCkKdGhpcy5i -PTAKcmV0dXJuIHMuRigpfSwKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdsKCl9fQpILk1CLnBy -b3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEpe3JldHVybiBDLkd3fSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVy -biEwfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIDB9LApFOmZ1bmN0aW9uKGEsYil7dGhyb3cgSC5iKFAu -VEUoYiwwLDAsImluZGV4IixudWxsKSl9LAplUjpmdW5jdGlvbihhLGIpe1AuazEoYiwiY291bnQiKQpy -ZXR1cm4gdGhpc319CkguRnUucHJvdG90eXBlPXsKRjpmdW5jdGlvbigpe3JldHVybiExfSwKZ2w6ZnVu -Y3Rpb24oKXt0aHJvdyBILmIoSC5XcCgpKX0sCiRpQW46MX0KSC51Ni5wcm90b3R5cGU9ewpnbTpmdW5j -dGlvbihhKXtyZXR1cm4gbmV3IEguSkIoSi5JVCh0aGlzLmEpLHRoaXMuJHRpLkMoIkpCPDE+IikpfX0K -SC5KQi5wcm90b3R5cGU9ewpGOmZ1bmN0aW9uKCl7dmFyIHMscgpmb3Iocz10aGlzLmEscj10aGlzLiR0 -aS5jO3MuRigpOylpZihyLmIocy5nbCgpKSlyZXR1cm4hMApyZXR1cm4hMX0sCmdsOmZ1bmN0aW9uKCl7 -cmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmEuZ2woKSl9LAokaUFuOjF9CkguU1UucHJvdG90eXBlPXt9 -CkguUmUucHJvdG90eXBlPXsKWTU6ZnVuY3Rpb24oYSxiLGMpe0guTGgodGhpcykuQygiUmUuRSIpLmEo -YykKdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKSl9fQpI -LncyLnByb3RvdHlwZT17fQpILnd2LnByb3RvdHlwZT17CmdpTzpmdW5jdGlvbihhKXt2YXIgcz10aGlz -Ll9oYXNoQ29kZQppZihzIT1udWxsKXJldHVybiBzCnM9NjY0NTk3KkouaGYodGhpcy5hKSY1MzY4NzA5 -MTEKdGhpcy5faGFzaENvZGU9cwpyZXR1cm4gc30sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuJ1N5bWJvbCgi -JytILkVqKHRoaXMuYSkrJyIpJ30sCkROOmZ1bmN0aW9uKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQpy -ZXR1cm4gYiBpbnN0YW5jZW9mIEgud3YmJnRoaXMuYT09Yi5hfSwKJGlHRDoxfQpILlFDLnByb3RvdHlw -ZT17fQpILlBELnByb3RvdHlwZT17fQpILldVLnByb3RvdHlwZT17CmdsMDpmdW5jdGlvbihhKXtyZXR1 -cm4gdGhpcy5nQSh0aGlzKT09PTB9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBQLm5PKHRoaXMpfSwKWTU6 -ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPUguTGgodGhpcykKcy5jLmEoYikKcy5RWzFdLmEoYykKSC5kYygp -CkguQmkodS5nKX0sCmdQdTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xNChhLEguTGgodGhpcykuQygi -TjM8MSwyPiIpKX0sCnE0OmZ1bmN0aW9uKGEsYil7dmFyIHM9dGhpcwpyZXR1cm4gUC5sMChmdW5jdGlv -bigpe3ZhciByPWEKdmFyIHE9MCxwPTEsbyxuLG0sbCxrCnJldHVybiBmdW5jdGlvbiAkYXN5bmMkZ1B1 -KGMsZCl7aWYoYz09PTEpe289ZApxPXB9d2hpbGUodHJ1ZSlzd2l0Y2gocSl7Y2FzZSAwOm49cy5ndmMo -KSxuPW4uZ20obiksbT1ILkxoKHMpLG09bS5DKCJAPDE+IikuS3EobS5RWzFdKS5DKCJOMzwxLDI+IikK -Y2FzZSAyOmlmKCFuLkYoKSl7cT0zCmJyZWFrfWw9bi5nbCgpCms9cy5xKDAsbCkKay50b1N0cmluZwpx -PTQKcmV0dXJuIG5ldyBQLk4zKGwsayxtKQpjYXNlIDQ6cT0yCmJyZWFrCmNhc2UgMzpyZXR1cm4gUC5U -aCgpCmNhc2UgMTpyZXR1cm4gUC5ZbShvKX19fSxiKX0sCiRpWjA6MX0KSC5MUC5wcm90b3R5cGU9ewpn -QTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfSwKeDQ6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGEhPSJz -dHJpbmciKXJldHVybiExCmlmKCJfX3Byb3RvX18iPT09YSlyZXR1cm4hMQpyZXR1cm4gdGhpcy5iLmhh -c093blByb3BlcnR5KGEpfSwKcTpmdW5jdGlvbihhLGIpe2lmKCF0aGlzLng0KGIpKXJldHVybiBudWxs -CnJldHVybiB0aGlzLnFQKGIpfSwKcVA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYltILmgoYSldfSwK -SzpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG89SC5MaCh0aGlzKQpvLkMoIn4oMSwyKSIpLmEoYikK -cz10aGlzLmMKZm9yKHI9cy5sZW5ndGgsbz1vLlFbMV0scT0wO3E8cjsrK3Epe3A9c1txXQpiLiQyKHAs -by5hKHRoaXMucVAocCkpKX19LApndmM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEguWFIodGhpcyxILkxo -KHRoaXMpLkMoIlhSPDE+IikpfX0KSC5YUi5wcm90b3R5cGU9ewpnbTpmdW5jdGlvbihhKXt2YXIgcz10 -aGlzLmEuYwpyZXR1cm4gbmV3IEoubTEocyxzLmxlbmd0aCxILnQ2KHMpLkMoIm0xPDE+IikpfSwKZ0E6 -ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aH19CkguTEkucHJvdG90eXBlPXsKZ1dhOmZ1 -bmN0aW9uKCl7dmFyIHM9dGhpcy5hCnJldHVybiBzfSwKZ25kOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAs -bz10aGlzCmlmKG8uYz09PTEpcmV0dXJuIEMuaFUKcz1vLmQKcj1zLmxlbmd0aC1vLmUubGVuZ3RoLW8u -ZgppZihyPT09MClyZXR1cm4gQy5oVQpxPVtdCmZvcihwPTA7cDxyOysrcCl7aWYocD49cy5sZW5ndGgp -cmV0dXJuIEguT0gocyxwKQpxLnB1c2goc1twXSl9cmV0dXJuIEouekMocSl9LApnVm06ZnVuY3Rpb24o -KXt2YXIgcyxyLHEscCxvLG4sbSxsLGs9dGhpcwppZihrLmMhPT0wKXJldHVybiBDLldPCnM9ay5lCnI9 -cy5sZW5ndGgKcT1rLmQKcD1xLmxlbmd0aC1yLWsuZgppZihyPT09MClyZXR1cm4gQy5XTwpvPW5ldyBI -Lk41KHQuZW8pCmZvcihuPTA7bjxyOysrbil7aWYobj49cy5sZW5ndGgpcmV0dXJuIEguT0gocyxuKQpt -PXNbbl0KbD1wK24KaWYobDwwfHxsPj1xLmxlbmd0aClyZXR1cm4gSC5PSChxLGwpCm8uWTUoMCxuZXcg -SC53dihtKSxxW2xdKX1yZXR1cm4gbmV3IEguUEQobyx0LmdGKX0sCiRpdlE6MX0KSC5Dai5wcm90b3R5 -cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciBzCkguaChhKQpzPXRoaXMuYQpzLmI9cy5iKyIkIitILkVq -KGEpCkMuTm0uaSh0aGlzLmIsYSkKQy5ObS5pKHRoaXMuYyxiKTsrK3MuYX0sCiRTOjEzfQpILmY5LnBy -b3RvdHlwZT17CnFTOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT10aGlzLHA9bmV3IFJlZ0V4cChxLmEpLmV4 -ZWMoYSkKaWYocD09bnVsbClyZXR1cm4gbnVsbApzPU9iamVjdC5jcmVhdGUobnVsbCkKcj1xLmIKaWYo -ciE9PS0xKXMuYXJndW1lbnRzPXBbcisxXQpyPXEuYwppZihyIT09LTEpcy5hcmd1bWVudHNFeHByPXBb -cisxXQpyPXEuZAppZihyIT09LTEpcy5leHByPXBbcisxXQpyPXEuZQppZihyIT09LTEpcy5tZXRob2Q9 -cFtyKzFdCnI9cS5mCmlmKHIhPT0tMSlzLnJlY2VpdmVyPXBbcisxXQpyZXR1cm4gc319CkguVzAucHJv -dG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmIKaWYocz09bnVsbClyZXR1cm4iTm9TdWNo -TWV0aG9kRXJyb3I6ICIrSC5Faih0aGlzLmEpCnJldHVybiJOb1N1Y2hNZXRob2RFcnJvcjogbWV0aG9k -IG5vdCBmb3VuZDogJyIrcysiJyBvbiBudWxsIn19CkguYXoucHJvdG90eXBlPXsKdzpmdW5jdGlvbihh -KXt2YXIgcyxyPXRoaXMscT0iTm9TdWNoTWV0aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91bmQ6ICciLHA9 -ci5iCmlmKHA9PW51bGwpcmV0dXJuIk5vU3VjaE1ldGhvZEVycm9yOiAiK0guRWooci5hKQpzPXIuYwpp -ZihzPT1udWxsKXJldHVybiBxK3ArIicgKCIrSC5FaihyLmEpKyIpIgpyZXR1cm4gcStwKyInIG9uICci -K3MrIicgKCIrSC5FaihyLmEpKyIpIn19CkgudlYucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIg -cz10aGlzLmEKcmV0dXJuIHMubGVuZ3RoPT09MD8iRXJyb3IiOiJFcnJvcjogIitzfX0KSC50ZS5wcm90 -b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJUaHJvdyBvZiBudWxsICgnIisodGhpcy5hPT09bnVs -bD8ibnVsbCI6InVuZGVmaW5lZCIpKyInIGZyb20gSmF2YVNjcmlwdCkifSwKJGlSejoxfQpILmJxLnBy -b3RvdHlwZT17fQpILlhPLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHMscj10aGlzLmIKaWYo -ciE9bnVsbClyZXR1cm4gcgpyPXRoaXMuYQpzPXIhPT1udWxsJiZ0eXBlb2Ygcj09PSJvYmplY3QiP3Iu -c3RhY2s6bnVsbApyZXR1cm4gdGhpcy5iPXM9PW51bGw/IiI6c30sCiRpR3o6MX0KSC5UcC5wcm90b3R5 -cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuY29uc3RydWN0b3Iscj1zPT1udWxsP251bGw6cy5u -YW1lCnJldHVybiJDbG9zdXJlICciK0guTlEocj09bnVsbD8idW5rbm93biI6cikrIicifSwKJGlFSDox -LApnS3U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sCiRDOiIkMSIsCiRSOjEsCiREOm51bGx9CkgubGMu -cHJvdG90eXBlPXt9CkguengucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgcz10aGlzLiRzdGF0 -aWNfbmFtZQppZihzPT1udWxsKXJldHVybiJDbG9zdXJlIG9mIHVua25vd24gc3RhdGljIG1ldGhvZCIK -cmV0dXJuIkNsb3N1cmUgJyIrSC5OUShzKSsiJyJ9fQpILnJULnByb3RvdHlwZT17CkROOmZ1bmN0aW9u -KGEsYil7dmFyIHM9dGhpcwppZihiPT1udWxsKXJldHVybiExCmlmKHM9PT1iKXJldHVybiEwCmlmKCEo -YiBpbnN0YW5jZW9mIEguclQpKXJldHVybiExCnJldHVybiBzLmE9PT1iLmEmJnMuYj09PWIuYiYmcy5j -PT09Yi5jfSwKZ2lPOmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcy5jCmlmKHI9PW51bGwpcz1ILmVRKHRo -aXMuYSkKZWxzZSBzPXR5cGVvZiByIT09Im9iamVjdCI/Si5oZihyKTpILmVRKHIpCnI9SC5lUSh0aGlz -LmIpCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMuWSgpCnJldHVybihzXnIpPj4+MH0sCnc6 -ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5jCmlmKHM9PW51bGwpcz10aGlzLmEKcmV0dXJuIkNsb3N1cmUg -JyIrSC5Faih0aGlzLmQpKyInIG9mICIrKCJJbnN0YW5jZSBvZiAnIitILkVqKEguTShzKSkrIiciKX19 -CkguRXEucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iUnVudGltZUVycm9yOiAiK3RoaXMu -YX19Ckgua1kucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iQXNzZXJ0aW9uIGZhaWxlZDog -IitQLnAodGhpcy5hKX19Ckgua3IucHJvdG90eXBlPXt9CkguTjUucHJvdG90eXBlPXsKZ0E6ZnVuY3Rp -b24oYSl7cmV0dXJuIHRoaXMuYX0sCmdsMDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hPT09MH0sCmd2 -YzpmdW5jdGlvbigpe3JldHVybiBuZXcgSC5pNSh0aGlzLEguTGgodGhpcykuQygiaTU8MT4iKSl9LAp4 -NDpmdW5jdGlvbihhKXt2YXIgcyxyCmlmKHR5cGVvZiBhPT0ic3RyaW5nIil7cz10aGlzLmIKaWYocz09 -bnVsbClyZXR1cm4hMQpyZXR1cm4gdGhpcy5YdShzLGEpfWVsc2V7cj10aGlzLkNYKGEpCnJldHVybiBy -fX0sCkNYOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuZAppZihzPT1udWxsKXJldHVybiExCnJldHVybiB0 -aGlzLkZoKHRoaXMuQnQocyxKLmhmKGEpJjB4M2ZmZmZmZiksYSk+PTB9LApxOmZ1bmN0aW9uKGEsYil7 -dmFyIHMscixxLHAsbz10aGlzLG49bnVsbAppZih0eXBlb2YgYj09InN0cmluZyIpe3M9by5iCmlmKHM9 -PW51bGwpcmV0dXJuIG4Kcj1vLmoyKHMsYikKcT1yPT1udWxsP246ci5iCnJldHVybiBxfWVsc2UgaWYo -dHlwZW9mIGI9PSJudW1iZXIiJiYoYiYweDNmZmZmZmYpPT09Yil7cD1vLmMKaWYocD09bnVsbClyZXR1 -cm4gbgpyPW8uajIocCxiKQpxPXI9PW51bGw/bjpyLmIKcmV0dXJuIHF9ZWxzZSByZXR1cm4gby5hYShi -KX0sCmFhOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT10aGlzLmQKaWYocT09bnVsbClyZXR1cm4gbnVsbApz -PXRoaXMuQnQocSxKLmhmKGEpJjB4M2ZmZmZmZikKcj10aGlzLkZoKHMsYSkKaWYocjwwKXJldHVybiBu -dWxsCnJldHVybiBzW3JdLmJ9LApZNTpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxLHAsbyxuLG09dGhp -cyxsPUguTGgobSkKbC5jLmEoYikKbC5RWzFdLmEoYykKaWYodHlwZW9mIGI9PSJzdHJpbmciKXtzPW0u -YgptLkVIKHM9PW51bGw/bS5iPW0ueksoKTpzLGIsYyl9ZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciIm -JihiJjB4M2ZmZmZmZik9PT1iKXtyPW0uYwptLkVIKHI9PW51bGw/bS5jPW0ueksoKTpyLGIsYyl9ZWxz -ZXtxPW0uZAppZihxPT1udWxsKXE9bS5kPW0ueksoKQpwPUouaGYoYikmMHgzZmZmZmZmCm89bS5CdChx -LHApCmlmKG89PW51bGwpbS5FSShxLHAsW20uSG4oYixjKV0pCmVsc2V7bj1tLkZoKG8sYikKaWYobj49 -MClvW25dLmI9YwplbHNlIG8ucHVzaChtLkhuKGIsYykpfX19LApLOmZ1bmN0aW9uKGEsYil7dmFyIHMs -cixxPXRoaXMKSC5MaChxKS5DKCJ+KDEsMikiKS5hKGIpCnM9cS5lCnI9cS5yCmZvcig7cyE9bnVsbDsp -e2IuJDIocy5hLHMuYikKaWYociE9PXEucil0aHJvdyBILmIoUC5hNChxKSkKcz1zLmN9fSwKRUg6ZnVu -Y3Rpb24oYSxiLGMpe3ZhciBzLHI9dGhpcyxxPUguTGgocikKcS5jLmEoYikKcS5RWzFdLmEoYykKcz1y -LmoyKGEsYikKaWYocz09bnVsbClyLkVJKGEsYixyLkhuKGIsYykpCmVsc2Ugcy5iPWN9LAprczpmdW5j -dGlvbigpe3RoaXMucj10aGlzLnIrMSY2NzEwODg2M30sCkhuOmZ1bmN0aW9uKGEsYil7dmFyIHM9dGhp -cyxyPUguTGgocykscT1uZXcgSC52aChyLmMuYShhKSxyLlFbMV0uYShiKSkKaWYocy5lPT1udWxsKXMu -ZT1zLmY9cQplbHNle3I9cy5mCnIudG9TdHJpbmcKcS5kPXIKcy5mPXIuYz1xfSsrcy5hCnMua3MoKQpy -ZXR1cm4gcX0sCkZoOmZ1bmN0aW9uKGEsYil7dmFyIHMscgppZihhPT1udWxsKXJldHVybi0xCnM9YS5s -ZW5ndGgKZm9yKHI9MDtyPHM7KytyKWlmKEouUk0oYVtyXS5hLGIpKXJldHVybiByCnJldHVybi0xfSwK -dzpmdW5jdGlvbihhKXtyZXR1cm4gUC5uTyh0aGlzKX0sCmoyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFb -Yl19LApCdDpmdW5jdGlvbihhLGIpe3JldHVybiBhW2JdfSwKRUk6ZnVuY3Rpb24oYSxiLGMpe2FbYl09 -Y30sCnJuOmZ1bmN0aW9uKGEsYil7ZGVsZXRlIGFbYl19LApYdTpmdW5jdGlvbihhLGIpe3JldHVybiB0 -aGlzLmoyKGEsYikhPW51bGx9LAp6SzpmdW5jdGlvbigpe3ZhciBzPSI8bm9uLWlkZW50aWZpZXIta2V5 -PiIscj1PYmplY3QuY3JlYXRlKG51bGwpCnRoaXMuRUkocixzLHIpCnRoaXMucm4ocixzKQpyZXR1cm4g -cn0sCiRpRm86MX0KSC52aC5wcm90b3R5cGU9e30KSC5pNS5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihh -KXtyZXR1cm4gdGhpcy5hLmF9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS5hPT09MH0sCmdt -OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYSxyPW5ldyBILk42KHMscy5yLHRoaXMuJHRpLkMoIk42PDE+ -IikpCnIuYz1zLmUKcmV0dXJuIHJ9LAp0ZzpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmEueDQoYil9 -fQpILk42LnByb3RvdHlwZT17CmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sCkY6ZnVuY3Rpb24o -KXt2YXIgcyxyPXRoaXMscT1yLmEKaWYoci5iIT09cS5yKXRocm93IEguYihQLmE0KHEpKQpzPXIuYwpp -ZihzPT1udWxsKXtyLnNxWShudWxsKQpyZXR1cm4hMX1lbHNle3Iuc3FZKHMuYSkKci5jPXMuYwpyZXR1 -cm4hMH19LApzcVk6ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLkMoIjE/IikuYShhKX0sCiRpQW46 -MX0KSC5kQy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hKGEpfSwKJFM6NH0K -SC53Ti5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmEoYSxiKX0sCiRTOjM0 -fQpILlZYLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEoSC5oKGEpKX0sCiRT -OjMyfQpILlZSLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlJlZ0V4cC8iK3RoaXMuYSsi -LyIrdGhpcy5iLmZsYWdzfSwKZ0hjOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcyxyPXMuYwppZihyIT1udWxs -KXJldHVybiByCnI9cy5iCnJldHVybiBzLmM9SC52NChzLmEsci5tdWx0aWxpbmUsIXIuaWdub3JlQ2Fz -ZSxyLnVuaWNvZGUsci5kb3RBbGwsITApfSwKZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEguS1co -dGhpcyxiLDApfSwKVVo6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPXRoaXMuZ0hjKCkKci5sYXN0SW5kZXg9 -YgpzPXIuZXhlYyhhKQppZihzPT1udWxsKXJldHVybiBudWxsCnJldHVybiBuZXcgSC5FSyhzKX0sCiRp -dlg6MSwKJGl3TDoxfQpILkVLLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXt2YXIgcwpILnVQKGIp -CnM9dGhpcy5iCmlmKGI+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsYikKcmV0dXJuIHNbYl19LAokaU9k -OjEsCiRpaWI6MX0KSC5LVy5wcm90b3R5cGU9ewpnbTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEguUGIo -dGhpcy5hLHRoaXMuYix0aGlzLmMpfX0KSC5QYi5wcm90b3R5cGU9ewpnbDpmdW5jdGlvbigpe3JldHVy -biB0aGlzLmR9LApGOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxsPW0uYgppZihsPT1u -dWxsKXJldHVybiExCnM9bS5jCnI9bC5sZW5ndGgKaWYoczw9cil7cT1tLmEKcD1xLlVaKGwscykKaWYo -cCE9bnVsbCl7bS5kPXAKcz1wLmIKbz1zLmluZGV4Cm49bytzWzBdLmxlbmd0aAppZihvPT09bil7aWYo -cS5iLnVuaWNvZGUpe3M9bS5jCnE9cysxCmlmKHE8cil7cz1DLnhCLk8obCxzKQppZihzPj01NTI5NiYm -czw9NTYzMTkpe3M9Qy54Qi5PKGwscSkKcz1zPj01NjMyMCYmczw9NTczNDN9ZWxzZSBzPSExfWVsc2Ug -cz0hMX1lbHNlIHM9ITEKbj0ocz9uKzE6bikrMX1tLmM9bgpyZXR1cm4hMH19bS5iPW0uZD1udWxsCnJl -dHVybiExfSwKJGlBbjoxfQpILnRRLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtILnVQKGIpCmlm -KGIhPT0wKUgudihQLk83KGIsbnVsbCkpCnJldHVybiB0aGlzLmN9LAokaU9kOjF9CkgudW4ucHJvdG90 -eXBlPXsKZ206ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBILlNkKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX19 -CkguU2QucHJvdG90eXBlPXsKRjpmdW5jdGlvbigpe3ZhciBzLHIscT10aGlzLHA9cS5jLG89cS5iLG49 -by5sZW5ndGgsbT1xLmEsbD1tLmxlbmd0aAppZihwK24+bCl7cS5kPW51bGwKcmV0dXJuITF9cz1tLmlu -ZGV4T2YobyxwKQppZihzPDApe3EuYz1sKzEKcS5kPW51bGwKcmV0dXJuITF9cj1zK24KcS5kPW5ldyBI -LnRRKHMsbykKcS5jPXI9PT1xLmM/cisxOnIKcmV0dXJuITB9LApnbDpmdW5jdGlvbigpe3ZhciBzPXRo -aXMuZApzLnRvU3RyaW5nCnJldHVybiBzfSwKJGlBbjoxfQpILkVULnByb3RvdHlwZT17JGlFVDoxLCRp -QVM6MX0KSC5MWi5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LAokaVhq -OjF9CkguRGcucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe0gudVAoYikKSC5vZChiLGEsYS5sZW5n -dGgpCnJldHVybiBhW2JdfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe0guR0goYykKSC5vZChiLGEsYS5sZW5n -dGgpCmFbYl09Y30sCiRpYlE6MSwKJGljWDoxLAokaXpNOjF9CkguUGcucHJvdG90eXBlPXsKWTU6ZnVu -Y3Rpb24oYSxiLGMpe0gudVAoYykKSC5vZChiLGEsYS5sZW5ndGgpCmFbYl09Y30sCiRpYlE6MSwKJGlj -WDoxLAokaXpNOjF9CkgueGoucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe0gudVAoYikKSC5vZChi -LGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5kRS5wcm90b3R5cGU9ewpxOmZ1bmN0aW9uKGEsYil7 -SC51UChiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpILlpBLnByb3RvdHlwZT17CnE6 -ZnVuY3Rpb24oYSxiKXtILnVQKGIpCkgub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkguZFQu -cHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe0gudVAoYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVy -biBhW2JdfX0KSC5QcS5wcm90b3R5cGU9ewpxOmZ1bmN0aW9uKGEsYil7SC51UChiKQpILm9kKGIsYSxh -Lmxlbmd0aCkKcmV0dXJuIGFbYl19fQpILmVFLnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVy -biBhLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXtILnVQKGIpCkgub2QoYixhLGEubGVuZ3RoKQpyZXR1 -cm4gYVtiXX19CkguVjYucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwK -cTpmdW5jdGlvbihhLGIpe0gudVAoYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfSwKJGlW -NjoxLAokaW42OjF9CkguUkcucHJvdG90eXBlPXt9CkguVlAucHJvdG90eXBlPXt9CkguV0IucHJvdG90 -eXBlPXt9CkguWkcucHJvdG90eXBlPXt9CkguSmMucHJvdG90eXBlPXsKQzpmdW5jdGlvbihhKXtyZXR1 -cm4gSC5jRSh2LnR5cGVVbml2ZXJzZSx0aGlzLGEpfSwKS3E6ZnVuY3Rpb24oYSl7cmV0dXJuIEgudjUo -di50eXBlVW5pdmVyc2UsdGhpcyxhKX19CkguRy5wcm90b3R5cGU9e30KSC5sWS5wcm90b3R5cGU9ewp3 -OmZ1bmN0aW9uKGEpe3JldHVybiBILmRtKHRoaXMuYSxudWxsKX19Ckgua1MucHJvdG90eXBlPXsKdzpm -dW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfX0KSC5pTS5wcm90b3R5cGU9e30KUC50aC5wcm90b3R5cGU9 -ewokMTpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmEscj1zLmEKcy5hPW51bGwKci4kMCgpfSwKJFM6MTB9 -ClAuaGEucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMscgp0aGlzLmEuYT10Lk0uYShhKQpz -PXRoaXMuYgpyPXRoaXMuYwpzLmZpcnN0Q2hpbGQ/cy5yZW1vdmVDaGlsZChyKTpzLmFwcGVuZENoaWxk -KHIpfSwKJFM6NTN9ClAuVnMucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt0aGlzLmEuJDAoKX0sCiRD -OiIkMCIsCiRSOjAsCiRTOjJ9ClAuRnQucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt0aGlzLmEuJDAo -KX0sCiRDOiIkMCIsCiRSOjAsCiRTOjJ9ClAuVzMucHJvdG90eXBlPXsKQ1k6ZnVuY3Rpb24oYSxiKXtp -ZihzZWxmLnNldFRpbWVvdXQhPW51bGwpc2VsZi5zZXRUaW1lb3V0KEgudFIobmV3IFAueUgodGhpcyxi -KSwwKSxhKQplbHNlIHRocm93IEguYihQLkw0KCJgc2V0VGltZW91dCgpYCBub3QgZm91bmQuIikpfX0K -UC55SC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYi4kMCgpfSwKJEM6IiQwIiwKJFI6MCwK -JFM6MH0KUC5paC5wcm90b3R5cGU9ewphTTpmdW5jdGlvbihhLGIpe3ZhciBzLHI9dGhpcyxxPXIuJHRp -CnEuQygiMS8/IikuYShiKQppZighci5iKXIuYS5YZihiKQplbHNle3M9ci5hCmlmKHEuQygiYjg8MT4i -KS5iKGIpKXMuY1UoYikKZWxzZSBzLlgyKHEuYy5hKGIpKX19LAp3MDpmdW5jdGlvbihhLGIpe3ZhciBz -CmlmKGI9PW51bGwpYj1QLnYwKGEpCnM9dGhpcy5hCmlmKHRoaXMuYilzLlpMKGEsYikKZWxzZSBzLk5r -KGEsYil9fQpQLldNLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEuJDIoMCxh -KX0sCiRTOjQzfQpQLlNYLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dGhpcy5hLiQyKDEsbmV3 -IEguYnEoYSx0LmwuYShiKSkpfSwKJEM6IiQyIiwKJFI6MiwKJFM6NTV9ClAuR3MucHJvdG90eXBlPXsK -JDI6ZnVuY3Rpb24oYSxiKXt0aGlzLmEoSC51UChhKSxiKX0sCiRTOjI0fQpQLkZ5LnByb3RvdHlwZT17 -Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIkl0ZXJhdGlvbk1hcmtlcigiK3RoaXMuYisiLCAiK0guRWoodGhp -cy5hKSsiKSJ9fQpQLkdWLnByb3RvdHlwZT17CmdsOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5jCmlmKHM9 -PW51bGwpcmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmIpCnJldHVybiBzLmdsKCl9LApGOmZ1bmN0aW9u -KCl7dmFyIHMscixxLHAsbyxuLG09dGhpcwpmb3Iocz1tLiR0aS5DKCJBbjwxPiIpOyEwOyl7cj1tLmMK -aWYociE9bnVsbClpZihyLkYoKSlyZXR1cm4hMAplbHNlIG0uc1g5KG51bGwpCnE9ZnVuY3Rpb24oYSxi -LGMpe3ZhciBsLGs9Ygp3aGlsZSh0cnVlKXRyeXtyZXR1cm4gYShrLGwpfWNhdGNoKGope2w9agprPWN9 -fShtLmEsMCwxKQppZihxIGluc3RhbmNlb2YgUC5GeSl7cD1xLmIKaWYocD09PTIpe289bS5kCmlmKG89 -PW51bGx8fG8ubGVuZ3RoPT09MCl7bS5zRUMobnVsbCkKcmV0dXJuITF9aWYoMD49by5sZW5ndGgpcmV0 -dXJuIEguT0gobywtMSkKbS5hPW8ucG9wKCkKY29udGludWV9ZWxzZXtyPXEuYQppZihwPT09Myl0aHJv -dyByCmVsc2V7bj1zLmEoSi5JVChyKSkKaWYobiBpbnN0YW5jZW9mIFAuR1Ype3I9bS5kCmlmKHI9PW51 -bGwpcj1tLmQ9W10KQy5ObS5pKHIsbS5hKQptLmE9bi5hCmNvbnRpbnVlfWVsc2V7bS5zWDkobikKY29u -dGludWV9fX19ZWxzZXttLnNFQyhxKQpyZXR1cm4hMH19cmV0dXJuITF9LApzRUM6ZnVuY3Rpb24oYSl7 -dGhpcy5iPXRoaXMuJHRpLkMoIjE/IikuYShhKX0sCnNYOTpmdW5jdGlvbihhKXt0aGlzLmM9dGhpcy4k -dGkuQygiQW48MT4/IikuYShhKX0sCiRpQW46MX0KUC5xNC5wcm90b3R5cGU9ewpnbTpmdW5jdGlvbihh -KXtyZXR1cm4gbmV3IFAuR1YodGhpcy5hKCksdGhpcy4kdGkuQygiR1Y8MT4iKSl9fQpQLkN3LnByb3Rv -dHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIEguRWoodGhpcy5hKX0sCiRpWFM6MSwKZ0lJOmZ1bmN0 -aW9uKCl7cmV0dXJuIHRoaXMuYn19ClAuUGYucHJvdG90eXBlPXsKdzA6ZnVuY3Rpb24oYSxiKXt2YXIg -cwpILmNiKGEsImVycm9yIix0LkspCnM9dGhpcy5hCmlmKHMuYSE9PTApdGhyb3cgSC5iKFAuUFYoIkZ1 -dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpKQppZihiPT1udWxsKWI9UC52MChhKQpzLk5rKGEsYil9LApw -bTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy53MChhLG51bGwpfX0KUC5aZi5wcm90b3R5cGU9ewphTTpm -dW5jdGlvbihhLGIpe3ZhciBzLHI9dGhpcy4kdGkKci5DKCIxLz8iKS5hKGIpCnM9dGhpcy5hCmlmKHMu -YSE9PTApdGhyb3cgSC5iKFAuUFYoIkZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpKQpzLlhmKHIuQygi -MS8iKS5hKGIpKX19ClAuRmUucHJvdG90eXBlPXsKSFI6ZnVuY3Rpb24oYSl7aWYoKHRoaXMuYyYxNSkh -PT02KXJldHVybiEwCnJldHVybiB0aGlzLmIuYi5idih0LmFsLmEodGhpcy5kKSxhLmEsdC55LHQuSyl9 -LApLdzpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmUscj10LnoscT10LksscD10aGlzLiR0aS5DKCIyLyIp -LG89dGhpcy5iLmIKaWYodC5hZy5iKHMpKXJldHVybiBwLmEoby5ycChzLGEuYSxhLmIscixxLHQubCkp -CmVsc2UgcmV0dXJuIHAuYShvLmJ2KHQuYkkuYShzKSxhLmEscixxKSl9fQpQLnZzLnByb3RvdHlwZT17 -ClNxOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHEscD10aGlzLiR0aQpwLktxKGMpLkMoIjEvKDIpIiku -YShhKQpzPSQuWDMKaWYocyE9PUMuTlUpe2MuQygiQDwwLz4iKS5LcShwLmMpLkMoIjEoMikiKS5hKGEp -CmlmKGIhPW51bGwpYj1QLlZIKGIscyl9cj1uZXcgUC52cyhzLGMuQygidnM8MD4iKSkKcT1iPT1udWxs -PzE6Mwp0aGlzLnhmKG5ldyBQLkZlKHIscSxhLGIscC5DKCJAPDE+IikuS3EoYykuQygiRmU8MSwyPiIp -KSkKcmV0dXJuIHJ9LApXNzpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLlNxKGEsbnVsbCxiKX0sClFk -OmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyPXRoaXMuJHRpCnIuS3EoYykuQygiMS8oMikiKS5hKGEpCnM9 -bmV3IFAudnMoJC5YMyxjLkMoInZzPDA+IikpCnRoaXMueGYobmV3IFAuRmUocywxOSxhLGIsci5DKCJA -PDE+IikuS3EoYykuQygiRmU8MSwyPiIpKSkKcmV0dXJuIHN9LAp4ZjpmdW5jdGlvbihhKXt2YXIgcyxy -PXRoaXMscT1yLmEKaWYocTw9MSl7YS5hPXQuRi5hKHIuYykKci5jPWF9ZWxzZXtpZihxPT09Mil7cz10 -LmMuYShyLmMpCnE9cy5hCmlmKHE8NCl7cy54ZihhKQpyZXR1cm59ci5hPXEKci5jPXMuY31QLlRrKG51 -bGwsbnVsbCxyLmIsdC5NLmEobmV3IFAuZGEocixhKSkpfX0sCmpROmZ1bmN0aW9uKGEpe3ZhciBzLHIs -cSxwLG8sbixtPXRoaXMsbD17fQpsLmE9YQppZihhPT1udWxsKXJldHVybgpzPW0uYQppZihzPD0xKXty -PXQuRi5hKG0uYykKbS5jPWEKaWYociE9bnVsbCl7cT1hLmEKZm9yKHA9YTtxIT1udWxsO3A9cSxxPW8p -bz1xLmEKcC5hPXJ9fWVsc2V7aWYocz09PTIpe249dC5jLmEobS5jKQpzPW4uYQppZihzPDQpe24ualEo -YSkKcmV0dXJufW0uYT1zCm0uYz1uLmN9bC5hPW0uTjgoYSkKUC5UayhudWxsLG51bGwsbS5iLHQuTS5h -KG5ldyBQLm9RKGwsbSkpKX19LAphaDpmdW5jdGlvbigpe3ZhciBzPXQuRi5hKHRoaXMuYykKdGhpcy5j -PW51bGwKcmV0dXJuIHRoaXMuTjgocyl9LApOODpmdW5jdGlvbihhKXt2YXIgcyxyLHEKZm9yKHM9YSxy -PW51bGw7cyE9bnVsbDtyPXMscz1xKXtxPXMuYQpzLmE9cn1yZXR1cm4gcn0sCmVjOmZ1bmN0aW9uKGEp -e3ZhciBzLHIscSxwPXRoaXMKcC5hPTEKdHJ5e2EuU3EobmV3IFAucFYocCksbmV3IFAuVTcocCksdC5Q -KX1jYXRjaChxKXtzPUguUnUocSkKcj1ILnRzKHEpClAucmIobmV3IFAudnIocCxzLHIpKX19LApYMjpm -dW5jdGlvbihhKXt2YXIgcyxyPXRoaXMKci4kdGkuYy5hKGEpCnM9ci5haCgpCnIuYT00CnIuYz1hClAu -SFoocixzKX0sClpMOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPXRoaXMKdC5sLmEoYikKcz1xLmFoKCkK -cj1QLlRsKGEsYikKcS5hPTgKcS5jPXIKUC5IWihxLHMpfSwKWGY6ZnVuY3Rpb24oYSl7dmFyIHM9dGhp -cy4kdGkKcy5DKCIxLyIpLmEoYSkKaWYocy5DKCJiODwxPiIpLmIoYSkpe3RoaXMuY1UoYSkKcmV0dXJu -fXRoaXMud1Uocy5jLmEoYSkpfSwKd1U6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcwpzLiR0aS5jLmEoYSkK -cy5hPTEKUC5UayhudWxsLG51bGwscy5iLHQuTS5hKG5ldyBQLnJ0KHMsYSkpKX0sCmNVOmZ1bmN0aW9u -KGEpe3ZhciBzPXRoaXMscj1zLiR0aQpyLkMoImI4PDE+IikuYShhKQppZihyLmIoYSkpe2lmKGEuYT09 -PTgpe3MuYT0xClAuVGsobnVsbCxudWxsLHMuYix0Lk0uYShuZXcgUC5LRihzLGEpKSl9ZWxzZSBQLkE5 -KGEscykKcmV0dXJufXMuZWMoYSl9LApOazpmdW5jdGlvbihhLGIpe3RoaXMuYT0xClAuVGsobnVsbCxu -dWxsLHRoaXMuYix0Lk0uYShuZXcgUC5aTCh0aGlzLGEsYikpKX0sCiRpYjg6MX0KUC5kYS5wcm90b3R5 -cGU9ewokMDpmdW5jdGlvbigpe1AuSFoodGhpcy5hLHRoaXMuYil9LAokUzowfQpQLm9RLnByb3RvdHlw -ZT17CiQwOmZ1bmN0aW9uKCl7UC5IWih0aGlzLmIsdGhpcy5hLmEpfSwKJFM6MH0KUC5wVi5wcm90b3R5 -cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyLHEscD10aGlzLmEKcC5hPTAKdHJ5e3AuWDIocC4kdGku -Yy5hKGEpKX1jYXRjaChxKXtzPUguUnUocSkKcj1ILnRzKHEpCnAuWkwocyxyKX19LAokUzoxMH0KUC5V -Ny5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3RoaXMuYS5aTChhLHQubC5hKGIpKX0sCiRDOiIk -MiIsCiRSOjIsCiRTOjI4fQpQLnZyLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7dGhpcy5hLlpMKHRo -aXMuYix0aGlzLmMpfSwKJFM6MH0KUC5ydC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS5Y -Mih0aGlzLmIpfSwKJFM6MH0KUC5LRi5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe1AuQTkodGhpcy5i -LHRoaXMuYSl9LAokUzowfQpQLlpMLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7dGhpcy5hLlpMKHRo -aXMuYix0aGlzLmMpfSwKJFM6MH0KUC5SVC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3ZhciBzLHIs -cSxwLG8sbixtPXRoaXMsbD1udWxsCnRyeXtxPW0uYS5hCmw9cS5iLmIuenoodC5mTy5hKHEuZCksdC56 -KX1jYXRjaChwKXtzPUguUnUocCkKcj1ILnRzKHApCmlmKG0uYyl7cT10Lm4uYShtLmIuYS5jKS5hCm89 -cwpvPXE9PW51bGw/bz09bnVsbDpxPT09bwpxPW99ZWxzZSBxPSExCm89bS5hCmlmKHEpby5jPXQubi5h -KG0uYi5hLmMpCmVsc2Ugby5jPVAuVGwocyxyKQpvLmI9ITAKcmV0dXJufWlmKGwgaW5zdGFuY2VvZiBQ -LnZzJiZsLmE+PTQpe2lmKGwuYT09PTgpe3E9bS5hCnEuYz10Lm4uYShsLmMpCnEuYj0hMH1yZXR1cm59 -aWYodC5lLmIobCkpe249bS5iLmEKcT1tLmEKcS5jPWwuVzcobmV3IFAualoobiksdC56KQpxLmI9ITF9 -fSwKJFM6MH0KUC5qWi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfSwKJFM6 -Mjl9ClAucnEucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvLG4sbSxsCnRyeXtx -PXRoaXMuYQpwPXEuYQpvPXAuJHRpCm49by5jCm09bi5hKHRoaXMuYikKcS5jPXAuYi5iLmJ2KG8uQygi -Mi8oMSkiKS5hKHAuZCksbSxvLkMoIjIvIiksbil9Y2F0Y2gobCl7cz1ILlJ1KGwpCnI9SC50cyhsKQpx -PXRoaXMuYQpxLmM9UC5UbChzLHIpCnEuYj0hMH19LAokUzowfQpQLlJXLnByb3RvdHlwZT17CiQwOmZ1 -bmN0aW9uKCl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRoaXMKdHJ5e3M9dC5uLmEoay5hLmEuYykKcD1r -LmIKaWYoSC5vVChwLmEuSFIocykpJiZwLmEuZSE9bnVsbCl7cC5jPXAuYS5LdyhzKQpwLmI9ITF9fWNh -dGNoKG8pe3I9SC5SdShvKQpxPUgudHMobykKcD10Lm4uYShrLmEuYS5jKQpuPXAuYQptPXIKbD1rLmIK -aWYobj09bnVsbD9tPT1udWxsOm49PT1tKWwuYz1wCmVsc2UgbC5jPVAuVGwocixxKQpsLmI9ITB9fSwK -JFM6MH0KUC5PTS5wcm90b3R5cGU9e30KUC5xaC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXt2YXIg -cyxyLHE9dGhpcyxwPXt9LG89bmV3IFAudnMoJC5YMyx0LmZKKQpwLmE9MApzPUguTGgocSkKcj1zLkMo -In4oMSk/IikuYShuZXcgUC5CNShwLHEpKQp0LlouYShuZXcgUC51TyhwLG8pKQpXLkpFKHEuYSxxLmIs -ciwhMSxzLmMpCnJldHVybiBvfX0KUC5CNS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtILkxoKHRo -aXMuYikuYy5hKGEpOysrdGhpcy5hLmF9LAokUzpmdW5jdGlvbigpe3JldHVybiBILkxoKHRoaXMuYiku -QygifigxKSIpfX0KUC51Ty5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3ZhciBzPXRoaXMuYixyPXMu -JHRpLHE9ci5DKCIxLyIpLmEodGhpcy5hLmEpLHA9cy5haCgpCnIuYy5hKHEpCnMuYT00CnMuYz1xClAu -SFoocyxwKX0sCiRTOjB9ClAuTU8ucHJvdG90eXBlPXt9ClAua1QucHJvdG90eXBlPXt9ClAueEkucHJv -dG90eXBlPXt9ClAubTAucHJvdG90eXBlPXskaVFtOjF9ClAucEsucHJvdG90eXBlPXsKJDA6ZnVuY3Rp -b24oKXt2YXIgcz1ILmIodGhpcy5hKQpzLnN0YWNrPUouaih0aGlzLmIpCnRocm93IHN9LAokUzowfQpQ -LkppLnByb3RvdHlwZT17CmJIOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPW51bGwKdC5NLmEoYSkKdHJ5 -e2lmKEMuTlU9PT0kLlgzKXthLiQwKCkKcmV0dXJufVAuVDgocCxwLHRoaXMsYSx0LkgpfWNhdGNoKHEp -e3M9SC5SdShxKQpyPUgudHMocSkKUC5MMihwLHAsdGhpcyxzLHQubC5hKHIpKX19LApEbDpmdW5jdGlv -bihhLGIsYyl7dmFyIHMscixxLHA9bnVsbApjLkMoIn4oMCkiKS5hKGEpCmMuYShiKQp0cnl7aWYoQy5O -VT09PSQuWDMpe2EuJDEoYikKcmV0dXJufVAueXYocCxwLHRoaXMsYSxiLHQuSCxjKX1jYXRjaChxKXtz -PUguUnUocSkKcj1ILnRzKHEpClAuTDIocCxwLHRoaXMscyx0LmwuYShyKSl9fSwKR1k6ZnVuY3Rpb24o -YSl7cmV0dXJuIG5ldyBQLlZwKHRoaXMsdC5NLmEoYSkpfSwKUHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g -bmV3IFAuT1IodGhpcyxiLkMoIn4oMCkiKS5hKGEpLGIpfSwKcTpmdW5jdGlvbihhLGIpe3JldHVybiBu -dWxsfSwKeno6ZnVuY3Rpb24oYSxiKXtiLkMoIjAoKSIpLmEoYSkKaWYoJC5YMz09PUMuTlUpcmV0dXJu -IGEuJDAoKQpyZXR1cm4gUC5UOChudWxsLG51bGwsdGhpcyxhLGIpfSwKYnY6ZnVuY3Rpb24oYSxiLGMs -ZCl7Yy5DKCJAPDA+IikuS3EoZCkuQygiMSgyKSIpLmEoYSkKZC5hKGIpCmlmKCQuWDM9PT1DLk5VKXJl -dHVybiBhLiQxKGIpCnJldHVybiBQLnl2KG51bGwsbnVsbCx0aGlzLGEsYixjLGQpfSwKcnA6ZnVuY3Rp -b24oYSxiLGMsZCxlLGYpe2QuQygiQDwwPiIpLktxKGUpLktxKGYpLkMoIjEoMiwzKSIpLmEoYSkKZS5h -KGIpCmYuYShjKQppZigkLlgzPT09Qy5OVSlyZXR1cm4gYS4kMihiLGMpCnJldHVybiBQLlF4KG51bGws -bnVsbCx0aGlzLGEsYixjLGQsZSxmKX0sCkxqOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiLkMoIkA8 -MD4iKS5LcShjKS5LcShkKS5DKCIxKDIsMykiKS5hKGEpfX0KUC5WcC5wcm90b3R5cGU9ewokMDpmdW5j -dGlvbigpe3JldHVybiB0aGlzLmEuYkgodGhpcy5iKX0sCiRTOjB9ClAuT1IucHJvdG90eXBlPXsKJDE6 -ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5jCnJldHVybiB0aGlzLmEuRGwodGhpcy5iLHMuYShhKSxzKX0s -CiRTOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5DKCJ+KDApIil9fQpQLmI2LnByb3RvdHlwZT17Cmdt -OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMscj1uZXcgUC5sbShzLHMucixILkxoKHMpLkMoImxtPDE+Iikp -CnIuYz1zLmUKcmV0dXJuIHJ9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfSwKZ2wwOmZ1bmN0 -aW9uKGEpe3JldHVybiB0aGlzLmE9PT0wfSwKZ29yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEhPT0w -fSwKdGc6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyCmlmKHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9PSJfX3By -b3RvX18iKXtzPXRoaXMuYgppZihzPT1udWxsKXJldHVybiExCnJldHVybiB0Lm0uYShzW2JdKSE9bnVs -bH1lbHNle3I9dGhpcy5QUihiKQpyZXR1cm4gcn19LApQUjpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmQK -aWYocz09bnVsbClyZXR1cm4hMQpyZXR1cm4gdGhpcy5ERihzW3RoaXMuTihhKV0sYSk+PTB9LAppOmZ1 -bmN0aW9uKGEsYil7dmFyIHMscixxPXRoaXMKSC5MaChxKS5jLmEoYikKaWYodHlwZW9mIGI9PSJzdHJp -bmciJiZiIT09Il9fcHJvdG9fXyIpe3M9cS5iCnJldHVybiBxLmJRKHM9PW51bGw/cS5iPVAuVDIoKTpz -LGIpfWVsc2UgaWYodHlwZW9mIGI9PSJudW1iZXIiJiYoYiYxMDczNzQxODIzKT09PWIpe3I9cS5jCnJl -dHVybiBxLmJRKHI9PW51bGw/cS5jPVAuVDIoKTpyLGIpfWVsc2UgcmV0dXJuIHEuQjcoYil9LApCNzpm -dW5jdGlvbihhKXt2YXIgcyxyLHEscD10aGlzCkguTGgocCkuYy5hKGEpCnM9cC5kCmlmKHM9PW51bGwp -cz1wLmQ9UC5UMigpCnI9cC5OKGEpCnE9c1tyXQppZihxPT1udWxsKXNbcl09W3AueW8oYSldCmVsc2V7 -aWYocC5ERihxLGEpPj0wKXJldHVybiExCnEucHVzaChwLnlvKGEpKX1yZXR1cm4hMH0sClI6ZnVuY3Rp -b24oYSxiKXt2YXIgcz10aGlzCmlmKHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9PSJfX3Byb3RvX18iKXJl -dHVybiBzLkgocy5iLGIpCmVsc2UgaWYodHlwZW9mIGI9PSJudW1iZXIiJiYoYiYxMDczNzQxODIzKT09 -PWIpcmV0dXJuIHMuSChzLmMsYikKZWxzZSByZXR1cm4gcy5xZyhiKX0sCnFnOmZ1bmN0aW9uKGEpe3Zh -ciBzLHIscSxwLG89dGhpcyxuPW8uZAppZihuPT1udWxsKXJldHVybiExCnM9by5OKGEpCnI9bltzXQpx -PW8uREYocixhKQppZihxPDApcmV0dXJuITEKcD1yLnNwbGljZShxLDEpWzBdCmlmKDA9PT1yLmxlbmd0 -aClkZWxldGUgbltzXQpvLkcocCkKcmV0dXJuITB9LApiUTpmdW5jdGlvbihhLGIpe0guTGgodGhpcyku -Yy5hKGIpCmlmKHQubS5hKGFbYl0pIT1udWxsKXJldHVybiExCmFbYl09dGhpcy55byhiKQpyZXR1cm4h -MH0sCkg6ZnVuY3Rpb24oYSxiKXt2YXIgcwppZihhPT1udWxsKXJldHVybiExCnM9dC5tLmEoYVtiXSkK -aWYocz09bnVsbClyZXR1cm4hMQp0aGlzLkcocykKZGVsZXRlIGFbYl0KcmV0dXJuITB9LApTOmZ1bmN0 -aW9uKCl7dGhpcy5yPXRoaXMucisxJjEwNzM3NDE4MjN9LAp5bzpmdW5jdGlvbihhKXt2YXIgcyxyPXRo -aXMscT1uZXcgUC5ibihILkxoKHIpLmMuYShhKSkKaWYoci5lPT1udWxsKXIuZT1yLmY9cQplbHNle3M9 -ci5mCnMudG9TdHJpbmcKcS5jPXMKci5mPXMuYj1xfSsrci5hCnIuUygpCnJldHVybiBxfSwKRzpmdW5j -dGlvbihhKXt2YXIgcz10aGlzLHI9YS5jLHE9YS5iCmlmKHI9PW51bGwpcy5lPXEKZWxzZSByLmI9cQpp -ZihxPT1udWxsKXMuZj1yCmVsc2UgcS5jPXI7LS1zLmEKcy5TKCl9LApOOmZ1bmN0aW9uKGEpe3JldHVy -biBKLmhmKGEpJjEwNzM3NDE4MjN9LApERjpmdW5jdGlvbihhLGIpe3ZhciBzLHIKaWYoYT09bnVsbCly -ZXR1cm4tMQpzPWEubGVuZ3RoCmZvcihyPTA7cjxzOysrcilpZihKLlJNKGFbcl0uYSxiKSlyZXR1cm4g -cgpyZXR1cm4tMX19ClAuYm4ucHJvdG90eXBlPXt9ClAubG0ucHJvdG90eXBlPXsKZ2w6ZnVuY3Rpb24o -KXtyZXR1cm4gdGhpcy5kfSwKRjpmdW5jdGlvbigpe3ZhciBzPXRoaXMscj1zLmMscT1zLmEKaWYocy5i -IT09cS5yKXRocm93IEguYihQLmE0KHEpKQplbHNlIGlmKHI9PW51bGwpe3Muc2oobnVsbCkKcmV0dXJu -ITF9ZWxzZXtzLnNqKHMuJHRpLkMoIjE/IikuYShyLmEpKQpzLmM9ci5iCnJldHVybiEwfX0sCnNqOmZ1 -bmN0aW9uKGEpe3RoaXMuZD10aGlzLiR0aS5DKCIxPyIpLmEoYSl9LAokaUFuOjF9ClAubVcucHJvdG90 -eXBlPXt9ClAudXkucHJvdG90eXBlPXskaWJROjEsJGljWDoxLCRpek06MX0KUC5sRC5wcm90b3R5cGU9 -ewpnbTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEguYTcoYSx0aGlzLmdBKGEpLEgueihhKS5DKCJhNzxs -RC5FPiIpKX0sCkU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5xKGEsYil9LApLOmZ1bmN0aW9uKGEs -Yil7dmFyIHMscgpILnooYSkuQygifihsRC5FKSIpLmEoYikKcz10aGlzLmdBKGEpCmZvcihyPTA7cjxz -Oysrcil7Yi4kMSh0aGlzLnEoYSxyKSkKaWYocyE9PXRoaXMuZ0EoYSkpdGhyb3cgSC5iKFAuYTQoYSkp -fX0sCmdsMDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nQShhKT09PTB9LApnb3I6ZnVuY3Rpb24oYSl7 -cmV0dXJuIXRoaXMuZ2wwKGEpfSwKRTI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPUgueihhKQpyZXR1cm4g -bmV3IEgubEooYSxzLktxKGMpLkMoIjEobEQuRSkiKS5hKGIpLHMuQygiQDxsRC5FPiIpLktxKGMpLkMo -ImxKPDEsMj4iKSl9LAplUjpmdW5jdGlvbihhLGIpe3JldHVybiBILnFDKGEsYixudWxsLEgueihhKS5D -KCJsRC5FIikpfSwKZHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEgualYoYSxILnooYSkuQygiQDxs -RC5FPiIpLktxKGIpLkMoImpWPDEsMj4iKSl9LApkdTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcwpILnoo -YSkuQygibEQuRT8iKS5hKGQpClAuakIoYixjLHRoaXMuZ0EoYSkpCmZvcihzPWI7czxjOysrcyl0aGlz -Llk1KGEscyxkKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAuV0UoYSwiWyIsIl0iKX19ClAuaWwucHJv -dG90eXBlPXt9ClAucmEucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPXRoaXMuYQpp -Zighci5hKXRoaXMuYi5hKz0iLCAiCnIuYT0hMQpyPXRoaXMuYgpzPXIuYSs9SC5FaihhKQpyLmE9cysi -OiAiCnIuYSs9SC5FaihiKX0sCiRTOjExfQpQLllrLnByb3RvdHlwZT17Cks6ZnVuY3Rpb24oYSxiKXt2 -YXIgcyxyCkguTGgodGhpcykuQygifihZay5LLFlrLlYpIikuYShiKQpmb3Iocz1KLklUKHRoaXMuZ3Zj -KCkpO3MuRigpOyl7cj1zLmdsKCkKYi4kMihyLHRoaXMucSgwLHIpKX19LApnUHU6ZnVuY3Rpb24oYSl7 -cmV0dXJuIEouTTEodGhpcy5ndmMoKSxuZXcgUC55USh0aGlzKSxILkxoKHRoaXMpLkMoIk4zPFlrLkss -WWsuVj4iKSl9LAp4NDpmdW5jdGlvbihhKXtyZXR1cm4gSi56bCh0aGlzLmd2YygpLGEpfSwKZ0E6ZnVu -Y3Rpb24oYSl7cmV0dXJuIEouSG0odGhpcy5ndmMoKSl9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIEou -dVUodGhpcy5ndmMoKSl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBQLm5PKHRoaXMpfSwKJGlaMDoxfQpQ -LnlRLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYSxyPUguTGgocykKci5DKCJZ -ay5LIikuYShhKQpyZXR1cm4gbmV3IFAuTjMoYSxzLnEoMCxhKSxyLkMoIkA8WWsuSz4iKS5LcShyLkMo -IllrLlYiKSkuQygiTjM8MSwyPiIpKX0sCiRTOmZ1bmN0aW9uKCl7cmV0dXJuIEguTGgodGhpcy5hKS5D -KCJOMzxZay5LLFlrLlY+KFlrLkspIil9fQpQLktQLnByb3RvdHlwZT17Clk1OmZ1bmN0aW9uKGEsYixj -KXt2YXIgcz1ILkxoKHRoaXMpCnMuYy5hKGIpCnMuUVsxXS5hKGMpCnRocm93IEguYihQLkw0KCJDYW5u -b3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXAiKSl9fQpQLlBuLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24o -YSxiKXtyZXR1cm4gdGhpcy5hLnEoMCxiKX0sClk1OmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1ILkxoKHRo -aXMpCnRoaXMuYS5ZNSgwLHMuYy5hKGIpLHMuUVsxXS5hKGMpKX0sCng0OmZ1bmN0aW9uKGEpe3JldHVy -biB0aGlzLmEueDQoYSl9LApLOmZ1bmN0aW9uKGEsYil7dGhpcy5hLksoMCxILkxoKHRoaXMpLkMoIn4o -MSwyKSIpLmEoYikpfSwKZ2wwOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5nbDAocyl9 -LApnQTpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuZ0Eocyl9LAp3OmZ1bmN0aW9uKGEp -e3JldHVybiBKLmoodGhpcy5hKX0sCmdQdTpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMu -Z1B1KHMpfSwKJGlaMDoxfQpQLkdqLnByb3RvdHlwZT17fQpQLmxmLnByb3RvdHlwZT17CmdsMDpmdW5j -dGlvbihhKXtyZXR1cm4gdGhpcy5nQSh0aGlzKT09PTB9LApnb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo -aXMuZ0EodGhpcykhPT0wfSwKRlY6ZnVuY3Rpb24oYSxiKXt2YXIgcwpmb3Iocz1KLklUKEguTGgodGhp -cykuQygiY1g8bGYuRT4iKS5hKGIpKTtzLkYoKTspdGhpcy5pKDAscy5nbCgpKX0sCnc6ZnVuY3Rpb24o -YSl7cmV0dXJuIFAuV0UodGhpcywieyIsIn0iKX0sCms6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPXRoaXMu -Z20odGhpcykKaWYoIXIuRigpKXJldHVybiIiCmlmKGI9PT0iIil7cz0iIgpkbyBzKz1ILkVqKHIuZCkK -d2hpbGUoci5GKCkpfWVsc2V7cz1ILkVqKHIuZCkKZm9yKDtyLkYoKTspcz1zK2IrSC5FaihyLmQpfXJl -dHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwKZVI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSC5iSyh0 -aGlzLGIsSC5MaCh0aGlzKS5DKCJsZi5FIikpfSwKRTpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwPSJp -bmRleCIKSC5jYihiLHAsdC5TKQpQLmsxKGIscCkKZm9yKHM9dGhpcy5nbSh0aGlzKSxyPTA7cy5GKCk7 -KXtxPXMuZAppZihiPT09cilyZXR1cm4gcTsrK3J9dGhyb3cgSC5iKFAuQ2YoYix0aGlzLHAsbnVsbCxy -KSl9fQpQLlZqLnByb3RvdHlwZT17JGliUToxLCRpY1g6MSwkaXh1OjF9ClAuWHYucHJvdG90eXBlPXsk -aWJROjEsJGljWDoxLCRpeHU6MX0KUC5uWS5wcm90b3R5cGU9e30KUC5XWS5wcm90b3R5cGU9e30KUC5S -VS5wcm90b3R5cGU9e30KUC5wUi5wcm90b3R5cGU9e30KUC51dy5wcm90b3R5cGU9ewpxOmZ1bmN0aW9u -KGEsYil7dmFyIHMscj10aGlzLmIKaWYocj09bnVsbClyZXR1cm4gdGhpcy5jLnEoMCxiKQplbHNlIGlm -KHR5cGVvZiBiIT0ic3RyaW5nIilyZXR1cm4gbnVsbAplbHNle3M9cltiXQpyZXR1cm4gdHlwZW9mIHM9 -PSJ1bmRlZmluZWQiP3RoaXMuZmIoYik6c319LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5iPT1u -dWxsP3RoaXMuYy5hOnRoaXMuQ2YoKS5sZW5ndGh9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu -Z0EodGhpcyk9PT0wfSwKZ3ZjOmZ1bmN0aW9uKCl7aWYodGhpcy5iPT1udWxsKXt2YXIgcz10aGlzLmMK -cmV0dXJuIG5ldyBILmk1KHMsSC5MaChzKS5DKCJpNTwxPiIpKX1yZXR1cm4gbmV3IFAuaTgodGhpcyl9 -LApZNTpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxPXRoaXMKaWYocS5iPT1udWxsKXEuYy5ZNSgwLGIs -YykKZWxzZSBpZihxLng0KGIpKXtzPXEuYgpzW2JdPWMKcj1xLmEKaWYocj09bnVsbD9zIT1udWxsOnIh -PT1zKXJbYl09bnVsbH1lbHNlIHEuWEsoKS5ZNSgwLGIsYyl9LAp4NDpmdW5jdGlvbihhKXtpZih0aGlz -LmI9PW51bGwpcmV0dXJuIHRoaXMuYy54NChhKQpyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q -cm9wZXJ0eS5jYWxsKHRoaXMuYSxhKX0sCks6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvPXRoaXMK -dC5jQS5hKGIpCmlmKG8uYj09bnVsbClyZXR1cm4gby5jLksoMCxiKQpzPW8uQ2YoKQpmb3Iocj0wO3I8 -cy5sZW5ndGg7KytyKXtxPXNbcl0KcD1vLmJbcV0KaWYodHlwZW9mIHA9PSJ1bmRlZmluZWQiKXtwPVAu -UWUoby5hW3FdKQpvLmJbcV09cH1iLiQyKHEscCkKaWYocyE9PW8uYyl0aHJvdyBILmIoUC5hNChvKSl9 -fSwKQ2Y6ZnVuY3Rpb24oKXt2YXIgcz10LmJNLmEodGhpcy5jKQppZihzPT1udWxsKXM9dGhpcy5jPUgu -Vk0oT2JqZWN0LmtleXModGhpcy5hKSx0LnMpCnJldHVybiBzfSwKWEs6ZnVuY3Rpb24oKXt2YXIgcyxy -LHEscCxvLG49dGhpcwppZihuLmI9PW51bGwpcmV0dXJuIG4uYwpzPVAuRmwodC5OLHQueikKcj1uLkNm -KCkKZm9yKHE9MDtwPXIubGVuZ3RoLHE8cDsrK3Epe289cltxXQpzLlk1KDAsbyxuLnEoMCxvKSl9aWYo -cD09PTApQy5ObS5pKHIsIiIpCmVsc2UgQy5ObS5zQShyLDApCm4uYT1uLmI9bnVsbApyZXR1cm4gbi5j -PXN9LApmYjpmdW5jdGlvbihhKXt2YXIgcwppZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0 -eS5jYWxsKHRoaXMuYSxhKSlyZXR1cm4gbnVsbApzPVAuUWUodGhpcy5hW2FdKQpyZXR1cm4gdGhpcy5i -W2FdPXN9fQpQLmk4LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4g -cy5nQShzKX0sCkU6ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlzLmEKaWYocy5iPT1udWxsKXM9cy5ndmMo -KS5FKDAsYikKZWxzZXtzPXMuQ2YoKQppZihiPDB8fGI+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsYikK -cz1zW2JdfXJldHVybiBzfSwKZ206ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hCmlmKHMuYj09bnVsbCl7 -cz1zLmd2YygpCnM9cy5nbShzKX1lbHNle3M9cy5DZigpCnM9bmV3IEoubTEocyxzLmxlbmd0aCxILnQ2 -KHMpLkMoIm0xPDE+IikpfXJldHVybiBzfSwKdGc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5hLng0 -KGIpfX0KUC54ci5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3ZhciBzLHIKdHJ5e3M9bmV3IFRleHRE -ZWNvZGVyKCJ1dGYtOCIse2ZhdGFsOnRydWV9KQpyZXR1cm4gc31jYXRjaChyKXtILlJ1KHIpfXJldHVy -biBudWxsfSwKJFM6MTJ9ClAuTnoucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2YXIgcyxyCnRyeXtz -PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtmYXRhbDpmYWxzZX0pCnJldHVybiBzfWNhdGNoKHIpe0gu -UnUocil9cmV0dXJuIG51bGx9LAokUzoxMn0KUC5DVi5wcm90b3R5cGU9ewp5cjpmdW5jdGlvbihhMCxh -MSxhMil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGE9IkludmFsaWQgYmFz -ZTY0IGVuY29kaW5nIGxlbmd0aCAiCmEyPVAuakIoYTEsYTIsYTAubGVuZ3RoKQpzPSQuVjcoKQpmb3Io -cj1hMSxxPXIscD1udWxsLG89LTEsbj0tMSxtPTA7cjxhMjtyPWwpe2w9cisxCms9Qy54Qi5XKGEwLHIp -CmlmKGs9PT0zNyl7aj1sKzIKaWYoajw9YTIpe2k9SC5vbyhDLnhCLlcoYTAsbCkpCmg9SC5vbyhDLnhC -LlcoYTAsbCsxKSkKZz1pKjE2K2gtKGgmMjU2KQppZihnPT09MzcpZz0tMQpsPWp9ZWxzZSBnPS0xfWVs -c2UgZz1rCmlmKDA8PWcmJmc8PTEyNyl7aWYoZzwwfHxnPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLGcp -CmY9c1tnXQppZihmPj0wKXtnPUMueEIuTygiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZn -aGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsZikKaWYoZz09PWspY29udGludWUKaz1nfWVs -c2V7aWYoZj09PS0xKXtpZihvPDApe2U9cD09bnVsbD9udWxsOnAuYS5sZW5ndGgKaWYoZT09bnVsbCll -PTAKbz1lKyhyLXEpCm49cn0rK20KaWYoaz09PTYxKWNvbnRpbnVlfWs9Z31pZihmIT09LTIpe2lmKHA9 -PW51bGwpe3A9bmV3IFAuUm4oIiIpCmU9cH1lbHNlIGU9cAplLmErPUMueEIuTmooYTAscSxyKQplLmEr -PUguTHcoaykKcT1sCmNvbnRpbnVlfX10aHJvdyBILmIoUC5ycigiSW52YWxpZCBiYXNlNjQgZGF0YSIs -YTAscikpfWlmKHAhPW51bGwpe2U9cC5hKz1DLnhCLk5qKGEwLHEsYTIpCmQ9ZS5sZW5ndGgKaWYobz49 -MClQLnhNKGEwLG4sYTIsbyxtLGQpCmVsc2V7Yz1DLmpuLnpZKGQtMSw0KSsxCmlmKGM9PT0xKXRocm93 -IEguYihQLnJyKGEsYTAsYTIpKQpmb3IoO2M8NDspe2UrPSI9IgpwLmE9ZTsrK2N9fWU9cC5hCnJldHVy -biBDLnhCLmk3KGEwLGExLGEyLGUuY2hhckNvZGVBdCgwKT09MD9lOmUpfWI9YTItYTEKaWYobz49MClQ -LnhNKGEwLG4sYTIsbyxtLGIpCmVsc2V7Yz1DLmpuLnpZKGIsNCkKaWYoYz09PTEpdGhyb3cgSC5iKFAu -cnIoYSxhMCxhMikpCmlmKGM+MSlhMD1DLnhCLmk3KGEwLGEyLGEyLGM9PT0yPyI9PSI6Ij0iKX1yZXR1 -cm4gYTB9fQpQLlU4LnByb3RvdHlwZT17fQpQLlVrLnByb3RvdHlwZT17fQpQLndJLnByb3RvdHlwZT17 -fQpQLlppLnByb3RvdHlwZT17fQpQLlVkLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHM9UC5w -KHRoaXMuYSkKcmV0dXJuKHRoaXMuYiE9bnVsbD8iQ29udmVydGluZyBvYmplY3QgdG8gYW4gZW5jb2Rh -YmxlIG9iamVjdCBmYWlsZWQ6IjoiQ29udmVydGluZyBvYmplY3QgZGlkIG5vdCByZXR1cm4gYW4gZW5j -b2RhYmxlIG9iamVjdDoiKSsiICIrc319ClAuSzgucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1 -cm4iQ3ljbGljIGVycm9yIGluIEpTT04gc3RyaW5naWZ5In19ClAuYnkucHJvdG90eXBlPXsKcFc6ZnVu -Y3Rpb24oYSxiLGMpe3ZhciBzCnQuZlYuYShjKQpzPVAuQlMoYix0aGlzLmdIZSgpLmEpCnJldHVybiBz -fSwKT0I6ZnVuY3Rpb24oYSxiKXt2YXIgcwp0LmRBLmEoYikKcz1QLnVYKGEsdGhpcy5nWkUoKS5iLG51 -bGwpCnJldHVybiBzfSwKZ1pFOmZ1bmN0aW9uKCl7cmV0dXJuIEMublh9LApnSGU6ZnVuY3Rpb24oKXty -ZXR1cm4gQy5BM319ClAub2oucHJvdG90eXBlPXt9ClAuTXgucHJvdG90eXBlPXt9ClAuU2gucHJvdG90 -eXBlPXsKUlQ6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG0sbD1hLmxlbmd0aApmb3Iocz1KLnJZ -KGEpLHI9dGhpcy5jLHE9MCxwPTA7cDxsOysrcCl7bz1zLlcoYSxwKQppZihvPjkyKXtpZihvPj01NTI5 -Nil7bj1vJjY0NTEyCmlmKG49PT01NTI5Nil7bT1wKzEKbT0hKG08bCYmKEMueEIuVyhhLG0pJjY0NTEy -KT09PTU2MzIwKX1lbHNlIG09ITEKaWYoIW0paWYobj09PTU2MzIwKXtuPXAtMQpuPSEobj49MCYmKEMu -eEIuTyhhLG4pJjY0NTEyKT09PTU1Mjk2KX1lbHNlIG49ITEKZWxzZSBuPSEwCmlmKG4pe2lmKHA+cSly -LmErPUMueEIuTmooYSxxLHApCnE9cCsxCnIuYSs9SC5Mdyg5MikKci5hKz1ILkx3KDExNykKci5hKz1I -Lkx3KDEwMCkKbj1vPj4+OCYxNQpyLmErPUguTHcobjwxMD80OCtuOjg3K24pCm49bz4+PjQmMTUKci5h -Kz1ILkx3KG48MTA/NDgrbjo4NytuKQpuPW8mMTUKci5hKz1ILkx3KG48MTA/NDgrbjo4NytuKX19Y29u -dGludWV9aWYobzwzMil7aWYocD5xKXIuYSs9Qy54Qi5OaihhLHEscCkKcT1wKzEKci5hKz1ILkx3KDky -KQpzd2l0Y2gobyl7Y2FzZSA4OnIuYSs9SC5Mdyg5OCkKYnJlYWsKY2FzZSA5OnIuYSs9SC5MdygxMTYp -CmJyZWFrCmNhc2UgMTA6ci5hKz1ILkx3KDExMCkKYnJlYWsKY2FzZSAxMjpyLmErPUguTHcoMTAyKQpi -cmVhawpjYXNlIDEzOnIuYSs9SC5MdygxMTQpCmJyZWFrCmRlZmF1bHQ6ci5hKz1ILkx3KDExNykKci5h -Kz1ILkx3KDQ4KQpyLmErPUguTHcoNDgpCm49bz4+PjQmMTUKci5hKz1ILkx3KG48MTA/NDgrbjo4Nytu -KQpuPW8mMTUKci5hKz1ILkx3KG48MTA/NDgrbjo4NytuKQpicmVha319ZWxzZSBpZihvPT09MzR8fG89 -PT05Mil7aWYocD5xKXIuYSs9Qy54Qi5OaihhLHEscCkKcT1wKzEKci5hKz1ILkx3KDkyKQpyLmErPUgu -THcobyl9fWlmKHE9PT0wKXIuYSs9SC5FaihhKQplbHNlIGlmKHE8bClyLmErPXMuTmooYSxxLGwpfSwK -Sm46ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAKZm9yKHM9dGhpcy5hLHI9cy5sZW5ndGgscT0wO3E8cjsr -K3Epe3A9c1txXQppZihhPT1udWxsP3A9PW51bGw6YT09PXApdGhyb3cgSC5iKG5ldyBQLks4KGEsbnVs -bCkpfUMuTm0uaShzLGEpfSwKaVU6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbz10aGlzCmlmKG8udE0o -YSkpcmV0dXJuCm8uSm4oYSkKdHJ5e3M9by5iLiQxKGEpCmlmKCFvLnRNKHMpKXtxPVAuR3koYSxudWxs -LG8uZ1ZLKCkpCnRocm93IEguYihxKX1xPW8uYQppZigwPj1xLmxlbmd0aClyZXR1cm4gSC5PSChxLC0x -KQpxLnBvcCgpfWNhdGNoKHApe3I9SC5SdShwKQpxPVAuR3koYSxyLG8uZ1ZLKCkpCnRocm93IEguYihx -KX19LAp0TTpmdW5jdGlvbihhKXt2YXIgcyxyLHE9dGhpcwppZih0eXBlb2YgYT09Im51bWJlciIpe2lm -KCFpc0Zpbml0ZShhKSlyZXR1cm4hMQpxLmMuYSs9Qy5DRC53KGEpCnJldHVybiEwfWVsc2UgaWYoYT09 -PSEwKXtxLmMuYSs9InRydWUiCnJldHVybiEwfWVsc2UgaWYoYT09PSExKXtxLmMuYSs9ImZhbHNlIgpy -ZXR1cm4hMH1lbHNlIGlmKGE9PW51bGwpe3EuYy5hKz0ibnVsbCIKcmV0dXJuITB9ZWxzZSBpZih0eXBl -b2YgYT09InN0cmluZyIpe3M9cS5jCnMuYSs9JyInCnEuUlQoYSkKcy5hKz0nIicKcmV0dXJuITB9ZWxz -ZSBpZih0LmouYihhKSl7cS5KbihhKQpxLmxLKGEpCnM9cS5hCmlmKDA+PXMubGVuZ3RoKXJldHVybiBI -Lk9IKHMsLTEpCnMucG9wKCkKcmV0dXJuITB9ZWxzZSBpZih0LmYuYihhKSl7cS5KbihhKQpyPXEuanco -YSkKcz1xLmEKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0gocywtMSkKcy5wb3AoKQpyZXR1cm4gcn1l -bHNlIHJldHVybiExfSwKbEs6ZnVuY3Rpb24oYSl7dmFyIHMscixxPXRoaXMuYwpxLmErPSJbIgpzPUou -VTYoYSkKaWYocy5nb3IoYSkpe3RoaXMuaVUocy5xKGEsMCkpCmZvcihyPTE7cjxzLmdBKGEpOysrcil7 -cS5hKz0iLCIKdGhpcy5pVShzLnEoYSxyKSl9fXEuYSs9Il0ifSwKanc6ZnVuY3Rpb24oYSl7dmFyIHMs -cixxLHAsbyxuLG09dGhpcyxsPXt9CmlmKGEuZ2wwKGEpKXttLmMuYSs9Int9IgpyZXR1cm4hMH1zPWEu -Z0EoYSkqMgpyPVAuTzgocyxudWxsLCExLHQuVykKcT1sLmE9MApsLmI9ITAKYS5LKDAsbmV3IFAudGko -bCxyKSkKaWYoIWwuYilyZXR1cm4hMQpwPW0uYwpwLmErPSJ7Igpmb3Iobz0nIic7cTxzO3ErPTIsbz0n -LCInKXtwLmErPW8KbS5SVChILmgocltxXSkpCnAuYSs9JyI6JwpuPXErMQppZihuPj1zKXJldHVybiBI -Lk9IKHIsbikKbS5pVShyW25dKX1wLmErPSJ9IgpyZXR1cm4hMH19ClAudGkucHJvdG90eXBlPXsKJDI6 -ZnVuY3Rpb24oYSxiKXt2YXIgcyxyCmlmKHR5cGVvZiBhIT0ic3RyaW5nIil0aGlzLmEuYj0hMQpzPXRo -aXMuYgpyPXRoaXMuYQpDLk5tLlk1KHMsci5hKyssYSkKQy5ObS5ZNShzLHIuYSsrLGIpfSwKJFM6MTF9 -ClAudHUucHJvdG90eXBlPXsKZ1ZLOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5jLmEKcmV0dXJuIHMuY2hh -ckNvZGVBdCgwKT09MD9zOnN9fQpQLnU1LnByb3RvdHlwZT17CmdaRTpmdW5jdGlvbigpe3JldHVybiBD -LlFrfX0KUC5FMy5wcm90b3R5cGU9ewpXSjpmdW5jdGlvbihhKXt2YXIgcyxyLHEscD1QLmpCKDAsbnVs -bCxhLmxlbmd0aCksbz1wLTAKaWYobz09PTApcmV0dXJuIG5ldyBVaW50OEFycmF5KDApCnM9byozCnI9 -bmV3IFVpbnQ4QXJyYXkocykKcT1uZXcgUC5SdyhyKQppZihxLkd4KGEsMCxwKSE9PXApe0ouYTYoYSxw -LTEpCnEuUk8oKX1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoci5zdWJhcnJheSgwLEguck0oMCxxLmIscykp -KX19ClAuUncucHJvdG90eXBlPXsKUk86ZnVuY3Rpb24oKXt2YXIgcz10aGlzLHI9cy5jLHE9cy5iLHA9 -cy5iPXErMSxvPXIubGVuZ3RoCmlmKHE+PW8pcmV0dXJuIEguT0gocixxKQpyW3FdPTIzOQpxPXMuYj1w -KzEKaWYocD49bylyZXR1cm4gSC5PSChyLHApCnJbcF09MTkxCnMuYj1xKzEKaWYocT49bylyZXR1cm4g -SC5PSChyLHEpCnJbcV09MTg5fSwKTzY6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvLG49dGhpcwpp -ZigoYiY2NDUxMik9PT01NjMyMCl7cz02NTUzNisoKGEmMTAyMyk8PDEwKXxiJjEwMjMKcj1uLmMKcT1u -LmIKcD1uLmI9cSsxCm89ci5sZW5ndGgKaWYocT49bylyZXR1cm4gSC5PSChyLHEpCnJbcV09cz4+PjE4 -fDI0MApxPW4uYj1wKzEKaWYocD49bylyZXR1cm4gSC5PSChyLHApCnJbcF09cz4+PjEyJjYzfDEyOApw -PW4uYj1xKzEKaWYocT49bylyZXR1cm4gSC5PSChyLHEpCnJbcV09cz4+PjYmNjN8MTI4Cm4uYj1wKzEK -aWYocD49bylyZXR1cm4gSC5PSChyLHApCnJbcF09cyY2M3wxMjgKcmV0dXJuITB9ZWxzZXtuLlJPKCkK -cmV0dXJuITF9fSwKR3g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGw9dGhpcwppZihi -IT09YyYmKEMueEIuTyhhLGMtMSkmNjQ1MTIpPT09NTUyOTYpLS1jCmZvcihzPWwuYyxyPXMubGVuZ3Ro -LHE9YjtxPGM7KytxKXtwPUMueEIuVyhhLHEpCmlmKHA8PTEyNyl7bz1sLmIKaWYobz49cilicmVhawps -LmI9bysxCnNbb109cH1lbHNle289cCY2NDUxMgppZihvPT09NTUyOTYpe2lmKGwuYis0PnIpYnJlYWsK -bj1xKzEKaWYobC5PNihwLEMueEIuVyhhLG4pKSlxPW59ZWxzZSBpZihvPT09NTYzMjApe2lmKGwuYisz -PnIpYnJlYWsKbC5STygpfWVsc2UgaWYocDw9MjA0Nyl7bz1sLmIKbT1vKzEKaWYobT49cilicmVhawps -LmI9bQppZihvPj1yKXJldHVybiBILk9IKHMsbykKc1tvXT1wPj4+NnwxOTIKbC5iPW0rMQpzW21dPXAm -NjN8MTI4fWVsc2V7bz1sLmIKaWYobysyPj1yKWJyZWFrCm09bC5iPW8rMQppZihvPj1yKXJldHVybiBI -Lk9IKHMsbykKc1tvXT1wPj4+MTJ8MjI0Cm89bC5iPW0rMQppZihtPj1yKXJldHVybiBILk9IKHMsbSkK -c1ttXT1wPj4+NiY2M3wxMjgKbC5iPW8rMQppZihvPj1yKXJldHVybiBILk9IKHMsbykKc1tvXT1wJjYz -fDEyOH19fXJldHVybiBxfX0KUC5HWS5wcm90b3R5cGU9ewpXSjpmdW5jdGlvbihhKXt2YXIgcyxyCnQu -TC5hKGEpCnM9dGhpcy5hCnI9UC5reShzLGEsMCxudWxsKQppZihyIT1udWxsKXJldHVybiByCnJldHVy -biBuZXcgUC5ieihzKS5OZShhLDAsbnVsbCwhMCl9fQpQLmJ6LnByb3RvdHlwZT17Ck5lOmZ1bmN0aW9u -KGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbj10aGlzCnQuTC5hKGEpCnM9UC5qQihiLGMsSi5IbShhKSkK -aWYoYj09PXMpcmV0dXJuIiIKcj1QLmp5KGEsYixzKQpxPW4uaE8ociwwLHMtYiwhMCkKcD1uLmIKaWYo -KHAmMSkhPT0wKXtvPVAuajQocCkKbi5iPTAKdGhyb3cgSC5iKFAucnIobyxhLGIrbi5jKSl9cmV0dXJu -IHF9LApoTzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcyxyLHE9dGhpcwppZihjLWI+MTAwMCl7cz1DLmpu -LkJVKGIrYywyKQpyPXEuaE8oYSxiLHMsITEpCmlmKChxLmImMSkhPT0wKXJldHVybiByCnJldHVybiBy -K3EuaE8oYSxzLGMsZCl9cmV0dXJuIHEuRWgoYSxiLGMsZCl9LApFaDpmdW5jdGlvbihhLGIsYyxkKXt2 -YXIgcyxyLHEscCxvLG4sbSxsLGs9dGhpcyxqPTY1NTMzLGk9ay5iLGg9ay5jLGc9bmV3IFAuUm4oIiIp -LGY9YisxLGU9YS5sZW5ndGgKaWYoYjwwfHxiPj1lKXJldHVybiBILk9IKGEsYikKcz1hW2JdCiRsYWJl -bDAkMDpmb3Iocj1rLmE7ITA7KXtmb3IoOyEwO2Y9byl7cT1DLnhCLlcoIkFBQUFBQUFBQUFBQUFBQUFB +LmNyZWF0ZUVsZW1lbnQoImEiKQppZihhIT1udWxsKUMueG4uc0xVKHMsYSkKcmV0dXJuIHN9LApMajpm +dW5jdGlvbihhKXtyZXR1cm4gQ1NTLmVzY2FwZShhKX0sClU5OmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxy +PWRvY3VtZW50LmJvZHkKci50b1N0cmluZwpzPUMuUlkucjYocixhLGIsYykKcy50b1N0cmluZwpyPXQu +YWMKcj1uZXcgSC5VNShuZXcgVy5lNyhzKSxyLkMoImEyKGxELkUpIikuYShuZXcgVy5DdigpKSxyLkMo +IlU1PGxELkU+IikpCnJldHVybiB0LmguYShyLmdyOChyKSl9LApyUzpmdW5jdGlvbihhKXt2YXIgcyxy +LHE9ImVsZW1lbnQgdGFnIHVuYXZhaWxhYmxlIgp0cnl7cz1KLllFKGEpCmlmKHR5cGVvZiBzLmducyhh +KT09InN0cmluZyIpcT1zLmducyhhKX1jYXRjaChyKXtILlJ1KHIpfXJldHVybiBxfSwKQzA6ZnVuY3Rp +b24oYSxiKXthPWErYiY1MzY4NzA5MTEKYT1hKygoYSY1MjQyODcpPDwxMCkmNTM2ODcwOTExCnJldHVy +biBhXmE+Pj42fSwKckU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHM9Vy5DMChXLkMwKFcuQzAoVy5DMCgw +LGEpLGIpLGMpLGQpLHI9cysoKHMmNjcxMDg4NjMpPDwzKSY1MzY4NzA5MTEKcl49cj4+PjExCnJldHVy +biByKygociYxNjM4Myk8PDE1KSY1MzY4NzA5MTF9LApUTjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscT1h +LmNsYXNzTGlzdApmb3Iocz1iLmxlbmd0aCxyPTA7cjxiLmxlbmd0aDtiLmxlbmd0aD09PXN8fCgwLEgu +bGspKGIpLCsrcilxLmFkZChiW3JdKX0sCkpFOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHM9Vy5hRihu +ZXcgVy52TihjKSx0LkIpCmlmKHMhPW51bGwmJiEwKUouZFooYSxiLHMsITEpCnJldHVybiBuZXcgVy54 +QyhhLGIscywhMSxlLkMoInhDPDA+IikpfSwKVHc6ZnVuY3Rpb24oYSl7dmFyIHM9Vy5KNihudWxsKSxy +PXdpbmRvdy5sb2NhdGlvbgpzPW5ldyBXLkpRKG5ldyBXLm1rKHMscikpCnMuQ1koYSkKcmV0dXJuIHN9 +LApxRDpmdW5jdGlvbihhLGIsYyxkKXt0LmguYShhKQpILmgoYikKSC5oKGMpCnQuY3IuYShkKQpyZXR1 +cm4hMH0sCm5aOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIscQp0LmguYShhKQpILmgoYikKSC5oKGMp +CnM9dC5jci5hKGQpLmEKcj1zLmEKQy54bi5zTFUocixjKQpxPXIuaG9zdG5hbWUKcz1zLmIKaWYoIShx +PT1zLmhvc3RuYW1lJiZyLnBvcnQ9PXMucG9ydCYmci5wcm90b2NvbD09cy5wcm90b2NvbCkpaWYocT09 +PSIiKWlmKHIucG9ydD09PSIiKXtzPXIucHJvdG9jb2wKcz1zPT09IjoifHxzPT09IiJ9ZWxzZSBzPSEx +CmVsc2Ugcz0hMQplbHNlIHM9ITAKcmV0dXJuIHN9LApCbDpmdW5jdGlvbigpe3ZhciBzPXQuTixyPVAu +dE0oQy5ReCxzKSxxPXQuZDAuYShuZXcgVy5JQSgpKSxwPUguVk0oWyJURU1QTEFURSJdLHQucykKcz1u +ZXcgVy5jdChyLFAuTHMocyksUC5McyhzKSxQLkxzKHMpLG51bGwpCnMuQ1kobnVsbCxuZXcgSC5sSihD +LlF4LHEsdC5maikscCxudWxsKQpyZXR1cm4gc30sCnFjOmZ1bmN0aW9uKGEpe3ZhciBzCmlmKGE9PW51 +bGwpcmV0dXJuIG51bGwKaWYoInBvc3RNZXNzYWdlIiBpbiBhKXtzPVcuUDEoYSkKaWYodC5hUy5iKHMp +KXJldHVybiBzCnJldHVybiBudWxsfWVsc2UgcmV0dXJuIHQuY2guYShhKX0sClAxOmZ1bmN0aW9uKGEp +e2lmKGE9PT13aW5kb3cpcmV0dXJuIHQuY2kuYShhKQplbHNlIHJldHVybiBuZXcgVy5kVygpfSwKYUY6 +ZnVuY3Rpb24oYSxiKXt2YXIgcz0kLlgzCmlmKHM9PT1DLk5VKXJldHVybiBhCnJldHVybiBzLlB5KGEs +Yil9LApxRTpmdW5jdGlvbiBxRSgpe30sCkdoOmZ1bmN0aW9uIEdoKCl7fSwKZlk6ZnVuY3Rpb24gZlko +KXt9LApuQjpmdW5jdGlvbiBuQigpe30sCkF6OmZ1bmN0aW9uIEF6KCl7fSwKUVA6ZnVuY3Rpb24gUVAo +KXt9LApueDpmdW5jdGlvbiBueCgpe30sCm9KOmZ1bmN0aW9uIG9KKCl7fSwKaWQ6ZnVuY3Rpb24gaWQo +KXt9LApRRjpmdW5jdGlvbiBRRigpe30sCk5oOmZ1bmN0aW9uIE5oKCl7fSwKYWU6ZnVuY3Rpb24gYWUo +KXt9LApJQjpmdW5jdGlvbiBJQigpe30sCm43OmZ1bmN0aW9uIG43KCl7fSwKd3o6ZnVuY3Rpb24gd3oo +YSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKY3Y6ZnVuY3Rpb24gY3YoKXt9LApDdjpmdW5jdGlvbiBD +digpe30sCmVhOmZ1bmN0aW9uIGVhKCl7fSwKRDA6ZnVuY3Rpb24gRDAoKXt9LApoSDpmdW5jdGlvbiBo +SCgpe30sCmg0OmZ1bmN0aW9uIGg0KCl7fSwKYnI6ZnVuY3Rpb24gYnIoKXt9LApWYjpmdW5jdGlvbiBW +Yigpe30sCmZKOmZ1bmN0aW9uIGZKKCl7fSwKd2E6ZnVuY3Rpb24gd2EoKXt9LApTZzpmdW5jdGlvbiBT +Zygpe30sCnc3OmZ1bmN0aW9uIHc3KCl7fSwKQWo6ZnVuY3Rpb24gQWooKXt9LAplNzpmdW5jdGlvbiBl +NyhhKXt0aGlzLmE9YX0sCnVIOmZ1bmN0aW9uIHVIKCl7fSwKQkg6ZnVuY3Rpb24gQkgoKXt9LApTTjpm +dW5jdGlvbiBTTigpe30sCmV3OmZ1bmN0aW9uIGV3KCl7fSwKbHA6ZnVuY3Rpb24gbHAoKXt9LApUYjpm +dW5jdGlvbiBUYigpe30sCkl2OmZ1bmN0aW9uIEl2KCl7fSwKV1A6ZnVuY3Rpb24gV1AoKXt9LAp5WTpm +dW5jdGlvbiB5WSgpe30sCnc2OmZ1bmN0aW9uIHc2KCl7fSwKSzU6ZnVuY3Rpb24gSzUoKXt9LApDbTpm +dW5jdGlvbiBDbSgpe30sCkNROmZ1bmN0aW9uIENRKCl7fSwKdzQ6ZnVuY3Rpb24gdzQoKXt9LApyaDpm +dW5jdGlvbiByaCgpe30sCmNmOmZ1bmN0aW9uIGNmKCl7fSwKaTc6ZnVuY3Rpb24gaTcoYSl7dGhpcy5h +PWF9LApTeTpmdW5jdGlvbiBTeShhKXt0aGlzLmE9YX0sCktTOmZ1bmN0aW9uIEtTKGEsYil7dGhpcy5h +PWEKdGhpcy5iPWJ9LApBMzpmdW5jdGlvbiBBMyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSTQ6ZnVu +Y3Rpb24gSTQoYSl7dGhpcy5hPWF9LApGazpmdW5jdGlvbiBGayhhLGIpe3RoaXMuYT1hCnRoaXMuJHRp +PWJ9LApSTzpmdW5jdGlvbiBSTyhhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8u +JHRpPWR9LApldTpmdW5jdGlvbiBldShhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1j +Cl8uJHRpPWR9LAp4QzpmdW5jdGlvbiB4QyhhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5iPWEKXy5jPWIK +Xy5kPWMKXy5lPWQKXy4kdGk9ZX0sCnZOOmZ1bmN0aW9uIHZOKGEpe3RoaXMuYT1hfSwKSlE6ZnVuY3Rp +b24gSlEoYSl7dGhpcy5hPWF9LApHbTpmdW5jdGlvbiBHbSgpe30sCnZEOmZ1bmN0aW9uIHZEKGEpe3Ro +aXMuYT1hfSwKVXY6ZnVuY3Rpb24gVXYoYSl7dGhpcy5hPWF9LApFZzpmdW5jdGlvbiBFZyhhLGIsYyl7 +dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAptNjpmdW5jdGlvbiBtNigpe30sCkVvOmZ1bmN0aW9u +IEVvKCl7fSwKV2s6ZnVuY3Rpb24gV2soKXt9LApjdDpmdW5jdGlvbiBjdChhLGIsYyxkLGUpe3ZhciBf +PXRoaXMKXy5lPWEKXy5hPWIKXy5iPWMKXy5jPWQKXy5kPWV9LApJQTpmdW5jdGlvbiBJQSgpe30sCk93 +OmZ1bmN0aW9uIE93KCl7fSwKVzk6ZnVuY3Rpb24gVzkoYSxiLGMpe3ZhciBfPXRoaXMKXy5hPWEKXy5i +PWIKXy5jPS0xCl8uZD1udWxsCl8uJHRpPWN9LApkVzpmdW5jdGlvbiBkVygpe30sCm1rOmZ1bmN0aW9u +IG1rKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApLbzpmdW5jdGlvbiBLbyhhKXt0aGlzLmE9YQp0aGlz +LmI9ITF9LApmbTpmdW5jdGlvbiBmbShhKXt0aGlzLmE9YX0sCkxlOmZ1bmN0aW9uIExlKCl7fSwKSzc6 +ZnVuY3Rpb24gSzcoKXt9LApyQjpmdW5jdGlvbiByQigpe30sClhXOmZ1bmN0aW9uIFhXKCl7fSwKb2E6 +ZnVuY3Rpb24gb2EoKXt9fSxVPXsKamY6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAKaWYoYT09bnVsbClz +PW51bGwKZWxzZXtzPUguVk0oW10sdC5kNykKZm9yKHI9Si5JVCh0LlUuYShhKSk7ci5GKCk7KXtxPXIu +Z2woKQpwPUouVTYocSkKcy5wdXNoKG5ldyBVLlNlKEguaChwLnEocSwiZGVzY3JpcHRpb24iKSksSC5o +KHAucShxLCJocmVmIikpKSl9fXJldHVybiBzfSwKTmQ6ZnVuY3Rpb24oYSl7dmFyIHMscgppZihhPT1u +dWxsKXM9bnVsbAplbHNle3M9SC5WTShbXSx0LmFBKQpmb3Iocj1KLklUKHQuVS5hKGEpKTtyLkYoKTsp +cy5wdXNoKFUuTmYoci5nbCgpKSl9cmV0dXJuIHN9LApOZjpmdW5jdGlvbihhKXt2YXIgcz1KLlU2KGEp +LHI9SC5oKHMucShhLCJkZXNjcmlwdGlvbiIpKSxxPUguVk0oW10sdC5hSikKZm9yKHM9Si5JVCh0LlUu +YShzLnEoYSwiZW50cmllcyIpKSk7cy5GKCk7KXEucHVzaChVLlJqKHMuZ2woKSkpCnJldHVybiBuZXcg +VS55RChyLHEpfSwKUmo6ZnVuY3Rpb24oYSl7dmFyIHMscj1KLlU2KGEpLHE9SC5oKHIucShhLCJkZXNj +cmlwdGlvbiIpKSxwPUguaChyLnEoYSwiZnVuY3Rpb24iKSksbz1yLnEoYSwibGluayIpCmlmKG89PW51 +bGwpbz1udWxsCmVsc2V7cz1KLlU2KG8pCm89bmV3IFUuTWwoSC5oKHMucShvLCJocmVmIikpLEgudVAo +cy5xKG8sImxpbmUiKSksSC5oKHMucShvLCJwYXRoIikpKX1yPXQuZksuYShyLnEoYSwiaGludEFjdGlv +bnMiKSkKcj1yPT1udWxsP251bGw6Si5NMShyLG5ldyBVLmFOKCksdC5hWCkKcj1yPT1udWxsP251bGw6 +ci5icigwKQpyZXR1cm4gbmV3IFUud2IocSxwLG8scj09bnVsbD9DLmRuOnIpfSwKZDI6ZnVuY3Rpb24g +ZDIoYSxiLGMsZCxlLGYpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5m +PWZ9LApTZTpmdW5jdGlvbiBTZShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKTWw6ZnVuY3Rpb24gTWwo +YSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKeUQ6ZnVuY3Rpb24geUQoYSxiKXt0aGlz +LmE9YQp0aGlzLmI9Yn0sCndiOmZ1bmN0aW9uIHdiKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5i +PWIKXy5jPWMKXy5kPWR9LAphTjpmdW5jdGlvbiBhTigpe30sCmIwOmZ1bmN0aW9uIGIwKCl7fX0sQj17 +CndSOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCLnFwKCIiLCIiLCIiLEMuRHgpfSwKWWY6ZnVuY3Rpb24o +YSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPUguaChhLnEoMCwicmVnaW9ucyIpKSxqPUguaChhLnEoMCwi +bmF2aWdhdGlvbkNvbnRlbnQiKSksaT1ILmgoYS5xKDAsInNvdXJjZUNvZGUiKSksaD1QLkZsKHQuWCx0 +LmRfKQpmb3Iocz10LnQuYShhLnEoMCwiZWRpdHMiKSkscz1zLmdQdShzKSxzPXMuZ20ocykscj10LlUs +cT10Lmg0O3MuRigpOyl7cD1zLmdsKCkKbz1wLmEKbj1ILlZNKFtdLHEpCmZvcihwPUouSVQoci5hKHAu +YikpO3AuRigpOyl7bT1wLmdsKCkKbD1KLlU2KG0pCm4ucHVzaChuZXcgQi5qOChILnVQKGwucShtLCJs +aW5lIikpLEguaChsLnEobSwiZXhwbGFuYXRpb24iKSksSC51UChsLnEobSwib2Zmc2V0IikpKSl9aC5Z +NSgwLG8sbil9cmV0dXJuIG5ldyBCLnFwKGssaixpLGgpfSwKajg6ZnVuY3Rpb24gajgoYSxiLGMpe3Ro +aXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKcXA6ZnVuY3Rpb24gcXAoYSxiLGMsZCl7dmFyIF89dGhp +cwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZH0sCmZ2OmZ1bmN0aW9uIGZ2KCl7fSwKT1M6ZnVuY3Rpb24o +YSl7dmFyIHMKaWYoIShhPj02NSYmYTw9OTApKXM9YT49OTcmJmE8PTEyMgplbHNlIHM9ITAKcmV0dXJu +IHN9LApZdTpmdW5jdGlvbihhLGIpe3ZhciBzPWEubGVuZ3RoLHI9YisyCmlmKHM8cilyZXR1cm4hMQpp +ZighQi5PUyhDLnhCLk8oYSxiKSkpcmV0dXJuITEKaWYoQy54Qi5PKGEsYisxKSE9PTU4KXJldHVybiEx +CmlmKHM9PT1yKXJldHVybiEwCnJldHVybiBDLnhCLk8oYSxyKT09PTQ3fX0sVD17bVE6ZnVuY3Rpb24g +bVEoKXt9fSxMPXsKSXE6ZnVuY3Rpb24oKXtDLkJaLkIoZG9jdW1lbnQsIkRPTUNvbnRlbnRMb2FkZWQi +LG5ldyBMLmUoKSkKQy5vbC5CKHdpbmRvdywicG9wc3RhdGUiLG5ldyBMLkwoKSl9LAprejpmdW5jdGlv +bihhKXt2YXIgcyxyPXQuZy5hKGEucGFyZW50Tm9kZSkucXVlcnlTZWxlY3RvcigiOnNjb3BlID4gdWwi +KSxxPXIuc3R5bGUscD0iIitDLkNELnpRKHIub2Zmc2V0SGVpZ2h0KSoyKyJweCIKcS5tYXhIZWlnaHQ9 +cApxPUoucUYoYSkKcD1xLiR0aQpzPXAuQygifigxKT8iKS5hKG5ldyBMLld4KHIsYSkpCnQuWi5hKG51 +bGwpClcuSkUocS5hLHEuYixzLCExLHAuYyl9LAp5WDpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8s +bixtPSJxdWVyeVNlbGVjdG9yQWxsIixsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYSksaz10LmcKbC50 +b1N0cmluZwpzPXQuaApILkRoKGsscywiVCIsbSkKcj10LlIKcT1uZXcgVy53eihsLnF1ZXJ5U2VsZWN0 +b3JBbGwoIi5uYXYtbGluayIpLHIpCnEuSyhxLG5ldyBMLkFPKGIpKQpILkRoKGsscywiVCIsbSkKcD1u +ZXcgVy53eihsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZWdpb24iKSxyKQppZighcC5nbDAocCkpe289bC5x +dWVyeVNlbGVjdG9yKCJ0YWJsZVtkYXRhLXBhdGhdIikKby50b1N0cmluZwpwLksocCxuZXcgTC5Ibyhv +LmdldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KG8pKS5PVSgicGF0aCIpKSkpfUgu +RGgoayxzLCJUIixtKQpuPW5ldyBXLnd6KGwucXVlcnlTZWxlY3RvckFsbCgiLmFkZC1oaW50LWxpbmsi +KSxyKQpuLksobixuZXcgTC5JQygpKX0sClE2OmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1uZXcgWE1MSHR0 +cFJlcXVlc3QoKQpDLkR0LmVvKHMsIkdFVCIsTC5RNChhLGIpLCEwKQpzLnNldFJlcXVlc3RIZWFkZXIo +IkNvbnRlbnQtVHlwZSIsImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgiKQpyZXR1cm4gTC5M +VShzLG51bGwsYy5DKCIwKiIpKX0sCnR5OmZ1bmN0aW9uKGEsYil7dmFyIHM9bmV3IFhNTEh0dHBSZXF1 +ZXN0KCkscj10LlgKQy5EdC5lbyhzLCJQT1NUIixMLlE0KGEsUC5GbChyLHIpKSwhMCkKcy5zZXRSZXF1 +ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04IikK +cmV0dXJuIEwuTFUocyxiLHQudCl9LApMVTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIEwuVGcoYSxiLGMs +Yy5DKCIwKiIpKX0sClRnOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzPTAscj1QLkZYKGQpLHEscD0yLG8s +bj1bXSxtLGwsayxqLGksaCxnLGYsZQp2YXIgJGFzeW5jJExVPVAubHooZnVuY3Rpb24oYTAsYTEpe2lm +KGEwPT09MSl7bz1hMQpzPXB9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOmg9bmV3IFAuWmYobmV3 +IFAudnMoJC5YMyx0LmdWKSx0LmJDKQpnPXQuZWIKZj1nLmEobmV3IEwuZkMoaCxhKSkKdC5aLmEobnVs +bCkKaz10LmVRClcuSkUoYSwibG9hZCIsZiwhMSxrKQpXLkpFKGEsImVycm9yIixnLmEoaC5nWUooKSks +ITEsaykKYS5zZW5kKGI9PW51bGw/bnVsbDpDLkN0Lk9CKGIsbnVsbCkpCnA9NApzPTcKcmV0dXJuIFAu +alEoaC5hLCRhc3luYyRMVSkKY2FzZSA3OnA9MgpzPTYKYnJlYWsKY2FzZSA0OnA9MwplPW8KSC5SdShl +KQptPUgudHMoZSkKZz1hLnJlYWR5U3RhdGUKaWYoZz09PTQmJmEuc3RhdHVzPT09MCl0aHJvdyBILmIo +TC5URygiRXJyb3IgcmVhY2hpbmcgbWlncmF0aW9uIHByZXZpZXcgc2VydmVyIiwiVGhpcyB1c3VhbGx5 +IGhhcHBlbnMgYmVjYXVzZSB0aGUgbWlncmF0aW9uIHByZXZpZXcgc2VydmVyIGhhcyBleGl0ZWQuICBG +b3JcbmV4YW1wbGUgaXQgbWF5IGhhdmUgYmVlbiBhYm9ydGVkIHdpdGggQ3RybC1DLCBvciB5b3UgbWF5 +IGhhdmUgY29tcGxldGVkIHRoaXNcbm1pZ3JhdGlvbiwgb3IgYW4gZXhjZXB0aW9uIG1heSBoYXZlIG9j +Y3VycmVkLiAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIHdoZXJlXG55b3UgaW52b2tlZCBgZGFydCBt +aWdyYXRlYCB0byB2ZXJpZnkgdGhhdCB0aGUgcHJldmlldyBzZXJ2ZXIgaXMgc3RpbGwgcnVubmluZy5c +biIpKQplbHNle2w9bmV3IEgubEooSC5WTShbInJlYWR5U3RhdGU9IitILkVqKGcpLCJyZXNwb25zZVRl +eHQ9IitDLkN0Lk9CKGEucmVzcG9uc2VUZXh0LG51bGwpLCJyZXNwb25zZVR5cGU9IitDLkN0Lk9CKGEu +cmVzcG9uc2VUeXBlLG51bGwpLCJyZXNwb25zZVVybD0iK0MuQ3QuT0IoYS5yZXNwb25zZVVSTCxudWxs +KSwic3RhdHVzPSIrSC5FaihhLnN0YXR1cyksInN0YXR1c1RleHQ9IitDLkN0Lk9CKGEuc3RhdHVzVGV4 +dCxudWxsKV0sdC5pKSx0LmVxLmEobmV3IEwuVG0oKSksdC5mUCkuaygwLCIsICIpCnRocm93IEguYihQ +LlRsKCJFcnJvciByZWFjaGluZyBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXI6ICIrSC5FaihsKSxtKSl9 +cz02CmJyZWFrCmNhc2UgMzpzPTIKYnJlYWsKY2FzZSA2OmlmKGEuc3RhdHVzPT09NDAxKXRocm93IEgu +YihMLlRHKCJVbmF1dGhvcml6ZWQgcmVzcG9uc2UgZnJvbSBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIi +LCJUaGUgbWlncmF0aW9uIHByZXZpZXcgc2VydmVyIGhhcyBkZXRlY3RlZCBhIG1pc21hdGNoIGJldHdl +ZW4gdGhlIGF1dGhUb2tlbiBpblxueW91ciBVUkwgYW5kIHRoZSB0b2tlbiB0aGF0IHdhcyBnZW5lcmF0 +ZWQgYXQgdGhlIHRpbWUgdGhhdCBgZGFydCBtaWdyYXRlYCB3YXNcbnJ1bi4gIEhhdmUgeW91IHJlc3Rh +cnRlZCB0aGUgbWlncmF0aW9uIHNlcnZlciByZWNlbnRseT8gIElmIHNvLCB5b3UnbGwgbmVlZCB0b1xu +Y2hlY2sgaXRzIG91dHB1dCBmb3IgYSBmcmVzaCBVUkwsIGFuZCB1c2UgdGhhdCBVUkwgdG8gcGVyZm9y +bSB5b3VyIG1pZ3JhdGlvbi5cbiIpKQppPUMuQ3QucFcoMCxhLnJlc3BvbnNlVGV4dCxudWxsKQppZihh +LnN0YXR1cz09PTIwMCl7cT1jLkMoIjAqIikuYShpKQpzPTEKYnJlYWt9ZWxzZSB0aHJvdyBILmIoaSkK +Y2FzZSAxOnJldHVybiBQLnlDKHEscikKY2FzZSAyOnJldHVybiBQLmYzKG8scil9fSkKcmV0dXJuIFAu +REkoJGFzeW5jJExVLHIpfSwKYUs6ZnVuY3Rpb24oYSl7dmFyIHM9UC5oSyhhKS5naFkoKS5xKDAsImxp +bmUiKQpyZXR1cm4gcz09bnVsbD9udWxsOkguSHAocyxudWxsKX0sCkc2OmZ1bmN0aW9uKGEpe3ZhciBz +PVAuaEsoYSkuZ2hZKCkucSgwLCJvZmZzZXQiKQpyZXR1cm4gcz09bnVsbD9udWxsOkguSHAocyxudWxs +KX0sCmk2OmZ1bmN0aW9uKGEpe3JldHVybiBMLm5XKHQuTy5hKGEpKX0sCm5XOmZ1bmN0aW9uKGEpe3Zh +ciBzPTAscj1QLkZYKHQueikscT0xLHAsbz1bXSxuLG0sbCxrLGosaSxoCnZhciAkYXN5bmMkaTY9UC5s +eihmdW5jdGlvbihiLGMpe2lmKGI9PT0xKXtwPWMKcz1xfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2Ug +MDppPXQuZy5hKFcucWMoYS5jdXJyZW50VGFyZ2V0KSkuZ2V0QXR0cmlidXRlKCJocmVmIikKYS5wcmV2 +ZW50RGVmYXVsdCgpCnE9MwprPWRvY3VtZW50Cm49Qy5DRC56UShrLnF1ZXJ5U2VsZWN0b3IoIi5jb250 +ZW50Iikuc2Nyb2xsVG9wKQpzPTYKcmV0dXJuIFAualEoTC50eShpLG51bGwpLCRhc3luYyRpNikKY2Fz +ZSA2OnM9NwpyZXR1cm4gUC5qUShMLkc3KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxudWxsLG51bGws +ITEsbnVsbCksJGFzeW5jJGk2KQpjYXNlIDc6az1rLnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50IikKay50 +b1N0cmluZwprLnNjcm9sbFRvcD1KLlZ1KG4pCnE9MQpzPTUKYnJlYWsKY2FzZSAzOnE9MgpoPXAKbT1I +LlJ1KGgpCmw9SC50cyhoKQpMLkMyKCJjb3VsZG4ndCBhZGQvcmVtb3ZlIGhpbnQiLG0sbCkKcz01CmJy +ZWFrCmNhc2UgMjpzPTEKYnJlYWsKY2FzZSA1OnJldHVybiBQLnlDKG51bGwscikKY2FzZSAxOnJldHVy +biBQLmYzKHAscil9fSkKcmV0dXJuIFAuREkoJGFzeW5jJGk2LHIpfSwKQzI6ZnVuY3Rpb24oYSxiLGMp +e3ZhciBzLHIscSxwLG8sbj0iZXhjZXB0aW9uIixtPSJzdGFja1RyYWNlIgppZih0LnQuYihiKSYmSi5S +TShiLnEoMCwic3VjY2VzcyIpLCExKSYmYi54NChuKSYmYi54NChtKSl7cz1KLlU2KGIpCnI9SC5oKHMu +cShiLG4pKQpjPXMucShiLG0pCnE9bnVsbH1lbHNlIGlmKGIgaW5zdGFuY2VvZiBMLlFXKXtyPWIuYQpx +PWIuYn1lbHNle3I9Si5qKGIpCnE9bnVsbH1pZihxPT1udWxsKXE9YwpzPWRvY3VtZW50CnA9cy5xdWVy +eVNlbGVjdG9yKCIucG9wdXAtcGFuZSIpCnAucXVlcnlTZWxlY3RvcigiaDIiKS5pbm5lclRleHQ9YQpw +LnF1ZXJ5U2VsZWN0b3IoInAiKS5pbm5lclRleHQ9cgpwLnF1ZXJ5U2VsZWN0b3IoInByZSIpLmlubmVy +VGV4dD1KLmoocSkKbz10LmRkLmEocC5xdWVyeVNlbGVjdG9yKCJhLmJvdHRvbSIpKTsobyYmQy54biku +c0xVKG8sUC5YZCgiaHR0cHMiLCJnaXRodWIuY29tIiwiZGFydC1sYW5nL3Nkay9pc3N1ZXMvbmV3IixQ +LkVGKFsidGl0bGUiLCJDdXN0b21lci1yZXBvcnRlZCBpc3N1ZSB3aXRoIE5OQkQgbWlncmF0aW9uIHRv +b2w6ICIrYSwibGFiZWxzIix1LmQsImJvZHkiLGErIlxuXG5FcnJvcjogIitILkVqKHIpKyJcblxuUGxl +YXNlIGZpbGwgaW4gdGhlIGZvbGxvd2luZzpcblxuKipOYW1lIG9mIHBhY2thZ2UgYmVpbmcgbWlncmF0 +ZWQgKGlmIHB1YmxpYykqKjpcbioqV2hhdCBJIHdhcyBkb2luZyB3aGVuIHRoaXMgaXNzdWUgb2NjdXJy +ZWQqKjpcbioqSXMgaXQgcG9zc2libGUgdG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZSoqOlxuKipIYXMg +dGhpcyBpc3N1ZSBoYXBwZW5lZCBiZWZvcmUsIGFuZCBpZiBzbywgaG93IG9mdGVuKio6XG4qKkRhcnQg +U0RLIHZlcnNpb24qKjogIitILkVqKHMuZ2V0RWxlbWVudEJ5SWQoInNkay12ZXJzaW9uIikudGV4dENv +bnRlbnQpKyJcbioqQWRkaXRpb25hbCBkZXRhaWxzKio6XG5cblRoYW5rcyBmb3IgZmlsaW5nIVxuXG5T +dGFja3RyYWNlOiBfYXV0byBwb3B1bGF0ZWQgYnkgbWlncmF0aW9uIHByZXZpZXcgdG9vbC5fXG5cbmBg +YFxuIitILkVqKGMpKyJcbmBgYFxuIl0sdC5YLHQueikpLmduRCgpKQpzPW8uc3R5bGUKcy5kaXNwbGF5 +PSJpbml0aWFsIgpzPXAuc3R5bGUKcy5kaXNwbGF5PSJpbml0aWFsIgpzPWErIjogIitILkVqKGIpCndp +bmRvdwppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUuZXJyb3IocykK +d2luZG93CnM9SC5FaihjKQppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNv +bGUuZXJyb3Iocyl9LAp0MjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG89dC5nLmEoVy5xYyhhLmN1 +cnJlbnRUYXJnZXQpKQphLnByZXZlbnREZWZhdWx0KCkKcz1vLmdldEF0dHJpYnV0ZSgiaHJlZiIpCnI9 +TC5VcyhzKQpxPUwuRzYocykKcD1MLmFLKHMpCmlmKHEhPW51bGwpTC5hZihyLHEscCxiLG5ldyBMLm5U +KHIscSxwKSkKZWxzZSBMLmFmKHIsbnVsbCxudWxsLGIsbmV3IEwuTlkocikpfSwKSzA6ZnVuY3Rpb24o +YSl7dmFyIHMscixxLHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUiKQpwLnF1ZXJ5 +U2VsZWN0b3IoImgyIikuaW5uZXJUZXh0PSJGYWlsZWQgdG8gcmVydW4gZnJvbSBzb3VyY2VzIgpwLnF1 +ZXJ5U2VsZWN0b3IoInAiKS5pbm5lclRleHQ9IlNvdXJjZXMgY29udGFpbiBzdGF0aWMgYW5hbHlzaXMg +ZXJyb3JzOiIKcz1wLnF1ZXJ5U2VsZWN0b3IoInByZSIpCnI9Si5FbChhLHQuYXcpCnE9SC5MaChyKQpz +LmlubmVyVGV4dD1uZXcgSC5sSihyLHEuQygicVUqKGxELkUpIikuYShuZXcgTC51ZSgpKSxxLkMoImxK +PGxELkUscVUqPiIpKS5rKDAsIlxuIikKcT1wLnF1ZXJ5U2VsZWN0b3IoImEuYm90dG9tIikuc3R5bGUK +cS5kaXNwbGF5PSJub25lIgpzPXAuc3R5bGUKcy5kaXNwbGF5PSJpbml0aWFsIn0sCnZVOmZ1bmN0aW9u +KCl7dmFyIHM9ZG9jdW1lbnQKSC5EaCh0LmcsdC5oLCJUIiwicXVlcnlTZWxlY3RvckFsbCIpCnM9bmV3 +IFcud3oocy5xdWVyeVNlbGVjdG9yQWxsKCIuY29kZSIpLHQuUikKcy5LKHMsbmV3IEwuZVgoKSl9LApo +WDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIEwuWXcoYSxiLGMpfSwKWXc6ZnVuY3Rpb24oYSxiLGMpe3Zh +ciBzPTAscj1QLkZYKHQueikscT0xLHAsbz1bXSxuLG0sbCxrLGosaSxoLGcKdmFyICRhc3luYyRoWD1Q +Lmx6KGZ1bmN0aW9uKGQsZSl7aWYoZD09PTEpe3A9ZQpzPXF9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2Fz +ZSAwOnE9MwpqPXQuWApzPTYKcmV0dXJuIFAualEoTC5RNihhLFAuRUYoWyJyZWdpb24iLCJyZWdpb24i +LCJvZmZzZXQiLEguRWooYildLGosaiksdC50KSwkYXN5bmMkaFgpCmNhc2UgNjpuPWUKaj1uCmk9Si5V +NihqKQptPW5ldyBVLmQyKFUuamYoaS5xKGosImVkaXRzIikpLEguaChpLnEoaiwiZXhwbGFuYXRpb24i +KSksSC51UChpLnEoaiwibGluZSIpKSxILmgoaS5xKGosImRpc3BsYXlQYXRoIikpLEguaChpLnEoaiwi +dXJpUGF0aCIpKSxVLk5kKGkucShqLCJ0cmFjZXMiKSkpCkwuVDEobSkKTC5GcihhLGIsYykKTC55WCgi +LmVkaXQtcGFuZWwgLnBhbmVsLWNvbnRlbnQiLCExKQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKZz1w +Cmw9SC5SdShnKQprPUgudHMoZykKTC5DMigiY291bGRuJ3QgbG9hZCBlZGl0IGRldGFpbHMiLGwsaykK +cz01CmJyZWFrCmNhc2UgMjpzPTEKYnJlYWsKY2FzZSA1OnJldHVybiBQLnlDKG51bGwscikKY2FzZSAx +OnJldHVybiBQLmYzKHAscil9fSkKcmV0dXJuIFAuREkoJGFzeW5jJGhYLHIpfSwKRzc6ZnVuY3Rpb24o +YSxiLGMsZCxlKXtyZXR1cm4gTC5MNShhLGIsYyxkLGUpfSwKTDU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2 +YXIgcz0wLHI9UC5GWCh0LkgpLHEscD0yLG8sbj1bXSxtLGwsayxqLGksaCxnCnZhciAkYXN5bmMkRzc9 +UC5seihmdW5jdGlvbihmLGEwKXtpZihmPT09MSl7bz1hMApzPXB9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7 +Y2FzZSAwOmlmKCFKLnA0KGEsIi5kYXJ0Iikpe0wuQkUoYSxCLndSKCksZCkKTC5CWChhLG51bGwpCmlm +KGUhPW51bGwpZS4kMCgpCnM9MQpicmVha31wPTQKaT10LlgKcz03CnJldHVybiBQLmpRKEwuUTYoYSxQ +LkVGKFsiaW5saW5lIiwidHJ1ZSJdLGksaSksdC50KSwkYXN5bmMkRzcpCmNhc2UgNzptPWEwCkwuQkUo +YSxCLllmKG0pLGQpCkwuZkcoYixjKQpsPUwuVXMoYSkKTC5CWChsLGIpCmlmKGUhPW51bGwpZS4kMCgp +CnA9MgpzPTYKYnJlYWsKY2FzZSA0OnA9MwpnPW8Kaz1ILlJ1KGcpCmo9SC50cyhnKQpMLkMyKCJjb3Vs +ZG4ndCBsb2FkIGRhcnQgZmlsZSAiK2EsayxqKQpzPTYKYnJlYWsKY2FzZSAzOnM9MgpicmVhawpjYXNl +IDY6Y2FzZSAxOnJldHVybiBQLnlDKHEscikKY2FzZSAyOnJldHVybiBQLmYzKG8scil9fSkKcmV0dXJu +IFAuREkoJGFzeW5jJEc3LHIpfSwKR2U6ZnVuY3Rpb24oKXt2YXIgcz0wLHI9UC5GWCh0LnopLHE9MSxw +LG89W10sbixtLGwsayxqLGksaCxnCnZhciAkYXN5bmMkR2U9UC5seihmdW5jdGlvbihhLGIpe2lmKGE9 +PT0xKXtwPWIKcz1xfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpoPSIvX3ByZXZpZXcvbmF2aWdh +dGlvblRyZWUuanNvbiIKcT0zCnM9NgpyZXR1cm4gUC5qUShMLlE2KGgsQy5DTSx0LmVFKSwkYXN5bmMk +R2UpCmNhc2UgNjpuPWIKbT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubmF2LXRyZWUiKQpKLmw1KG0s +IiIpCmo9TC5tSyhuKQokLklSPWoKTC50WChtLGosITApCnE9MQpzPTUKYnJlYWsKY2FzZSAzOnE9Mgpn +PXAKbD1ILlJ1KGcpCms9SC50cyhnKQpMLkMyKCJjb3VsZG4ndCBsb2FkIG5hdmlnYXRpb24gdHJlZSIs +bCxrKQpzPTUKYnJlYWsKY2FzZSAyOnM9MQpicmVhawpjYXNlIDU6cmV0dXJuIFAueUMobnVsbCxyKQpj +YXNlIDE6cmV0dXJuIFAuZjMocCxyKX19KQpyZXR1cm4gUC5ESSgkYXN5bmMkR2Uscil9LApxTzpmdW5j +dGlvbihhKXt2YXIgcyxyPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscT1DLkNELnpRKCQuZmkoKS5v +ZmZzZXRIZWlnaHQpLHA9d2luZG93LmlubmVySGVpZ2h0LG89Qy5DRC56USgkLkRXKCkub2Zmc2V0SGVp +Z2h0KQppZih0eXBlb2YgcCE9PSJudW1iZXIiKXJldHVybiBwLkhOKCkKcz1yLmJvdHRvbQpzLnRvU3Ry +aW5nCmlmKHM+cC0obysxNCkpSi5kaChhKQplbHNle3A9ci50b3AKcC50b1N0cmluZwppZihwPHErMTQp +Si5kaChhKX19LApmRzpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8KaWYoYSE9bnVsbCl7cz1kb2N1 +bWVudApyPXMuZ2V0RWxlbWVudEJ5SWQoIm8iK0guRWooYSkpCnE9cy5xdWVyeVNlbGVjdG9yKCIubGlu +ZS0iK0guRWooYikpCmlmKHIhPW51bGwpe0wucU8ocikKSi5kUihyKS5pKDAsInRhcmdldCIpfWVsc2Ug +aWYocSE9bnVsbClMLnFPKHEucGFyZW50RWxlbWVudCkKaWYocSE9bnVsbClKLmRSKHQuZy5hKHEucGFy +ZW50Tm9kZSkpLmkoMCwiaGlnaGxpZ2h0Iil9ZWxzZXtzPWRvY3VtZW50CnA9dC5nCkguRGgocCx0Lmgs +IlQiLCJxdWVyeVNlbGVjdG9yQWxsIikKcz1zLnF1ZXJ5U2VsZWN0b3JBbGwoIi5saW5lLW5vIikKbz1u +ZXcgVy53eihzLHQuUikKaWYoby5nQShvKT09PTApcmV0dXJuCkwucU8ocC5hKEMudDUuZ3RIKHMpKSl9 +fSwKYWY6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgcyxyLHE9TC5HNih3aW5kb3cubG9jYXRpb24uaHJl +ZikscD1MLmFLKHdpbmRvdy5sb2NhdGlvbi5ocmVmKQppZihxIT1udWxsKXtzPWRvY3VtZW50LmdldEVs +ZW1lbnRCeUlkKCJvIitILkVqKHEpKQppZihzIT1udWxsKUouZFIocykuUigwLCJ0YXJnZXQiKX1pZihw +IT1udWxsKXtyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5saW5lLSIrSC5FaihwKSkKaWYociE9bnVs +bClKLmRSKHIucGFyZW50RWxlbWVudCkuUigwLCJoaWdobGlnaHQiKX1pZihhPT13aW5kb3cubG9jYXRp +b24ucGF0aG5hbWUpe0wuZkcoYixjKQplLiQwKCl9ZWxzZSBMLkc3KGEsYixjLGQsZSl9LApRNDpmdW5j +dGlvbihhLGIpe3ZhciBzLHIscT1QLmhLKGEpLHA9dC5YCnA9UC5GbChwLHApCmZvcihzPXEuZ2hZKCks +cz1zLmdQdShzKSxzPXMuZ20ocyk7cy5GKCk7KXtyPXMuZ2woKQpwLlk1KDAsci5hLHIuYil9Zm9yKHM9 +Yi5nUHUoYikscz1zLmdtKHMpO3MuRigpOyl7cj1zLmdsKCkKcC5ZNSgwLHIuYSxyLmIpfXAuWTUoMCwi +YXV0aFRva2VuIiwkLlVFKCkpCnJldHVybiBxLm5tKDAscCkuZ25EKCl9LApUMTpmdW5jdGlvbihhKXt2 +YXIgcyxyLHEscCxvLG4sbSxsLGssaj0kLmhMKCkKSi5sNShqLCIiKQppZihhPT1udWxsKXtzPWRvY3Vt +ZW50LmNyZWF0ZUVsZW1lbnQoInAiKQpDLkx0LnNhNChzLCJTZWUgZGV0YWlscyBhYm91dCBhIHByb3Bv +c2VkIGVkaXQuIikKQy5MdC5zUChzLEguVk0oWyJwbGFjZWhvbGRlciJdLHQuaSkpCmouYXBwZW5kQ2hp +bGQocykKQy5MdC5GRihzKQpyZXR1cm59cj1hLmQKcT0kLm5VKCkKcD1xLnpmKHIpCm89YS5iCm49ZG9j +dW1lbnQKbT1xLkhQKHIsSi5UMChuLnF1ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQpKQps +PWEuYwprPW4uY3JlYXRlRWxlbWVudCgicCIpCmouYXBwZW5kQ2hpbGQoaykKay5hcHBlbmRDaGlsZChu +LmNyZWF0ZVRleHROb2RlKEguRWoobykrIiBhdCAiKSkKcT10LlgKcT1XLko2KEwuUTQoYS5lLFAuRUYo +WyJsaW5lIixKLmoobCldLHEscSkpKQpxLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUoSC5Faiht +KSsiOiIrSC5FaihsKSsiLiIpKQprLmFwcGVuZENoaWxkKHEpCkouZGgoaykKTC5DQyhhLGoscCkKTC5G +eihhLGopfSwKTEg6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYs +ZT0kLnlQKCkKSi5sNShlLCIiKQppZihiLmdBKGIpPT09MCl7cz1kb2N1bWVudApyPXMuY3JlYXRlRWxl +bWVudCgicCIpCmUuYXBwZW5kQ2hpbGQocikKci5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKCJO +byBwcm9wb3NlZCBlZGl0cyIpKX1lbHNlIGZvcihlPWIuZ1B1KGIpLGU9ZS5nbShlKSxzPXQuWCxxPXQu +ayxwPXEuQygifigxKT8iKSxvPXQuWixxPXEuYztlLkYoKTspe249ZS5nbCgpCm09ZG9jdW1lbnQKcj1t +LmNyZWF0ZUVsZW1lbnQoInAiKQpsPSQueVAoKQpsLmFwcGVuZENoaWxkKHIpCnIuYXBwZW5kQ2hpbGQo +bS5jcmVhdGVUZXh0Tm9kZShILkVqKG4uYSkrIjoiKSkKaz1tLmNyZWF0ZUVsZW1lbnQoInVsIikKbC5h +cHBlbmRDaGlsZChrKQpmb3Iobj1KLklUKG4uYik7bi5GKCk7KXtsPW4uZ2woKQpqPW0uY3JlYXRlRWxl +bWVudCgibGkiKQprLmFwcGVuZENoaWxkKGopCkouZFIoaikuaSgwLCJlZGl0IikKaT1tLmNyZWF0ZUVs +ZW1lbnQoImEiKQpqLmFwcGVuZENoaWxkKGkpCmkuY2xhc3NMaXN0LmFkZCgiZWRpdC1saW5rIikKaD1s +LmMKZz1ILkVqKGgpCmkuc2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcuaTcoaSkpLk9V +KCJvZmZzZXQiKSxnKQpmPWwuYQpnPUguRWooZikKaS5zZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgVy5T +eShuZXcgVy5pNyhpKSkuT1UoImxpbmUiKSxnKQppLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUo +ImxpbmUgIitILkVqKGYpKSkKaS5zZXRBdHRyaWJ1dGUoImhyZWYiLEwuUTQod2luZG93LmxvY2F0aW9u +LnBhdGhuYW1lLFAuRUYoWyJsaW5lIixILkVqKGYpLCJvZmZzZXQiLEguRWooaCldLHMscykpKQpnPXAu +YShuZXcgTC5FRShoLGYsYSkpCm8uYShudWxsKQpXLkpFKGksImNsaWNrIixnLCExLHEpCmouYXBwZW5k +Q2hpbGQobS5jcmVhdGVUZXh0Tm9kZSgiOiAiK0guRWoobC5iKSkpfX1pZihjKUwuVDEobnVsbCl9LApG +cjpmdW5jdGlvbihhLGIsYyl7dmFyIHMscixxPXdpbmRvdy5sb2NhdGlvbixwPVAuaEsoKHEmJkMuRXgp +LmdEcihxKStILkVqKGEpKQpxPXQuWApxPVAuRmwocSxxKQppZihiIT1udWxsKXEuWTUoMCwib2Zmc2V0 +IixILkVqKGIpKQppZihjIT1udWxsKXEuWTUoMCwibGluZSIsSC5FaihjKSkKcS5ZNSgwLCJhdXRoVG9r +ZW4iLCQuVUUoKSkKcD1wLm5tKDAscSkKcT13aW5kb3cuaGlzdG9yeQpzPXQuegpyPXAuZ25EKCkKcS50 +b1N0cmluZwpxLnB1c2hTdGF0ZShuZXcgUC5CZihbXSxbXSkuUHYoUC5GbChzLHMpKSwiIixyKX0sCkVu +OmZ1bmN0aW9uKGEpe3ZhciBzPUouYmIoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnJvb3QiKS50ZXh0 +Q29udGVudCwiLyIpCmlmKEMueEIubihhLHMpKXJldHVybiBDLnhCLnluKGEscy5sZW5ndGgpCmVsc2Ug +cmV0dXJuIGF9LApPdDpmdW5jdGlvbihhKXtzd2l0Y2goYS5yKXtjYXNlIEMuY3c6YnJlYWsKY2FzZSBD +LldEOmEucj1DLlhqCmJyZWFrCmNhc2UgQy5YajphLnI9Qy5XRApicmVhawpjYXNlIEMuZGM6dGhyb3cg +SC5iKFAuUFYoIkZpbGUgIitILkVqKGEuYykrIiBzaG91bGQgbm90IGhhdmUgaW5kZXRlcm1pbmF0ZSBt +aWdyYXRpb24gc3RhdHVzIikpfX0sCnRhOmZ1bmN0aW9uKGEsYil7dmFyIHMscj0iY2hlY2tfYm94Iixx +PSJ0aXRsZSIscD0ib3B0ZWQtb3V0IixvPSJtaWdyYXRpbmciCnN3aXRjaChiKXtjYXNlIEMuY3c6YS5p +bm5lclRleHQ9cgpzPUouWUUoYSkKcy5nUChhKS5pKDAsImFscmVhZHktbWlncmF0ZWQiKQpzLmdQKGEp +LmkoMCwiZGlzYWJsZWQiKQphLnNldEF0dHJpYnV0ZShxLCJBbHJlYWR5IG1pZ3JhdGVkIikKYnJlYWsK +Y2FzZSBDLldEOmEuaW5uZXJUZXh0PXIKcz1KLllFKGEpCnMuZ1AoYSkuUigwLHApCnMuZ1AoYSkuaSgw +LG8pCmEuc2V0QXR0cmlidXRlKHEsIk1pZ3JhdGluZyB0byBudWxsIHNhZmV0eSIpCmJyZWFrCmNhc2Ug +Qy5YajphLmlubmVyVGV4dD0iY2hlY2tfYm94X291dGxpbmVfYmxhbmsiCnM9Si5ZRShhKQpzLmdQKGEp +LlIoMCxvKQpzLmdQKGEpLmkoMCxwKQphLnNldEF0dHJpYnV0ZShxLCJPcHRpbmcgb3V0IG9mIG51bGwg +c2FmZXR5IikKYnJlYWsKZGVmYXVsdDphLmlubmVyVGV4dD0iaW5kZXRlcm1pbmF0ZV9jaGVja19ib3gi +CnM9Si5ZRShhKQpzLmdQKGEpLlIoMCxvKQpzLmdQKGEpLmkoMCxwKQphLnNldEF0dHJpYnV0ZShxLCJN +aXhlZCBzdGF0dXNlcyBvZiAnbWlncmF0aW5nJyBhbmQgJ29wdGluZyBvdXQnIikKYnJlYWt9fSwKeG46 +ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHE9ImRpc2FibGVkIixwPWIuZ0woKQpMLnRhKGEscCkKaWYoYi5j +PT0kLkQ5KCkuaW5uZXJUZXh0KXtzPWIgaW5zdGFuY2VvZiBMLmNEJiYhSC5vVChiLngpCnI9Si5ZRShh +KQppZihzKXIuZ1AoYSkuaSgwLHEpCmVsc2Ugci5nUChhKS5SKDAscSkKTC50YSgkLmMwKCkscCl9fSwK +Qlg6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHE9e30KcS5hPWEKYT1MLkVuKGEpCnEuYT1hCkouZHIoJC5E +OSgpLGEpCnM9ZG9jdW1lbnQKSC5EaCh0LmcsdC5oLCJUIiwicXVlcnlTZWxlY3RvckFsbCIpCnM9bmV3 +IFcud3oocy5xdWVyeVNlbGVjdG9yQWxsKCIubmF2LXBhbmVsIC5uYXYtbGluayIpLHQuUikKcy5LKHMs +bmV3IEwuVlMocSkpCnM9JC5JUgpyPXM9PW51bGw/bnVsbDpMLnl3KHMscS5hKQppZihyPT1udWxsKUou +ZFIoJC5iTigpKS5SKDAsInZpc2libGUiKQplbHNle0ouZFIoJC5iTigpKS5pKDAsInZpc2libGUiKQpM +LnRhKCQuYzAoKSxyLmdMKCkpfX0sCkFSOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPWIuYgppZihxIT1u +dWxsKXtzPXQuZwpyPXMuYShzLmEoYS5wYXJlbnROb2RlKS5wYXJlbnROb2RlKQpMLnhuKHIucXVlcnlT +ZWxlY3RvcigiOnNjb3BlID4gLnN0YXR1cy1pY29uIikscSkKTC5BUihyLHEpfX0sCmhsOmZ1bmN0aW9u +KGEsYil7dmFyIHMscixxLHAsbyxuLG09IjpzY29wZSA+IC5zdGF0dXMtaWNvbiIKZm9yKHM9Yi5kLHI9 +cy5sZW5ndGgscT10LmcscD0wO3A8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxILmxrKShzKSwrK3Ap +e289c1twXQpuPWEucXVlcnlTZWxlY3RvcignW2RhdGEtbmFtZSo9IicrSC5FaihXLkxqKG8uYykpKyci +XScpCmlmKG8gaW5zdGFuY2VvZiBMLnZ0KXtMLmhsKG4sbykKTC54bihuLnF1ZXJ5U2VsZWN0b3IobSks +Yil9ZWxzZSBMLnhuKHEuYShuLnBhcmVudE5vZGUpLnF1ZXJ5U2VsZWN0b3IobSksbyl9fSwKQkU6ZnVu +Y3Rpb24oYSxiLGMpe3ZhciBzPSIucmVnaW9ucyIscj1kb2N1bWVudCxxPXIucXVlcnlTZWxlY3Rvcihz +KSxwPXIucXVlcnlTZWxlY3RvcigiLmNvZGUiKQpKLnRIKHEsYi5hLCQuS0coKSkKSi50SChwLGIuYiwk +LktHKCkpCkwuTEgoYSxiLmQsYykKaWYoYi5jLmxlbmd0aDwyZTUpTC52VSgpCkwueVgoIi5jb2RlIiwh +MCkKTC55WChzLCEwKX0sCnRYOmZ1bmN0aW9uKGExLGEyLGEzKXt2YXIgcyxyLHEscCxvLG4sbSxsLGss +aixpLGgsZyxmLGUsZCxjPSJtYXRlcmlhbC1pY29ucyIsYj0ic3RhdHVzLWljb24iLGE9ZG9jdW1lbnQs +YTA9YS5jcmVhdGVFbGVtZW50KCJ1bCIpCmExLmFwcGVuZENoaWxkKGEwKQpmb3Iocz1hMi5sZW5ndGgs +cj10LlgscT10LloscD0wO3A8YTIubGVuZ3RoO2EyLmxlbmd0aD09PXN8fCgwLEgubGspKGEyKSwrK3Ap +e289YTJbcF0Kbj1hLmNyZWF0ZUVsZW1lbnQoImxpIikKYTAuYXBwZW5kQ2hpbGQobikKaWYobyBpbnN0 +YW5jZW9mIEwudnQpe209Si5ZRShuKQptLmdQKG4pLmkoMCwiZGlyIikKbi5zZXRBdHRyaWJ1dGUoImRh +dGEtIituZXcgVy5TeShuZXcgVy5pNyhuKSkuT1UoIm5hbWUiKSxvLmMpCmw9YS5jcmVhdGVFbGVtZW50 +KCJzcGFuIikKbi5hcHBlbmRDaGlsZChsKQprPUouWUUobCkKay5nUChsKS5pKDAsImFycm93IikKay5z +aGYobCwiJiN4MjVCQzsiKQpqPWEuY3JlYXRlRWxlbWVudCgic3BhbiIpCkouZFIoaikuaSgwLGMpCmou +aW5uZXJUZXh0PSJmb2xkZXJfb3BlbiIKbi5hcHBlbmRDaGlsZChqKQpuLmFwcGVuZENoaWxkKGEuY3Jl +YXRlVGV4dE5vZGUoby5hKSkKTC50WChuLG8uZCwhMCkKaT1hLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpr +PUouWUUoaSkKay5nUChpKS5pKDAsYykKaS5pbm5lclRleHQ9ImluZGV0ZXJtaW5hdGVfY2hlY2tfYm94 +IgprLmdQKGkpLmkoMCxiKQpMLnhuKGksbykKaz1rLmdWbChpKQpoPWsuJHRpCmc9aC5DKCJ+KDEpPyIp +LmEobmV3IEwuVEQobyxuLGkpKQpxLmEobnVsbCkKVy5KRShrLmEsay5iLGcsITEsaC5jKQptLm1LKG4s +aSxqKQpMLmt6KGwpfWVsc2UgaWYobyBpbnN0YW5jZW9mIEwuY0Qpe2k9YS5jcmVhdGVFbGVtZW50KCJz +cGFuIikKbT1KLllFKGkpCm0uZ1AoaSkuaSgwLGMpCmkuaW5uZXJUZXh0PSIiCm0uZ1AoaSkuaSgwLGIp +Cms9SC5vVChvLngpCmlmKCFrKW0uZ1AoaSkuaSgwLCJkaXNhYmxlZCIpCkwueG4oaSxvKQppZihrKXtt +PW0uZ1ZsKGkpCms9bS4kdGkKaD1rLkMoIn4oMSk/IikuYShuZXcgTC5JZihvLGksbikpCnEuYShudWxs +KQpXLkpFKG0uYSxtLmIsaCwhMSxrLmMpfW4uYXBwZW5kQ2hpbGQoaSkKbT1hLmNyZWF0ZUVsZW1lbnQo +InNwYW4iKQpKLmRSKG0pLmkoMCxjKQptLmlubmVyVGV4dD0iaW5zZXJ0X2RyaXZlX2ZpbGUiCm4uYXBw +ZW5kQ2hpbGQobSkKZj1hLmNyZWF0ZUVsZW1lbnQoImEiKQpuLmFwcGVuZENoaWxkKGYpCm09Si5ZRShm +KQptLmdQKGYpLmkoMCwibmF2LWxpbmsiKQpmLnNldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5l +dyBXLmk3KGYpKS5PVSgibmFtZSIpLG8uYykKZi5zZXRBdHRyaWJ1dGUoImhyZWYiLEwuUTQoby5kLFAu +RmwocixyKSkpCmYuYXBwZW5kQ2hpbGQoYS5jcmVhdGVUZXh0Tm9kZShvLmEpKQptPW0uZ1ZsKGYpCms9 +bS4kdGkKaD1rLkMoIn4oMSk/IikuYShuZXcgTC50QigpKQpxLmEobnVsbCkKVy5KRShtLmEsbS5iLGgs +ITEsay5jKQplPW8uZQppZih0eXBlb2YgZSE9PSJudW1iZXIiKXJldHVybiBlLm9zKCkKaWYoZT4wKXtk +PWEuY3JlYXRlRWxlbWVudCgic3BhbiIpCm4uYXBwZW5kQ2hpbGQoZCkKSi5kUihkKS5pKDAsImVkaXQt +Y291bnQiKQptPSIiK2UrIiAiCmlmKGU9PT0xKWs9InByb3Bvc2VkIGVkaXQiCmVsc2Ugaz0icHJvcG9z +ZWQgZWRpdHMiCmQuc2V0QXR0cmlidXRlKCJ0aXRsZSIsbStrKQpkLmFwcGVuZENoaWxkKGEuY3JlYXRl +VGV4dE5vZGUoQy5qbi53KGUpKSl9fX19LAp1ejpmdW5jdGlvbihhLGIsYyl7dmFyIHM9ZG9jdW1lbnQs +cj1zLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpLHE9dC5rLHA9cS5DKCJ+KDEpPyIpLmEobmV3IEwubTIo +YSxjKSkKdC5aLmEobnVsbCkKVy5KRShyLCJjbGljayIscCwhMSxxLmMpCnIuYXBwZW5kQ2hpbGQocy5j +cmVhdGVUZXh0Tm9kZShSLk9YKGEuYSkpKQpiLmFwcGVuZENoaWxkKHIpfSwKRno6ZnVuY3Rpb24oYSxi +KXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGg9YS5hCmlmKGg9PW51bGwpcmV0dXJuCnM9ZG9jdW1l +bnQKcj1zLmNyZWF0ZUVsZW1lbnQoInAiKQpxPWIuYXBwZW5kQ2hpbGQocikKcj1zLmNyZWF0ZUVsZW1l +bnQoInNwYW4iKQpwPXQuaQpKLk11KHIsSC5WTShbInR5cGUtZGVzY3JpcHRpb24iXSxwKSkKci5hcHBl +bmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKCJBY3Rpb25zIikpCnEuYXBwZW5kQ2hpbGQocikKcS5hcHBl +bmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKCI6IikpCm89cy5jcmVhdGVFbGVtZW50KCJwIikKYi5hcHBl +bmRDaGlsZChvKQpmb3Iocj1oLmxlbmd0aCxuPXQuUSxtPTA7bTxoLmxlbmd0aDtoLmxlbmd0aD09PXJ8 +fCgwLEgubGspKGgpLCsrbSl7bD1oW21dCms9cy5jcmVhdGVFbGVtZW50KCJhIikKby5hcHBlbmRDaGls +ZChrKQprLmFwcGVuZENoaWxkKHMuY3JlYXRlVGV4dE5vZGUobC5hKSkKay5zZXRBdHRyaWJ1dGUoImhy +ZWYiLGwuYikKaj1uLmEoSC5WTShbImFkZC1oaW50LWxpbmsiLCJiZWZvcmUtYXBwbHkiLCJidXR0b24i +XSxwKSkKaT1KLmRSKGspCmkuVjEoMCkKaS5GVigwLGopfX0sCkNDOmZ1bmN0aW9uKGE0LGE1LGE2KXt2 +YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYSxhMCxhMSxhMixhMwpmb3Iocz1h +NC5mLHI9cy5sZW5ndGgscT10LmkscD10LlEsbz0wO288cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxI +LmxrKShzKSwrK28pe249c1tvXQptPWRvY3VtZW50Cmw9bS5jcmVhdGVFbGVtZW50KCJwIikKaz1wLmEo +SC5WTShbInRyYWNlIl0scSkpCmo9Si5kUihsKQpqLlYxKDApCmouRlYoMCxrKQppPWE1LmFwcGVuZENo +aWxkKGwpCmw9bS5jcmVhdGVFbGVtZW50KCJzcGFuIikKaz1wLmEoSC5WTShbInR5cGUtZGVzY3JpcHRp +b24iXSxxKSkKaj1KLmRSKGwpCmouVjEoMCkKai5GVigwLGspCmwuYXBwZW5kQ2hpbGQobS5jcmVhdGVU +ZXh0Tm9kZShuLmEpKQppLmFwcGVuZENoaWxkKGwpCmkuYXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9k +ZSgiOiIpKQpsPW0uY3JlYXRlRWxlbWVudCgidWwiKQprPXAuYShILlZNKFsidHJhY2UiXSxxKSkKaj1K +LmRSKGwpCmouVjEoMCkKai5GVigwLGspCmg9aS5hcHBlbmRDaGlsZChsKQpmb3IobD1uLmIsaz1sLmxl +bmd0aCxnPTA7ZzxsLmxlbmd0aDtsLmxlbmd0aD09PWt8fCgwLEgubGspKGwpLCsrZyl7Zj1sW2ddCmU9 +bS5jcmVhdGVFbGVtZW50KCJsaSIpCmguYXBwZW5kQ2hpbGQoZSkKZD1tLmNyZWF0ZUVsZW1lbnQoInNw +YW4iKQpjPXAuYShILlZNKFsiZnVuY3Rpb24iXSxxKSkKaj1KLmRSKGQpCmouVjEoMCkKai5GVigwLGMp +CmM9Zi5iCkwuV2ooZCxjPT1udWxsPyJ1bmtub3duIjpjKQplLmFwcGVuZENoaWxkKGQpCmI9Zi5jCmlm +KGIhPW51bGwpe2UuYXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9kZSgiICgiKSkKYT1iLmIKYTA9bS5j +cmVhdGVFbGVtZW50KCJhIikKYTAuYXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9kZShILkVqKGIuYykr +IjoiK0guRWooYSkpKQphMC5zZXRBdHRyaWJ1dGUoImhyZWYiLGIuYSkKYTAuY2xhc3NMaXN0LmFkZCgi +bmF2LWxpbmsiKQplLmFwcGVuZENoaWxkKGEwKQplLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUo +IikiKSl9ZS5hcHBlbmRDaGlsZChtLmNyZWF0ZVRleHROb2RlKCI6ICIpKQpkPWYuYQpMLldqKGUsZD09 +bnVsbD8idW5rbm93biI6ZCkKZD1mLmQKaWYoZC5sZW5ndGghPT0wKXtjPW0uY3JlYXRlRWxlbWVudCgi +cCIpCmExPXAuYShILlZNKFsiZHJhd2VyIiwiYmVmb3JlLWFwcGx5Il0scSkpCmo9Si5kUihjKQpqLlYx +KDApCmouRlYoMCxhMSkKYTI9ZS5hcHBlbmRDaGlsZChjKQpmb3IoYz1kLmxlbmd0aCxhMz0wO2EzPGQu +bGVuZ3RoO2QubGVuZ3RoPT09Y3x8KDAsSC5saykoZCksKythMylMLnV6KGRbYTNdLGEyLGIpfX19fSwK +VXM6ZnVuY3Rpb24oYSl7cmV0dXJuIEouVTYoYSkudGcoYSwiPyIpP0MueEIuTmooYSwwLEMueEIuT1ko +YSwiPyIpKTphfSwKVEc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEwuUVcoYSxiKX0sCnl3OmZ1bmN0 +aW9uKGEsYil7dmFyIHMscixxLHAKZm9yKHM9YS5sZW5ndGgscj0wO3I8YS5sZW5ndGg7YS5sZW5ndGg9 +PT1zfHwoMCxILmxrKShhKSwrK3Ipe3E9YVtyXQppZihxIGluc3RhbmNlb2YgTC52dCl7cD1MLnl3KHEu +ZCxiKQppZihwIT1udWxsKXJldHVybiBwfWVsc2UgaWYocS5jPT1iKXJldHVybiBxfXJldHVybiBudWxs +fSwKV2o6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHE9SC5WTShiLnNwbGl0KCIuIiksdC5zKSxwPUMuTm0u +Z3RIKHEpLG89ZG9jdW1lbnQKYS5hcHBlbmRDaGlsZChvLmNyZWF0ZVRleHROb2RlKHApKQpmb3IocD1I +LnFDKHEsMSxudWxsLHQuTikscD1uZXcgSC5hNyhwLHAuZ0EocCkscC4kdGkuQygiYTc8YUwuRT4iKSks +cz1KLllFKGEpO3AuRigpOyl7cj1wLmQKcy5ueihhLCJiZWZvcmVlbmQiLCImIzgyMDM7LiIsbnVsbCxu +dWxsKQphLmFwcGVuZENoaWxkKG8uY3JlYXRlVGV4dE5vZGUocikpfX0sCmU6ZnVuY3Rpb24gZSgpe30s +ClZXOmZ1bmN0aW9uIFZXKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCm9aOmZ1bmN0 +aW9uIG9aKCl7fSwKanI6ZnVuY3Rpb24ganIoKXt9LApxbDpmdW5jdGlvbiBxbCgpe30sCkhpOmZ1bmN0 +aW9uIEhpKCl7fSwKQlQ6ZnVuY3Rpb24gQlQoKXt9LApQWTpmdW5jdGlvbiBQWSgpe30sCnU4OmZ1bmN0 +aW9uIHU4KCl7fSwKTDpmdW5jdGlvbiBMKCl7fSwKV3g6ZnVuY3Rpb24gV3goYSxiKXt0aGlzLmE9YQp0 +aGlzLmI9Yn0sCkFPOmZ1bmN0aW9uIEFPKGEpe3RoaXMuYT1hfSwKZE46ZnVuY3Rpb24gZE4oYSl7dGhp +cy5hPWF9LApIbzpmdW5jdGlvbiBIbyhhKXt0aGlzLmE9YX0sCnh6OmZ1bmN0aW9uIHh6KGEsYil7dGhp +cy5hPWEKdGhpcy5iPWJ9LApJQzpmdW5jdGlvbiBJQygpe30sCmZDOmZ1bmN0aW9uIGZDKGEsYil7dGhp +cy5hPWEKdGhpcy5iPWJ9LApUbTpmdW5jdGlvbiBUbSgpe30sCm5UOmZ1bmN0aW9uIG5UKGEsYixjKXt0 +aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCk5ZOmZ1bmN0aW9uIE5ZKGEpe3RoaXMuYT1hfSwKdWU6 +ZnVuY3Rpb24gdWUoKXt9LAplWDpmdW5jdGlvbiBlWCgpe30sCkVFOmZ1bmN0aW9uIEVFKGEsYixjKXt0 +aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClFMOmZ1bmN0aW9uIFFMKGEsYil7dGhpcy5hPWEKdGhp +cy5iPWJ9LApWUzpmdW5jdGlvbiBWUyhhKXt0aGlzLmE9YX0sClREOmZ1bmN0aW9uIFREKGEsYixjKXt0 +aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCklmOmZ1bmN0aW9uIElmKGEsYixjKXt0aGlzLmE9YQp0 +aGlzLmI9Ygp0aGlzLmM9Y30sCnRCOmZ1bmN0aW9uIHRCKCl7fSwKbTI6ZnVuY3Rpb24gbTIoYSxiKXt0 +aGlzLmE9YQp0aGlzLmI9Yn0sClFXOmZ1bmN0aW9uIFFXKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApY +QTpmdW5jdGlvbiBYQSgpe30sClpzOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT1KLlU2KGEpCmlmKEwucDIo +SC5oKHEucShhLCJ0eXBlIikpKT09PUMuWTIpe3M9SC5oKHEucShhLCJuYW1lIikpCnI9SC5oKHEucShh +LCJwYXRoIikpCnE9cS5xKGEsInN1YnRyZWUiKQpxPW5ldyBMLnZ0KHE9PW51bGw/bnVsbDpMLm1LKHEp +LHMscikKcS5MVigpCnJldHVybiBxfWVsc2V7cz1ILmgocS5xKGEsIm5hbWUiKSkKcj1ILmgocS5xKGEs +InBhdGgiKSkKcmV0dXJuIG5ldyBMLmNEKEguaChxLnEoYSwiaHJlZiIpKSxILnVQKHEucShhLCJlZGl0 +Q291bnQiKSksSC55OChxLnEoYSwid2FzRXhwbGljaXRseU9wdGVkT3V0IikpLEwudkIoSC51UChxLnEo +YSwibWlncmF0aW9uU3RhdHVzIikpKSxILnk4KHEucShhLCJtaWdyYXRpb25TdGF0dXNDYW5CZUNoYW5n +ZWQiKSkscyxyKX19LAptSzpmdW5jdGlvbihhKXt2YXIgcyxyPUguVk0oW10sdC5jUSkKZm9yKHM9Si5J +VCh0LlUuYShhKSk7cy5GKCk7KXIucHVzaChMLlpzKHMuZ2woKSkpCnJldHVybiByfSwKVkQ6ZnVuY3Rp +b24oYSl7dmFyIHMscixxPUguVk0oW10sdC5HKQpmb3Iocz1hLmxlbmd0aCxyPTA7cjxhLmxlbmd0aDth +Lmxlbmd0aD09PXN8fCgwLEgubGspKGEpLCsrcilxLnB1c2goYVtyXS5MdCgpKQpyZXR1cm4gcX0sCnZC +OmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpcmV0dXJuIG51bGwKaWYoYT4+PjAhPT1hfHxhPj00KXJldHVy +biBILk9IKEMubDAsYSkKcmV0dXJuIEMubDBbYV19LApwMjpmdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2Fz +ZSJkaXJlY3RvcnkiOnJldHVybiBDLlkyCmNhc2UiZmlsZSI6cmV0dXJuIEMucmYKZGVmYXVsdDp0aHJv +dyBILmIoUC5QVigiVW5yZWNvZ25pemVkIG5hdmlnYXRpb24gdHJlZSBub2RlIHR5cGU6ICIrSC5Faihh +KSkpfX0sCnZ0OmZ1bmN0aW9uIHZ0KGEsYixjKXt2YXIgXz10aGlzCl8uZD1hCl8uYT1iCl8uYj1udWxs +Cl8uYz1jfSwKY0Q6ZnVuY3Rpb24gY0QoYSxiLGMsZCxlLGYsZyl7dmFyIF89dGhpcwpfLmQ9YQpfLmU9 +YgpfLmY9YwpfLnI9ZApfLng9ZQpfLmE9ZgpfLmI9bnVsbApfLmM9Z30sCkQ4OmZ1bmN0aW9uIEQ4KCl7 +fSwKTzk6ZnVuY3Rpb24gTzkoYSl7dGhpcy5iPWF9LApHYjpmdW5jdGlvbiBHYihhLGIpe3RoaXMuYT1h +CnRoaXMuYj1ifSwKSVY6ZnVuY3Rpb24gSVYoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmQ9YQpfLmU9Ygpf +LmY9YwpfLnI9ZH19LFI9ewpuejpmdW5jdGlvbihhKXt2YXIgcz1ILnVQKGEucSgwLCJub2RlSWQiKSkK +cmV0dXJuIG5ldyBSLkxMKEMuTm0uSHQoQy5yayxuZXcgUi5NRChhKSkscyl9LApPWDpmdW5jdGlvbihh +KXtzd2l0Y2goYSl7Y2FzZSBDLkFkOnJldHVybiJBZGQgLyo/Ki8gaGludCIKY2FzZSBDLm5lOnJldHVy +biJBZGQgLyohKi8gaGludCIKY2FzZSBDLndWOnJldHVybiJSZW1vdmUgLyo/Ki8gaGludCIKY2FzZSBD +LmZSOnJldHVybiJSZW1vdmUgLyohKi8gaGludCIKY2FzZSBDLm15OnJldHVybiJDaGFuZ2UgdG8gLyo/ +Ki8gaGludCIKY2FzZSBDLnJ4OnJldHVybiJDaGFuZ2UgdG8gLyohKi8gaGludCJ9cmV0dXJuIG51bGx9 +LApMTDpmdW5jdGlvbiBMTChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKTUQ6ZnVuY3Rpb24gTUQoYSl7 +dGhpcy5hPWF9LApINzpmdW5jdGlvbiBINyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifX0sTT17CllGOmZ1 +bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbApmb3Iocz1iLmxlbmd0aCxyPTE7cjxzOysrcil7 +aWYoYltyXT09bnVsbHx8YltyLTFdIT1udWxsKWNvbnRpbnVlCmZvcig7cz49MTtzPXEpe3E9cy0xCmlm +KGJbcV0hPW51bGwpYnJlYWt9cD1uZXcgUC5SbigiIikKbz1hKyIoIgpwLmE9bwpuPUgudDYoYikKbT1u +LkMoIm5IPDE+IikKbD1uZXcgSC5uSChiLDAscyxtKQpsLkhkKGIsMCxzLG4uYykKbT1vK25ldyBILmxK +KGwsbS5DKCJxVShhTC5FKSIpLmEobmV3IE0uTm8oKSksbS5DKCJsSjxhTC5FLHFVPiIpKS5rKDAsIiwg +IikKcC5hPW0KcC5hPW0rKCIpOiBwYXJ0ICIrKHItMSkrIiB3YXMgbnVsbCwgYnV0IHBhcnQgIityKyIg +d2FzIG5vdC4iKQp0aHJvdyBILmIoUC54WShwLncoMCkpKX19LApsSTpmdW5jdGlvbiBsSShhKXt0aGlz +LmE9YX0sCnE3OmZ1bmN0aW9uIHE3KCl7fSwKTm86ZnVuY3Rpb24gTm8oKXt9fSxYPXsKQ0w6ZnVuY3Rp +b24oYSxiKXt2YXIgcyxyLHEscCxvLG49Yi54WihhKQpiLmhLKGEpCmlmKG4hPW51bGwpYT1KLktWKGEs +bi5sZW5ndGgpCnM9dC5zCnI9SC5WTShbXSxzKQpxPUguVk0oW10scykKcz1hLmxlbmd0aAppZihzIT09 +MCYmYi5yNChDLnhCLlcoYSwwKSkpe2lmKDA+PXMpcmV0dXJuIEguT0goYSwwKQpDLk5tLmkocSxhWzBd +KQpwPTF9ZWxzZXtDLk5tLmkocSwiIikKcD0wfWZvcihvPXA7bzxzOysrbylpZihiLnI0KEMueEIuVyhh +LG8pKSl7Qy5ObS5pKHIsQy54Qi5OaihhLHAsbykpCkMuTm0uaShxLGFbb10pCnA9bysxfWlmKHA8cyl7 +Qy5ObS5pKHIsQy54Qi55bihhLHApKQpDLk5tLmkocSwiIil9cmV0dXJuIG5ldyBYLldEKGIsbixyLHEp +fSwKV0Q6ZnVuY3Rpb24gV0QoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmQ9YwpfLmU9 +ZH0sCkk3OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgWC5kdihhKX0sCmR2OmZ1bmN0aW9uIGR2KGEpe3Ro +aXMuYT1hfX0sTz17ClJoOmZ1bmN0aW9uKCl7dmFyIHMscj1udWxsCmlmKFAudW8oKS5nRmkoKSE9PSJm +aWxlIilyZXR1cm4gJC5FYigpCnM9UC51bygpCmlmKCFDLnhCLlRjKHMuZ0lpKHMpLCIvIikpcmV0dXJu +ICQuRWIoKQppZihQLktMKHIsImEvYiIscixyLHIscixyKS50NCgpPT09ImFcXGIiKXJldHVybiAkLktr +KCkKcmV0dXJuICQuYkQoKX0sCnpMOmZ1bmN0aW9uIHpMKCl7fX0sRT17T0Y6ZnVuY3Rpb24gT0YoYSxi +LGMpe3RoaXMuZD1hCnRoaXMuZT1iCnRoaXMuZj1jfX0sRj17cnU6ZnVuY3Rpb24gcnUoYSxiLGMsZCl7 +dmFyIF89dGhpcwpfLmQ9YQpfLmU9YgpfLmY9YwpfLnI9ZH19LEQ9ewphYjpmdW5jdGlvbigpe3ZhciBz +LHIscSxwLG89bnVsbAp0cnl7bz1QLnVvKCl9Y2F0Y2gocyl7aWYodC5nOC5iKEguUnUocykpKXtyPSQu +RmYKaWYociE9bnVsbClyZXR1cm4gcgp0aHJvdyBzfWVsc2UgdGhyb3cgc31pZihKLlJNKG8sJC5JNikp +e3I9JC5GZgpyLnRvU3RyaW5nCnJldHVybiByfSQuSTY9bwppZigkLkhrKCk9PSQuRWIoKSlyPSQuRmY9 +by5aSSgiLiIpLncoMCkKZWxzZXtxPW8udDQoKQpwPXEubGVuZ3RoLTEKcj0kLkZmPXA9PT0wP3E6Qy54 +Qi5OaihxLDAscCl9ci50b1N0cmluZwpyZXR1cm4gcn19CnZhciB3PVtDLEgsSixQLFcsVSxCLFQsTCxS +LE0sWCxPLEUsRixEXQpodW5rSGVscGVycy5zZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3NhcnkodykKdmFy +ICQ9e30KSC5GSy5wcm90b3R5cGU9e30KSi5Hdi5wcm90b3R5cGU9ewpETjpmdW5jdGlvbihhLGIpe3Jl +dHVybiBhPT09Yn0sCmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gSC5lUShhKX0sCnc6ZnVuY3Rpb24oYSl7 +cmV0dXJuIkluc3RhbmNlIG9mICciK0guRWooSC5NKGEpKSsiJyJ9LAplNzpmdW5jdGlvbihhLGIpe3Qu +by5hKGIpCnRocm93IEguYihQLmxyKGEsYi5nV2EoKSxiLmduZCgpLGIuZ1ZtKCkpKX19CkoueUUucHJv +dG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEpfSwKZ2lPOmZ1bmN0aW9uKGEpe3Jl +dHVybiBhPzUxOTAxODoyMTgxNTl9LAokaWEyOjF9Ckoud2UucHJvdG90eXBlPXsKRE46ZnVuY3Rpb24o +YSxiKXtyZXR1cm4gbnVsbD09Yn0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIm51bGwifSwKZ2lPOmZ1bmN0 +aW9uKGEpe3JldHVybiAwfSwKZTc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5TaihhLHQuby5hKGIp +KX0sCiRpYzg6MX0KSi5NRi5wcm90b3R5cGU9ewpnaU86ZnVuY3Rpb24oYSl7cmV0dXJuIDB9LAp3OmZ1 +bmN0aW9uKGEpe3JldHVybiBTdHJpbmcoYSl9LAokaXZtOjF9CkouaUMucHJvdG90eXBlPXt9Ckoua2Qu +cHJvdG90eXBlPXt9CkouYzUucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgcz1hWyQudygpXQpp +ZihzPT1udWxsKXJldHVybiB0aGlzLnQoYSkKcmV0dXJuIkphdmFTY3JpcHQgZnVuY3Rpb24gZm9yICIr +SC5FaihKLmoocykpfSwKJGlFSDoxfQpKLmpkLnByb3RvdHlwZT17CmRyOmZ1bmN0aW9uKGEsYil7cmV0 +dXJuIG5ldyBILmpWKGEsSC50NihhKS5DKCJAPDE+IikuS3EoYikuQygialY8MSwyPiIpKX0sCmk6ZnVu +Y3Rpb24oYSxiKXtILnQ2KGEpLmMuYShiKQppZighIWEuZml4ZWQkbGVuZ3RoKUgudihQLkw0KCJhZGQi +KSkKYS5wdXNoKGIpfSwKVzQ6ZnVuY3Rpb24oYSxiKXt2YXIgcwppZighIWEuZml4ZWQkbGVuZ3RoKUgu +dihQLkw0KCJyZW1vdmVBdCIpKQpzPWEubGVuZ3RoCmlmKGI+PXMpdGhyb3cgSC5iKFAuTzcoYixudWxs +KSkKcmV0dXJuIGEuc3BsaWNlKGIsMSlbMF19LApVRzpmdW5jdGlvbihhLGIsYyl7dmFyIHMscgpILnQ2 +KGEpLkMoImNYPDE+IikuYShjKQppZighIWEuZml4ZWQkbGVuZ3RoKUgudihQLkw0KCJpbnNlcnRBbGwi +KSkKUC53QShiLDAsYS5sZW5ndGgsImluZGV4IikKaWYoIXQuZC5iKGMpKWM9Si5SWChjKQpzPUouSG0o +YykKYS5sZW5ndGg9YS5sZW5ndGgrcwpyPWIrcwp0aGlzLllXKGEscixhLmxlbmd0aCxhLGIpCnRoaXMu +dmcoYSxiLHIsYyl9LApGVjpmdW5jdGlvbihhLGIpe3ZhciBzCkgudDYoYSkuQygiY1g8MT4iKS5hKGIp +CmlmKCEhYS5maXhlZCRsZW5ndGgpSC52KFAuTDQoImFkZEFsbCIpKQppZihBcnJheS5pc0FycmF5KGIp +KXt0aGlzLktoKGEsYikKcmV0dXJufWZvcihzPUouSVQoYik7cy5GKCk7KWEucHVzaChzLmdsKCkpfSwK +S2g6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyCnQuYi5hKGIpCnM9Yi5sZW5ndGgKaWYocz09PTApcmV0dXJu +CmlmKGE9PT1iKXRocm93IEguYihQLmE0KGEpKQpmb3Iocj0wO3I8czsrK3IpYS5wdXNoKGJbcl0pfSwK +RTI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPUgudDYoYSkKcmV0dXJuIG5ldyBILmxKKGEscy5LcShjKS5D +KCIxKDIpIikuYShiKSxzLkMoIkA8MT4iKS5LcShjKS5DKCJsSjwxLDI+IikpfSwKazpmdW5jdGlvbihh +LGIpe3ZhciBzLHI9UC5POChhLmxlbmd0aCwiIiwhMSx0Lk4pCmZvcihzPTA7czxhLmxlbmd0aDsrK3Mp +dGhpcy5ZNShyLHMsSC5FaihhW3NdKSkKcmV0dXJuIHIuam9pbihiKX0sCmVSOmZ1bmN0aW9uKGEsYil7 +cmV0dXJuIEgucUMoYSxiLG51bGwsSC50NihhKS5jKX0sCk4wOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBz +LHIscQpkLmEoYikKSC50NihhKS5LcShkKS5DKCIxKDEsMikiKS5hKGMpCnM9YS5sZW5ndGgKZm9yKHI9 +YixxPTA7cTxzOysrcSl7cj1jLiQyKHIsYVtxXSkKaWYoYS5sZW5ndGghPT1zKXRocm93IEguYihQLmE0 +KGEpKX1yZXR1cm4gcn0sCkh0OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbwpILnQ2KGEpLkMoImEy +KDEpIikuYShiKQpzPWEubGVuZ3RoCmZvcihyPW51bGwscT0hMSxwPTA7cDxzOysrcCl7bz1hW3BdCmlm +KEgub1QoYi4kMShvKSkpe2lmKHEpdGhyb3cgSC5iKEguQW0oKSkKcj1vCnE9ITB9aWYocyE9PWEubGVu +Z3RoKXRocm93IEguYihQLmE0KGEpKX1pZihxKXJldHVybiByCnRocm93IEguYihILldwKCkpfSwKRTpm +dW5jdGlvbihhLGIpe2lmKGI8MHx8Yj49YS5sZW5ndGgpcmV0dXJuIEguT0goYSxiKQpyZXR1cm4gYVti +XX0sCmd0SDpmdW5jdGlvbihhKXtpZihhLmxlbmd0aD4wKXJldHVybiBhWzBdCnRocm93IEguYihILldw +KCkpfSwKZ3JaOmZ1bmN0aW9uKGEpe3ZhciBzPWEubGVuZ3RoCmlmKHM+MClyZXR1cm4gYVtzLTFdCnRo +cm93IEguYihILldwKCkpfSwKWVc6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgcyxyLHEscCxvCkgudDYo +YSkuQygiY1g8MT4iKS5hKGQpCmlmKCEhYS5pbW11dGFibGUkbGlzdClILnYoUC5MNCgic2V0UmFuZ2Ui +KSkKUC5qQihiLGMsYS5sZW5ndGgpCnM9Yy1iCmlmKHM9PT0wKXJldHVybgpQLmsxKGUsInNraXBDb3Vu +dCIpCmlmKHQuai5iKGQpKXtyPWQKcT1lfWVsc2V7cj1KLkE1KGQsZSkudHQoMCwhMSkKcT0wfXA9Si5V +NihyKQppZihxK3M+cC5nQShyKSl0aHJvdyBILmIoSC5hcigpKQppZihxPGIpZm9yKG89cy0xO28+PTA7 +LS1vKWFbYitvXT1wLnEocixxK28pCmVsc2UgZm9yKG89MDtvPHM7KytvKWFbYitvXT1wLnEocixxK28p +fSwKdmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuWVcoYSxiLGMsZCwwKX0sClZyOmZ1bmN0 +aW9uKGEsYil7dmFyIHMscgpILnQ2KGEpLkMoImEyKDEpIikuYShiKQpzPWEubGVuZ3RoCmZvcihyPTA7 +cjxzOysrcil7aWYoSC5vVChiLiQxKGFbcl0pKSlyZXR1cm4hMAppZihhLmxlbmd0aCE9PXMpdGhyb3cg +SC5iKFAuYTQoYSkpfXJldHVybiExfSwKdGc6ZnVuY3Rpb24oYSxiKXt2YXIgcwpmb3Iocz0wO3M8YS5s +ZW5ndGg7KytzKWlmKEouUk0oYVtzXSxiKSlyZXR1cm4hMApyZXR1cm4hMX0sCmdsMDpmdW5jdGlvbihh +KXtyZXR1cm4gYS5sZW5ndGg9PT0wfSwKZ29yOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PTB9 +LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBQLldFKGEsIlsiLCJdIil9LAp0dDpmdW5jdGlvbihhLGIpe3Zh +ciBzPUguVk0oYS5zbGljZSgwKSxILnQ2KGEpKQpyZXR1cm4gc30sCmJyOmZ1bmN0aW9uKGEpe3JldHVy +biB0aGlzLnR0KGEsITApfSwKZ206ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBKLm0xKGEsYS5sZW5ndGgs +SC50NihhKS5DKCJtMTwxPiIpKX0sCmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gSC5lUShhKX0sCmdBOmZ1 +bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sCnNBOmZ1bmN0aW9uKGEsYil7aWYoISFhLmZpeGVkJGxl +bmd0aClILnYoUC5MNCgic2V0IGxlbmd0aCIpKQppZihiPDApdGhyb3cgSC5iKFAuVEUoYiwwLG51bGws +Im5ld0xlbmd0aCIsbnVsbCkpCmEubGVuZ3RoPWJ9LApxOmZ1bmN0aW9uKGEsYil7SC51UChiKQppZihi +Pj1hLmxlbmd0aHx8YjwwKXRocm93IEguYihILkhZKGEsYikpCnJldHVybiBhW2JdfSwKWTU6ZnVuY3Rp +b24oYSxiLGMpe0gudDYoYSkuYy5hKGMpCmlmKCEhYS5pbW11dGFibGUkbGlzdClILnYoUC5MNCgiaW5k +ZXhlZCBzZXQiKSkKaWYoYj49YS5sZW5ndGh8fGI8MCl0aHJvdyBILmIoSC5IWShhLGIpKQphW2JdPWN9 +LAokaWJROjEsCiRpY1g6MSwKJGl6TToxfQpKLlBvLnByb3RvdHlwZT17fQpKLm0xLnByb3RvdHlwZT17 +CmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sCkY6ZnVuY3Rpb24oKXt2YXIgcyxyPXRoaXMscT1y +LmEscD1xLmxlbmd0aAppZihyLmIhPT1wKXRocm93IEguYihILmxrKHEpKQpzPXIuYwppZihzPj1wKXty +LnNNKG51bGwpCnJldHVybiExfXIuc00ocVtzXSk7KytyLmMKcmV0dXJuITB9LApzTTpmdW5jdGlvbihh +KXt0aGlzLmQ9dGhpcy4kdGkuQygiMT8iKS5hKGEpfSwKJGlBbjoxfQpKLnFJLnByb3RvdHlwZT17CnpR +OmZ1bmN0aW9uKGEpe2lmKGE+MCl7aWYoYSE9PTEvMClyZXR1cm4gTWF0aC5yb3VuZChhKX1lbHNlIGlm +KGE+LTEvMClyZXR1cm4gMC1NYXRoLnJvdW5kKDAtYSkKdGhyb3cgSC5iKFAuTDQoIiIrYSsiLnJvdW5k +KCkiKSl9LAp3OmZ1bmN0aW9uKGEpe2lmKGE9PT0wJiYxL2E8MClyZXR1cm4iLTAuMCIKZWxzZSByZXR1 +cm4iIithfSwKZ2lPOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwLG89YXwwCmlmKGE9PT1vKXJldHVybiBv +JjUzNjg3MDkxMQpzPU1hdGguYWJzKGEpCnI9TWF0aC5sb2cocykvMC42OTMxNDcxODA1NTk5NDUzfDAK +cT1NYXRoLnBvdygyLHIpCnA9czwxP3MvcTpxL3MKcmV0dXJuKChwKjkwMDcxOTkyNTQ3NDA5OTJ8MCkr +KHAqMzU0MjI0MzE4MTE3NjUyMXwwKSkqNTk5MTk3K3IqMTI1OSY1MzY4NzA5MTF9LAp6WTpmdW5jdGlv +bihhLGIpe3ZhciBzPWElYgppZihzPT09MClyZXR1cm4gMAppZihzPjApcmV0dXJuIHMKaWYoYjwwKXJl +dHVybiBzLWIKZWxzZSByZXR1cm4gcytifSwKQlU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYXwwKT09PWE/ +YS9ifDA6dGhpcy5ESihhLGIpfSwKREo6ZnVuY3Rpb24oYSxiKXt2YXIgcz1hL2IKaWYocz49LTIxNDc0 +ODM2NDgmJnM8PTIxNDc0ODM2NDcpcmV0dXJuIHN8MAppZihzPjApe2lmKHMhPT0xLzApcmV0dXJuIE1h +dGguZmxvb3Iocyl9ZWxzZSBpZihzPi0xLzApcmV0dXJuIE1hdGguY2VpbChzKQp0aHJvdyBILmIoUC5M +NCgiUmVzdWx0IG9mIHRydW5jYXRpbmcgZGl2aXNpb24gaXMgIitILkVqKHMpKyI6ICIrSC5FaihhKSsi +IH4vICIrYikpfSwKd0c6ZnVuY3Rpb24oYSxiKXt2YXIgcwppZihhPjApcz10aGlzLnAzKGEsYikKZWxz +ZXtzPWI+MzE/MzE6YgpzPWE+PnM+Pj4wfXJldHVybiBzfSwKYmY6ZnVuY3Rpb24oYSxiKXtpZihiPDAp +dGhyb3cgSC5iKEgudEwoYikpCnJldHVybiB0aGlzLnAzKGEsYil9LApwMzpmdW5jdGlvbihhLGIpe3Jl +dHVybiBiPjMxPzA6YT4+PmJ9LAokaUNQOjEsCiRpWlo6MX0KSi5iVS5wcm90b3R5cGU9eyRpSWo6MX0K +Si5rRC5wcm90b3R5cGU9e30KSi5Eci5wcm90b3R5cGU9ewpPOmZ1bmN0aW9uKGEsYil7aWYoYjwwKXRo +cm93IEguYihILkhZKGEsYikpCmlmKGI+PWEubGVuZ3RoKUgudihILkhZKGEsYikpCnJldHVybiBhLmNo +YXJDb2RlQXQoYil9LApXOmZ1bmN0aW9uKGEsYil7aWYoYj49YS5sZW5ndGgpdGhyb3cgSC5iKEguSFko +YSxiKSkKcmV0dXJuIGEuY2hhckNvZGVBdChiKX0sCmRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBI +LnVuKGIsYSwwKX0sCmg6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYiE9InN0cmluZyIpdGhyb3cgSC5i +KFAuTDMoYixudWxsLG51bGwpKQpyZXR1cm4gYStifSwKVGM6ZnVuY3Rpb24oYSxiKXt2YXIgcz1iLmxl +bmd0aCxyPWEubGVuZ3RoCmlmKHM+cilyZXR1cm4hMQpyZXR1cm4gYj09PXRoaXMueW4oYSxyLXMpfSwK +aTc6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHM9UC5qQihiLGMsYS5sZW5ndGgpLHI9YS5zdWJzdHJpbmco +MCxiKSxxPWEuc3Vic3RyaW5nKHMpCnJldHVybiByK2QrcX0sClFpOmZ1bmN0aW9uKGEsYixjKXt2YXIg +cwppZihjPDB8fGM+YS5sZW5ndGgpdGhyb3cgSC5iKFAuVEUoYywwLGEubGVuZ3RoLG51bGwsbnVsbCkp +CnM9YytiLmxlbmd0aAppZihzPmEubGVuZ3RoKXJldHVybiExCnJldHVybiBiPT09YS5zdWJzdHJpbmco +YyxzKX0sCm46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5RaShhLGIsMCl9LApOajpmdW5jdGlvbihh +LGIsYyl7aWYoYz09bnVsbCljPWEubGVuZ3RoCmlmKGI8MCl0aHJvdyBILmIoUC5PNyhiLG51bGwpKQpp +ZihiPmMpdGhyb3cgSC5iKFAuTzcoYixudWxsKSkKaWYoYz5hLmxlbmd0aCl0aHJvdyBILmIoUC5PNyhj +LG51bGwpKQpyZXR1cm4gYS5zdWJzdHJpbmcoYixjKX0sCnluOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRo +aXMuTmooYSxiLG51bGwpfSwKaGM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX0sCmJT +OmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPWEudHJpbSgpLG89cC5sZW5ndGgKaWYobz09PTApcmV0dXJu +IHAKaWYodGhpcy5XKHAsMCk9PT0xMzMpe3M9Si5tbShwLDEpCmlmKHM9PT1vKXJldHVybiIifWVsc2Ug +cz0wCnI9by0xCnE9dGhpcy5PKHAscik9PT0xMzM/Si5jMShwLHIpOm8KaWYocz09PTAmJnE9PT1vKXJl +dHVybiBwCnJldHVybiBwLnN1YnN0cmluZyhzLHEpfSwKVDpmdW5jdGlvbihhLGIpe3ZhciBzLHIKaWYo +MD49YilyZXR1cm4iIgppZihiPT09MXx8YS5sZW5ndGg9PT0wKXJldHVybiBhCmlmKGIhPT1iPj4+MCl0 +aHJvdyBILmIoQy5FcSkKZm9yKHM9YSxyPSIiOyEwOyl7aWYoKGImMSk9PT0xKXI9cytyCmI9Yj4+PjEK +aWYoYj09PTApYnJlYWsKcys9c31yZXR1cm4gcn0sClhVOmZ1bmN0aW9uKGEsYixjKXt2YXIgcwppZihj +PDB8fGM+YS5sZW5ndGgpdGhyb3cgSC5iKFAuVEUoYywwLGEubGVuZ3RoLG51bGwsbnVsbCkpCnM9YS5p +bmRleE9mKGIsYykKcmV0dXJuIHN9LApPWTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLlhVKGEsYiww +KX0sClBrOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyCmlmKGM9PW51bGwpYz1hLmxlbmd0aAplbHNlIGlm +KGM8MHx8Yz5hLmxlbmd0aCl0aHJvdyBILmIoUC5URShjLDAsYS5sZW5ndGgsbnVsbCxudWxsKSkKcz1i +Lmxlbmd0aApyPWEubGVuZ3RoCmlmKGMrcz5yKWM9ci1zCnJldHVybiBhLmxhc3RJbmRleE9mKGIsYyl9 +LApjbjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLlBrKGEsYixudWxsKX0sCklzOmZ1bmN0aW9uKGEs +YixjKXt2YXIgcz1hLmxlbmd0aAppZihjPnMpdGhyb3cgSC5iKFAuVEUoYywwLHMsbnVsbCxudWxsKSkK +cmV0dXJuIEguU1EoYSxiLGMpfSwKdGc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5JcyhhLGIsMCl9 +LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBhfSwKZ2lPOmZ1bmN0aW9uKGEpe3ZhciBzLHIscQpmb3Iocz1h +Lmxlbmd0aCxyPTAscT0wO3E8czsrK3Epe3I9cithLmNoYXJDb2RlQXQocSkmNTM2ODcwOTExCnI9ciso +KHImNTI0Mjg3KTw8MTApJjUzNjg3MDkxMQpyXj1yPj42fXI9cisoKHImNjcxMDg4NjMpPDwzKSY1MzY4 +NzA5MTEKcl49cj4+MTEKcmV0dXJuIHIrKChyJjE2MzgzKTw8MTUpJjUzNjg3MDkxMX0sCmdBOmZ1bmN0 +aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXtILnVQKGIpCmlmKGI+PWEubGVu +Z3RofHwhMSl0aHJvdyBILmIoSC5IWShhLGIpKQpyZXR1cm4gYVtiXX0sCiRpdlg6MSwKJGlxVToxfQpI +LkJSLnByb3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEpe3ZhciBzPUguTGgodGhpcykKcmV0dXJuIG5ldyBI +LkU3KEouSVQodGhpcy5nT04oKSkscy5DKCJAPDE+IikuS3Eocy5RWzFdKS5DKCJFNzwxLDI+IikpfSwK +Z0E6ZnVuY3Rpb24oYSl7cmV0dXJuIEouSG0odGhpcy5nT04oKSl9LApnbDA6ZnVuY3Rpb24oYSl7cmV0 +dXJuIEoudVUodGhpcy5nT04oKSl9LApnb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIEouRjcodGhpcy5nT04o +KSl9LAplUjpmdW5jdGlvbihhLGIpe3ZhciBzPUguTGgodGhpcykKcmV0dXJuIEguR0ooSi5BNSh0aGlz +LmdPTigpLGIpLHMuYyxzLlFbMV0pfSwKRTpmdW5jdGlvbihhLGIpe3JldHVybiBILkxoKHRoaXMpLlFb +MV0uYShKLkdBKHRoaXMuZ09OKCksYikpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gSi5qKHRoaXMuZ09O +KCkpfX0KSC5FNy5wcm90b3R5cGU9ewpGOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5GKCl9LApnbDpm +dW5jdGlvbigpe3JldHVybiB0aGlzLiR0aS5RWzFdLmEodGhpcy5hLmdsKCkpfSwKJGlBbjoxfQpILlp5 +LnByb3RvdHlwZT17CmdPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF9fQpILm9sLnByb3RvdHlwZT17 +JGliUToxfQpILlVxLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy4kdGkuUVsx +XS5hKEoueDkodGhpcy5hLEgudVAoYikpKX0sClk1OmZ1bmN0aW9uKGEsYixjKXt2YXIgcz10aGlzLiR0 +aQpKLnU5KHRoaXMuYSxiLHMuYy5hKHMuUVsxXS5hKGMpKSl9LAokaWJROjEsCiRpek06MX0KSC5qVi5w +cm90b3R5cGU9ewpkcjpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSC5qVih0aGlzLmEsdGhpcy4kdGku +QygiQDwxPiIpLktxKGIpLkMoImpWPDEsMj4iKSl9LApnT046ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5h +fX0KSC5uLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hCnJldHVybiBzIT1udWxs +PyJMYXRlSW5pdGlhbGl6YXRpb25FcnJvcjogIitzOiJMYXRlSW5pdGlhbGl6YXRpb25FcnJvciJ9fQpI +LnIzLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHM9IlJlYWNoYWJpbGl0eUVycm9yOiAiK3Ro +aXMuYQpyZXR1cm4gc319CkgucWoucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu +YS5sZW5ndGh9LApxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEMueEIuTyh0aGlzLmEsSC51UChiKSl9fQpI +LkdNLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIk51bGwgaXMgbm90IGEgdmFsaWQgdmFs +dWUgZm9yIHRoZSBwYXJhbWV0ZXIgJyIrdGhpcy5hKyInIG9mIHR5cGUgJyIrSC5LeCh0aGlzLiR0aS5j +KS53KDApKyInIn19CkguYlEucHJvdG90eXBlPXt9CkguYUwucHJvdG90eXBlPXsKZ206ZnVuY3Rpb24o +YSl7dmFyIHM9dGhpcwpyZXR1cm4gbmV3IEguYTcocyxzLmdBKHMpLEguTGgocykuQygiYTc8YUwuRT4i +KSl9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ0EodGhpcyk9PT0wfSwKazpmdW5jdGlvbihh +LGIpe3ZhciBzLHIscSxwPXRoaXMsbz1wLmdBKHApCmlmKGIubGVuZ3RoIT09MCl7aWYobz09PTApcmV0 +dXJuIiIKcz1ILkVqKHAuRSgwLDApKQppZihvIT09cC5nQShwKSl0aHJvdyBILmIoUC5hNChwKSkKZm9y +KHI9cyxxPTE7cTxvOysrcSl7cj1yK2IrSC5FaihwLkUoMCxxKSkKaWYobyE9PXAuZ0EocCkpdGhyb3cg +SC5iKFAuYTQocCkpfXJldHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfWVsc2V7Zm9yKHE9MCxyPSIi +O3E8bzsrK3Epe3IrPUguRWoocC5FKDAscSkpCmlmKG8hPT1wLmdBKHApKXRocm93IEguYihQLmE0KHAp +KX1yZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn19LApldjpmdW5jdGlvbihhLGIpe3JldHVybiB0 +aGlzLkdHKDAsSC5MaCh0aGlzKS5DKCJhMihhTC5FKSIpLmEoYikpfSwKRTI6ZnVuY3Rpb24oYSxiLGMp +e3ZhciBzPUguTGgodGhpcykKcmV0dXJuIG5ldyBILmxKKHRoaXMscy5LcShjKS5DKCIxKGFMLkUpIiku +YShiKSxzLkMoIkA8YUwuRT4iKS5LcShjKS5DKCJsSjwxLDI+IikpfSwKZVI6ZnVuY3Rpb24oYSxiKXty +ZXR1cm4gSC5xQyh0aGlzLGIsbnVsbCxILkxoKHRoaXMpLkMoImFMLkUiKSl9LAp0dDpmdW5jdGlvbihh +LGIpe3JldHVybiBQLlkxKHRoaXMsITAsSC5MaCh0aGlzKS5DKCJhTC5FIikpfSwKYnI6ZnVuY3Rpb24o +YSl7cmV0dXJuIHRoaXMudHQoYSwhMCl9fQpILm5ILnByb3RvdHlwZT17CkhkOmZ1bmN0aW9uKGEsYixj +LGQpe3ZhciBzLHI9dGhpcy5iClAuazEociwic3RhcnQiKQpzPXRoaXMuYwppZihzIT1udWxsKXtQLmsx +KHMsImVuZCIpCmlmKHI+cyl0aHJvdyBILmIoUC5URShyLDAscywic3RhcnQiLG51bGwpKX19LApnVUQ6 +ZnVuY3Rpb24oKXt2YXIgcz1KLkhtKHRoaXMuYSkscj10aGlzLmMKaWYocj09bnVsbHx8cj5zKXJldHVy +biBzCnJldHVybiByfSwKZ0FzOmZ1bmN0aW9uKCl7dmFyIHM9Si5IbSh0aGlzLmEpLHI9dGhpcy5iCmlm +KHI+cylyZXR1cm4gcwpyZXR1cm4gcn0sCmdBOmZ1bmN0aW9uKGEpe3ZhciBzLHI9Si5IbSh0aGlzLmEp +LHE9dGhpcy5iCmlmKHE+PXIpcmV0dXJuIDAKcz10aGlzLmMKaWYocz09bnVsbHx8cz49cilyZXR1cm4g +ci1xCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMuSE4oKQpyZXR1cm4gcy1xfSwKRTpmdW5j +dGlvbihhLGIpe3ZhciBzPXRoaXMscj1zLmdBcygpK2IKaWYoYjwwfHxyPj1zLmdVRCgpKXRocm93IEgu +YihQLkNmKGIscywiaW5kZXgiLG51bGwsbnVsbCkpCnJldHVybiBKLkdBKHMuYSxyKX0sCmVSOmZ1bmN0 +aW9uKGEsYil7dmFyIHMscixxPXRoaXMKUC5rMShiLCJjb3VudCIpCnM9cS5iK2IKcj1xLmMKaWYociE9 +bnVsbCYmcz49cilyZXR1cm4gbmV3IEguTUIocS4kdGkuQygiTUI8MT4iKSkKcmV0dXJuIEgucUMocS5h +LHMscixxLiR0aS5jKX0sCnR0OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHA9dGhpcyxvPXAuYixuPXAu +YSxtPUouVTYobiksbD1tLmdBKG4pLGs9cC5jCmlmKGshPW51bGwmJms8bClsPWsKaWYodHlwZW9mIGwh +PT0ibnVtYmVyIilyZXR1cm4gbC5ITigpCnM9bC1vCmlmKHM8PTApe249Si5RaSgwLHAuJHRpLmMpCnJl +dHVybiBufXI9UC5POChzLG0uRShuLG8pLCExLHAuJHRpLmMpCmZvcihxPTE7cTxzOysrcSl7Qy5ObS5Z +NShyLHEsbS5FKG4sbytxKSkKaWYobS5nQShuKTxsKXRocm93IEguYihQLmE0KHApKX1yZXR1cm4gcn19 +CkguYTcucHJvdG90eXBlPXsKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSwKRjpmdW5jdGlvbigp +e3ZhciBzLHI9dGhpcyxxPXIuYSxwPUouVTYocSksbz1wLmdBKHEpCmlmKHIuYiE9PW8pdGhyb3cgSC5i +KFAuYTQocSkpCnM9ci5jCmlmKHM+PW8pe3Iuc0kobnVsbCkKcmV0dXJuITF9ci5zSShwLkUocSxzKSk7 +KytyLmMKcmV0dXJuITB9LApzSTpmdW5jdGlvbihhKXt0aGlzLmQ9dGhpcy4kdGkuQygiMT8iKS5hKGEp +fSwKJGlBbjoxfQpILmkxLnByb3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEpe3ZhciBzPUguTGgodGhpcykK +cmV0dXJuIG5ldyBILk1IKEouSVQodGhpcy5hKSx0aGlzLmIscy5DKCJAPDE+IikuS3Eocy5RWzFdKS5D +KCJNSDwxLDI+IikpfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIEouSG0odGhpcy5hKX0sCmdsMDpmdW5j +dGlvbihhKXtyZXR1cm4gSi51VSh0aGlzLmEpfSwKRTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmIu +JDEoSi5HQSh0aGlzLmEsYikpfX0KSC54eS5wcm90b3R5cGU9eyRpYlE6MX0KSC5NSC5wcm90b3R5cGU9 +ewpGOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcyxyPXMuYgppZihyLkYoKSl7cy5zSShzLmMuJDEoci5nbCgp +KSkKcmV0dXJuITB9cy5zSShudWxsKQpyZXR1cm4hMX0sCmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu +YX0sCnNJOmZ1bmN0aW9uKGEpe3RoaXMuYT10aGlzLiR0aS5DKCIyPyIpLmEoYSl9fQpILmxKLnByb3Rv +dHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBKLkhtKHRoaXMuYSl9LApFOmZ1bmN0aW9uKGEsYil7 +cmV0dXJuIHRoaXMuYi4kMShKLkdBKHRoaXMuYSxiKSl9fQpILlU1LnByb3RvdHlwZT17CmdtOmZ1bmN0 +aW9uKGEpe3JldHVybiBuZXcgSC5TTyhKLklUKHRoaXMuYSksdGhpcy5iLHRoaXMuJHRpLkMoIlNPPDE+ +IikpfX0KSC5TTy5wcm90b3R5cGU9ewpGOmZ1bmN0aW9uKCl7dmFyIHMscgpmb3Iocz10aGlzLmEscj10 +aGlzLmI7cy5GKCk7KWlmKEgub1Qoci4kMShzLmdsKCkpKSlyZXR1cm4hMApyZXR1cm4hMX0sCmdsOmZ1 +bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nbCgpfX0KSC5BTS5wcm90b3R5cGU9ewplUjpmdW5jdGlvbihh +LGIpe1AuazEoYiwiY291bnQiKQpyZXR1cm4gbmV3IEguQU0odGhpcy5hLHRoaXMuYitiLEguTGgodGhp +cykuQygiQU08MT4iKSl9LApnbTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEguVTEoSi5JVCh0aGlzLmEp +LHRoaXMuYixILkxoKHRoaXMpLkMoIlUxPDE+IikpfX0KSC5kNS5wcm90b3R5cGU9ewpnQTpmdW5jdGlv +bihhKXt2YXIgcz1KLkhtKHRoaXMuYSktdGhpcy5iCmlmKHM+PTApcmV0dXJuIHMKcmV0dXJuIDB9LApl +UjpmdW5jdGlvbihhLGIpe1AuazEoYiwiY291bnQiKQpyZXR1cm4gbmV3IEguZDUodGhpcy5hLHRoaXMu +YitiLHRoaXMuJHRpKX0sCiRpYlE6MX0KSC5VMS5wcm90b3R5cGU9ewpGOmZ1bmN0aW9uKCl7dmFyIHMs +cgpmb3Iocz10aGlzLmEscj0wO3I8dGhpcy5iOysrcilzLkYoKQp0aGlzLmI9MApyZXR1cm4gcy5GKCl9 +LApnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2woKX19CkguTUIucHJvdG90eXBlPXsKZ206ZnVu +Y3Rpb24oYSl7cmV0dXJuIEMuR3d9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuITB9LApnQTpmdW5jdGlv +bihhKXtyZXR1cm4gMH0sCkU6ZnVuY3Rpb24oYSxiKXt0aHJvdyBILmIoUC5URShiLDAsMCwiaW5kZXgi +LG51bGwpKX0sCmVSOmZ1bmN0aW9uKGEsYil7UC5rMShiLCJjb3VudCIpCnJldHVybiB0aGlzfX0KSC5G +dS5wcm90b3R5cGU9ewpGOmZ1bmN0aW9uKCl7cmV0dXJuITF9LApnbDpmdW5jdGlvbigpe3Rocm93IEgu +YihILldwKCkpfSwKJGlBbjoxfQpILnU2LnByb3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEpe3JldHVybiBu +ZXcgSC5KQihKLklUKHRoaXMuYSksdGhpcy4kdGkuQygiSkI8MT4iKSl9fQpILkpCLnByb3RvdHlwZT17 +CkY6ZnVuY3Rpb24oKXt2YXIgcyxyCmZvcihzPXRoaXMuYSxyPXRoaXMuJHRpLmM7cy5GKCk7KWlmKHIu +YihzLmdsKCkpKXJldHVybiEwCnJldHVybiExfSwKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGku +Yy5hKHRoaXMuYS5nbCgpKX0sCiRpQW46MX0KSC5TVS5wcm90b3R5cGU9e30KSC5SZS5wcm90b3R5cGU9 +ewpZNTpmdW5jdGlvbihhLGIsYyl7SC5MaCh0aGlzKS5DKCJSZS5FIikuYShjKQp0aHJvdyBILmIoUC5M +NCgiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpKX19CkgudzIucHJvdG90eXBlPXt9 +Ckgud3YucHJvdG90eXBlPXsKZ2lPOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuX2hhc2hDb2RlCmlmKHMh +PW51bGwpcmV0dXJuIHMKcz02NjQ1OTcqSi5oZih0aGlzLmEpJjUzNjg3MDkxMQp0aGlzLl9oYXNoQ29k +ZT1zCnJldHVybiBzfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4nU3ltYm9sKCInK0guRWoodGhpcy5hKSsn +IiknfSwKRE46ZnVuY3Rpb24oYSxiKXtpZihiPT1udWxsKXJldHVybiExCnJldHVybiBiIGluc3RhbmNl +b2YgSC53diYmdGhpcy5hPT1iLmF9LAokaUdEOjF9CkguUUMucHJvdG90eXBlPXt9CkguUEQucHJvdG90 +eXBlPXt9CkguV1UucHJvdG90eXBlPXsKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdBKHRoaXMp +PT09MH0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAubk8odGhpcyl9LApZNTpmdW5jdGlvbihhLGIsYyl7 +dmFyIHM9SC5MaCh0aGlzKQpzLmMuYShiKQpzLlFbMV0uYShjKQpILmRjKCkKSC5CaSh1LmcpfSwKZ1B1 +OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnE0KGEsSC5MaCh0aGlzKS5DKCJOMzwxLDI+IikpfSwKcTQ6 +ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlzCnJldHVybiBQLmwwKGZ1bmN0aW9uKCl7dmFyIHI9YQp2YXIg +cT0wLHA9MSxvLG4sbSxsLGsKcmV0dXJuIGZ1bmN0aW9uICRhc3luYyRnUHUoYyxkKXtpZihjPT09MSl7 +bz1kCnE9cH13aGlsZSh0cnVlKXN3aXRjaChxKXtjYXNlIDA6bj1zLmd2YygpLG49bi5nbShuKSxtPUgu +TGgocyksbT1tLkMoIkA8MT4iKS5LcShtLlFbMV0pLkMoIk4zPDEsMj4iKQpjYXNlIDI6aWYoIW4uRigp +KXtxPTMKYnJlYWt9bD1uLmdsKCkKaz1zLnEoMCxsKQprLnRvU3RyaW5nCnE9NApyZXR1cm4gbmV3IFAu +TjMobCxrLG0pCmNhc2UgNDpxPTIKYnJlYWsKY2FzZSAzOnJldHVybiBQLlRoKCkKY2FzZSAxOnJldHVy +biBQLlltKG8pfX19LGIpfSwKJGlaMDoxfQpILkxQLnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3Jl +dHVybiB0aGlzLmF9LAp4NDpmdW5jdGlvbihhKXtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuITEK +aWYoIl9fcHJvdG9fXyI9PT1hKXJldHVybiExCnJldHVybiB0aGlzLmIuaGFzT3duUHJvcGVydHkoYSl9 +LApxOmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMueDQoYikpcmV0dXJuIG51bGwKcmV0dXJuIHRoaXMucVAo +Yil9LApxUDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5iW0guaChhKV19LApLOmZ1bmN0aW9uKGEsYil7 +dmFyIHMscixxLHAsbz1ILkxoKHRoaXMpCm8uQygifigxLDIpIikuYShiKQpzPXRoaXMuYwpmb3Iocj1z +Lmxlbmd0aCxvPW8uUVsxXSxxPTA7cTxyOysrcSl7cD1zW3FdCmIuJDIocCxvLmEodGhpcy5xUChwKSkp +fX0sCmd2YzpmdW5jdGlvbigpe3JldHVybiBuZXcgSC5YUih0aGlzLEguTGgodGhpcykuQygiWFI8MT4i +KSl9fQpILlhSLnByb3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYS5jCnJldHVybiBu +ZXcgSi5tMShzLHMubGVuZ3RoLEgudDYocykuQygibTE8MT4iKSl9LApnQTpmdW5jdGlvbihhKXtyZXR1 +cm4gdGhpcy5hLmMubGVuZ3RofX0KSC5MSS5wcm90b3R5cGU9ewpnV2E6ZnVuY3Rpb24oKXt2YXIgcz10 +aGlzLmEKcmV0dXJuIHN9LApnbmQ6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvPXRoaXMKaWYoby5jPT09 +MSlyZXR1cm4gQy5oVQpzPW8uZApyPXMubGVuZ3RoLW8uZS5sZW5ndGgtby5mCmlmKHI9PT0wKXJldHVy +biBDLmhVCnE9W10KZm9yKHA9MDtwPHI7KytwKXtpZihwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLHAp +CnEucHVzaChzW3BdKX1yZXR1cm4gSi56QyhxKX0sCmdWbTpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG8s +bixtLGwsaz10aGlzCmlmKGsuYyE9PTApcmV0dXJuIEMuV08Kcz1rLmUKcj1zLmxlbmd0aApxPWsuZApw +PXEubGVuZ3RoLXItay5mCmlmKHI9PT0wKXJldHVybiBDLldPCm89bmV3IEguTjUodC5lbykKZm9yKG49 +MDtuPHI7KytuKXtpZihuPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLG4pCm09c1tuXQpsPXArbgppZihs +PDB8fGw+PXEubGVuZ3RoKXJldHVybiBILk9IKHEsbCkKby5ZNSgwLG5ldyBILnd2KG0pLHFbbF0pfXJl +dHVybiBuZXcgSC5QRChvLHQuZ0YpfSwKJGl2UToxfQpILkNqLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9u +KGEsYil7dmFyIHMKSC5oKGEpCnM9dGhpcy5hCnMuYj1zLmIrIiQiK0guRWooYSkKQy5ObS5pKHRoaXMu +YixhKQpDLk5tLmkodGhpcy5jLGIpOysrcy5hfSwKJFM6MTN9CkguZjkucHJvdG90eXBlPXsKcVM6ZnVu +Y3Rpb24oYSl7dmFyIHMscixxPXRoaXMscD1uZXcgUmVnRXhwKHEuYSkuZXhlYyhhKQppZihwPT1udWxs +KXJldHVybiBudWxsCnM9T2JqZWN0LmNyZWF0ZShudWxsKQpyPXEuYgppZihyIT09LTEpcy5hcmd1bWVu +dHM9cFtyKzFdCnI9cS5jCmlmKHIhPT0tMSlzLmFyZ3VtZW50c0V4cHI9cFtyKzFdCnI9cS5kCmlmKHIh +PT0tMSlzLmV4cHI9cFtyKzFdCnI9cS5lCmlmKHIhPT0tMSlzLm1ldGhvZD1wW3IrMV0Kcj1xLmYKaWYo +ciE9PS0xKXMucmVjZWl2ZXI9cFtyKzFdCnJldHVybiBzfX0KSC5XMC5wcm90b3R5cGU9ewp3OmZ1bmN0 +aW9uKGEpe3ZhciBzPXRoaXMuYgppZihzPT1udWxsKXJldHVybiJOb1N1Y2hNZXRob2RFcnJvcjogIitI +LkVqKHRoaXMuYSkKcmV0dXJuIk5vU3VjaE1ldGhvZEVycm9yOiBtZXRob2Qgbm90IGZvdW5kOiAnIitz +KyInIG9uIG51bGwifX0KSC5hei5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcyxx +PSJOb1N1Y2hNZXRob2RFcnJvcjogbWV0aG9kIG5vdCBmb3VuZDogJyIscD1yLmIKaWYocD09bnVsbCly +ZXR1cm4iTm9TdWNoTWV0aG9kRXJyb3I6ICIrSC5FaihyLmEpCnM9ci5jCmlmKHM9PW51bGwpcmV0dXJu +IHErcCsiJyAoIitILkVqKHIuYSkrIikiCnJldHVybiBxK3ArIicgb24gJyIrcysiJyAoIitILkVqKHIu +YSkrIikifX0KSC52Vi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4g +cy5sZW5ndGg9PT0wPyJFcnJvciI6IkVycm9yOiAiK3N9fQpILnRlLnByb3RvdHlwZT17Cnc6ZnVuY3Rp +b24oYSl7cmV0dXJuIlRocm93IG9mIG51bGwgKCciKyh0aGlzLmE9PT1udWxsPyJudWxsIjoidW5kZWZp +bmVkIikrIicgZnJvbSBKYXZhU2NyaXB0KSJ9LAokaVJ6OjF9CkguYnEucHJvdG90eXBlPXt9CkguWE8u +cHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMuYgppZihyIT1udWxsKXJldHVybiBy +CnI9dGhpcy5hCnM9ciE9PW51bGwmJnR5cGVvZiByPT09Im9iamVjdCI/ci5zdGFjazpudWxsCnJldHVy +biB0aGlzLmI9cz09bnVsbD8iIjpzfSwKJGlHejoxfQpILlRwLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24o +YSl7dmFyIHM9dGhpcy5jb25zdHJ1Y3RvcixyPXM9PW51bGw/bnVsbDpzLm5hbWUKcmV0dXJuIkNsb3N1 +cmUgJyIrSC5OUShyPT1udWxsPyJ1bmtub3duIjpyKSsiJyJ9LAokaUVIOjEsCmdLdTpmdW5jdGlvbigp +e3JldHVybiB0aGlzfSwKJEM6IiQxIiwKJFI6MSwKJEQ6bnVsbH0KSC5sYy5wcm90b3R5cGU9e30KSC56 +eC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuJHN0YXRpY19uYW1lCmlmKHM9PW51 +bGwpcmV0dXJuIkNsb3N1cmUgb2YgdW5rbm93biBzdGF0aWMgbWV0aG9kIgpyZXR1cm4iQ2xvc3VyZSAn +IitILk5RKHMpKyInIn19CkguclQucHJvdG90eXBlPXsKRE46ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlz +CmlmKGI9PW51bGwpcmV0dXJuITEKaWYocz09PWIpcmV0dXJuITAKaWYoIShiIGluc3RhbmNlb2YgSC5y +VCkpcmV0dXJuITEKcmV0dXJuIHMuYT09PWIuYSYmcy5iPT09Yi5iJiZzLmM9PT1iLmN9LApnaU86ZnVu +Y3Rpb24oYSl7dmFyIHMscj10aGlzLmMKaWYocj09bnVsbClzPUguZVEodGhpcy5hKQplbHNlIHM9dHlw +ZW9mIHIhPT0ib2JqZWN0Ij9KLmhmKHIpOkguZVEocikKcj1ILmVRKHRoaXMuYikKaWYodHlwZW9mIHMh +PT0ibnVtYmVyIilyZXR1cm4gcy5ZKCkKcmV0dXJuKHNecik+Pj4wfSwKdzpmdW5jdGlvbihhKXt2YXIg +cz10aGlzLmMKaWYocz09bnVsbClzPXRoaXMuYQpyZXR1cm4iQ2xvc3VyZSAnIitILkVqKHRoaXMuZCkr +Iicgb2YgIisoIkluc3RhbmNlIG9mICciK0guRWooSC5NKHMpKSsiJyIpfX0KSC5FcS5wcm90b3R5cGU9 +ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJSdW50aW1lRXJyb3I6ICIrdGhpcy5hfX0KSC5rWS5wcm90b3R5 +cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJBc3NlcnRpb24gZmFpbGVkOiAiK1AucCh0aGlzLmEpfX0K +SC5rci5wcm90b3R5cGU9e30KSC5ONS5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhp +cy5hfSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmE9PT0wfSwKZ3ZjOmZ1bmN0aW9uKCl7cmV0 +dXJuIG5ldyBILmk1KHRoaXMsSC5MaCh0aGlzKS5DKCJpNTwxPiIpKX0sCng0OmZ1bmN0aW9uKGEpe3Zh +ciBzLHIKaWYodHlwZW9mIGE9PSJzdHJpbmciKXtzPXRoaXMuYgppZihzPT1udWxsKXJldHVybiExCnJl +dHVybiB0aGlzLlh1KHMsYSl9ZWxzZXtyPXRoaXMuQ1goYSkKcmV0dXJuIHJ9fSwKQ1g6ZnVuY3Rpb24o +YSl7dmFyIHM9dGhpcy5kCmlmKHM9PW51bGwpcmV0dXJuITEKcmV0dXJuIHRoaXMuRmgodGhpcy5CdChz +LEouaGYoYSkmMHgzZmZmZmZmKSxhKT49MH0sCnE6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvPXRo +aXMsbj1udWxsCmlmKHR5cGVvZiBiPT0ic3RyaW5nIil7cz1vLmIKaWYocz09bnVsbClyZXR1cm4gbgpy +PW8uajIocyxiKQpxPXI9PW51bGw/bjpyLmIKcmV0dXJuIHF9ZWxzZSBpZih0eXBlb2YgYj09Im51bWJl +ciImJihiJjB4M2ZmZmZmZik9PT1iKXtwPW8uYwppZihwPT1udWxsKXJldHVybiBuCnI9by5qMihwLGIp +CnE9cj09bnVsbD9uOnIuYgpyZXR1cm4gcX1lbHNlIHJldHVybiBvLmFhKGIpfSwKYWE6ZnVuY3Rpb24o +YSl7dmFyIHMscixxPXRoaXMuZAppZihxPT1udWxsKXJldHVybiBudWxsCnM9dGhpcy5CdChxLEouaGYo +YSkmMHgzZmZmZmZmKQpyPXRoaXMuRmgocyxhKQppZihyPDApcmV0dXJuIG51bGwKcmV0dXJuIHNbcl0u +Yn0sClk1OmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9SC5MaChtKQpsLmMu +YShiKQpsLlFbMV0uYShjKQppZih0eXBlb2YgYj09InN0cmluZyIpe3M9bS5iCm0uRUgocz09bnVsbD9t +LmI9bS56SygpOnMsYixjKX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVyIiYmKGImMHgzZmZmZmZmKT09 +PWIpe3I9bS5jCm0uRUgocj09bnVsbD9tLmM9bS56SygpOnIsYixjKX1lbHNle3E9bS5kCmlmKHE9PW51 +bGwpcT1tLmQ9bS56SygpCnA9Si5oZihiKSYweDNmZmZmZmYKbz1tLkJ0KHEscCkKaWYobz09bnVsbClt +LkVJKHEscCxbbS5IbihiLGMpXSkKZWxzZXtuPW0uRmgobyxiKQppZihuPj0wKW9bbl0uYj1jCmVsc2Ug +by5wdXNoKG0uSG4oYixjKSl9fX0sCks6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHE9dGhpcwpILkxoKHEp +LkMoIn4oMSwyKSIpLmEoYikKcz1xLmUKcj1xLnIKZm9yKDtzIT1udWxsOyl7Yi4kMihzLmEscy5iKQpp +ZihyIT09cS5yKXRocm93IEguYihQLmE0KHEpKQpzPXMuY319LApFSDpmdW5jdGlvbihhLGIsYyl7dmFy +IHMscj10aGlzLHE9SC5MaChyKQpxLmMuYShiKQpxLlFbMV0uYShjKQpzPXIuajIoYSxiKQppZihzPT1u +dWxsKXIuRUkoYSxiLHIuSG4oYixjKSkKZWxzZSBzLmI9Y30sCmtzOmZ1bmN0aW9uKCl7dGhpcy5yPXRo +aXMucisxJjY3MTA4ODYzfSwKSG46ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlzLHI9SC5MaChzKSxxPW5l +dyBILnZoKHIuYy5hKGEpLHIuUVsxXS5hKGIpKQppZihzLmU9PW51bGwpcy5lPXMuZj1xCmVsc2V7cj1z +LmYKci50b1N0cmluZwpxLmQ9cgpzLmY9ci5jPXF9KytzLmEKcy5rcygpCnJldHVybiBxfSwKRmg6ZnVu +Y3Rpb24oYSxiKXt2YXIgcyxyCmlmKGE9PW51bGwpcmV0dXJuLTEKcz1hLmxlbmd0aApmb3Iocj0wO3I8 +czsrK3IpaWYoSi5STShhW3JdLmEsYikpcmV0dXJuIHIKcmV0dXJuLTF9LAp3OmZ1bmN0aW9uKGEpe3Jl +dHVybiBQLm5PKHRoaXMpfSwKajI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVtiXX0sCkJ0OmZ1bmN0aW9u +KGEsYil7cmV0dXJuIGFbYl19LApFSTpmdW5jdGlvbihhLGIsYyl7YVtiXT1jfSwKcm46ZnVuY3Rpb24o +YSxiKXtkZWxldGUgYVtiXX0sClh1OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuajIoYSxiKSE9bnVs +bH0sCnpLOmZ1bmN0aW9uKCl7dmFyIHM9Ijxub24taWRlbnRpZmllci1rZXk+IixyPU9iamVjdC5jcmVh +dGUobnVsbCkKdGhpcy5FSShyLHMscikKdGhpcy5ybihyLHMpCnJldHVybiByfSwKJGlGbzoxfQpILnZo +LnByb3RvdHlwZT17fQpILmk1LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEu +YX0sCmdsMDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLmE9PT0wfSwKZ206ZnVuY3Rpb24oYSl7dmFy +IHM9dGhpcy5hLHI9bmV3IEguTjYocyxzLnIsdGhpcy4kdGkuQygiTjY8MT4iKSkKci5jPXMuZQpyZXR1 +cm4gcn0sCnRnOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYS54NChiKX19CkguTjYucHJvdG90eXBl +PXsKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSwKRjpmdW5jdGlvbigpe3ZhciBzLHI9dGhpcyxx +PXIuYQppZihyLmIhPT1xLnIpdGhyb3cgSC5iKFAuYTQocSkpCnM9ci5jCmlmKHM9PW51bGwpe3Iuc3FZ +KG51bGwpCnJldHVybiExfWVsc2V7ci5zcVkocy5hKQpyLmM9cy5jCnJldHVybiEwfX0sCnNxWTpmdW5j +dGlvbihhKXt0aGlzLmQ9dGhpcy4kdGkuQygiMT8iKS5hKGEpfSwKJGlBbjoxfQpILmRDLnByb3RvdHlw +ZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEoYSl9LAokUzo0fQpILndOLnByb3RvdHlwZT17 +CiQyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYShhLGIpfSwKJFM6MzR9CkguVlgucHJvdG90eXBl +PXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYShILmgoYSkpfSwKJFM6MzJ9CkguVlIucHJvdG90 +eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iUmVnRXhwLyIrdGhpcy5hKyIvIit0aGlzLmIuZmxhZ3N9 +LApnSGM6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLHI9cy5jCmlmKHIhPW51bGwpcmV0dXJuIHIKcj1zLmIK +cmV0dXJuIHMuYz1ILnY0KHMuYSxyLm11bHRpbGluZSwhci5pZ25vcmVDYXNlLHIudW5pY29kZSxyLmRv +dEFsbCwhMCl9LApkZDpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSC5LVyh0aGlzLGIsMCl9LApVWjpm +dW5jdGlvbihhLGIpe3ZhciBzLHI9dGhpcy5nSGMoKQpyLmxhc3RJbmRleD1iCnM9ci5leGVjKGEpCmlm +KHM9PW51bGwpcmV0dXJuIG51bGwKcmV0dXJuIG5ldyBILkVLKHMpfSwKJGl2WDoxLAokaXdMOjF9Ckgu +RUsucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe3ZhciBzCkgudVAoYikKcz10aGlzLmIKaWYoYj49 +cy5sZW5ndGgpcmV0dXJuIEguT0gocyxiKQpyZXR1cm4gc1tiXX0sCiRpT2Q6MSwKJGlpYjoxfQpILktX +LnByb3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSC5QYih0aGlzLmEsdGhpcy5iLHRo +aXMuYyl9fQpILlBiLnByb3RvdHlwZT17CmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sCkY6ZnVu +Y3Rpb24oKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9bS5iCmlmKGw9PW51bGwpcmV0dXJuITEKcz1t +LmMKcj1sLmxlbmd0aAppZihzPD1yKXtxPW0uYQpwPXEuVVoobCxzKQppZihwIT1udWxsKXttLmQ9cApz +PXAuYgpvPXMuaW5kZXgKbj1vK3NbMF0ubGVuZ3RoCmlmKG89PT1uKXtpZihxLmIudW5pY29kZSl7cz1t +LmMKcT1zKzEKaWYocTxyKXtzPUMueEIuTyhsLHMpCmlmKHM+PTU1Mjk2JiZzPD01NjMxOSl7cz1DLnhC +Lk8obCxxKQpzPXM+PTU2MzIwJiZzPD01NzM0M31lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQpu +PShzP24rMTpuKSsxfW0uYz1uCnJldHVybiEwfX1tLmI9bS5kPW51bGwKcmV0dXJuITF9LAokaUFuOjF9 +CkgudFEucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe0gudVAoYikKaWYoYiE9PTApSC52KFAuTzco +YixudWxsKSkKcmV0dXJuIHRoaXMuY30sCiRpT2Q6MX0KSC51bi5wcm90b3R5cGU9ewpnbTpmdW5jdGlv +bihhKXtyZXR1cm4gbmV3IEguU2QodGhpcy5hLHRoaXMuYix0aGlzLmMpfX0KSC5TZC5wcm90b3R5cGU9 +ewpGOmZ1bmN0aW9uKCl7dmFyIHMscixxPXRoaXMscD1xLmMsbz1xLmIsbj1vLmxlbmd0aCxtPXEuYSxs +PW0ubGVuZ3RoCmlmKHArbj5sKXtxLmQ9bnVsbApyZXR1cm4hMX1zPW0uaW5kZXhPZihvLHApCmlmKHM8 +MCl7cS5jPWwrMQpxLmQ9bnVsbApyZXR1cm4hMX1yPXMrbgpxLmQ9bmV3IEgudFEocyxvKQpxLmM9cj09 +PXEuYz9yKzE6cgpyZXR1cm4hMH0sCmdsOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5kCnMudG9TdHJpbmcK +cmV0dXJuIHN9LAokaUFuOjF9CkguRVQucHJvdG90eXBlPXskaUVUOjEsJGlBUzoxfQpILkxaLnByb3Rv +dHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sCiRpWGo6MX0KSC5EZy5wcm90b3R5 +cGU9ewpxOmZ1bmN0aW9uKGEsYil7SC51UChiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19 +LApZNTpmdW5jdGlvbihhLGIsYyl7SC5HSChjKQpILm9kKGIsYSxhLmxlbmd0aCkKYVtiXT1jfSwKJGli +UToxLAokaWNYOjEsCiRpek06MX0KSC5QZy5wcm90b3R5cGU9ewpZNTpmdW5jdGlvbihhLGIsYyl7SC51 +UChjKQpILm9kKGIsYSxhLmxlbmd0aCkKYVtiXT1jfSwKJGliUToxLAokaWNYOjEsCiRpek06MX0KSC54 +ai5wcm90b3R5cGU9ewpxOmZ1bmN0aW9uKGEsYil7SC51UChiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0 +dXJuIGFbYl19fQpILmRFLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtILnVQKGIpCkgub2QoYixh +LGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkguWkEucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe0gu +dVAoYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5kVC5wcm90b3R5cGU9ewpxOmZ1 +bmN0aW9uKGEsYil7SC51UChiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpILlBxLnBy +b3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtILnVQKGIpCkgub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4g +YVtiXX19CkguZUUucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKcTpm +dW5jdGlvbihhLGIpe0gudVAoYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5WNi5w +cm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LApxOmZ1bmN0aW9uKGEsYil7 +SC51UChiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19LAokaVY2OjEsCiRpbjY6MX0KSC5S +Ry5wcm90b3R5cGU9e30KSC5WUC5wcm90b3R5cGU9e30KSC5XQi5wcm90b3R5cGU9e30KSC5aRy5wcm90 +b3R5cGU9e30KSC5KYy5wcm90b3R5cGU9ewpDOmZ1bmN0aW9uKGEpe3JldHVybiBILmNFKHYudHlwZVVu +aXZlcnNlLHRoaXMsYSl9LApLcTpmdW5jdGlvbihhKXtyZXR1cm4gSC52NSh2LnR5cGVVbml2ZXJzZSx0 +aGlzLGEpfX0KSC5HLnByb3RvdHlwZT17fQpILmxZLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0 +dXJuIEguZG0odGhpcy5hLG51bGwpfX0KSC5rUy5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVy +biB0aGlzLmF9fQpILmlNLnByb3RvdHlwZT17fQpQLnRoLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEp +e3ZhciBzPXRoaXMuYSxyPXMuYQpzLmE9bnVsbApyLiQwKCl9LAokUzoxMH0KUC5oYS5wcm90b3R5cGU9 +ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyCnRoaXMuYS5hPXQuTS5hKGEpCnM9dGhpcy5iCnI9dGhpcy5j +CnMuZmlyc3RDaGlsZD9zLnJlbW92ZUNoaWxkKHIpOnMuYXBwZW5kQ2hpbGQocil9LAokUzo1M30KUC5W +cy5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS4kMCgpfSwKJEM6IiQwIiwKJFI6MCwKJFM6 +Mn0KUC5GdC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS4kMCgpfSwKJEM6IiQwIiwKJFI6 +MCwKJFM6Mn0KUC5XMy5wcm90b3R5cGU9ewpDWTpmdW5jdGlvbihhLGIpe2lmKHNlbGYuc2V0VGltZW91 +dCE9bnVsbClzZWxmLnNldFRpbWVvdXQoSC50UihuZXcgUC55SCh0aGlzLGIpLDApLGEpCmVsc2UgdGhy +b3cgSC5iKFAuTDQoImBzZXRUaW1lb3V0KClgIG5vdCBmb3VuZC4iKSl9fQpQLnlILnByb3RvdHlwZT17 +CiQwOmZ1bmN0aW9uKCl7dGhpcy5iLiQwKCl9LAokQzoiJDAiLAokUjowLAokUzowfQpQLmloLnByb3Rv +dHlwZT17CmFNOmZ1bmN0aW9uKGEsYil7dmFyIHMscj10aGlzLHE9ci4kdGkKcS5DKCIxLz8iKS5hKGIp +CmlmKCFyLmIpci5hLlhmKGIpCmVsc2V7cz1yLmEKaWYocS5DKCJiODwxPiIpLmIoYikpcy5jVShiKQpl +bHNlIHMuWDIocS5jLmEoYikpfX0sCncwOmZ1bmN0aW9uKGEsYil7dmFyIHMKaWYoYj09bnVsbCliPVAu +djAoYSkKcz10aGlzLmEKaWYodGhpcy5iKXMuWkwoYSxiKQplbHNlIHMuTmsoYSxiKX19ClAuV00ucHJv +dG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS4kMigwLGEpfSwKJFM6NDN9ClAuU1gu +cHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt0aGlzLmEuJDIoMSxuZXcgSC5icShhLHQubC5hKGIp +KSl9LAokQzoiJDIiLAokUjoyLAokUzo1NX0KUC5Hcy5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIp +e3RoaXMuYShILnVQKGEpLGIpfSwKJFM6MjR9ClAuRnkucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXty +ZXR1cm4iSXRlcmF0aW9uTWFya2VyKCIrdGhpcy5iKyIsICIrSC5Faih0aGlzLmEpKyIpIn19ClAuR1Yu +cHJvdG90eXBlPXsKZ2w6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmMKaWYocz09bnVsbClyZXR1cm4gdGhp +cy4kdGkuYy5hKHRoaXMuYikKcmV0dXJuIHMuZ2woKX0sCkY6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxv +LG4sbT10aGlzCmZvcihzPW0uJHRpLkMoIkFuPDE+Iik7ITA7KXtyPW0uYwppZihyIT1udWxsKWlmKHIu +RigpKXJldHVybiEwCmVsc2UgbS5zWDkobnVsbCkKcT1mdW5jdGlvbihhLGIsYyl7dmFyIGwsaz1iCndo +aWxlKHRydWUpdHJ5e3JldHVybiBhKGssbCl9Y2F0Y2goail7bD1qCms9Y319KG0uYSwwLDEpCmlmKHEg +aW5zdGFuY2VvZiBQLkZ5KXtwPXEuYgppZihwPT09Mil7bz1tLmQKaWYobz09bnVsbHx8by5sZW5ndGg9 +PT0wKXttLnNFQyhudWxsKQpyZXR1cm4hMX1pZigwPj1vLmxlbmd0aClyZXR1cm4gSC5PSChvLC0xKQpt +LmE9by5wb3AoKQpjb250aW51ZX1lbHNle3I9cS5hCmlmKHA9PT0zKXRocm93IHIKZWxzZXtuPXMuYShK +LklUKHIpKQppZihuIGluc3RhbmNlb2YgUC5HVil7cj1tLmQKaWYocj09bnVsbClyPW0uZD1bXQpDLk5t +LmkocixtLmEpCm0uYT1uLmEKY29udGludWV9ZWxzZXttLnNYOShuKQpjb250aW51ZX19fX1lbHNle20u +c0VDKHEpCnJldHVybiEwfX1yZXR1cm4hMX0sCnNFQzpmdW5jdGlvbihhKXt0aGlzLmI9dGhpcy4kdGku +QygiMT8iKS5hKGEpfSwKc1g5OmZ1bmN0aW9uKGEpe3RoaXMuYz10aGlzLiR0aS5DKCJBbjwxPj8iKS5h +KGEpfSwKJGlBbjoxfQpQLnE0LnByb3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5H +Vih0aGlzLmEoKSx0aGlzLiR0aS5DKCJHVjwxPiIpKX19ClAuQ3cucHJvdG90eXBlPXsKdzpmdW5jdGlv +bihhKXtyZXR1cm4gSC5Faih0aGlzLmEpfSwKJGlYUzoxLApnSUk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp +cy5ifX0KUC5QZi5wcm90b3R5cGU9ewp3MDpmdW5jdGlvbihhLGIpe3ZhciBzCkguY2IoYSwiZXJyb3Ii +LHQuSykKcz10aGlzLmEKaWYocy5hIT09MCl0aHJvdyBILmIoUC5QVigiRnV0dXJlIGFscmVhZHkgY29t +cGxldGVkIikpCmlmKGI9PW51bGwpYj1QLnYwKGEpCnMuTmsoYSxiKX0sCnBtOmZ1bmN0aW9uKGEpe3Jl +dHVybiB0aGlzLncwKGEsbnVsbCl9fQpQLlpmLnByb3RvdHlwZT17CmFNOmZ1bmN0aW9uKGEsYil7dmFy +IHMscj10aGlzLiR0aQpyLkMoIjEvPyIpLmEoYikKcz10aGlzLmEKaWYocy5hIT09MCl0aHJvdyBILmIo +UC5QVigiRnV0dXJlIGFscmVhZHkgY29tcGxldGVkIikpCnMuWGYoci5DKCIxLyIpLmEoYikpfX0KUC5G +ZS5wcm90b3R5cGU9ewpIUjpmdW5jdGlvbihhKXtpZigodGhpcy5jJjE1KSE9PTYpcmV0dXJuITAKcmV0 +dXJuIHRoaXMuYi5iLmJ2KHQuYWwuYSh0aGlzLmQpLGEuYSx0LnksdC5LKX0sCkt3OmZ1bmN0aW9uKGEp +e3ZhciBzPXRoaXMuZSxyPXQueixxPXQuSyxwPXRoaXMuJHRpLkMoIjIvIiksbz10aGlzLmIuYgppZih0 +LmFnLmIocykpcmV0dXJuIHAuYShvLnJwKHMsYS5hLGEuYixyLHEsdC5sKSkKZWxzZSByZXR1cm4gcC5h +KG8uYnYodC5iSS5hKHMpLGEuYSxyLHEpKX19ClAudnMucHJvdG90eXBlPXsKU3E6ZnVuY3Rpb24oYSxi +LGMpe3ZhciBzLHIscSxwPXRoaXMuJHRpCnAuS3EoYykuQygiMS8oMikiKS5hKGEpCnM9JC5YMwppZihz +IT09Qy5OVSl7Yy5DKCJAPDAvPiIpLktxKHAuYykuQygiMSgyKSIpLmEoYSkKaWYoYiE9bnVsbCliPVAu +VkgoYixzKX1yPW5ldyBQLnZzKHMsYy5DKCJ2czwwPiIpKQpxPWI9PW51bGw/MTozCnRoaXMueGYobmV3 +IFAuRmUocixxLGEsYixwLkMoIkA8MT4iKS5LcShjKS5DKCJGZTwxLDI+IikpKQpyZXR1cm4gcn0sClc3 +OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuU3EoYSxudWxsLGIpfSwKUWQ6ZnVuY3Rpb24oYSxiLGMp +e3ZhciBzLHI9dGhpcy4kdGkKci5LcShjKS5DKCIxLygyKSIpLmEoYSkKcz1uZXcgUC52cygkLlgzLGMu +QygidnM8MD4iKSkKdGhpcy54ZihuZXcgUC5GZShzLDE5LGEsYixyLkMoIkA8MT4iKS5LcShjKS5DKCJG +ZTwxLDI+IikpKQpyZXR1cm4gc30sCnhmOmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcyxxPXIuYQppZihx +PD0xKXthLmE9dC5GLmEoci5jKQpyLmM9YX1lbHNle2lmKHE9PT0yKXtzPXQuYy5hKHIuYykKcT1zLmEK +aWYocTw0KXtzLnhmKGEpCnJldHVybn1yLmE9cQpyLmM9cy5jfVAuVGsobnVsbCxudWxsLHIuYix0Lk0u +YShuZXcgUC5kYShyLGEpKSl9fSwKalE6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxs +PXt9CmwuYT1hCmlmKGE9PW51bGwpcmV0dXJuCnM9bS5hCmlmKHM8PTEpe3I9dC5GLmEobS5jKQptLmM9 +YQppZihyIT1udWxsKXtxPWEuYQpmb3IocD1hO3EhPW51bGw7cD1xLHE9bylvPXEuYQpwLmE9cn19ZWxz +ZXtpZihzPT09Mil7bj10LmMuYShtLmMpCnM9bi5hCmlmKHM8NCl7bi5qUShhKQpyZXR1cm59bS5hPXMK +bS5jPW4uY31sLmE9bS5OOChhKQpQLlRrKG51bGwsbnVsbCxtLmIsdC5NLmEobmV3IFAub1EobCxtKSkp +fX0sCmFoOmZ1bmN0aW9uKCl7dmFyIHM9dC5GLmEodGhpcy5jKQp0aGlzLmM9bnVsbApyZXR1cm4gdGhp +cy5OOChzKX0sCk44OmZ1bmN0aW9uKGEpe3ZhciBzLHIscQpmb3Iocz1hLHI9bnVsbDtzIT1udWxsO3I9 +cyxzPXEpe3E9cy5hCnMuYT1yfXJldHVybiByfSwKZWM6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHA9dGhp +cwpwLmE9MQp0cnl7YS5TcShuZXcgUC5wVihwKSxuZXcgUC5VNyhwKSx0LlApfWNhdGNoKHEpe3M9SC5S +dShxKQpyPUgudHMocSkKUC5yYihuZXcgUC52cihwLHMscikpfX0sClgyOmZ1bmN0aW9uKGEpe3ZhciBz +LHI9dGhpcwpyLiR0aS5jLmEoYSkKcz1yLmFoKCkKci5hPTQKci5jPWEKUC5IWihyLHMpfSwKWkw6ZnVu +Y3Rpb24oYSxiKXt2YXIgcyxyLHE9dGhpcwp0LmwuYShiKQpzPXEuYWgoKQpyPVAuVGwoYSxiKQpxLmE9 +OApxLmM9cgpQLkhaKHEscyl9LApYZjpmdW5jdGlvbihhKXt2YXIgcz10aGlzLiR0aQpzLkMoIjEvIiku +YShhKQppZihzLkMoImI4PDE+IikuYihhKSl7dGhpcy5jVShhKQpyZXR1cm59dGhpcy53VShzLmMuYShh +KSl9LAp3VTpmdW5jdGlvbihhKXt2YXIgcz10aGlzCnMuJHRpLmMuYShhKQpzLmE9MQpQLlRrKG51bGws +bnVsbCxzLmIsdC5NLmEobmV3IFAucnQocyxhKSkpfSwKY1U6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcyxy +PXMuJHRpCnIuQygiYjg8MT4iKS5hKGEpCmlmKHIuYihhKSl7aWYoYS5hPT09OCl7cy5hPTEKUC5Uayhu +dWxsLG51bGwscy5iLHQuTS5hKG5ldyBQLktGKHMsYSkpKX1lbHNlIFAuQTkoYSxzKQpyZXR1cm59cy5l +YyhhKX0sCk5rOmZ1bmN0aW9uKGEsYil7dGhpcy5hPTEKUC5UayhudWxsLG51bGwsdGhpcy5iLHQuTS5h +KG5ldyBQLlpMKHRoaXMsYSxiKSkpfSwKJGliODoxfQpQLmRhLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9u +KCl7UC5IWih0aGlzLmEsdGhpcy5iKX0sCiRTOjB9ClAub1EucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24o +KXtQLkhaKHRoaXMuYix0aGlzLmEuYSl9LAokUzowfQpQLnBWLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9u +KGEpe3ZhciBzLHIscSxwPXRoaXMuYQpwLmE9MAp0cnl7cC5YMihwLiR0aS5jLmEoYSkpfWNhdGNoKHEp +e3M9SC5SdShxKQpyPUgudHMocSkKcC5aTChzLHIpfX0sCiRTOjEwfQpQLlU3LnByb3RvdHlwZT17CiQy +OmZ1bmN0aW9uKGEsYil7dGhpcy5hLlpMKGEsdC5sLmEoYikpfSwKJEM6IiQyIiwKJFI6MiwKJFM6Mjh9 +ClAudnIucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt0aGlzLmEuWkwodGhpcy5iLHRoaXMuYyl9LAok +UzowfQpQLnJ0LnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7dGhpcy5hLlgyKHRoaXMuYil9LAokUzow +fQpQLktGLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7UC5BOSh0aGlzLmIsdGhpcy5hKX0sCiRTOjB9 +ClAuWkwucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt0aGlzLmEuWkwodGhpcy5iLHRoaXMuYyl9LAok +UzowfQpQLlJULnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxs +PW51bGwKdHJ5e3E9bS5hLmEKbD1xLmIuYi56eih0LmZPLmEocS5kKSx0LnopfWNhdGNoKHApe3M9SC5S +dShwKQpyPUgudHMocCkKaWYobS5jKXtxPXQubi5hKG0uYi5hLmMpLmEKbz1zCm89cT09bnVsbD9vPT1u +dWxsOnE9PT1vCnE9b31lbHNlIHE9ITEKbz1tLmEKaWYocSlvLmM9dC5uLmEobS5iLmEuYykKZWxzZSBv +LmM9UC5UbChzLHIpCm8uYj0hMApyZXR1cm59aWYobCBpbnN0YW5jZW9mIFAudnMmJmwuYT49NCl7aWYo +bC5hPT09OCl7cT1tLmEKcS5jPXQubi5hKGwuYykKcS5iPSEwfXJldHVybn1pZih0LmUuYihsKSl7bj1t +LmIuYQpxPW0uYQpxLmM9bC5XNyhuZXcgUC5qWihuKSx0LnopCnEuYj0hMX19LAokUzowfQpQLmpaLnBy +b3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmF9LAokUzoyOX0KUC5ycS5wcm90b3R5 +cGU9ewokMDpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG8sbixtLGwKdHJ5e3E9dGhpcy5hCnA9cS5hCm89 +cC4kdGkKbj1vLmMKbT1uLmEodGhpcy5iKQpxLmM9cC5iLmIuYnYoby5DKCIyLygxKSIpLmEocC5kKSxt +LG8uQygiMi8iKSxuKX1jYXRjaChsKXtzPUguUnUobCkKcj1ILnRzKGwpCnE9dGhpcy5hCnEuYz1QLlRs +KHMscikKcS5iPSEwfX0sCiRTOjB9ClAuUlcucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2YXIgcyxy +LHEscCxvLG4sbSxsLGs9dGhpcwp0cnl7cz10Lm4uYShrLmEuYS5jKQpwPWsuYgppZihILm9UKHAuYS5I +UihzKSkmJnAuYS5lIT1udWxsKXtwLmM9cC5hLkt3KHMpCnAuYj0hMX19Y2F0Y2gobyl7cj1ILlJ1KG8p +CnE9SC50cyhvKQpwPXQubi5hKGsuYS5hLmMpCm49cC5hCm09cgpsPWsuYgppZihuPT1udWxsP209PW51 +bGw6bj09PW0pbC5jPXAKZWxzZSBsLmM9UC5UbChyLHEpCmwuYj0hMH19LAokUzowfQpQLk9NLnByb3Rv +dHlwZT17fQpQLnFoLnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT10aGlzLHA9e30s +bz1uZXcgUC52cygkLlgzLHQuZkopCnAuYT0wCnM9SC5MaChxKQpyPXMuQygifigxKT8iKS5hKG5ldyBQ +LkI1KHAscSkpCnQuWi5hKG5ldyBQLnVPKHAsbykpClcuSkUocS5hLHEuYixyLCExLHMuYykKcmV0dXJu +IG99fQpQLkI1LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe0guTGgodGhpcy5iKS5jLmEoYSk7Kyt0 +aGlzLmEuYX0sCiRTOmZ1bmN0aW9uKCl7cmV0dXJuIEguTGgodGhpcy5iKS5DKCJ+KDEpIil9fQpQLnVP +LnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5iLHI9cy4kdGkscT1yLkMoIjEvIiku +YSh0aGlzLmEuYSkscD1zLmFoKCkKci5jLmEocSkKcy5hPTQKcy5jPXEKUC5IWihzLHApfSwKJFM6MH0K +UC5NTy5wcm90b3R5cGU9e30KUC5rVC5wcm90b3R5cGU9e30KUC54SS5wcm90b3R5cGU9e30KUC5tMC5w +cm90b3R5cGU9eyRpUW06MX0KUC5wSy5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3ZhciBzPUguYih0 +aGlzLmEpCnMuc3RhY2s9Si5qKHRoaXMuYikKdGhyb3cgc30sCiRTOjB9ClAuSmkucHJvdG90eXBlPXsK +Ykg6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHA9bnVsbAp0Lk0uYShhKQp0cnl7aWYoQy5OVT09PSQuWDMp +e2EuJDAoKQpyZXR1cm59UC5UOChwLHAsdGhpcyxhLHQuSCl9Y2F0Y2gocSl7cz1ILlJ1KHEpCnI9SC50 +cyhxKQpQLkwyKHAscCx0aGlzLHMsdC5sLmEocikpfX0sCkRsOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxy +LHEscD1udWxsCmMuQygifigwKSIpLmEoYSkKYy5hKGIpCnRyeXtpZihDLk5VPT09JC5YMyl7YS4kMShi +KQpyZXR1cm59UC55dihwLHAsdGhpcyxhLGIsdC5ILGMpfWNhdGNoKHEpe3M9SC5SdShxKQpyPUgudHMo +cSkKUC5MMihwLHAsdGhpcyxzLHQubC5hKHIpKX19LApHWTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAu +VnAodGhpcyx0Lk0uYShhKSl9LApQeTpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgUC5PUih0aGlzLGIu +QygifigwKSIpLmEoYSksYil9LApxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGx9LAp6ejpmdW5jdGlv +bihhLGIpe2IuQygiMCgpIikuYShhKQppZigkLlgzPT09Qy5OVSlyZXR1cm4gYS4kMCgpCnJldHVybiBQ +LlQ4KG51bGwsbnVsbCx0aGlzLGEsYil9LApidjpmdW5jdGlvbihhLGIsYyxkKXtjLkMoIkA8MD4iKS5L +cShkKS5DKCIxKDIpIikuYShhKQpkLmEoYikKaWYoJC5YMz09PUMuTlUpcmV0dXJuIGEuJDEoYikKcmV0 +dXJuIFAueXYobnVsbCxudWxsLHRoaXMsYSxiLGMsZCl9LApycDpmdW5jdGlvbihhLGIsYyxkLGUsZil7 +ZC5DKCJAPDA+IikuS3EoZSkuS3EoZikuQygiMSgyLDMpIikuYShhKQplLmEoYikKZi5hKGMpCmlmKCQu +WDM9PT1DLk5VKXJldHVybiBhLiQyKGIsYykKcmV0dXJuIFAuUXgobnVsbCxudWxsLHRoaXMsYSxiLGMs +ZCxlLGYpfSwKTGo6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGIuQygiQDwwPiIpLktxKGMpLktxKGQp +LkMoIjEoMiwzKSIpLmEoYSl9fQpQLlZwLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7cmV0dXJuIHRo +aXMuYS5iSCh0aGlzLmIpfSwKJFM6MH0KUC5PUi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIg +cz10aGlzLmMKcmV0dXJuIHRoaXMuYS5EbCh0aGlzLmIscy5hKGEpLHMpfSwKJFM6ZnVuY3Rpb24oKXty +ZXR1cm4gdGhpcy5jLkMoIn4oMCkiKX19ClAuYjYucHJvdG90eXBlPXsKZ206ZnVuY3Rpb24oYSl7dmFy +IHM9dGhpcyxyPW5ldyBQLmxtKHMscy5yLEguTGgocykuQygibG08MT4iKSkKci5jPXMuZQpyZXR1cm4g +cn0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmF9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo +aXMuYT09PTB9LApnb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYSE9PTB9LAp0ZzpmdW5jdGlvbihh +LGIpe3ZhciBzLHIKaWYodHlwZW9mIGI9PSJzdHJpbmciJiZiIT09Il9fcHJvdG9fXyIpe3M9dGhpcy5i +CmlmKHM9PW51bGwpcmV0dXJuITEKcmV0dXJuIHQubS5hKHNbYl0pIT1udWxsfWVsc2V7cj10aGlzLlBS +KGIpCnJldHVybiByfX0sClBSOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuZAppZihzPT1udWxsKXJldHVy +biExCnJldHVybiB0aGlzLkRGKHNbdGhpcy5OKGEpXSxhKT49MH0sCmk6ZnVuY3Rpb24oYSxiKXt2YXIg +cyxyLHE9dGhpcwpILkxoKHEpLmMuYShiKQppZih0eXBlb2YgYj09InN0cmluZyImJmIhPT0iX19wcm90 +b19fIil7cz1xLmIKcmV0dXJuIHEuYlEocz09bnVsbD9xLmI9UC5UMigpOnMsYil9ZWxzZSBpZih0eXBl +b2YgYj09Im51bWJlciImJihiJjEwNzM3NDE4MjMpPT09Yil7cj1xLmMKcmV0dXJuIHEuYlEocj09bnVs +bD9xLmM9UC5UMigpOnIsYil9ZWxzZSByZXR1cm4gcS5CNyhiKX0sCkI3OmZ1bmN0aW9uKGEpe3ZhciBz +LHIscSxwPXRoaXMKSC5MaChwKS5jLmEoYSkKcz1wLmQKaWYocz09bnVsbClzPXAuZD1QLlQyKCkKcj1w +Lk4oYSkKcT1zW3JdCmlmKHE9PW51bGwpc1tyXT1bcC55byhhKV0KZWxzZXtpZihwLkRGKHEsYSk+PTAp +cmV0dXJuITEKcS5wdXNoKHAueW8oYSkpfXJldHVybiEwfSwKUjpmdW5jdGlvbihhLGIpe3ZhciBzPXRo +aXMKaWYodHlwZW9mIGI9PSJzdHJpbmciJiZiIT09Il9fcHJvdG9fXyIpcmV0dXJuIHMuSChzLmIsYikK +ZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciImJihiJjEwNzM3NDE4MjMpPT09YilyZXR1cm4gcy5IKHMu +YyxiKQplbHNlIHJldHVybiBzLnFnKGIpfSwKcWc6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbz10aGlz +LG49by5kCmlmKG49PW51bGwpcmV0dXJuITEKcz1vLk4oYSkKcj1uW3NdCnE9by5ERihyLGEpCmlmKHE8 +MClyZXR1cm4hMQpwPXIuc3BsaWNlKHEsMSlbMF0KaWYoMD09PXIubGVuZ3RoKWRlbGV0ZSBuW3NdCm8u +RyhwKQpyZXR1cm4hMH0sCmJROmZ1bmN0aW9uKGEsYil7SC5MaCh0aGlzKS5jLmEoYikKaWYodC5tLmEo +YVtiXSkhPW51bGwpcmV0dXJuITEKYVtiXT10aGlzLnlvKGIpCnJldHVybiEwfSwKSDpmdW5jdGlvbihh +LGIpe3ZhciBzCmlmKGE9PW51bGwpcmV0dXJuITEKcz10Lm0uYShhW2JdKQppZihzPT1udWxsKXJldHVy +biExCnRoaXMuRyhzKQpkZWxldGUgYVtiXQpyZXR1cm4hMH0sClM6ZnVuY3Rpb24oKXt0aGlzLnI9dGhp +cy5yKzEmMTA3Mzc0MTgyM30sCnlvOmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcyxxPW5ldyBQLmJuKEgu +TGgocikuYy5hKGEpKQppZihyLmU9PW51bGwpci5lPXIuZj1xCmVsc2V7cz1yLmYKcy50b1N0cmluZwpx +LmM9cwpyLmY9cy5iPXF9KytyLmEKci5TKCkKcmV0dXJuIHF9LApHOmZ1bmN0aW9uKGEpe3ZhciBzPXRo +aXMscj1hLmMscT1hLmIKaWYocj09bnVsbClzLmU9cQplbHNlIHIuYj1xCmlmKHE9PW51bGwpcy5mPXIK +ZWxzZSBxLmM9cjstLXMuYQpzLlMoKX0sCk46ZnVuY3Rpb24oYSl7cmV0dXJuIEouaGYoYSkmMTA3Mzc0 +MTgyM30sCkRGOmZ1bmN0aW9uKGEsYil7dmFyIHMscgppZihhPT1udWxsKXJldHVybi0xCnM9YS5sZW5n +dGgKZm9yKHI9MDtyPHM7KytyKWlmKEouUk0oYVtyXS5hLGIpKXJldHVybiByCnJldHVybi0xfX0KUC5i +bi5wcm90b3R5cGU9e30KUC5sbS5wcm90b3R5cGU9ewpnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmR9 +LApGOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcyxyPXMuYyxxPXMuYQppZihzLmIhPT1xLnIpdGhyb3cgSC5i +KFAuYTQocSkpCmVsc2UgaWYocj09bnVsbCl7cy5zaihudWxsKQpyZXR1cm4hMX1lbHNle3Muc2oocy4k +dGkuQygiMT8iKS5hKHIuYSkpCnMuYz1yLmIKcmV0dXJuITB9fSwKc2o6ZnVuY3Rpb24oYSl7dGhpcy5k +PXRoaXMuJHRpLkMoIjE/IikuYShhKX0sCiRpQW46MX0KUC5tVy5wcm90b3R5cGU9e30KUC51eS5wcm90 +b3R5cGU9eyRpYlE6MSwkaWNYOjEsJGl6TToxfQpQLmxELnByb3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEp +e3JldHVybiBuZXcgSC5hNyhhLHRoaXMuZ0EoYSksSC56KGEpLkMoImE3PGxELkU+IikpfSwKRTpmdW5j +dGlvbihhLGIpe3JldHVybiB0aGlzLnEoYSxiKX0sCks6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyCkgueihh +KS5DKCJ+KGxELkUpIikuYShiKQpzPXRoaXMuZ0EoYSkKZm9yKHI9MDtyPHM7KytyKXtiLiQxKHRoaXMu +cShhLHIpKQppZihzIT09dGhpcy5nQShhKSl0aHJvdyBILmIoUC5hNChhKSl9fSwKZ2wwOmZ1bmN0aW9u +KGEpe3JldHVybiB0aGlzLmdBKGEpPT09MH0sCmdvcjpmdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5nbDAo +YSl9LApFMjpmdW5jdGlvbihhLGIsYyl7dmFyIHM9SC56KGEpCnJldHVybiBuZXcgSC5sSihhLHMuS3Eo +YykuQygiMShsRC5FKSIpLmEoYikscy5DKCJAPGxELkU+IikuS3EoYykuQygibEo8MSwyPiIpKX0sCmVS +OmZ1bmN0aW9uKGEsYil7cmV0dXJuIEgucUMoYSxiLG51bGwsSC56KGEpLkMoImxELkUiKSl9LApkcjpm +dW5jdGlvbihhLGIpe3JldHVybiBuZXcgSC5qVihhLEgueihhKS5DKCJAPGxELkU+IikuS3EoYikuQygi +alY8MSwyPiIpKX0sCmR1OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzCkgueihhKS5DKCJsRC5FPyIpLmEo +ZCkKUC5qQihiLGMsdGhpcy5nQShhKSkKZm9yKHM9YjtzPGM7KytzKXRoaXMuWTUoYSxzLGQpfSwKdzpm +dW5jdGlvbihhKXtyZXR1cm4gUC5XRShhLCJbIiwiXSIpfX0KUC5pbC5wcm90b3R5cGU9e30KUC5yYS5w +cm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciBzLHI9dGhpcy5hCmlmKCFyLmEpdGhpcy5iLmEr +PSIsICIKci5hPSExCnI9dGhpcy5iCnM9ci5hKz1ILkVqKGEpCnIuYT1zKyI6ICIKci5hKz1ILkVqKGIp +fSwKJFM6MTF9ClAuWWsucHJvdG90eXBlPXsKSzpmdW5jdGlvbihhLGIpe3ZhciBzLHIKSC5MaCh0aGlz +KS5DKCJ+KFlrLkssWWsuVikiKS5hKGIpCmZvcihzPUouSVQodGhpcy5ndmMoKSk7cy5GKCk7KXtyPXMu +Z2woKQpiLiQyKHIsdGhpcy5xKDAscikpfX0sCmdQdTpmdW5jdGlvbihhKXtyZXR1cm4gSi5NMSh0aGlz +Lmd2YygpLG5ldyBQLnlRKHRoaXMpLEguTGgodGhpcykuQygiTjM8WWsuSyxZay5WPiIpKX0sCng0OmZ1 +bmN0aW9uKGEpe3JldHVybiBKLnpsKHRoaXMuZ3ZjKCksYSl9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4g +Si5IbSh0aGlzLmd2YygpKX0sCmdsMDpmdW5jdGlvbihhKXtyZXR1cm4gSi51VSh0aGlzLmd2YygpKX0s +Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAubk8odGhpcyl9LAokaVowOjF9ClAueVEucHJvdG90eXBlPXsK +JDE6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hLHI9SC5MaChzKQpyLkMoIllrLksiKS5hKGEpCnJldHVy +biBuZXcgUC5OMyhhLHMucSgwLGEpLHIuQygiQDxZay5LPiIpLktxKHIuQygiWWsuViIpKS5DKCJOMzwx +LDI+IikpfSwKJFM6ZnVuY3Rpb24oKXtyZXR1cm4gSC5MaCh0aGlzLmEpLkMoIk4zPFlrLkssWWsuVj4o +WWsuSykiKX19ClAuS1AucHJvdG90eXBlPXsKWTU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPUguTGgodGhp +cykKcy5jLmEoYikKcy5RWzFdLmEoYykKdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBtb2RpZnkgdW5tb2Rp +ZmlhYmxlIG1hcCIpKX19ClAuUG4ucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlz +LmEucSgwLGIpfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzPUguTGgodGhpcykKdGhpcy5hLlk1KDAs +cy5jLmEoYikscy5RWzFdLmEoYykpfSwKeDQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS54NChhKX0s +Cks6ZnVuY3Rpb24oYSxiKXt0aGlzLmEuSygwLEguTGgodGhpcykuQygifigxLDIpIikuYShiKSl9LApn +bDA6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hCnJldHVybiBzLmdsMChzKX0sCmdBOmZ1bmN0aW9uKGEp +e3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5nQShzKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIEouaih0aGlz +LmEpfSwKZ1B1OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5nUHUocyl9LAokaVowOjF9 +ClAuR2oucHJvdG90eXBlPXt9ClAubGYucHJvdG90eXBlPXsKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0 +aGlzLmdBKHRoaXMpPT09MH0sCmdvcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nQSh0aGlzKSE9PTB9 +LApGVjpmdW5jdGlvbihhLGIpe3ZhciBzCmZvcihzPUouSVQoSC5MaCh0aGlzKS5DKCJjWDxsZi5FPiIp +LmEoYikpO3MuRigpOyl0aGlzLmkoMCxzLmdsKCkpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gUC5XRSh0 +aGlzLCJ7IiwifSIpfSwKazpmdW5jdGlvbihhLGIpe3ZhciBzLHI9dGhpcy5nbSh0aGlzKQppZighci5G +KCkpcmV0dXJuIiIKaWYoYj09PSIiKXtzPSIiCmRvIHMrPUguRWooci5kKQp3aGlsZShyLkYoKSl9ZWxz +ZXtzPUguRWooci5kKQpmb3IoO3IuRigpOylzPXMrYitILkVqKHIuZCl9cmV0dXJuIHMuY2hhckNvZGVB +dCgwKT09MD9zOnN9LAplUjpmdW5jdGlvbihhLGIpe3JldHVybiBILmJLKHRoaXMsYixILkxoKHRoaXMp +LkMoImxmLkUiKSl9LApFOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHA9ImluZGV4IgpILmNiKGIscCx0 +LlMpClAuazEoYixwKQpmb3Iocz10aGlzLmdtKHRoaXMpLHI9MDtzLkYoKTspe3E9cy5kCmlmKGI9PT1y +KXJldHVybiBxOysrcn10aHJvdyBILmIoUC5DZihiLHRoaXMscCxudWxsLHIpKX19ClAuVmoucHJvdG90 +eXBlPXskaWJROjEsJGljWDoxLCRpeHU6MX0KUC5Ydi5wcm90b3R5cGU9eyRpYlE6MSwkaWNYOjEsJGl4 +dToxfQpQLm5ZLnByb3RvdHlwZT17fQpQLldZLnByb3RvdHlwZT17fQpQLlJVLnByb3RvdHlwZT17fQpQ +LnBSLnByb3RvdHlwZT17fQpQLnV3LnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPXRo +aXMuYgppZihyPT1udWxsKXJldHVybiB0aGlzLmMucSgwLGIpCmVsc2UgaWYodHlwZW9mIGIhPSJzdHJp +bmciKXJldHVybiBudWxsCmVsc2V7cz1yW2JdCnJldHVybiB0eXBlb2Ygcz09InVuZGVmaW5lZCI/dGhp +cy5mYihiKTpzfX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmI9PW51bGw/dGhpcy5jLmE6dGhp +cy5DZigpLmxlbmd0aH0sCmdsMDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nQSh0aGlzKT09PTB9LApn +dmM6ZnVuY3Rpb24oKXtpZih0aGlzLmI9PW51bGwpe3ZhciBzPXRoaXMuYwpyZXR1cm4gbmV3IEguaTUo +cyxILkxoKHMpLkMoImk1PDE+IikpfXJldHVybiBuZXcgUC5pOCh0aGlzKX0sClk1OmZ1bmN0aW9uKGEs +YixjKXt2YXIgcyxyLHE9dGhpcwppZihxLmI9PW51bGwpcS5jLlk1KDAsYixjKQplbHNlIGlmKHEueDQo +Yikpe3M9cS5iCnNbYl09YwpyPXEuYQppZihyPT1udWxsP3MhPW51bGw6ciE9PXMpcltiXT1udWxsfWVs +c2UgcS5YSygpLlk1KDAsYixjKX0sCng0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuYj09bnVsbClyZXR1cm4g +dGhpcy5jLng0KGEpCnJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhp +cy5hLGEpfSwKSzpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG89dGhpcwp0LmNBLmEoYikKaWYoby5i +PT1udWxsKXJldHVybiBvLmMuSygwLGIpCnM9by5DZigpCmZvcihyPTA7cjxzLmxlbmd0aDsrK3Ipe3E9 +c1tyXQpwPW8uYltxXQppZih0eXBlb2YgcD09InVuZGVmaW5lZCIpe3A9UC5RZShvLmFbcV0pCm8uYltx +XT1wfWIuJDIocSxwKQppZihzIT09by5jKXRocm93IEguYihQLmE0KG8pKX19LApDZjpmdW5jdGlvbigp +e3ZhciBzPXQuYk0uYSh0aGlzLmMpCmlmKHM9PW51bGwpcz10aGlzLmM9SC5WTShPYmplY3Qua2V5cyh0 +aGlzLmEpLHQucykKcmV0dXJuIHN9LApYSzpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG8sbj10aGlzCmlm +KG4uYj09bnVsbClyZXR1cm4gbi5jCnM9UC5GbCh0Lk4sdC56KQpyPW4uQ2YoKQpmb3IocT0wO3A9ci5s +ZW5ndGgscTxwOysrcSl7bz1yW3FdCnMuWTUoMCxvLG4ucSgwLG8pKX1pZihwPT09MClDLk5tLmkociwi +IikKZWxzZSBDLk5tLnNBKHIsMCkKbi5hPW4uYj1udWxsCnJldHVybiBuLmM9c30sCmZiOmZ1bmN0aW9u +KGEpe3ZhciBzCmlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hLGEp +KXJldHVybiBudWxsCnM9UC5RZSh0aGlzLmFbYV0pCnJldHVybiB0aGlzLmJbYV09c319ClAuaTgucHJv +dG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hCnJldHVybiBzLmdBKHMpfSwKRTpmdW5j +dGlvbihhLGIpe3ZhciBzPXRoaXMuYQppZihzLmI9PW51bGwpcz1zLmd2YygpLkUoMCxiKQplbHNle3M9 +cy5DZigpCmlmKGI8MHx8Yj49cy5sZW5ndGgpcmV0dXJuIEguT0gocyxiKQpzPXNbYl19cmV0dXJuIHN9 +LApnbTpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmEKaWYocy5iPT1udWxsKXtzPXMuZ3ZjKCkKcz1zLmdt +KHMpfWVsc2V7cz1zLkNmKCkKcz1uZXcgSi5tMShzLHMubGVuZ3RoLEgudDYocykuQygibTE8MT4iKSl9 +cmV0dXJuIHN9LAp0ZzpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmEueDQoYil9fQpQLnhyLnByb3Rv +dHlwZT17CiQwOmZ1bmN0aW9uKCl7dmFyIHMscgp0cnl7cz1uZXcgVGV4dERlY29kZXIoInV0Zi04Iix7 +ZmF0YWw6dHJ1ZX0pCnJldHVybiBzfWNhdGNoKHIpe0guUnUocil9cmV0dXJuIG51bGx9LAokUzoxMn0K +UC5Oei5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3ZhciBzLHIKdHJ5e3M9bmV3IFRleHREZWNvZGVy +KCJ1dGYtOCIse2ZhdGFsOmZhbHNlfSkKcmV0dXJuIHN9Y2F0Y2gocil7SC5SdShyKX1yZXR1cm4gbnVs +bH0sCiRTOjEyfQpQLkNWLnByb3RvdHlwZT17CnlyOmZ1bmN0aW9uKGEwLGExLGEyKXt2YXIgcyxyLHEs +cCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYT0iSW52YWxpZCBiYXNlNjQgZW5jb2RpbmcgbGVu +Z3RoICIKYTI9UC5qQihhMSxhMixhMC5sZW5ndGgpCnM9JC5WNygpCmZvcihyPWExLHE9cixwPW51bGws +bz0tMSxuPS0xLG09MDtyPGEyO3I9bCl7bD1yKzEKaz1DLnhCLlcoYTAscikKaWYoaz09PTM3KXtqPWwr +MgppZihqPD1hMil7aT1ILm9vKEMueEIuVyhhMCxsKSkKaD1ILm9vKEMueEIuVyhhMCxsKzEpKQpnPWkq +MTYraC0oaCYyNTYpCmlmKGc9PT0zNylnPS0xCmw9an1lbHNlIGc9LTF9ZWxzZSBnPWsKaWYoMDw9ZyYm +Zzw9MTI3KXtpZihnPDB8fGc+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsZykKZj1zW2ddCmlmKGY+PTAp +e2c9Qy54Qi5PKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3 +eHl6MDEyMzQ1Njc4OSsvIixmKQppZihnPT09ayljb250aW51ZQprPWd9ZWxzZXtpZihmPT09LTEpe2lm +KG88MCl7ZT1wPT1udWxsP251bGw6cC5hLmxlbmd0aAppZihlPT1udWxsKWU9MApvPWUrKHItcSkKbj1y +fSsrbQppZihrPT09NjEpY29udGludWV9az1nfWlmKGYhPT0tMil7aWYocD09bnVsbCl7cD1uZXcgUC5S +bigiIikKZT1wfWVsc2UgZT1wCmUuYSs9Qy54Qi5OaihhMCxxLHIpCmUuYSs9SC5MdyhrKQpxPWwKY29u +dGludWV9fXRocm93IEguYihQLnJyKCJJbnZhbGlkIGJhc2U2NCBkYXRhIixhMCxyKSl9aWYocCE9bnVs +bCl7ZT1wLmErPUMueEIuTmooYTAscSxhMikKZD1lLmxlbmd0aAppZihvPj0wKVAueE0oYTAsbixhMixv +LG0sZCkKZWxzZXtjPUMuam4uelkoZC0xLDQpKzEKaWYoYz09PTEpdGhyb3cgSC5iKFAucnIoYSxhMCxh +MikpCmZvcig7Yzw0Oyl7ZSs9Ij0iCnAuYT1lOysrY319ZT1wLmEKcmV0dXJuIEMueEIuaTcoYTAsYTEs +YTIsZS5jaGFyQ29kZUF0KDApPT0wP2U6ZSl9Yj1hMi1hMQppZihvPj0wKVAueE0oYTAsbixhMixvLG0s +YikKZWxzZXtjPUMuam4uelkoYiw0KQppZihjPT09MSl0aHJvdyBILmIoUC5ycihhLGEwLGEyKSkKaWYo +Yz4xKWEwPUMueEIuaTcoYTAsYTIsYTIsYz09PTI/Ij09IjoiPSIpfXJldHVybiBhMH19ClAuVTgucHJv +dG90eXBlPXt9ClAuVWsucHJvdG90eXBlPXt9ClAud0kucHJvdG90eXBlPXt9ClAuWmkucHJvdG90eXBl +PXt9ClAuVWQucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgcz1QLnAodGhpcy5hKQpyZXR1cm4o +dGhpcy5iIT1udWxsPyJDb252ZXJ0aW5nIG9iamVjdCB0byBhbiBlbmNvZGFibGUgb2JqZWN0IGZhaWxl +ZDoiOiJDb252ZXJ0aW5nIG9iamVjdCBkaWQgbm90IHJldHVybiBhbiBlbmNvZGFibGUgb2JqZWN0OiIp +KyIgIitzfX0KUC5LOC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJDeWNsaWMgZXJyb3Ig +aW4gSlNPTiBzdHJpbmdpZnkifX0KUC5ieS5wcm90b3R5cGU9ewpwVzpmdW5jdGlvbihhLGIsYyl7dmFy +IHMKdC5mVi5hKGMpCnM9UC5CUyhiLHRoaXMuZ0hlKCkuYSkKcmV0dXJuIHN9LApPQjpmdW5jdGlvbihh +LGIpe3ZhciBzCnQuZEEuYShiKQpzPVAudVgoYSx0aGlzLmdaRSgpLmIsbnVsbCkKcmV0dXJuIHN9LApn +WkU6ZnVuY3Rpb24oKXtyZXR1cm4gQy5uWH0sCmdIZTpmdW5jdGlvbigpe3JldHVybiBDLkEzfX0KUC5v +ai5wcm90b3R5cGU9e30KUC5NeC5wcm90b3R5cGU9e30KUC5TaC5wcm90b3R5cGU9ewpSVDpmdW5jdGlv +bihhKXt2YXIgcyxyLHEscCxvLG4sbSxsPWEubGVuZ3RoCmZvcihzPUouclkoYSkscj10aGlzLmMscT0w +LHA9MDtwPGw7KytwKXtvPXMuVyhhLHApCmlmKG8+OTIpe2lmKG8+PTU1Mjk2KXtuPW8mNjQ1MTIKaWYo +bj09PTU1Mjk2KXttPXArMQptPSEobTxsJiYoQy54Qi5XKGEsbSkmNjQ1MTIpPT09NTYzMjApfWVsc2Ug +bT0hMQppZighbSlpZihuPT09NTYzMjApe249cC0xCm49IShuPj0wJiYoQy54Qi5PKGEsbikmNjQ1MTIp +PT09NTUyOTYpfWVsc2Ugbj0hMQplbHNlIG49ITAKaWYobil7aWYocD5xKXIuYSs9Qy54Qi5OaihhLHEs +cCkKcT1wKzEKci5hKz1ILkx3KDkyKQpyLmErPUguTHcoMTE3KQpyLmErPUguTHcoMTAwKQpuPW8+Pj44 +JjE1CnIuYSs9SC5MdyhuPDEwPzQ4K246ODcrbikKbj1vPj4+NCYxNQpyLmErPUguTHcobjwxMD80OCtu +Ojg3K24pCm49byYxNQpyLmErPUguTHcobjwxMD80OCtuOjg3K24pfX1jb250aW51ZX1pZihvPDMyKXtp +ZihwPnEpci5hKz1DLnhCLk5qKGEscSxwKQpxPXArMQpyLmErPUguTHcoOTIpCnN3aXRjaChvKXtjYXNl +IDg6ci5hKz1ILkx3KDk4KQpicmVhawpjYXNlIDk6ci5hKz1ILkx3KDExNikKYnJlYWsKY2FzZSAxMDpy +LmErPUguTHcoMTEwKQpicmVhawpjYXNlIDEyOnIuYSs9SC5MdygxMDIpCmJyZWFrCmNhc2UgMTM6ci5h +Kz1ILkx3KDExNCkKYnJlYWsKZGVmYXVsdDpyLmErPUguTHcoMTE3KQpyLmErPUguTHcoNDgpCnIuYSs9 +SC5Mdyg0OCkKbj1vPj4+NCYxNQpyLmErPUguTHcobjwxMD80OCtuOjg3K24pCm49byYxNQpyLmErPUgu +THcobjwxMD80OCtuOjg3K24pCmJyZWFrfX1lbHNlIGlmKG89PT0zNHx8bz09PTkyKXtpZihwPnEpci5h +Kz1DLnhCLk5qKGEscSxwKQpxPXArMQpyLmErPUguTHcoOTIpCnIuYSs9SC5MdyhvKX19aWYocT09PTAp +ci5hKz1ILkVqKGEpCmVsc2UgaWYocTxsKXIuYSs9cy5OaihhLHEsbCl9LApKbjpmdW5jdGlvbihhKXt2 +YXIgcyxyLHEscApmb3Iocz10aGlzLmEscj1zLmxlbmd0aCxxPTA7cTxyOysrcSl7cD1zW3FdCmlmKGE9 +PW51bGw/cD09bnVsbDphPT09cCl0aHJvdyBILmIobmV3IFAuSzgoYSxudWxsKSl9Qy5ObS5pKHMsYSl9 +LAppVTpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxvPXRoaXMKaWYoby50TShhKSlyZXR1cm4Kby5Kbihh +KQp0cnl7cz1vLmIuJDEoYSkKaWYoIW8udE0ocykpe3E9UC5HeShhLG51bGwsby5nVksoKSkKdGhyb3cg +SC5iKHEpfXE9by5hCmlmKDA+PXEubGVuZ3RoKXJldHVybiBILk9IKHEsLTEpCnEucG9wKCl9Y2F0Y2go +cCl7cj1ILlJ1KHApCnE9UC5HeShhLHIsby5nVksoKSkKdGhyb3cgSC5iKHEpfX0sCnRNOmZ1bmN0aW9u +KGEpe3ZhciBzLHIscT10aGlzCmlmKHR5cGVvZiBhPT0ibnVtYmVyIil7aWYoIWlzRmluaXRlKGEpKXJl +dHVybiExCnEuYy5hKz1DLkNELncoYSkKcmV0dXJuITB9ZWxzZSBpZihhPT09ITApe3EuYy5hKz0idHJ1 +ZSIKcmV0dXJuITB9ZWxzZSBpZihhPT09ITEpe3EuYy5hKz0iZmFsc2UiCnJldHVybiEwfWVsc2UgaWYo +YT09bnVsbCl7cS5jLmErPSJudWxsIgpyZXR1cm4hMH1lbHNlIGlmKHR5cGVvZiBhPT0ic3RyaW5nIil7 +cz1xLmMKcy5hKz0nIicKcS5SVChhKQpzLmErPSciJwpyZXR1cm4hMH1lbHNlIGlmKHQuai5iKGEpKXtx +LkpuKGEpCnEubEsoYSkKcz1xLmEKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0gocywtMSkKcy5wb3Ao +KQpyZXR1cm4hMH1lbHNlIGlmKHQuZi5iKGEpKXtxLkpuKGEpCnI9cS5qdyhhKQpzPXEuYQppZigwPj1z +Lmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCnJldHVybiByfWVsc2UgcmV0dXJuITF9LAps +SzpmdW5jdGlvbihhKXt2YXIgcyxyLHE9dGhpcy5jCnEuYSs9IlsiCnM9Si5VNihhKQppZihzLmdvcihh +KSl7dGhpcy5pVShzLnEoYSwwKSkKZm9yKHI9MTtyPHMuZ0EoYSk7KytyKXtxLmErPSIsIgp0aGlzLmlV +KHMucShhLHIpKX19cS5hKz0iXSJ9LApqdzpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxvLG4sbT10aGlz +LGw9e30KaWYoYS5nbDAoYSkpe20uYy5hKz0ie30iCnJldHVybiEwfXM9YS5nQShhKSoyCnI9UC5POChz +LG51bGwsITEsdC5XKQpxPWwuYT0wCmwuYj0hMAphLksoMCxuZXcgUC50aShsLHIpKQppZighbC5iKXJl +dHVybiExCnA9bS5jCnAuYSs9InsiCmZvcihvPSciJztxPHM7cSs9MixvPScsIicpe3AuYSs9bwptLlJU +KEguaChyW3FdKSkKcC5hKz0nIjonCm49cSsxCmlmKG4+PXMpcmV0dXJuIEguT0gocixuKQptLmlVKHJb +bl0pfXAuYSs9In0iCnJldHVybiEwfX0KUC50aS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3Zh +ciBzLHIKaWYodHlwZW9mIGEhPSJzdHJpbmciKXRoaXMuYS5iPSExCnM9dGhpcy5iCnI9dGhpcy5hCkMu +Tm0uWTUocyxyLmErKyxhKQpDLk5tLlk1KHMsci5hKyssYil9LAokUzoxMX0KUC50dS5wcm90b3R5cGU9 +ewpnVks6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmMuYQpyZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6 +c319ClAudTUucHJvdG90eXBlPXsKZ1pFOmZ1bmN0aW9uKCl7cmV0dXJuIEMuUWt9fQpQLkUzLnByb3Rv +dHlwZT17CldKOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPVAuakIoMCxudWxsLGEubGVuZ3RoKSxvPXAt +MAppZihvPT09MClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCkKcz1vKjMKcj1uZXcgVWludDhBcnJheShz +KQpxPW5ldyBQLlJ3KHIpCmlmKHEuR3goYSwwLHApIT09cCl7Si5hNihhLHAtMSkKcS5STygpfXJldHVy +biBuZXcgVWludDhBcnJheShyLnN1YmFycmF5KDAsSC5yTSgwLHEuYixzKSkpfX0KUC5Sdy5wcm90b3R5 +cGU9ewpSTzpmdW5jdGlvbigpe3ZhciBzPXRoaXMscj1zLmMscT1zLmIscD1zLmI9cSsxLG89ci5sZW5n +dGgKaWYocT49bylyZXR1cm4gSC5PSChyLHEpCnJbcV09MjM5CnE9cy5iPXArMQppZihwPj1vKXJldHVy +biBILk9IKHIscCkKcltwXT0xOTEKcy5iPXErMQppZihxPj1vKXJldHVybiBILk9IKHIscSkKcltxXT0x +ODl9LApPNjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbj10aGlzCmlmKChiJjY0NTEyKT09PTU2 +MzIwKXtzPTY1NTM2KygoYSYxMDIzKTw8MTApfGImMTAyMwpyPW4uYwpxPW4uYgpwPW4uYj1xKzEKbz1y +Lmxlbmd0aAppZihxPj1vKXJldHVybiBILk9IKHIscSkKcltxXT1zPj4+MTh8MjQwCnE9bi5iPXArMQpp +ZihwPj1vKXJldHVybiBILk9IKHIscCkKcltwXT1zPj4+MTImNjN8MTI4CnA9bi5iPXErMQppZihxPj1v +KXJldHVybiBILk9IKHIscSkKcltxXT1zPj4+NiY2M3wxMjgKbi5iPXArMQppZihwPj1vKXJldHVybiBI +Lk9IKHIscCkKcltwXT1zJjYzfDEyOApyZXR1cm4hMH1lbHNle24uUk8oKQpyZXR1cm4hMX19LApHeDpm +dW5jdGlvbihhLGIsYyl7dmFyIHMscixxLHAsbyxuLG0sbD10aGlzCmlmKGIhPT1jJiYoQy54Qi5PKGEs +Yy0xKSY2NDUxMik9PT01NTI5NiktLWMKZm9yKHM9bC5jLHI9cy5sZW5ndGgscT1iO3E8YzsrK3Epe3A9 +Qy54Qi5XKGEscSkKaWYocDw9MTI3KXtvPWwuYgppZihvPj1yKWJyZWFrCmwuYj1vKzEKc1tvXT1wfWVs +c2V7bz1wJjY0NTEyCmlmKG89PT01NTI5Nil7aWYobC5iKzQ+cilicmVhawpuPXErMQppZihsLk82KHAs +Qy54Qi5XKGEsbikpKXE9bn1lbHNlIGlmKG89PT01NjMyMCl7aWYobC5iKzM+cilicmVhawpsLlJPKCl9 +ZWxzZSBpZihwPD0yMDQ3KXtvPWwuYgptPW8rMQppZihtPj1yKWJyZWFrCmwuYj1tCmlmKG8+PXIpcmV0 +dXJuIEguT0gocyxvKQpzW29dPXA+Pj42fDE5MgpsLmI9bSsxCnNbbV09cCY2M3wxMjh9ZWxzZXtvPWwu +YgppZihvKzI+PXIpYnJlYWsKbT1sLmI9bysxCmlmKG8+PXIpcmV0dXJuIEguT0gocyxvKQpzW29dPXA+ +Pj4xMnwyMjQKbz1sLmI9bSsxCmlmKG0+PXIpcmV0dXJuIEguT0gocyxtKQpzW21dPXA+Pj42JjYzfDEy +OApsLmI9bysxCmlmKG8+PXIpcmV0dXJuIEguT0gocyxvKQpzW29dPXAmNjN8MTI4fX19cmV0dXJuIHF9 +fQpQLkdZLnByb3RvdHlwZT17CldKOmZ1bmN0aW9uKGEpe3ZhciBzLHIKdC5MLmEoYSkKcz10aGlzLmEK +cj1QLmt5KHMsYSwwLG51bGwpCmlmKHIhPW51bGwpcmV0dXJuIHIKcmV0dXJuIG5ldyBQLmJ6KHMpLk5l +KGEsMCxudWxsLCEwKX19ClAuYnoucHJvdG90eXBlPXsKTmU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHMs +cixxLHAsbyxuPXRoaXMKdC5MLmEoYSkKcz1QLmpCKGIsYyxKLkhtKGEpKQppZihiPT09cylyZXR1cm4i +IgpyPVAuankoYSxiLHMpCnE9bi5oTyhyLDAscy1iLCEwKQpwPW4uYgppZigocCYxKSE9PTApe289UC5q +NChwKQpuLmI9MAp0aHJvdyBILmIoUC5ycihvLGEsYituLmMpKX1yZXR1cm4gcX0sCmhPOmZ1bmN0aW9u +KGEsYixjLGQpe3ZhciBzLHIscT10aGlzCmlmKGMtYj4xMDAwKXtzPUMuam4uQlUoYitjLDIpCnI9cS5o +TyhhLGIscywhMSkKaWYoKHEuYiYxKSE9PTApcmV0dXJuIHIKcmV0dXJuIHIrcS5oTyhhLHMsYyxkKX1y +ZXR1cm4gcS5FaChhLGIsYyxkKX0sCkVoOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbixt +LGwsaz10aGlzLGo9NjU1MzMsaT1rLmIsaD1rLmMsZz1uZXcgUC5SbigiIiksZj1iKzEsZT1hLmxlbmd0 +aAppZihiPDB8fGI+PWUpcmV0dXJuIEguT0goYSxiKQpzPWFbYl0KJGxhYmVsMCQwOmZvcihyPWsuYTsh +MDspe2Zvcig7ITA7Zj1vKXtxPUMueEIuVygiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB -QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkZGRkZGRkZG -RkZGRkZGRkdHR0dHR0dHR0dHR0dHR0dISEhISEhISEhISEhISEhISEhISEhISEhISEhJSEhISkVFQkJC -QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCS0NDQ0NDQ0NDQ0NDQ0RDTE9OTk5NRUVFRUVFRUVFRUUi -LHMpJjMxCmg9aTw9MzI/cyY2MTY5ND4+PnE6KHMmNjN8aDw8Nik+Pj4wCmk9Qy54Qi5XKCIgXHgwMDA6 -WEVDQ0NDQ046bERiIFx4MDAwOlhFQ0NDQ0NOdmxEYiBceDAwMDpYRUNDQ0NDTjpsRGIgQUFBQUFceDAw -XHgwMFx4MDBceDAwXHgwMEFBQUFBMDAwMDBBQUFBQTo6Ojo6QUFBQUFHRzAwMEFBQUFBMDBLS0tBQUFB -QUc6Ojo6QUFBQUE6SUlJSUFBQUFBMDAwXHg4MDBBQUFBQVx4MDBceDAwXHgwMFx4MDAgQUFBQUEiLGkr -cSkKaWYoaT09PTApe2cuYSs9SC5MdyhoKQppZihmPT09YylicmVhayAkbGFiZWwwJDAKYnJlYWt9ZWxz -ZSBpZigoaSYxKSE9PTApe2lmKHIpc3dpdGNoKGkpe2Nhc2UgNjk6Y2FzZSA2NzpnLmErPUguTHcoaikK -YnJlYWsKY2FzZSA2NTpnLmErPUguTHcoaik7LS1mCmJyZWFrCmRlZmF1bHQ6cD1nLmErPUguTHcoaikK -Zy5hPXArSC5MdyhqKQpicmVha31lbHNle2suYj1pCmsuYz1mLTEKcmV0dXJuIiJ9aT0wfWlmKGY9PT1j -KWJyZWFrICRsYWJlbDAkMApvPWYrMQppZihmPDB8fGY+PWUpcmV0dXJuIEguT0goYSxmKQpzPWFbZl19 -bz1mKzEKaWYoZjwwfHxmPj1lKXJldHVybiBILk9IKGEsZikKcz1hW2ZdCmlmKHM8MTI4KXt3aGlsZSgh -MCl7aWYoIShvPGMpKXtuPWMKYnJlYWt9bT1vKzEKaWYobzwwfHxvPj1lKXJldHVybiBILk9IKGEsbykK -cz1hW29dCmlmKHM+PTEyOCl7bj1tLTEKbz1tCmJyZWFrfW89bX1pZihuLWY8MjApZm9yKGw9ZjtsPG47 -KytsKXtpZihsPj1lKXJldHVybiBILk9IKGEsbCkKZy5hKz1ILkx3KGFbbF0pfWVsc2UgZy5hKz1QLkhN -KGEsZixuKQppZihuPT09YylicmVhayAkbGFiZWwwJDAKZj1vfWVsc2UgZj1vfWlmKGQmJmk+MzIpaWYo -cilnLmErPUguTHcoaikKZWxzZXtrLmI9NzcKay5jPWMKcmV0dXJuIiJ9ay5iPWkKay5jPWgKZT1nLmEK -cmV0dXJuIGUuY2hhckNvZGVBdCgwKT09MD9lOmV9fQpQLldGLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9u -KGEsYil7dmFyIHMscixxCnQuZm8uYShhKQpzPXRoaXMuYgpyPXRoaXMuYQpzLmErPXIuYQpxPXMuYSs9 -SC5FaihhLmEpCnMuYT1xKyI6ICIKcy5hKz1QLnAoYikKci5hPSIsICJ9LAokUzo0MH0KUC5pUC5wcm90 -b3R5cGU9ewpETjpmdW5jdGlvbihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFu -Y2VvZiBQLmlQJiZ0aGlzLmE9PT1iLmEmJiEwfSwKZ2lPOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYQpy -ZXR1cm4oc15DLmpuLndHKHMsMzApKSYxMDczNzQxODIzfSwKdzpmdW5jdGlvbihhKXt2YXIgcz10aGlz -LHI9UC5HcShILnRKKHMpKSxxPVAuaDAoSC5OUyhzKSkscD1QLmgwKEguakEocykpLG89UC5oMChILklY -KHMpKSxuPVAuaDAoSC5jaChzKSksbT1QLmgwKEguSmQocykpLGw9UC5WeChILm8xKHMpKSxrPXIrIi0i -K3ErIi0iK3ArIiAiK28rIjoiK24rIjoiK20rIi4iK2wKcmV0dXJuIGt9fQpQLlhTLnByb3RvdHlwZT17 -CmdJSTpmdW5jdGlvbigpe3JldHVybiBILnRzKHRoaXMuJHRocm93bkpzRXJyb3IpfX0KUC5DNi5wcm90 -b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYQppZihzIT1udWxsKXJldHVybiJBc3NlcnRp -b24gZmFpbGVkOiAiK1AucChzKQpyZXR1cm4iQXNzZXJ0aW9uIGZhaWxlZCJ9fQpQLkV6LnByb3RvdHlw -ZT17fQpQLkYucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iVGhyb3cgb2YgbnVsbC4ifX0K -UC51LnByb3RvdHlwZT17CmdaOmZ1bmN0aW9uKCl7cmV0dXJuIkludmFsaWQgYXJndW1lbnQiKyghdGhp -cy5hPyIocykiOiIiKX0sCmd1OmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LAp3OmZ1bmN0aW9uKGEpe3ZhciBz -LHIscT10aGlzLHA9cS5jLG89cD09bnVsbD8iIjoiICgiK3ArIikiLG49cS5kLG09bj09bnVsbD8iIjoi -OiAiK0guRWoobiksbD1xLmdaKCkrbyttCmlmKCFxLmEpcmV0dXJuIGwKcz1xLmd1KCkKcj1QLnAocS5i -KQpyZXR1cm4gbCtzKyI6ICIrcn19ClAuYkoucHJvdG90eXBlPXsKZ1o6ZnVuY3Rpb24oKXtyZXR1cm4i -UmFuZ2VFcnJvciJ9LApndTpmdW5jdGlvbigpe3ZhciBzLHI9dGhpcy5lLHE9dGhpcy5mCmlmKHI9PW51 -bGwpcz1xIT1udWxsPyI6IE5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gIitILkVqKHEpOiIiCmVsc2Ug -aWYocT09bnVsbClzPSI6IE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIitILkVqKHIpCmVsc2Ug -aWYocT5yKXM9IjogTm90IGluIGluY2x1c2l2ZSByYW5nZSAiK0guRWoocikrIi4uIitILkVqKHEpCmVs -c2Ugcz1xPHI/IjogVmFsaWQgdmFsdWUgcmFuZ2UgaXMgZW1wdHkiOiI6IE9ubHkgdmFsaWQgdmFsdWUg -aXMgIitILkVqKHIpCnJldHVybiBzfX0KUC5lWS5wcm90b3R5cGU9ewpnWjpmdW5jdGlvbigpe3JldHVy -biJSYW5nZUVycm9yIn0sCmd1OmZ1bmN0aW9uKCl7dmFyIHMscj1ILnVQKHRoaXMuYikKaWYodHlwZW9m -IHIhPT0ibnVtYmVyIilyZXR1cm4gci5KKCkKaWYocjwwKXJldHVybiI6IGluZGV4IG11c3Qgbm90IGJl -IG5lZ2F0aXZlIgpzPXRoaXMuZgppZihzPT09MClyZXR1cm4iOiBubyBpbmRpY2VzIGFyZSB2YWxpZCIK -cmV0dXJuIjogaW5kZXggc2hvdWxkIGJlIGxlc3MgdGhhbiAiK0guRWoocyl9LApnQTpmdW5jdGlvbihh -KXtyZXR1cm4gdGhpcy5mfX0KUC5tcC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxw -LG8sbixtLGwsaz10aGlzLGo9e30saT1uZXcgUC5SbigiIikKai5hPSIiCnM9ay5jCmZvcihyPXMubGVu -Z3RoLHE9MCxwPSIiLG89IiI7cTxyOysrcSxvPSIsICIpe249c1txXQppLmE9cCtvCnA9aS5hKz1QLnAo -bikKai5hPSIsICJ9ay5kLksoMCxuZXcgUC5XRihqLGkpKQptPVAucChrLmEpCmw9aS53KDApCnI9Ik5v -U3VjaE1ldGhvZEVycm9yOiBtZXRob2Qgbm90IGZvdW5kOiAnIitILkVqKGsuYi5hKSsiJ1xuUmVjZWl2 -ZXI6ICIrbSsiXG5Bcmd1bWVudHM6IFsiK2wrIl0iCnJldHVybiByfX0KUC51Yi5wcm90b3R5cGU9ewp3 -OmZ1bmN0aW9uKGEpe3JldHVybiJVbnN1cHBvcnRlZCBvcGVyYXRpb246ICIrdGhpcy5hfX0KUC5kcy5w -cm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcyE9bnVsbD8iVW5pbXBs -ZW1lbnRlZEVycm9yOiAiK3M6IlVuaW1wbGVtZW50ZWRFcnJvciJ9fQpQLmxqLnByb3RvdHlwZT17Cnc6 -ZnVuY3Rpb24oYSl7cmV0dXJuIkJhZCBzdGF0ZTogIit0aGlzLmF9fQpQLlVWLnByb3RvdHlwZT17Cnc6 -ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hCmlmKHM9PW51bGwpcmV0dXJuIkNvbmN1cnJlbnQgbW9kaWZp -Y2F0aW9uIGR1cmluZyBpdGVyYXRpb24uIgpyZXR1cm4iQ29uY3VycmVudCBtb2RpZmljYXRpb24gZHVy -aW5nIGl0ZXJhdGlvbjogIitQLnAocykrIi4ifX0KUC5rNS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEp -e3JldHVybiJPdXQgb2YgTWVtb3J5In0sCmdJSTpmdW5jdGlvbigpe3JldHVybiBudWxsfSwKJGlYUzox -fQpQLktZLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlN0YWNrIE92ZXJmbG93In0sCmdJ -STpmdW5jdGlvbigpe3JldHVybiBudWxsfSwKJGlYUzoxfQpQLmMucHJvdG90eXBlPXsKdzpmdW5jdGlv -bihhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHM9PW51bGw/IlJlYWRpbmcgc3RhdGljIHZhcmlhYmxlIGR1 -cmluZyBpdHMgaW5pdGlhbGl6YXRpb24iOiJSZWFkaW5nIHN0YXRpYyB2YXJpYWJsZSAnIitzKyInIGR1 -cmluZyBpdHMgaW5pdGlhbGl6YXRpb24ifX0KUC5DRC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3Jl -dHVybiJFeGNlcHRpb246ICIrdGhpcy5hfSwKJGlSejoxfQpQLmFFLnByb3RvdHlwZT17Cnc6ZnVuY3Rp -b24oYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGc9dGhpcy5hLGY9ZyE9bnVsbCYmIiIhPT1n -PyJGb3JtYXRFeGNlcHRpb246ICIrSC5FaihnKToiRm9ybWF0RXhjZXB0aW9uIixlPXRoaXMuYyxkPXRo -aXMuYgppZih0eXBlb2YgZD09InN0cmluZyIpe2lmKGUhPW51bGwpcz1lPDB8fGU+ZC5sZW5ndGgKZWxz -ZSBzPSExCmlmKHMpZT1udWxsCmlmKGU9PW51bGwpe2lmKGQubGVuZ3RoPjc4KWQ9Qy54Qi5OaihkLDAs -NzUpKyIuLi4iCnJldHVybiBmKyJcbiIrZH1mb3Iocj0xLHE9MCxwPSExLG89MDtvPGU7KytvKXtuPUMu -eEIuVyhkLG8pCmlmKG49PT0xMCl7aWYocSE9PW98fCFwKSsrcgpxPW8rMQpwPSExfWVsc2UgaWYobj09 -PTEzKXsrK3IKcT1vKzEKcD0hMH19Zj1yPjE/ZisoIiAoYXQgbGluZSAiK3IrIiwgY2hhcmFjdGVyICIr -KGUtcSsxKSsiKVxuIik6ZisoIiAoYXQgY2hhcmFjdGVyICIrKGUrMSkrIilcbiIpCm09ZC5sZW5ndGgK -Zm9yKG89ZTtvPG07KytvKXtuPUMueEIuTyhkLG8pCmlmKG49PT0xMHx8bj09PTEzKXttPW8KYnJlYWt9 -fWlmKG0tcT43OClpZihlLXE8NzUpe2w9cSs3NQprPXEKaj0iIgppPSIuLi4ifWVsc2V7aWYobS1lPDc1 -KXtrPW0tNzUKbD1tCmk9IiJ9ZWxzZXtrPWUtMzYKbD1lKzM2Cmk9Ii4uLiJ9aj0iLi4uIn1lbHNle2w9 -bQprPXEKaj0iIgppPSIifWg9Qy54Qi5OaihkLGssbCkKcmV0dXJuIGYraitoK2krIlxuIitDLnhCLlQo -IiAiLGUtaytqLmxlbmd0aCkrIl5cbiJ9ZWxzZSByZXR1cm4gZSE9bnVsbD9mKygiIChhdCBvZmZzZXQg -IitILkVqKGUpKyIpIik6Zn0sCiRpUno6MX0KUC5jWC5wcm90b3R5cGU9ewpkcjpmdW5jdGlvbihhLGIp -e3JldHVybiBILkdKKHRoaXMsSC5MaCh0aGlzKS5DKCJjWC5FIiksYil9LApFMjpmdW5jdGlvbihhLGIs -Yyl7dmFyIHM9SC5MaCh0aGlzKQpyZXR1cm4gSC5LMSh0aGlzLHMuS3EoYykuQygiMShjWC5FKSIpLmEo -Yikscy5DKCJjWC5FIiksYyl9LApldjpmdW5jdGlvbihhLGIpe3ZhciBzPUguTGgodGhpcykKcmV0dXJu -IG5ldyBILlU1KHRoaXMscy5DKCJhMihjWC5FKSIpLmEoYikscy5DKCJVNTxjWC5FPiIpKX0sCnR0OmZ1 -bmN0aW9uKGEsYil7cmV0dXJuIFAuWTEodGhpcyxiLEguTGgodGhpcykuQygiY1guRSIpKX0sCmJyOmZ1 -bmN0aW9uKGEpe3JldHVybiB0aGlzLnR0KGEsITApfSwKZ0E6ZnVuY3Rpb24oYSl7dmFyIHMscj10aGlz -LmdtKHRoaXMpCmZvcihzPTA7ci5GKCk7KSsrcwpyZXR1cm4gc30sCmdsMDpmdW5jdGlvbihhKXtyZXR1 -cm4hdGhpcy5nbSh0aGlzKS5GKCl9LApnb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIXRoaXMuZ2wwKHRoaXMp -fSwKZVI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSC5iSyh0aGlzLGIsSC5MaCh0aGlzKS5DKCJjWC5FIikp -fSwKZ3I4OmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcy5nbSh0aGlzKQppZighci5GKCkpdGhyb3cgSC5i -KEguV3AoKSkKcz1yLmdsKCkKaWYoci5GKCkpdGhyb3cgSC5iKEguQW0oKSkKcmV0dXJuIHN9LApFOmZ1 -bmN0aW9uKGEsYil7dmFyIHMscixxClAuazEoYiwiaW5kZXgiKQpmb3Iocz10aGlzLmdtKHRoaXMpLHI9 -MDtzLkYoKTspe3E9cy5nbCgpCmlmKGI9PT1yKXJldHVybiBxOysrcn10aHJvdyBILmIoUC5DZihiLHRo -aXMsImluZGV4IixudWxsLHIpKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAuRVAodGhpcywiKCIsIiki -KX19ClAuQW4ucHJvdG90eXBlPXt9ClAuTjMucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4i -TWFwRW50cnkoIitILkVqKHRoaXMuYSkrIjogIitILkVqKHRoaXMuYikrIikifX0KUC5jOC5wcm90b3R5 -cGU9ewpnaU86ZnVuY3Rpb24oYSl7cmV0dXJuIFAuTWgucHJvdG90eXBlLmdpTy5jYWxsKEMuak4sdGhp -cyl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiJudWxsIn19ClAuTWgucHJvdG90eXBlPXtjb25zdHJ1Y3Rv -cjpQLk1oLCRpTWg6MSwKRE46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcz09PWJ9LApnaU86ZnVuY3Rp -b24oYSl7cmV0dXJuIEguZVEodGhpcyl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiJJbnN0YW5jZSBvZiAn -IitILkVqKEguTSh0aGlzKSkrIicifSwKZTc6ZnVuY3Rpb24oYSxiKXt0Lm8uYShiKQp0aHJvdyBILmIo -UC5scih0aGlzLGIuZ1dhKCksYi5nbmQoKSxiLmdWbSgpKSl9LAp0b1N0cmluZzpmdW5jdGlvbigpe3Jl -dHVybiB0aGlzLncodGhpcyl9fQpQLlpkLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIiJ9 -LAokaUd6OjF9ClAuUm4ucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS5sZW5n -dGh9LAp3OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6 -c30sCiRpQkw6MX0KUC5uMS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwCnQu -Si5hKGEpCkguaChiKQpzPUouclkoYikuT1koYiwiPSIpCmlmKHM9PT0tMSl7aWYoYiE9PSIiKWEuWTUo -MCxQLmt1KGIsMCxiLmxlbmd0aCx0aGlzLmEsITApLCIiKX1lbHNlIGlmKHMhPT0wKXtyPUMueEIuTmoo -YiwwLHMpCnE9Qy54Qi55bihiLHMrMSkKcD10aGlzLmEKYS5ZNSgwLFAua3UociwwLHIubGVuZ3RoLHAs -ITApLFAua3UocSwwLHEubGVuZ3RoLHAsITApKX1yZXR1cm4gYX0sCiRTOjQxfQpQLmNTLnByb3RvdHlw -ZT17CiQyOmZ1bmN0aW9uKGEsYil7dGhyb3cgSC5iKFAucnIoIklsbGVnYWwgSVB2NCBhZGRyZXNzLCAi -K2EsdGhpcy5hLGIpKX0sCiRTOjIxfQpQLlZDLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dGhy -b3cgSC5iKFAucnIoIklsbGVnYWwgSVB2NiBhZGRyZXNzLCAiK2EsdGhpcy5hLGIpKX0sCiQxOmZ1bmN0 -aW9uKGEpe3JldHVybiB0aGlzLiQyKGEsbnVsbCl9LAokUzo0NX0KUC5KVC5wcm90b3R5cGU9ewokMjpm -dW5jdGlvbihhLGIpe3ZhciBzCmlmKGItYT40KXRoaXMuYS4kMigiYW4gSVB2NiBwYXJ0IGNhbiBvbmx5 -IGNvbnRhaW4gYSBtYXhpbXVtIG9mIDQgaGV4IGRpZ2l0cyIsYSkKcz1QLlFBKEMueEIuTmoodGhpcy5i -LGEsYiksMTYpCmlmKHM8MHx8cz42NTUzNSl0aGlzLmEuJDIoImVhY2ggcGFydCBtdXN0IGJlIGluIHRo -ZSByYW5nZSBvZiBgMHgwLi4weEZGRkZgIixhKQpyZXR1cm4gc30sCiRTOjUyfQpQLkRuLnByb3RvdHlw -ZT17CmduRDpmdW5jdGlvbigpe3ZhciBzLHIscSxwPXRoaXMsbz1wLngKaWYobz09PSQpe289cC5hCnM9 -by5sZW5ndGghPT0wP28rIjoiOiIiCnI9cC5jCnE9cj09bnVsbAppZighcXx8bz09PSJmaWxlIil7bz1z -KyIvLyIKcz1wLmIKaWYocy5sZW5ndGghPT0wKW89bytzKyJAIgppZighcSlvKz1yCnM9cC5kCmlmKHMh -PW51bGwpbz1vKyI6IitILkVqKHMpfWVsc2Ugbz1zCm8rPXAuZQpzPXAuZgppZihzIT1udWxsKW89bysi -PyIrcwpzPXAucgppZihzIT1udWxsKW89bysiIyIrcwpvPW8uY2hhckNvZGVBdCgwKT09MD9vOm8KaWYo -cC54PT09JClwLng9bwplbHNlIG89SC52KEguR1EoIl90ZXh0IikpfXJldHVybiBvfSwKZ0ZqOmZ1bmN0 -aW9uKCl7dmFyIHMscj10aGlzLHE9ci55CmlmKHE9PT0kKXtzPXIuZQppZihzLmxlbmd0aCE9PTAmJkMu -eEIuVyhzLDApPT09NDcpcz1DLnhCLnluKHMsMSkKcT1zLmxlbmd0aD09PTA/Qy54RDpQLkFGKG5ldyBI -LmxKKEguVk0ocy5zcGxpdCgiLyIpLHQucyksdC5kTy5hKFAuUEgoKSksdC5kbyksdC5OKQppZihyLnk9 -PT0kKXIuc0twKHEpCmVsc2UgcT1ILnYoSC5HUSgicGF0aFNlZ21lbnRzIikpfXJldHVybiBxfSwKZ2lP -OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMscj1zLnoKaWYocj09PSQpe3I9Si5oZihzLmduRCgpKQppZihz -Lno9PT0kKXMuej1yCmVsc2Ugcj1ILnYoSC5HUSgiaGFzaENvZGUiKSl9cmV0dXJuIHJ9LApnaFk6ZnVu -Y3Rpb24oKXt2YXIgcz10aGlzLHI9cy5RCmlmKHI9PT0kKXtyPXMuZgpyPW5ldyBQLkdqKFAuV1gocj09 -bnVsbD8iIjpyKSx0LmR3KQppZihzLlE9PT0kKXMuc05NKHIpCmVsc2Ugcj1ILnYoSC5HUSgicXVlcnlQ -YXJhbWV0ZXJzIikpfXJldHVybiByfSwKZ2t1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sCmdKZjpm -dW5jdGlvbihhKXt2YXIgcz10aGlzLmMKaWYocz09bnVsbClyZXR1cm4iIgppZihDLnhCLm4ocywiWyIp -KXJldHVybiBDLnhCLk5qKHMsMSxzLmxlbmd0aC0xKQpyZXR1cm4gc30sCmd0cDpmdW5jdGlvbihhKXt2 -YXIgcz10aGlzLmQKcmV0dXJuIHM9PW51bGw/UC53Syh0aGlzLmEpOnN9LApndFA6ZnVuY3Rpb24oKXt2 -YXIgcz10aGlzLmYKcmV0dXJuIHM9PW51bGw/IiI6c30sCmdLYTpmdW5jdGlvbigpe3ZhciBzPXRoaXMu -cgpyZXR1cm4gcz09bnVsbD8iIjpzfSwKaEI6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hCmlmKGEubGVu -Z3RoIT09cy5sZW5ndGgpcmV0dXJuITEKcmV0dXJuIFAuTlIoYSxzKX0sCm5tOmZ1bmN0aW9uKGEsYil7 -dmFyIHMscixxLHAsbyxuLG0sbCxrLGo9dGhpcwp0LmM5LmEoYikKcz1qLmEKcj1zPT09ImZpbGUiCnE9 -ai5iCnA9ai5kCm89ai5jCmlmKCEobyE9bnVsbCkpbz1xLmxlbmd0aCE9PTB8fHAhPW51bGx8fHI/IiI6 -bnVsbApuPWouZQppZighciltPW8hPW51bGwmJm4ubGVuZ3RoIT09MAplbHNlIG09ITAKaWYobSYmIUMu -eEIubihuLCIvIikpbj0iLyIrbgpsPW4Kaz1QLmxlKG51bGwsMCwwLGIpCnJldHVybiBQLkNnKHMscSxv -LHAsbCxrLGoucil9LApKaDpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbgpmb3Iocz0wLHI9MDtD -LnhCLlFpKGIsIi4uLyIscik7KXtyKz0zOysrc31xPUMueEIuY24oYSwiLyIpCndoaWxlKCEwKXtpZigh -KHE+MCYmcz4wKSlicmVhawpwPUMueEIuUGsoYSwiLyIscS0xKQppZihwPDApYnJlYWsKbz1xLXAKbj1v -IT09MgppZighbnx8bz09PTMpaWYoQy54Qi5PKGEscCsxKT09PTQ2KW49IW58fEMueEIuTyhhLHArMik9 -PT00NgplbHNlIG49ITEKZWxzZSBuPSExCmlmKG4pYnJlYWs7LS1zCnE9cH1yZXR1cm4gQy54Qi5pNyhh -LHErMSxudWxsLEMueEIueW4oYixyLTMqcykpfSwKWkk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubVMo -UC5oSyhhKSl9LAptUzpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPXRoaXMsaD1u -dWxsCmlmKGEuZ0ZpKCkubGVuZ3RoIT09MCl7cz1hLmdGaSgpCmlmKGEuZ2NqKCkpe3I9YS5na3UoKQpx -PWEuZ0pmKGEpCnA9YS5neEEoKT9hLmd0cChhKTpofWVsc2V7cD1oCnE9cApyPSIifW89UC54ZShhLmdJ -aShhKSkKbj1hLmdRRCgpP2EuZ3RQKCk6aH1lbHNle3M9aS5hCmlmKGEuZ2NqKCkpe3I9YS5na3UoKQpx -PWEuZ0pmKGEpCnA9UC53QihhLmd4QSgpP2EuZ3RwKGEpOmgscykKbz1QLnhlKGEuZ0lpKGEpKQpuPWEu -Z1FEKCk/YS5ndFAoKTpofWVsc2V7cj1pLmIKcT1pLmMKcD1pLmQKbz1pLmUKaWYoYS5nSWkoYSk9PT0i -IiluPWEuZ1FEKCk/YS5ndFAoKTppLmYKZWxzZXttPVAudWooaSxvKQppZihtPjApe2w9Qy54Qi5Oaihv -LDAsbSkKbz1hLmd0VCgpP2wrUC54ZShhLmdJaShhKSk6bCtQLnhlKGkuSmgoQy54Qi55bihvLGwubGVu -Z3RoKSxhLmdJaShhKSkpfWVsc2UgaWYoYS5ndFQoKSlvPVAueGUoYS5nSWkoYSkpCmVsc2UgaWYoby5s -ZW5ndGg9PT0wKWlmKHE9PW51bGwpbz1zLmxlbmd0aD09PTA/YS5nSWkoYSk6UC54ZShhLmdJaShhKSkK -ZWxzZSBvPVAueGUoIi8iK2EuZ0lpKGEpKQplbHNle2s9aS5KaChvLGEuZ0lpKGEpKQpqPXMubGVuZ3Ro -PT09MAppZighanx8cSE9bnVsbHx8Qy54Qi5uKG8sIi8iKSlvPVAueGUoaykKZWxzZSBvPVAud0Yoaywh -anx8cSE9bnVsbCl9bj1hLmdRRCgpP2EuZ3RQKCk6aH19fXJldHVybiBQLkNnKHMscixxLHAsbyxuLGEu -Z1o4KCk/YS5nS2EoKTpoKX0sCmdjajpmdW5jdGlvbigpe3JldHVybiB0aGlzLmMhPW51bGx9LApneEE6 -ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kIT1udWxsfSwKZ1FEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu -ZiE9bnVsbH0sCmdaODpmdW5jdGlvbigpe3JldHVybiB0aGlzLnIhPW51bGx9LApndFQ6ZnVuY3Rpb24o -KXtyZXR1cm4gQy54Qi5uKHRoaXMuZSwiLyIpfSwKdDQ6ZnVuY3Rpb24oKXt2YXIgcyxyPXRoaXMscT1y -LmEKaWYocSE9PSIiJiZxIT09ImZpbGUiKXRocm93IEguYihQLkw0KCJDYW5ub3QgZXh0cmFjdCBhIGZp -bGUgcGF0aCBmcm9tIGEgIitxKyIgVVJJIikpCnE9ci5mCmlmKChxPT1udWxsPyIiOnEpIT09IiIpdGhy -b3cgSC5iKFAuTDQodS5pKSkKcT1yLnIKaWYoKHE9PW51bGw/IiI6cSkhPT0iIil0aHJvdyBILmIoUC5M -NCh1LmwpKQpxPSQud1EoKQppZihILm9UKHEpKXE9UC5tbihyKQplbHNle2lmKHIuYyE9bnVsbCYmci5n -SmYocikhPT0iIilILnYoUC5MNCh1LmopKQpzPXIuZ0ZqKCkKUC5rRShzLCExKQpxPVAudmcoQy54Qi5u -KHIuZSwiLyIpPyIvIjoiIixzLCIvIikKcT1xLmNoYXJDb2RlQXQoMCk9PTA/cTpxfXJldHVybiBxfSwK -dzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nbkQoKX0sCkROOmZ1bmN0aW9uKGEsYil7dmFyIHMscixx -PXRoaXMKaWYoYj09bnVsbClyZXR1cm4hMQppZihxPT09YilyZXR1cm4hMAppZih0LmRELmIoYikpaWYo -cS5hPT09Yi5nRmkoKSlpZihxLmMhPW51bGw9PT1iLmdjaigpKWlmKHEuYj09PWIuZ2t1KCkpaWYocS5n -SmYocSk9PT1iLmdKZihiKSlpZihxLmd0cChxKT09PWIuZ3RwKGIpKWlmKHEuZT09PWIuZ0lpKGIpKXtz -PXEuZgpyPXM9PW51bGwKaWYoIXI9PT1iLmdRRCgpKXtpZihyKXM9IiIKaWYocz09PWIuZ3RQKCkpe3M9 -cS5yCnI9cz09bnVsbAppZighcj09PWIuZ1o4KCkpe2lmKHIpcz0iIgpzPXM9PT1iLmdLYSgpfWVsc2Ug -cz0hMX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ug -cz0hMQplbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQpyZXR1cm4gc30sCnNLcDpmdW5jdGlvbihh -KXt0aGlzLnk9dC5iay5hKGEpfSwKc05NOmZ1bmN0aW9uKGEpe3RoaXMuUT10LmNaLmEoYSl9LAokaWlE -OjEsCmdGaTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LApnSWk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo -aXMuZX19ClAuUloucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIFAuZVAoQy5aSixILmgo -YSksQy54TSwhMSl9LAokUzo1fQpQLk1FLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dmFyIHM9 -dGhpcy5iLHI9dGhpcy5hCnMuYSs9ci5hCnIuYT0iJiIKcj1zLmErPUguRWooUC5lUChDLkYzLGEsQy54 -TSwhMCkpCmlmKGIhPW51bGwmJmIubGVuZ3RoIT09MCl7cy5hPXIrIj0iCnMuYSs9SC5FaihQLmVQKEMu -RjMsYixDLnhNLCEwKSl9fSwKJFM6MjJ9ClAueTUucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2 -YXIgcyxyCkguaChhKQppZihiPT1udWxsfHx0eXBlb2YgYj09InN0cmluZyIpdGhpcy5hLiQyKGEsSC5r -KGIpKQplbHNlIGZvcihzPUouSVQodC51LmEoYikpLHI9dGhpcy5hO3MuRigpOylyLiQyKGEsSC5oKHMu -Z2woKSkpfSwKJFM6MTN9ClAuUEUucHJvdG90eXBlPXsKZ2xSOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAs -bz10aGlzLG49bnVsbCxtPW8uYwppZihtPT1udWxsKXttPW8uYgppZigwPj1tLmxlbmd0aClyZXR1cm4g -SC5PSChtLDApCnM9by5hCm09bVswXSsxCnI9Qy54Qi5YVShzLCI/IixtKQpxPXMubGVuZ3RoCmlmKHI+ -PTApe3A9UC5QSShzLHIrMSxxLEMuVkMsITEpCnE9cn1lbHNlIHA9bgptPW8uYz1uZXcgUC5xZSgiZGF0 -YSIsIiIsbixuLFAuUEkocyxtLHEsQy5XZCwhMSkscCxuKX1yZXR1cm4gbX0sCnc6ZnVuY3Rpb24oYSl7 -dmFyIHMscj10aGlzLmIKaWYoMD49ci5sZW5ndGgpcmV0dXJuIEguT0gociwwKQpzPXRoaXMuYQpyZXR1 -cm4gclswXT09PS0xPyJkYXRhOiIrczpzfX0KUC55SS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIp -e3ZhciBzPXRoaXMuYQppZihhPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLGEpCnM9c1thXQpDLk5BLmR1 -KHMsMCw5NixiKQpyZXR1cm4gc30sCiRTOjIzfQpQLmM2LnByb3RvdHlwZT17CiQzOmZ1bmN0aW9uKGEs -YixjKXt2YXIgcyxyLHEKZm9yKHM9Yi5sZW5ndGgscj0wO3I8czsrK3Ipe3E9Qy54Qi5XKGIscileOTYK -aWYocT49OTYpcmV0dXJuIEguT0goYSxxKQphW3FdPWN9fSwKJFM6MTR9ClAucWQucHJvdG90eXBlPXsK -JDM6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIscQpmb3Iocz1DLnhCLlcoYiwwKSxyPUMueEIuVyhiLDEp -O3M8PXI7KytzKXtxPShzXjk2KT4+PjAKaWYocT49OTYpcmV0dXJuIEguT0goYSxxKQphW3FdPWN9fSwK -JFM6MTR9ClAuVWYucHJvdG90eXBlPXsKZ2NqOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz4wfSwKZ3hB -OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz4wJiZ0aGlzLmQrMTx0aGlzLmV9LApnUUQ6ZnVuY3Rpb24o -KXtyZXR1cm4gdGhpcy5mPHRoaXMucn0sCmdaODpmdW5jdGlvbigpe3JldHVybiB0aGlzLnI8dGhpcy5h -Lmxlbmd0aH0sCmd0VDpmdW5jdGlvbigpe3JldHVybiBDLnhCLlFpKHRoaXMuYSwiLyIsdGhpcy5lKX0s -CmdGaTpmdW5jdGlvbigpe3ZhciBzPXRoaXMueApyZXR1cm4gcz09bnVsbD90aGlzLng9dGhpcy5VMigp -OnN9LApVMjpmdW5jdGlvbigpe3ZhciBzLHI9dGhpcyxxPXIuYgppZihxPD0wKXJldHVybiIiCnM9cT09 -PTQKaWYocyYmQy54Qi5uKHIuYSwiaHR0cCIpKXJldHVybiJodHRwIgppZihxPT09NSYmQy54Qi5uKHIu -YSwiaHR0cHMiKSlyZXR1cm4iaHR0cHMiCmlmKHMmJkMueEIubihyLmEsImZpbGUiKSlyZXR1cm4iZmls -ZSIKaWYocT09PTcmJkMueEIubihyLmEsInBhY2thZ2UiKSlyZXR1cm4icGFja2FnZSIKcmV0dXJuIEMu -eEIuTmooci5hLDAscSl9LApna3U6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmMscj10aGlzLmIrMwpyZXR1 -cm4gcz5yP0MueEIuTmoodGhpcy5hLHIscy0xKToiIn0sCmdKZjpmdW5jdGlvbihhKXt2YXIgcz10aGlz -LmMKcmV0dXJuIHM+MD9DLnhCLk5qKHRoaXMuYSxzLHRoaXMuZCk6IiJ9LApndHA6ZnVuY3Rpb24oYSl7 -dmFyIHMscj10aGlzCmlmKHIuZ3hBKCkpcmV0dXJuIFAuUUEoQy54Qi5OaihyLmEsci5kKzEsci5lKSxu -dWxsKQpzPXIuYgppZihzPT09NCYmQy54Qi5uKHIuYSwiaHR0cCIpKXJldHVybiA4MAppZihzPT09NSYm -Qy54Qi5uKHIuYSwiaHR0cHMiKSlyZXR1cm4gNDQzCnJldHVybiAwfSwKZ0lpOmZ1bmN0aW9uKGEpe3Jl -dHVybiBDLnhCLk5qKHRoaXMuYSx0aGlzLmUsdGhpcy5mKX0sCmd0UDpmdW5jdGlvbigpe3ZhciBzPXRo -aXMuZixyPXRoaXMucgpyZXR1cm4gczxyP0MueEIuTmoodGhpcy5hLHMrMSxyKToiIn0sCmdLYTpmdW5j -dGlvbigpe3ZhciBzPXRoaXMucixyPXRoaXMuYQpyZXR1cm4gczxyLmxlbmd0aD9DLnhCLnluKHIscysx -KToiIn0sCmdGajpmdW5jdGlvbigpe3ZhciBzLHIscT10aGlzLmUscD10aGlzLmYsbz10aGlzLmEKaWYo -Qy54Qi5RaShvLCIvIixxKSkrK3EKaWYocT09PXApcmV0dXJuIEMueEQKcz1ILlZNKFtdLHQucykKZm9y -KHI9cTtyPHA7KytyKWlmKEMueEIuTyhvLHIpPT09NDcpe0MuTm0uaShzLEMueEIuTmoobyxxLHIpKQpx -PXIrMX1DLk5tLmkocyxDLnhCLk5qKG8scSxwKSkKcmV0dXJuIFAuQUYocyx0Lk4pfSwKZ2hZOmZ1bmN0 -aW9uKCl7aWYodGhpcy5mPj10aGlzLnIpcmV0dXJuIEMuQ00KcmV0dXJuIG5ldyBQLkdqKFAuV1godGhp -cy5ndFAoKSksdC5kdyl9LAprWDpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmQrMQpyZXR1cm4gcythLmxl -bmd0aD09PXRoaXMuZSYmQy54Qi5RaSh0aGlzLmEsYSxzKX0sCk45OmZ1bmN0aW9uKCl7dmFyIHM9dGhp -cyxyPXMucixxPXMuYQppZihyPj1xLmxlbmd0aClyZXR1cm4gcwpyZXR1cm4gbmV3IFAuVWYoQy54Qi5O -aihxLDAscikscy5iLHMuYyxzLmQscy5lLHMuZixyLHMueCl9LApubTpmdW5jdGlvbihhLGIpe3ZhciBz -LHIscSxwLG8sbixtLGwsayxqLGk9dGhpcyxoPW51bGwKdC5jOS5hKGIpCnM9aS5nRmkoKQpyPXM9PT0i -ZmlsZSIKcT1pLmMKcD1xPjA/Qy54Qi5OaihpLmEsaS5iKzMscSk6IiIKbz1pLmd4QSgpP2kuZ3RwKGkp -OmgKcT1pLmMKaWYocT4wKW49Qy54Qi5OaihpLmEscSxpLmQpCmVsc2Ugbj1wLmxlbmd0aCE9PTB8fG8h -PW51bGx8fHI/IiI6aApxPWkuYQptPUMueEIuTmoocSxpLmUsaS5mKQppZighcilsPW4hPW51bGwmJm0u -bGVuZ3RoIT09MAplbHNlIGw9ITAKaWYobCYmIUMueEIubihtLCIvIikpbT0iLyIrbQprPVAubGUoaCww -LDAsYikKbD1pLnIKaj1sPHEubGVuZ3RoP0MueEIueW4ocSxsKzEpOmgKcmV0dXJuIFAuQ2cocyxwLG4s -byxtLGssail9LApaSTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tUyhQLmhLKGEpKX0sCm1TOmZ1bmN0 -aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBQLlVmKXJldHVybiB0aGlzLnUxKHRoaXMsYSkKcmV0dXJuIHRo -aXMuUmUoKS5tUyhhKX0sCnUxOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxo -LGcsZixlLGQsYz1iLmIKaWYoYz4wKXJldHVybiBiCnM9Yi5jCmlmKHM+MCl7cj1hLmIKaWYocjw9MCly -ZXR1cm4gYgpxPXI9PT00CmlmKHEmJkMueEIubihhLmEsImZpbGUiKSlwPWIuZSE9PWIuZgplbHNlIGlm -KHEmJkMueEIubihhLmEsImh0dHAiKSlwPSFiLmtYKCI4MCIpCmVsc2UgcD0hKHI9PT01JiZDLnhCLm4o -YS5hLCJodHRwcyIpKXx8IWIua1goIjQ0MyIpCmlmKHApe289cisxCnJldHVybiBuZXcgUC5VZihDLnhC -Lk5qKGEuYSwwLG8pK0MueEIueW4oYi5hLGMrMSkscixzK28sYi5kK28sYi5lK28sYi5mK28sYi5yK28s -YS54KX1lbHNlIHJldHVybiB0aGlzLlJlKCkubVMoYil9bj1iLmUKYz1iLmYKaWYobj09PWMpe3M9Yi5y -CmlmKGM8cyl7cj1hLmYKbz1yLWMKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooYS5hLDAscikrQy54Qi55 -bihiLmEsYyksYS5iLGEuYyxhLmQsYS5lLGMrbyxzK28sYS54KX1jPWIuYQppZihzPGMubGVuZ3RoKXty -PWEucgpyZXR1cm4gbmV3IFAuVWYoQy54Qi5OaihhLmEsMCxyKStDLnhCLnluKGMscyksYS5iLGEuYyxh -LmQsYS5lLGEuZixzKyhyLXMpLGEueCl9cmV0dXJuIGEuTjkoKX1zPWIuYQppZihDLnhCLlFpKHMsIi8i -LG4pKXttPWEuZQpsPVAuUngodGhpcykKaz1sPjA/bDptCm89ay1uCnJldHVybiBuZXcgUC5VZihDLnhC -Lk5qKGEuYSwwLGspK0MueEIueW4ocyxuKSxhLmIsYS5jLGEuZCxtLGMrbyxiLnIrbyxhLngpfWo9YS5l -Cmk9YS5mCmlmKGo9PT1pJiZhLmM+MCl7Zm9yKDtDLnhCLlFpKHMsIi4uLyIsbik7KW4rPTMKbz1qLW4r -MQpyZXR1cm4gbmV3IFAuVWYoQy54Qi5OaihhLmEsMCxqKSsiLyIrQy54Qi55bihzLG4pLGEuYixhLmMs -YS5kLGosYytvLGIucitvLGEueCl9aD1hLmEKbD1QLlJ4KHRoaXMpCmlmKGw+PTApZz1sCmVsc2UgZm9y -KGc9ajtDLnhCLlFpKGgsIi4uLyIsZyk7KWcrPTMKZj0wCndoaWxlKCEwKXtlPW4rMwppZighKGU8PWMm -JkMueEIuUWkocywiLi4vIixuKSkpYnJlYWs7KytmCm49ZX1mb3IoZD0iIjtpPmc7KXstLWkKaWYoQy54 -Qi5PKGgsaSk9PT00Nyl7aWYoZj09PTApe2Q9Ii8iCmJyZWFrfS0tZgpkPSIvIn19aWYoaT09PWcmJmEu -Yjw9MCYmIUMueEIuUWkoaCwiLyIsaikpe24tPWYqMwpkPSIifW89aS1uK2QubGVuZ3RoCnJldHVybiBu -ZXcgUC5VZihDLnhCLk5qKGgsMCxpKStkK0MueEIueW4ocyxuKSxhLmIsYS5jLGEuZCxqLGMrbyxiLnIr -byxhLngpfSwKdDQ6ZnVuY3Rpb24oKXt2YXIgcyxyLHE9dGhpcyxwPXEuYgppZihwPj0wKXtzPSEocD09 -PTQmJkMueEIubihxLmEsImZpbGUiKSkKcD1zfWVsc2UgcD0hMQppZihwKXRocm93IEguYihQLkw0KCJD -YW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgIitxLmdGaSgpKyIgVVJJIikpCnA9cS5mCnM9 -cS5hCmlmKHA8cy5sZW5ndGgpe2lmKHA8cS5yKXRocm93IEguYihQLkw0KHUuaSkpCnRocm93IEguYihQ -Lkw0KHUubCkpfXI9JC53USgpCmlmKEgub1QocikpcD1QLm1uKHEpCmVsc2V7aWYocS5jPHEuZClILnYo -UC5MNCh1LmopKQpwPUMueEIuTmoocyxxLmUscCl9cmV0dXJuIHB9LApnaU86ZnVuY3Rpb24oYSl7dmFy -IHM9dGhpcy55CnJldHVybiBzPT1udWxsP3RoaXMueT1DLnhCLmdpTyh0aGlzLmEpOnN9LApETjpmdW5j -dGlvbihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKaWYodGhpcz09PWIpcmV0dXJuITAKcmV0dXJuIHQu -ZEQuYihiKSYmdGhpcy5hPT09Yi53KDApfSwKUmU6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLHI9bnVsbCxx -PXMuZ0ZpKCkscD1zLmdrdSgpLG89cy5jPjA/cy5nSmYocyk6cixuPXMuZ3hBKCk/cy5ndHAocyk6cixt -PXMuYSxsPXMuZixrPUMueEIuTmoobSxzLmUsbCksaj1zLnIKbD1sPGo/cy5ndFAoKTpyCnJldHVybiBQ -LkNnKHEscCxvLG4sayxsLGo8bS5sZW5ndGg/cy5nS2EoKTpyKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJu -IHRoaXMuYX0sCiRpaUQ6MX0KUC5xZS5wcm90b3R5cGU9e30KVy5xRS5wcm90b3R5cGU9e30KVy5HaC5w -cm90b3R5cGU9ewpzTFU6ZnVuY3Rpb24oYSxiKXthLmhyZWY9Yn0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJu -IFN0cmluZyhhKX0sCiRpR2g6MX0KVy5mWS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiBT -dHJpbmcoYSl9fQpXLm5CLnByb3RvdHlwZT17JGluQjoxfQpXLkF6LnByb3RvdHlwZT17JGlBejoxfQpX -LlFQLnByb3RvdHlwZT17JGlRUDoxfQpXLm54LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVy -biBhLmxlbmd0aH19Clcub0oucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3Ro -fX0KVy5pZC5wcm90b3R5cGU9e30KVy5RRi5wcm90b3R5cGU9e30KVy5OaC5wcm90b3R5cGU9ewp3OmZ1 -bmN0aW9uKGEpe3JldHVybiBTdHJpbmcoYSl9fQpXLmFlLnByb3RvdHlwZT17CkRjOmZ1bmN0aW9uKGEs -Yil7cmV0dXJuIGEuY3JlYXRlSFRNTERvY3VtZW50KGIpfX0KVy5JQi5wcm90b3R5cGU9ewp3OmZ1bmN0 -aW9uKGEpe3ZhciBzLHI9YS5sZWZ0CnIudG9TdHJpbmcKcj0iUmVjdGFuZ2xlICgiK0guRWoocikrIiwg -IgpzPWEudG9wCnMudG9TdHJpbmcKcz1yK0guRWoocykrIikgIgpyPWEud2lkdGgKci50b1N0cmluZwpy -PXMrSC5FaihyKSsiIHggIgpzPWEuaGVpZ2h0CnMudG9TdHJpbmcKcmV0dXJuIHIrSC5FaihzKX0sCkRO -OmZ1bmN0aW9uKGEsYil7dmFyIHMscgppZihiPT1udWxsKXJldHVybiExCmlmKHQucS5iKGIpKXtzPWEu -bGVmdApzLnRvU3RyaW5nCnI9Yi5sZWZ0CnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS50b3AKcy50b1N0 -cmluZwpyPWIudG9wCnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS53aWR0aApzLnRvU3RyaW5nCnI9Yi53 -aWR0aApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEuaGVpZ2h0CnMudG9TdHJpbmcKcj1iLmhlaWdodApy -LnRvU3RyaW5nCnI9cz09PXIKcz1yfWVsc2Ugcz0hMX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0h -MQpyZXR1cm4gc30sCmdpTzpmdW5jdGlvbihhKXt2YXIgcyxyLHEscD1hLmxlZnQKcC50b1N0cmluZwpw -PUMuQ0QuZ2lPKHApCnM9YS50b3AKcy50b1N0cmluZwpzPUMuQ0QuZ2lPKHMpCnI9YS53aWR0aApyLnRv -U3RyaW5nCnI9Qy5DRC5naU8ocikKcT1hLmhlaWdodApxLnRvU3RyaW5nCnJldHVybiBXLnJFKHAscyxy -LEMuQ0QuZ2lPKHEpKX0sCiRpdG46MX0KVy5uNy5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1 -cm4gYS5sZW5ndGh9fQpXLnd6LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEu -bGVuZ3RofSwKcTpmdW5jdGlvbihhLGIpe3ZhciBzCkgudVAoYikKcz10aGlzLmEKaWYoYjwwfHxiPj1z -Lmxlbmd0aClyZXR1cm4gSC5PSChzLGIpCnJldHVybiB0aGlzLiR0aS5jLmEoc1tiXSl9LApZNTpmdW5j -dGlvbihhLGIsYyl7dGhpcy4kdGkuYy5hKGMpCnRocm93IEguYihQLkw0KCJDYW5ub3QgbW9kaWZ5IGxp -c3QiKSl9fQpXLmN2LnByb3RvdHlwZT17CmdRZzpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcuaTcoYSl9 -LApnUDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcuSTQoYSl9LApzUDpmdW5jdGlvbihhLGIpe3ZhciBz -CnQuUS5hKGIpCnM9dGhpcy5nUChhKQpzLlYxKDApCnMuRlYoMCxiKX0sCnc6ZnVuY3Rpb24oYSl7cmV0 -dXJuIGEubG9jYWxOYW1lfSwKRkY6ZnVuY3Rpb24oYSl7dmFyIHM9ISFhLnNjcm9sbEludG9WaWV3SWZO -ZWVkZWQKaWYocylhLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKQplbHNlIGEuc2Nyb2xsSW50b1ZpZXco -KX0sCm56OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHMscj10aGlzLnI2KGEsYyxkLGUpCnN3aXRjaChi -LnRvTG93ZXJDYXNlKCkpe2Nhc2UiYmVmb3JlYmVnaW4iOnM9YS5wYXJlbnROb2RlCnMudG9TdHJpbmcK -Si5FaChzLHIsYSkKYnJlYWsKY2FzZSJhZnRlcmJlZ2luIjpzPWEuY2hpbGROb2Rlcwp0aGlzLm1LKGEs -cixzLmxlbmd0aD4wP3NbMF06bnVsbCkKYnJlYWsKY2FzZSJiZWZvcmVlbmQiOmEuYXBwZW5kQ2hpbGQo -cikKYnJlYWsKY2FzZSJhZnRlcmVuZCI6cz1hLnBhcmVudE5vZGUKcy50b1N0cmluZwpKLkVoKHMscixh -Lm5leHRTaWJsaW5nKQpicmVhawpkZWZhdWx0OkgudihQLnhZKCJJbnZhbGlkIHBvc2l0aW9uICIrYikp -fX0sCnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIscSxwCmlmKGM9PW51bGwpe2lmKGQ9PW51bGwp -e3M9JC5sdAppZihzPT1udWxsKXtzPUguVk0oW10sdC52KQpyPW5ldyBXLnZEKHMpCkMuTm0uaShzLFcu -VHcobnVsbCkpCkMuTm0uaShzLFcuQmwoKSkKJC5sdD1yCmQ9cn1lbHNlIGQ9c31zPSQuRVUKaWYocz09 -bnVsbCl7cz1uZXcgVy5LbyhkKQokLkVVPXMKYz1zfWVsc2V7cy5hPWQKYz1zfX1lbHNlIGlmKGQhPW51 -bGwpdGhyb3cgSC5iKFAueFkoInZhbGlkYXRvciBjYW4gb25seSBiZSBwYXNzZWQgaWYgdHJlZVNhbml0 -aXplciBpcyBudWxsIikpCmlmKCQueG89PW51bGwpe3M9ZG9jdW1lbnQKcj1zLmltcGxlbWVudGF0aW9u -CnIudG9TdHJpbmcKcj1DLm1ILkRjKHIsIiIpCiQueG89cgokLkJPPXIuY3JlYXRlUmFuZ2UoKQpyPSQu -eG8uY3JlYXRlRWxlbWVudCgiYmFzZSIpCnQuY1IuYShyKQpzPXMuYmFzZVVSSQpzLnRvU3RyaW5nCnIu -aHJlZj1zCiQueG8uaGVhZC5hcHBlbmRDaGlsZChyKX1zPSQueG8KaWYocy5ib2R5PT1udWxsKXtyPXMu -Y3JlYXRlRWxlbWVudCgiYm9keSIpCkMuQlouc0dTKHMsdC5wLmEocikpfXM9JC54bwppZih0LnAuYihh -KSl7cz1zLmJvZHkKcy50b1N0cmluZwpxPXN9ZWxzZXtzLnRvU3RyaW5nCnE9cy5jcmVhdGVFbGVtZW50 -KGEudGFnTmFtZSkKJC54by5ib2R5LmFwcGVuZENoaWxkKHEpfWlmKCJjcmVhdGVDb250ZXh0dWFsRnJh -Z21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUmJiFDLk5tLnRnKEMuU3EsYS50YWdOYW1lKSl7 -JC5CTy5zZWxlY3ROb2RlQ29udGVudHMocSkKcz0kLkJPCnMudG9TdHJpbmcKcD1zLmNyZWF0ZUNvbnRl -eHR1YWxGcmFnbWVudChiPT1udWxsPyJudWxsIjpiKX1lbHNle0oud2YocSxiKQpwPSQueG8uY3JlYXRl -RG9jdW1lbnRGcmFnbWVudCgpCmZvcig7cz1xLmZpcnN0Q2hpbGQscyE9bnVsbDspcC5hcHBlbmRDaGls -ZChzKX1pZihxIT09JC54by5ib2R5KUouTHQocSkKYy5QbihwKQpkb2N1bWVudC5hZG9wdE5vZGUocCkK -cmV0dXJuIHB9LApBSDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMucjYoYSxiLGMsbnVsbCl9LApz -aGY6ZnVuY3Rpb24oYSxiKXt0aGlzLllDKGEsYil9LApwazpmdW5jdGlvbihhLGIsYyl7dGhpcy5zYTQo -YSxudWxsKQphLmFwcGVuZENoaWxkKHRoaXMucjYoYSxiLG51bGwsYykpfSwKWUM6ZnVuY3Rpb24oYSxi -KXtyZXR1cm4gdGhpcy5wayhhLGIsbnVsbCl9LApzUk46ZnVuY3Rpb24oYSxiKXthLmlubmVySFRNTD1i -fSwKZ25zOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRhZ05hbWV9LApnVmw6ZnVuY3Rpb24oYSl7cmV0dXJu -IG5ldyBXLmV1KGEsImNsaWNrIiwhMSx0LmspfSwKJGljdjoxfQpXLkN2LnByb3RvdHlwZT17CiQxOmZ1 -bmN0aW9uKGEpe3JldHVybiB0LmguYih0LkEuYShhKSl9LAokUzoyNX0KVy5lYS5wcm90b3R5cGU9eyRp -ZWE6MX0KVy5EMC5wcm90b3R5cGU9ewpPbjpmdW5jdGlvbihhLGIsYyxkKXt0LmJ3LmEoYykKaWYoYyE9 -bnVsbCl0aGlzLnYoYSxiLGMsZCl9LApCOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5PbihhLGIs -YyxudWxsKX0sCnY6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcihiLEgu -dFIodC5idy5hKGMpLDEpLGQpfSwKJGlEMDoxfQpXLmhILnByb3RvdHlwZT17JGloSDoxfQpXLmg0LnBy -b3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH19ClcuYnIucHJvdG90eXBlPXsK -Z0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofX0KVy5WYi5wcm90b3R5cGU9ewpzR1M6ZnVuY3Rp -b24oYSxiKXthLmJvZHk9Yn19ClcuZkoucHJvdG90eXBlPXsKZW86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0 -dXJuIGEub3BlbihiLGMsITApfSwKJGlmSjoxfQpXLndhLnByb3RvdHlwZT17fQpXLlNnLnByb3RvdHlw -ZT17JGlTZzoxfQpXLnc3LnByb3RvdHlwZT17CmdEcjpmdW5jdGlvbihhKXtpZigib3JpZ2luIiBpbiBh -KXJldHVybiBhLm9yaWdpbgpyZXR1cm4gSC5FaihhLnByb3RvY29sKSsiLy8iK0guRWooYS5ob3N0KX0s -Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKX0sCiRpdzc6MX0KVy5Bai5wcm90b3R5cGU9eyRp -QWo6MX0KVy5lNy5wcm90b3R5cGU9ewpncjg6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hLHI9cy5jaGls -ZE5vZGVzLmxlbmd0aAppZihyPT09MCl0aHJvdyBILmIoUC5QVigiTm8gZWxlbWVudHMiKSkKaWYocj4x -KXRocm93IEguYihQLlBWKCJNb3JlIHRoYW4gb25lIGVsZW1lbnQiKSkKcz1zLmZpcnN0Q2hpbGQKcy50 -b1N0cmluZwpyZXR1cm4gc30sCkZWOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbwp0LmVoLmEoYikK -aWYoYiBpbnN0YW5jZW9mIFcuZTcpe3M9Yi5hCnI9dGhpcy5hCmlmKHMhPT1yKWZvcihxPXMuY2hpbGRO -b2Rlcy5sZW5ndGgscD0wO3A8cTsrK3Ape289cy5maXJzdENoaWxkCm8udG9TdHJpbmcKci5hcHBlbmRD -aGlsZChvKX1yZXR1cm59Zm9yKHM9Yi5nbShiKSxyPXRoaXMuYTtzLkYoKTspci5hcHBlbmRDaGlsZChz -LmdsKCkpfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIKdC5BLmEoYykKcz10aGlzLmEKcj1zLmNo -aWxkTm9kZXMKaWYoYjwwfHxiPj1yLmxlbmd0aClyZXR1cm4gSC5PSChyLGIpCnMucmVwbGFjZUNoaWxk -KGMscltiXSl9LApnbTpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmEuY2hpbGROb2RlcwpyZXR1cm4gbmV3 -IFcuVzkocyxzLmxlbmd0aCxILnoocykuQygiVzk8R20uRT4iKSl9LApnQTpmdW5jdGlvbihhKXtyZXR1 -cm4gdGhpcy5hLmNoaWxkTm9kZXMubGVuZ3RofSwKcTpmdW5jdGlvbihhLGIpe3ZhciBzCkgudVAoYikK -cz10aGlzLmEuY2hpbGROb2RlcwppZihiPDB8fGI+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsYikKcmV0 -dXJuIHNbYl19fQpXLnVILnByb3RvdHlwZT17CndnOmZ1bmN0aW9uKGEpe3ZhciBzPWEucGFyZW50Tm9k -ZQppZihzIT1udWxsKXMucmVtb3ZlQ2hpbGQoYSl9LApENDpmdW5jdGlvbihhKXt2YXIgcwpmb3IoO3M9 -YS5maXJzdENoaWxkLHMhPW51bGw7KWEucmVtb3ZlQ2hpbGQocyl9LAp3OmZ1bmN0aW9uKGEpe3ZhciBz -PWEubm9kZVZhbHVlCnJldHVybiBzPT1udWxsP3RoaXMuVShhKTpzfSwKc2E0OmZ1bmN0aW9uKGEsYil7 -YS50ZXh0Q29udGVudD1ifSwKbUs6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhLmluc2VydEJlZm9yZShi -LGMpfSwKJGl1SDoxfQpXLkJILnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0 -aH0sCnE6ZnVuY3Rpb24oYSxiKXtILnVQKGIpCmlmKGI+Pj4wIT09Ynx8Yj49YS5sZW5ndGgpdGhyb3cg -SC5iKFAuQ2YoYixhLG51bGwsbnVsbCxudWxsKSkKcmV0dXJuIGFbYl19LApZNTpmdW5jdGlvbihhLGIs -Yyl7dC5BLmEoYykKdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBhc3NpZ24gZWxlbWVudCBvZiBpbW11dGFi -bGUgTGlzdC4iKSl9LApndEg6ZnVuY3Rpb24oYSl7aWYoYS5sZW5ndGg+MClyZXR1cm4gYVswXQp0aHJv -dyBILmIoUC5QVigiTm8gZWxlbWVudHMiKSl9LApFOmZ1bmN0aW9uKGEsYil7aWYoYjwwfHxiPj1hLmxl -bmd0aClyZXR1cm4gSC5PSChhLGIpCnJldHVybiBhW2JdfSwKJGliUToxLAokaVhqOjEsCiRpY1g6MSwK -JGl6TToxfQpXLlNOLnByb3RvdHlwZT17fQpXLmV3LnByb3RvdHlwZT17JGlldzoxfQpXLmxwLnByb3Rv -dHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH19ClcuVGIucHJvdG90eXBlPXsKcjY6 -ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHMscgppZigiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiBpbiB3 -aW5kb3cuUmFuZ2UucHJvdG90eXBlKXJldHVybiB0aGlzLkRXKGEsYixjLGQpCnM9Vy5VOSgiPHRhYmxl -PiIrSC5FaihiKSsiPC90YWJsZT4iLGMsZCkKcj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50 -KCkKci50b1N0cmluZwpzLnRvU3RyaW5nCm5ldyBXLmU3KHIpLkZWKDAsbmV3IFcuZTcocykpCnJldHVy -biByfX0KVy5Jdi5wcm90b3R5cGU9ewpyNjpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcyxyLHEscAppZigi -Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlKXJldHVybiB0 -aGlzLkRXKGEsYixjLGQpCnM9ZG9jdW1lbnQKcj1zLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpzPUMu -SWUucjYocy5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGIsYyxkKQpzLnRvU3RyaW5nCnM9bmV3IFcuZTco -cykKcT1zLmdyOChzKQpxLnRvU3RyaW5nCnM9bmV3IFcuZTcocSkKcD1zLmdyOChzKQpyLnRvU3RyaW5n -CnAudG9TdHJpbmcKbmV3IFcuZTcocikuRlYoMCxuZXcgVy5lNyhwKSkKcmV0dXJuIHJ9fQpXLldQLnBy -b3RvdHlwZT17CnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIscQppZigiY3JlYXRlQ29udGV4dHVh -bEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlKXJldHVybiB0aGlzLkRXKGEsYixjLGQp -CnM9ZG9jdW1lbnQKcj1zLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpzPUMuSWUucjYocy5jcmVhdGVF -bGVtZW50KCJ0YWJsZSIpLGIsYyxkKQpzLnRvU3RyaW5nCnM9bmV3IFcuZTcocykKcT1zLmdyOChzKQpy -LnRvU3RyaW5nCnEudG9TdHJpbmcKbmV3IFcuZTcocikuRlYoMCxuZXcgVy5lNyhxKSkKcmV0dXJuIHJ9 -fQpXLnlZLnByb3RvdHlwZT17CnBrOmZ1bmN0aW9uKGEsYixjKXt2YXIgcyxyCnRoaXMuc2E0KGEsbnVs -bCkKcz1hLmNvbnRlbnQKcy50b1N0cmluZwpKLmJUKHMpCnI9dGhpcy5yNihhLGIsbnVsbCxjKQphLmNv -bnRlbnQuYXBwZW5kQ2hpbGQocil9LApZQzpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnBrKGEsYixu -dWxsKX0sCiRpeVk6MX0KVy53Ni5wcm90b3R5cGU9e30KVy5LNS5wcm90b3R5cGU9ewpQbzpmdW5jdGlv -bihhLGIsYyl7dmFyIHM9Vy5QMShhLm9wZW4oYixjKSkKcmV0dXJuIHN9LApnbVc6ZnVuY3Rpb24oYSl7 -cmV0dXJuIGEubG9jYXRpb259LAp1czpmdW5jdGlvbihhLGIpe3JldHVybiBhLmNvbmZpcm0oYil9LAok -aUs1OjEsCiRpdjY6MX0KVy5DbS5wcm90b3R5cGU9eyRpQ206MX0KVy5DUS5wcm90b3R5cGU9eyRpQ1E6 -MX0KVy53NC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzLHI9YS5sZWZ0CnIudG9TdHJpbmcK -cj0iUmVjdGFuZ2xlICgiK0guRWoocikrIiwgIgpzPWEudG9wCnMudG9TdHJpbmcKcz1yK0guRWoocykr -IikgIgpyPWEud2lkdGgKci50b1N0cmluZwpyPXMrSC5FaihyKSsiIHggIgpzPWEuaGVpZ2h0CnMudG9T -dHJpbmcKcmV0dXJuIHIrSC5FaihzKX0sCkROOmZ1bmN0aW9uKGEsYil7dmFyIHMscgppZihiPT1udWxs -KXJldHVybiExCmlmKHQucS5iKGIpKXtzPWEubGVmdApzLnRvU3RyaW5nCnI9Yi5sZWZ0CnIudG9TdHJp -bmcKaWYocz09PXIpe3M9YS50b3AKcy50b1N0cmluZwpyPWIudG9wCnIudG9TdHJpbmcKaWYocz09PXIp -e3M9YS53aWR0aApzLnRvU3RyaW5nCnI9Yi53aWR0aApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEuaGVp -Z2h0CnMudG9TdHJpbmcKcj1iLmhlaWdodApyLnRvU3RyaW5nCnI9cz09PXIKcz1yfWVsc2Ugcz0hMX1l -bHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQpyZXR1cm4gc30sCmdpTzpmdW5jdGlvbihhKXt2YXIg -cyxyLHEscD1hLmxlZnQKcC50b1N0cmluZwpwPUMuQ0QuZ2lPKHApCnM9YS50b3AKcy50b1N0cmluZwpz -PUMuQ0QuZ2lPKHMpCnI9YS53aWR0aApyLnRvU3RyaW5nCnI9Qy5DRC5naU8ocikKcT1hLmhlaWdodApx -LnRvU3RyaW5nCnJldHVybiBXLnJFKHAscyxyLEMuQ0QuZ2lPKHEpKX19ClcucmgucHJvdG90eXBlPXsK -Z0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKcTpmdW5jdGlvbihhLGIpe0gudVAoYikKaWYo -Yj4+PjAhPT1ifHxiPj1hLmxlbmd0aCl0aHJvdyBILmIoUC5DZihiLGEsbnVsbCxudWxsLG51bGwpKQpy -ZXR1cm4gYVtiXX0sClk1OmZ1bmN0aW9uKGEsYixjKXt0LkEuYShjKQp0aHJvdyBILmIoUC5MNCgiQ2Fu -bm90IGFzc2lnbiBlbGVtZW50IG9mIGltbXV0YWJsZSBMaXN0LiIpKX0sCkU6ZnVuY3Rpb24oYSxiKXtp -ZihiPDB8fGI+PWEubGVuZ3RoKXJldHVybiBILk9IKGEsYikKcmV0dXJuIGFbYl19LAokaWJROjEsCiRp -WGo6MSwKJGljWDoxLAokaXpNOjF9ClcuY2YucHJvdG90eXBlPXsKSzpmdW5jdGlvbihhLGIpe3ZhciBz -LHIscSxwLG8KdC5lQS5hKGIpCmZvcihzPXRoaXMuZ3ZjKCkscj1zLmxlbmd0aCxxPXRoaXMuYSxwPTA7 -cDxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEgubGspKHMpLCsrcCl7bz1zW3BdCmIuJDIobyxxLmdl -dEF0dHJpYnV0ZShvKSl9fSwKZ3ZjOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAsbyxuLG09dGhpcy5hLmF0 -dHJpYnV0ZXMKbS50b1N0cmluZwpzPUguVk0oW10sdC5zKQpmb3Iocj1tLmxlbmd0aCxxPXQuaDkscD0w -O3A8cjsrK3Ape2lmKHA+PW0ubGVuZ3RoKXJldHVybiBILk9IKG0scCkKbz1xLmEobVtwXSkKaWYoby5u -YW1lc3BhY2VVUkk9PW51bGwpe249by5uYW1lCm4udG9TdHJpbmcKQy5ObS5pKHMsbil9fXJldHVybiBz -fSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmd2YygpLmxlbmd0aD09PTB9fQpXLmk3LnByb3Rv -dHlwZT17Cng0OmZ1bmN0aW9uKGEpe3ZhciBzPUgub1QodGhpcy5hLmhhc0F0dHJpYnV0ZShhKSkKcmV0 -dXJuIHN9LApxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYS5nZXRBdHRyaWJ1dGUoSC5oKGIpKX0s -Clk1OmZ1bmN0aW9uKGEsYixjKXt0aGlzLmEuc2V0QXR0cmlidXRlKGIsYyl9LApnQTpmdW5jdGlvbihh -KXtyZXR1cm4gdGhpcy5ndmMoKS5sZW5ndGh9fQpXLlN5LnByb3RvdHlwZT17Cng0OmZ1bmN0aW9uKGEp -e3ZhciBzPUgub1QodGhpcy5hLmEuaGFzQXR0cmlidXRlKCJkYXRhLSIrdGhpcy5PVShhKSkpCnJldHVy -biBzfSwKcTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmEuYS5nZXRBdHRyaWJ1dGUoImRhdGEtIit0 -aGlzLk9VKEguaChiKSkpfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYS5hLnNldEF0dHJpYnV0ZSgi -ZGF0YS0iK3RoaXMuT1UoYiksYyl9LApLOmZ1bmN0aW9uKGEsYil7dGhpcy5hLksoMCxuZXcgVy5LUyh0 -aGlzLHQuZUEuYShiKSkpfSwKZ3ZjOmZ1bmN0aW9uKCl7dmFyIHM9SC5WTShbXSx0LnMpCnRoaXMuYS5L -KDAsbmV3IFcuQTModGhpcyxzKSkKcmV0dXJuIHN9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5n -dmMoKS5sZW5ndGh9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ3ZjKCkubGVuZ3RoPT09MH0s -CnhxOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT1ILlZNKGEuc3BsaXQoIi0iKSx0LnMpCmZvcihzPTE7czxx -Lmxlbmd0aDsrK3Mpe3I9cVtzXQppZihyLmxlbmd0aD4wKUMuTm0uWTUocSxzLHJbMF0udG9VcHBlckNh -c2UoKStKLktWKHIsMSkpfXJldHVybiBDLk5tLmsocSwiIil9LApPVTpmdW5jdGlvbihhKXt2YXIgcyxy -LHEscCxvCmZvcihzPWEubGVuZ3RoLHI9MCxxPSIiO3I8czsrK3Ipe3A9YVtyXQpvPXAudG9Mb3dlckNh -c2UoKQpxPShwIT09byYmcj4wP3ErIi0iOnEpK299cmV0dXJuIHEuY2hhckNvZGVBdCgwKT09MD9xOnF9 -fQpXLktTLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7aWYoSi5yWShhKS5uKGEsImRhdGEtIikp -dGhpcy5iLiQyKHRoaXMuYS54cShDLnhCLnluKGEsNSkpLGIpfSwKJFM6MTV9ClcuQTMucHJvdG90eXBl -PXsKJDI6ZnVuY3Rpb24oYSxiKXtpZihKLnJZKGEpLm4oYSwiZGF0YS0iKSlDLk5tLmkodGhpcy5iLHRo -aXMuYS54cShDLnhCLnluKGEsNSkpKX0sCiRTOjE1fQpXLkk0LnByb3RvdHlwZT17CkQ6ZnVuY3Rpb24o -KXt2YXIgcyxyLHEscCxvPVAuTHModC5OKQpmb3Iocz10aGlzLmEuY2xhc3NOYW1lLnNwbGl0KCIgIiks -cj1zLmxlbmd0aCxxPTA7cTxyOysrcSl7cD1KLlQwKHNbcV0pCmlmKHAubGVuZ3RoIT09MClvLmkoMCxw -KX1yZXR1cm4gb30sClg6ZnVuY3Rpb24oYSl7dGhpcy5hLmNsYXNzTmFtZT10LkMuYShhKS5rKDAsIiAi -KX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEuY2xhc3NMaXN0Lmxlbmd0aH0sCmdsMDpmdW5j -dGlvbihhKXtyZXR1cm4gdGhpcy5hLmNsYXNzTGlzdC5sZW5ndGg9PT0wfSwKZ29yOmZ1bmN0aW9uKGEp -e3JldHVybiB0aGlzLmEuY2xhc3NMaXN0Lmxlbmd0aCE9PTB9LApWMTpmdW5jdGlvbihhKXt0aGlzLmEu -Y2xhc3NOYW1lPSIifSwKdGc6ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlzLmEuY2xhc3NMaXN0LmNvbnRh -aW5zKGIpCnJldHVybiBzfSwKaTpmdW5jdGlvbihhLGIpe3ZhciBzLHIKSC5oKGIpCnM9dGhpcy5hLmNs -YXNzTGlzdApyPXMuY29udGFpbnMoYikKcy5hZGQoYikKcmV0dXJuIXJ9LApSOmZ1bmN0aW9uKGEsYil7 -dmFyIHMscixxCmlmKHR5cGVvZiBiPT0ic3RyaW5nIil7cz10aGlzLmEuY2xhc3NMaXN0CnI9cy5jb250 -YWlucyhiKQpzLnJlbW92ZShiKQpxPXJ9ZWxzZSBxPSExCnJldHVybiBxfSwKRlY6ZnVuY3Rpb24oYSxi -KXtXLlROKHRoaXMuYSx0LlEuYShiKSl9fQpXLkZrLnByb3RvdHlwZT17fQpXLlJPLnByb3RvdHlwZT17 -fQpXLmV1LnByb3RvdHlwZT17fQpXLnhDLnByb3RvdHlwZT17fQpXLnZOLnByb3RvdHlwZT17CiQxOmZ1 -bmN0aW9uKGEpe3JldHVybiB0aGlzLmEuJDEodC5CLmEoYSkpfSwKJFM6Mjd9ClcuSlEucHJvdG90eXBl -PXsKQ1k6ZnVuY3Rpb24oYSl7dmFyIHMKaWYoJC5vci5hPT09MCl7Zm9yKHM9MDtzPDI2MjsrK3MpJC5v -ci5ZNSgwLEMuY21bc10sVy5wUygpKQpmb3Iocz0wO3M8MTI7KytzKSQub3IuWTUoMCxDLkJJW3NdLFcu -VjQoKSl9fSwKaTA6ZnVuY3Rpb24oYSl7cmV0dXJuICQuQU4oKS50ZygwLFcuclMoYSkpfSwKRWI6ZnVu -Y3Rpb24oYSxiLGMpe3ZhciBzPSQub3IucSgwLEguRWooVy5yUyhhKSkrIjo6IitiKQppZihzPT1udWxs -KXM9JC5vci5xKDAsIio6OiIrYikKaWYocz09bnVsbClyZXR1cm4hMQpyZXR1cm4gSC55OChzLiQ0KGEs -YixjLHRoaXMpKX0sCiRpa0Y6MX0KVy5HbS5wcm90b3R5cGU9ewpnbTpmdW5jdGlvbihhKXtyZXR1cm4g -bmV3IFcuVzkoYSx0aGlzLmdBKGEpLEgueihhKS5DKCJXOTxHbS5FPiIpKX19ClcudkQucHJvdG90eXBl -PXsKaTA6ZnVuY3Rpb24oYSl7cmV0dXJuIEMuTm0uVnIodGhpcy5hLG5ldyBXLlV2KGEpKX0sCkViOmZ1 -bmN0aW9uKGEsYixjKXtyZXR1cm4gQy5ObS5Wcih0aGlzLmEsbmV3IFcuRWcoYSxiLGMpKX0sCiRpa0Y6 -MX0KVy5Vdi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdC5FLmEoYSkuaTAodGhpcy5h -KX0sCiRTOjE2fQpXLkVnLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0LkUuYShhKS5F -Yih0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LAokUzoxNn0KVy5tNi5wcm90b3R5cGU9ewpDWTpmdW5jdGlv -bihhLGIsYyxkKXt2YXIgcyxyLHEKdGhpcy5hLkZWKDAsYykKcz1iLmV2KDAsbmV3IFcuRW8oKSkKcj1i -LmV2KDAsbmV3IFcuV2soKSkKdGhpcy5iLkZWKDAscykKcT10aGlzLmMKcS5GVigwLEMueEQpCnEuRlYo -MCxyKX0sCmkwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEudGcoMCxXLnJTKGEpKX0sCkViOmZ1bmN0 -aW9uKGEsYixjKXt2YXIgcz10aGlzLHI9Vy5yUyhhKSxxPXMuYwppZihxLnRnKDAsSC5FaihyKSsiOjoi -K2IpKXJldHVybiBzLmQuRHQoYykKZWxzZSBpZihxLnRnKDAsIio6OiIrYikpcmV0dXJuIHMuZC5EdChj -KQplbHNle3E9cy5iCmlmKHEudGcoMCxILkVqKHIpKyI6OiIrYikpcmV0dXJuITAKZWxzZSBpZihxLnRn -KDAsIio6OiIrYikpcmV0dXJuITAKZWxzZSBpZihxLnRnKDAsSC5FaihyKSsiOjoqIikpcmV0dXJuITAK -ZWxzZSBpZihxLnRnKDAsIio6OioiKSlyZXR1cm4hMH1yZXR1cm4hMX0sCiRpa0Y6MX0KVy5Fby5wcm90 -b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4hQy5ObS50ZyhDLkJJLEguaChhKSl9LAokUzo3fQpX -LldrLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBDLk5tLnRnKEMuQkksSC5oKGEpKX0s -CiRTOjd9ClcuY3QucHJvdG90eXBlPXsKRWI6ZnVuY3Rpb24oYSxiLGMpe2lmKHRoaXMuakYoYSxiLGMp -KXJldHVybiEwCmlmKGI9PT0idGVtcGxhdGUiJiZjPT09IiIpcmV0dXJuITAKaWYoYS5nZXRBdHRyaWJ1 -dGUoInRlbXBsYXRlIik9PT0iIilyZXR1cm4gdGhpcy5lLnRnKDAsYikKcmV0dXJuITF9fQpXLklBLnBy -b3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiJURU1QTEFURTo6IitILkVqKEguaChhKSl9LAok -Uzo1fQpXLk93LnByb3RvdHlwZT17CmkwOmZ1bmN0aW9uKGEpe3ZhciBzCmlmKHQuZXcuYihhKSlyZXR1 -cm4hMQpzPXQuZzcuYihhKQppZihzJiZXLnJTKGEpPT09ImZvcmVpZ25PYmplY3QiKXJldHVybiExCmlm -KHMpcmV0dXJuITAKcmV0dXJuITF9LApFYjpmdW5jdGlvbihhLGIsYyl7aWYoYj09PSJpcyJ8fEMueEIu -bihiLCJvbiIpKXJldHVybiExCnJldHVybiB0aGlzLmkwKGEpfSwKJGlrRjoxfQpXLlc5LnByb3RvdHlw -ZT17CkY6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLHI9cy5jKzEscT1zLmIKaWYocjxxKXtzLnNwKEoueDko -cy5hLHIpKQpzLmM9cgpyZXR1cm4hMH1zLnNwKG51bGwpCnMuYz1xCnJldHVybiExfSwKZ2w6ZnVuY3Rp -b24oKXtyZXR1cm4gdGhpcy5kfSwKc3A6ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLkMoIjE/Iiku -YShhKX0sCiRpQW46MX0KVy5kVy5wcm90b3R5cGU9eyRpRDA6MSwkaXY2OjF9ClcubWsucHJvdG90eXBl -PXskaXkwOjF9ClcuS28ucHJvdG90eXBlPXsKUG46ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcyxyPW5ldyBX -LmZtKHMpCnMuYj0hMQpyLiQyKGEsbnVsbCkKZm9yKDtzLmI7KXtzLmI9ITEKci4kMihhLG51bGwpfX0s -CkVQOmZ1bmN0aW9uKGEsYil7dmFyIHM9dGhpcy5iPSEwCmlmKGIhPW51bGw/YiE9PWEucGFyZW50Tm9k -ZTpzKUouTHQoYSkKZWxzZSBiLnJlbW92ZUNoaWxkKGEpfSwKSTQ6ZnVuY3Rpb24oYSxiKXt2YXIgcyxy -LHEscCxvLG49ITAsbT1udWxsLGw9bnVsbAp0cnl7bT1KLmlnKGEpCmw9bS5hLmdldEF0dHJpYnV0ZSgi -aXMiKQp0LmguYShhKQpzPWZ1bmN0aW9uKGMpe2lmKCEoYy5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTmFt -ZWROb2RlTWFwKSlyZXR1cm4gdHJ1ZQppZihjLmlkPT0nbGFzdENoaWxkJ3x8Yy5uYW1lPT0nbGFzdENo -aWxkJ3x8Yy5pZD09J3ByZXZpb3VzU2libGluZyd8fGMubmFtZT09J3ByZXZpb3VzU2libGluZyd8fGMu -aWQ9PSdjaGlsZHJlbid8fGMubmFtZT09J2NoaWxkcmVuJylyZXR1cm4gdHJ1ZQp2YXIgaz1jLmNoaWxk -Tm9kZXMKaWYoYy5sYXN0Q2hpbGQmJmMubGFzdENoaWxkIT09a1trLmxlbmd0aC0xXSlyZXR1cm4gdHJ1 -ZQppZihjLmNoaWxkcmVuKWlmKCEoYy5jaGlsZHJlbiBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9ufHxj -LmNoaWxkcmVuIGluc3RhbmNlb2YgTm9kZUxpc3QpKXJldHVybiB0cnVlCnZhciBqPTAKaWYoYy5jaGls -ZHJlbilqPWMuY2hpbGRyZW4ubGVuZ3RoCmZvcih2YXIgaT0wO2k8ajtpKyspe3ZhciBoPWMuY2hpbGRy -ZW5baV0KaWYoaC5pZD09J2F0dHJpYnV0ZXMnfHxoLm5hbWU9PSdhdHRyaWJ1dGVzJ3x8aC5pZD09J2xh -c3RDaGlsZCd8fGgubmFtZT09J2xhc3RDaGlsZCd8fGguaWQ9PSdwcmV2aW91c1NpYmxpbmcnfHxoLm5h -bWU9PSdwcmV2aW91c1NpYmxpbmcnfHxoLmlkPT0nY2hpbGRyZW4nfHxoLm5hbWU9PSdjaGlsZHJlbicp -cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfShhKQpuPUgub1Qocyk/ITA6IShhLmF0dHJpYnV0ZXMgaW5z -dGFuY2VvZiBOYW1lZE5vZGVNYXApfWNhdGNoKHApe0guUnUocCl9cj0iZWxlbWVudCB1bnByaW50YWJs -ZSIKdHJ5e3I9Si5qKGEpfWNhdGNoKHApe0guUnUocCl9dHJ5e3E9Vy5yUyhhKQp0aGlzLmtSKHQuaC5h -KGEpLGIsbixyLHEsdC5mLmEobSksSC5rKGwpKX1jYXRjaChwKXtpZihILlJ1KHApIGluc3RhbmNlb2Yg -UC51KXRocm93IHAKZWxzZXt0aGlzLkVQKGEsYikKd2luZG93Cm89IlJlbW92aW5nIGNvcnJ1cHRlZCBl -bGVtZW50ICIrSC5FaihyKQppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNv -bGUud2FybihvKX19fSwKa1I6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIHMscixxLHAsbyxuLG09 -dGhpcwppZihjKXttLkVQKGEsYikKd2luZG93CnM9IlJlbW92aW5nIGVsZW1lbnQgZHVlIHRvIGNvcnJ1 -cHRlZCBhdHRyaWJ1dGVzIG9uIDwiK2QrIj4iCmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3 -aW5kb3cuY29uc29sZS53YXJuKHMpCnJldHVybn1pZighbS5hLmkwKGEpKXttLkVQKGEsYikKd2luZG93 -CnM9IlJlbW92aW5nIGRpc2FsbG93ZWQgZWxlbWVudCA8IitILkVqKGUpKyI+IGZyb20gIitILkVqKGIp -CmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53YXJuKHMpCnJldHVy -bn1pZihnIT1udWxsKWlmKCFtLmEuRWIoYSwiaXMiLGcpKXttLkVQKGEsYikKd2luZG93CnM9IlJlbW92 -aW5nIGRpc2FsbG93ZWQgdHlwZSBleHRlbnNpb24gPCIrSC5FaihlKSsnIGlzPSInK2crJyI+JwppZih0 -eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2FybihzKQpyZXR1cm59cz1m -Lmd2YygpCnI9SC5WTShzLnNsaWNlKDApLEgudDYocykpCmZvcihxPWYuZ3ZjKCkubGVuZ3RoLTEscz1m -LmE7cT49MDstLXEpe2lmKHE+PXIubGVuZ3RoKXJldHVybiBILk9IKHIscSkKcD1yW3FdCm89bS5hCm49 -Si5jSChwKQpILmgocCkKaWYoIW8uRWIoYSxuLHMuZ2V0QXR0cmlidXRlKHApKSl7d2luZG93Cm89IlJl -bW92aW5nIGRpc2FsbG93ZWQgYXR0cmlidXRlIDwiK0guRWooZSkrIiAiK3ArJz0iJytILkVqKHMuZ2V0 -QXR0cmlidXRlKHApKSsnIj4nCmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29u -c29sZS53YXJuKG8pCnMucmVtb3ZlQXR0cmlidXRlKHApfX1pZih0LmFXLmIoYSkpe3M9YS5jb250ZW50 -CnMudG9TdHJpbmcKbS5QbihzKX19LAokaW9uOjF9ClcuZm0ucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24o -YSxiKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLmEKc3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMTptLkk0 -KGEsYikKYnJlYWsKY2FzZSA4OmNhc2UgMTE6Y2FzZSAzOmNhc2UgNDpicmVhawpkZWZhdWx0Om0uRVAo -YSxiKX1zPWEubGFzdENoaWxkCmZvcihxPXQuQTtudWxsIT1zOyl7cj1udWxsCnRyeXtyPXMucHJldmlv -dXNTaWJsaW5nCmlmKHIhPW51bGwpe3A9ci5uZXh0U2libGluZwpvPXMKbz1wPT1udWxsP28hPW51bGw6 -cCE9PW8KcD1vfWVsc2UgcD0hMQppZihwKXtwPVAuUFYoIkNvcnJ1cHQgSFRNTCIpCnRocm93IEguYihw -KX19Y2F0Y2gobil7SC5SdShuKQpwPXEuYShzKQptLmI9ITAKbz1wLnBhcmVudE5vZGUKbz1hPT1udWxs -P28hPW51bGw6YSE9PW8KaWYobyl7bz1wLnBhcmVudE5vZGUKaWYobyE9bnVsbClvLnJlbW92ZUNoaWxk -KHApfWVsc2UgYS5yZW1vdmVDaGlsZChwKQpzPW51bGwKcj1hLmxhc3RDaGlsZH1pZihzIT1udWxsKXRo -aXMuJDIocyxhKQpzPXJ9fSwKJFM6MzB9ClcuTGUucHJvdG90eXBlPXt9ClcuSzcucHJvdG90eXBlPXt9 -ClcuckIucHJvdG90eXBlPXt9ClcuWFcucHJvdG90eXBlPXt9Clcub2EucHJvdG90eXBlPXt9ClAuaUou -cHJvdG90eXBlPXsKVkg6ZnVuY3Rpb24oYSl7dmFyIHMscj10aGlzLmEscT1yLmxlbmd0aApmb3Iocz0w -O3M8cTsrK3MpaWYocltzXT09PWEpcmV0dXJuIHMKQy5ObS5pKHIsYSkKQy5ObS5pKHRoaXMuYixudWxs -KQpyZXR1cm4gcX0sClB2OmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPXRoaXMsbz17fQppZihhPT1udWxs -KXJldHVybiBhCmlmKEgubChhKSlyZXR1cm4gYQppZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEK -aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGEgaW5zdGFuY2VvZiBQLmlQKXJldHVybiBu -ZXcgRGF0ZShhLmEpCmlmKHQuZnYuYihhKSl0aHJvdyBILmIoUC5TWSgic3RydWN0dXJlZCBjbG9uZSBv -ZiBSZWdFeHAiKSkKaWYodC5jOC5iKGEpKXJldHVybiBhCmlmKHQudy5iKGEpKXJldHVybiBhCmlmKHQu -SS5iKGEpKXJldHVybiBhCnM9dC5kRS5iKGEpfHwhMQppZihzKXJldHVybiBhCmlmKHQuZi5iKGEpKXty -PXAuVkgoYSkKcz1wLmIKaWYocj49cy5sZW5ndGgpcmV0dXJuIEguT0gocyxyKQpxPW8uYT1zW3JdCmlm -KHEhPW51bGwpcmV0dXJuIHEKcT17fQpvLmE9cQpDLk5tLlk1KHMscixxKQphLksoMCxuZXcgUC5qZyhv -LHApKQpyZXR1cm4gby5hfWlmKHQuai5iKGEpKXtyPXAuVkgoYSkKbz1wLmIKaWYocj49by5sZW5ndGgp -cmV0dXJuIEguT0gobyxyKQpxPW9bcl0KaWYocSE9bnVsbClyZXR1cm4gcQpyZXR1cm4gcC5layhhLHIp -fWlmKHQuZUguYihhKSl7cj1wLlZIKGEpCnM9cC5iCmlmKHI+PXMubGVuZ3RoKXJldHVybiBILk9IKHMs -cikKcT1vLmI9c1tyXQppZihxIT1udWxsKXJldHVybiBxCnE9e30Kby5iPXEKQy5ObS5ZNShzLHIscSkK -cC5pbShhLG5ldyBQLlRhKG8scCkpCnJldHVybiBvLmJ9dGhyb3cgSC5iKFAuU1koInN0cnVjdHVyZWQg -Y2xvbmUgb2Ygb3RoZXIgdHlwZSIpKX0sCmVrOmZ1bmN0aW9uKGEsYil7dmFyIHMscj1KLlU2KGEpLHE9 -ci5nQShhKSxwPW5ldyBBcnJheShxKQpDLk5tLlk1KHRoaXMuYixiLHApCmZvcihzPTA7czxxOysrcylD -Lk5tLlk1KHAscyx0aGlzLlB2KHIucShhLHMpKSkKcmV0dXJuIHB9fQpQLmpnLnByb3RvdHlwZT17CiQy -OmZ1bmN0aW9uKGEsYil7dGhpcy5hLmFbYV09dGhpcy5iLlB2KGIpfSwKJFM6MzF9ClAuVGEucHJvdG90 -eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt0aGlzLmEuYlthXT10aGlzLmIuUHYoYil9LAokUzoxN30KUC5C -Zi5wcm90b3R5cGU9ewppbTpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwCnQuYjguYShiKQpmb3Iocz1P -YmplY3Qua2V5cyhhKSxyPXMubGVuZ3RoLHE9MDtxPHI7KytxKXtwPXNbcV0KYi4kMihwLGFbcF0pfX19 -ClAuQXMucHJvdG90eXBlPXsKVjpmdW5jdGlvbihhKXt2YXIgcwpILmgoYSkKcz0kLmhHKCkuYgppZih0 -eXBlb2YgYSE9InN0cmluZyIpSC52KEgudEwoYSkpCmlmKHMudGVzdChhKSlyZXR1cm4gYQp0aHJvdyBI -LmIoUC5MMyhhLCJ2YWx1ZSIsIk5vdCBhIHZhbGlkIGNsYXNzIHRva2VuIikpfSwKdzpmdW5jdGlvbihh -KXtyZXR1cm4gdGhpcy5EKCkuaygwLCIgIil9LApnbTpmdW5jdGlvbihhKXt2YXIgcz10aGlzLkQoKQpy -ZXR1cm4gUC5yaihzLHMucixILkxoKHMpLmMpfSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLkQo -KS5hPT09MH0sCmdvcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5EKCkuYSE9PTB9LApnQTpmdW5jdGlv -bihhKXtyZXR1cm4gdGhpcy5EKCkuYX0sCnRnOmZ1bmN0aW9uKGEsYil7dGhpcy5WKGIpCnJldHVybiB0 -aGlzLkQoKS50ZygwLGIpfSwKaTpmdW5jdGlvbihhLGIpe3ZhciBzCkguaChiKQp0aGlzLlYoYikKcz10 -aGlzLk9TKG5ldyBQLkdFKGIpKQpyZXR1cm4gSC55OChzPT1udWxsPyExOnMpfSwKUjpmdW5jdGlvbihh -LGIpe3ZhciBzLHIKaWYodHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiExCnRoaXMuVihiKQpzPXRoaXMu -RCgpCnI9cy5SKDAsYikKdGhpcy5YKHMpCnJldHVybiByfSwKRlY6ZnVuY3Rpb24oYSxiKXt0aGlzLk9T -KG5ldyBQLk43KHRoaXMsdC5RLmEoYikpKX0sCmVSOmZ1bmN0aW9uKGEsYil7dmFyIHM9dGhpcy5EKCkK -cmV0dXJuIEguYksocyxiLEguTGgocykuQygibGYuRSIpKX0sCkU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g -dGhpcy5EKCkuRSgwLGIpfSwKVjE6ZnVuY3Rpb24oYSl7dGhpcy5PUyhuZXcgUC51USgpKX0sCk9TOmZ1 -bmN0aW9uKGEpe3ZhciBzLHIKdC5iVS5hKGEpCnM9dGhpcy5EKCkKcj1hLiQxKHMpCnRoaXMuWChzKQpy -ZXR1cm4gcn19ClAuR0UucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHQuQy5hKGEpLmko -MCx0aGlzLmEpfSwKJFM6MzN9ClAuTjcucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHM9dGhp -cy5iLHI9SC50NihzKQpyZXR1cm4gdC5DLmEoYSkuRlYoMCxuZXcgSC5sSihzLHIuQygicVUoMSkiKS5h -KHRoaXMuYS5ndU0oKSksci5DKCJsSjwxLHFVPiIpKSl9LAokUzoxOH0KUC51US5wcm90b3R5cGU9ewok -MTpmdW5jdGlvbihhKXt0LkMuYShhKQppZihhLmE+MCl7YS5iPWEuYz1hLmQ9YS5lPWEuZj1udWxsCmEu -YT0wCmEuUygpfXJldHVybiBudWxsfSwKJFM6MTh9ClAuaEYucHJvdG90eXBlPXskaWhGOjF9ClAuUEMu -cHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMKdC5ZLmEoYSkKcz1mdW5jdGlvbihiLGMsZCl7 -cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGIoYyxkLHRoaXMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFw -cGx5KGFyZ3VtZW50cykpfX0oUC5SNCxhLCExKQpQLkRtKHMsJC53KCksYSkKcmV0dXJuIHN9LAokUzo0 -fQpQLm10LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgdGhpcy5hKGEpfSwKJFM6 -NH0KUC5RUy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAucjcoYSl9LAokUzoz -NX0KUC5ucC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAuVHooYSx0LmFtKX0s -CiRTOjQ2fQpQLlV0LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5FNChhKX0s -CiRTOjM3fQpQLkU0LnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYiE9InN0cmlu -ZyImJnR5cGVvZiBiIT0ibnVtYmVyIil0aHJvdyBILmIoUC54WSgicHJvcGVydHkgaXMgbm90IGEgU3Ry -aW5nIG9yIG51bSIpKQpyZXR1cm4gUC5kVSh0aGlzLmFbYl0pfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe2lm -KHR5cGVvZiBiIT0ic3RyaW5nIiYmdHlwZW9mIGIhPSJudW1iZXIiKXRocm93IEguYihQLnhZKCJwcm9w -ZXJ0eSBpcyBub3QgYSBTdHJpbmcgb3IgbnVtIikpCnRoaXMuYVtiXT1QLndZKGMpfSwKRE46ZnVuY3Rp -b24oYSxiKXtpZihiPT1udWxsKXJldHVybiExCnJldHVybiBiIGluc3RhbmNlb2YgUC5FNCYmdGhpcy5h -PT09Yi5hfSwKdzpmdW5jdGlvbihhKXt2YXIgcyxyCnRyeXtzPVN0cmluZyh0aGlzLmEpCnJldHVybiBz -fWNhdGNoKHIpe0guUnUocikKcz10aGlzLnhiKDApCnJldHVybiBzfX0sClY3OmZ1bmN0aW9uKGEsYil7 -dmFyIHMscj10aGlzLmEKaWYoYj09bnVsbClzPW51bGwKZWxzZXtzPUgudDYoYikKcz1QLkNIKG5ldyBI -LmxKKGIscy5DKCJAKDEpIikuYShQLmlHKCkpLHMuQygibEo8MSxAPiIpKSwhMCx0LnopfXJldHVybiBQ -LmRVKHJbYV0uYXBwbHkocixzKSl9LApnaU86ZnVuY3Rpb24oYSl7cmV0dXJuIDB9fQpQLnI3LnByb3Rv -dHlwZT17fQpQLlR6LnByb3RvdHlwZT17CmNQOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMscj1hPDB8fGE+ -PXMuZ0EocykKaWYocil0aHJvdyBILmIoUC5URShhLDAscy5nQShzKSxudWxsLG51bGwpKX0sCnE6ZnVu -Y3Rpb24oYSxiKXtpZihILm9rKGIpKXRoaXMuY1AoYikKcmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLlVy -KDAsYikpfSwKWTU6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY1AoYikKdGhpcy5iaCgwLGIsYyl9LApnQTpm -dW5jdGlvbihhKXt2YXIgcz10aGlzLmEubGVuZ3RoCmlmKHR5cGVvZiBzPT09Im51bWJlciImJnM+Pj4w -PT09cylyZXR1cm4gcwp0aHJvdyBILmIoUC5QVigiQmFkIEpzQXJyYXkgbGVuZ3RoIikpfSwKJGliUTox -LAokaWNYOjEsCiRpek06MX0KUC5jby5wcm90b3R5cGU9ewpZNTpmdW5jdGlvbihhLGIsYyl7cmV0dXJu -IHRoaXMuZTQoMCxiLGMpfX0KUC5uZC5wcm90b3R5cGU9eyRpbmQ6MX0KUC5LZS5wcm90b3R5cGU9ewpE -OmZ1bmN0aW9uKCl7dmFyIHMscixxLHAsbz10aGlzLmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpLG49UC5M -cyh0Lk4pCmlmKG89PW51bGwpcmV0dXJuIG4KZm9yKHM9by5zcGxpdCgiICIpLHI9cy5sZW5ndGgscT0w -O3E8cjsrK3Epe3A9Si5UMChzW3FdKQppZihwLmxlbmd0aCE9PTApbi5pKDAscCl9cmV0dXJuIG59LApY -OmZ1bmN0aW9uKGEpe3RoaXMuYS5zZXRBdHRyaWJ1dGUoImNsYXNzIixhLmsoMCwiICIpKX19ClAuaGku -cHJvdG90eXBlPXsKZ1A6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLktlKGEpfSwKc2hmOmZ1bmN0aW9u -KGEsYil7dGhpcy5ZQyhhLGIpfSwKcjY6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHMscixxLHAsbyxuCmlm -KGQ9PW51bGwpe3M9SC5WTShbXSx0LnYpCmQ9bmV3IFcudkQocykKQy5ObS5pKHMsVy5UdyhudWxsKSkK -Qy5ObS5pKHMsVy5CbCgpKQpDLk5tLmkocyxuZXcgVy5PdygpKX1jPW5ldyBXLktvKGQpCnI9Jzxzdmcg -dmVyc2lvbj0iMS4xIj4nK0guRWooYikrIjwvc3ZnPiIKcz1kb2N1bWVudApxPXMuYm9keQpxLnRvU3Ry -aW5nCnA9Qy5SWS5BSChxLHIsYykKbz1zLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpwLnRvU3RyaW5n -CnM9bmV3IFcuZTcocCkKbj1zLmdyOChzKQpmb3IoO3M9bi5maXJzdENoaWxkLHMhPW51bGw7KW8uYXBw -ZW5kQ2hpbGQocykKcmV0dXJuIG99LApuejpmdW5jdGlvbihhLGIsYyxkLGUpe3Rocm93IEguYihQLkw0 -KCJDYW5ub3QgaW52b2tlIGluc2VydEFkamFjZW50SHRtbCBvbiBTVkcuIikpfSwKZ1ZsOmZ1bmN0aW9u -KGEpe3JldHVybiBuZXcgVy5ldShhLCJjbGljayIsITEsdC5rKX0sCiRpaGk6MX0KVS5kMi5wcm90b3R5 -cGU9ewpMdDpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG89dGhpcyxuPXQuWCxtPXQuXyxsPVAuRmwobixt -KSxrPW8uYQppZihrIT1udWxsKXtzPUguVk0oW10sdC5HKQpmb3Iocj1rLmxlbmd0aCxxPTA7cTxrLmxl -bmd0aDtrLmxlbmd0aD09PXJ8fCgwLEgubGspKGspLCsrcSl7cD1rW3FdCnMucHVzaChQLkVGKFsiZGVz -Y3JpcHRpb24iLHAuYSwiaHJlZiIscC5iXSxuLG0pKX1sLlk1KDAsImVkaXRzIixzKX1sLlk1KDAsImV4 -cGxhbmF0aW9uIixvLmIpCmwuWTUoMCwibGluZSIsby5jKQpsLlk1KDAsImRpc3BsYXlQYXRoIixvLmQp -CmwuWTUoMCwidXJpUGF0aCIsby5lKQpuPW8uZgppZihuIT1udWxsKXttPUguVk0oW10sdC5HKQpmb3Io -az1uLmxlbmd0aCxxPTA7cTxuLmxlbmd0aDtuLmxlbmd0aD09PWt8fCgwLEgubGspKG4pLCsrcSltLnB1 -c2gobltxXS5MdCgpKQpsLlk1KDAsInRyYWNlcyIsbSl9cmV0dXJuIGx9fQpVLlNlLnByb3RvdHlwZT17 -Ckx0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuRUYoWyJkZXNjcmlwdGlvbiIsdGhpcy5hLCJocmVmIix0aGlz -LmJdLHQuWCx0Ll8pfX0KVS5NbC5wcm90b3R5cGU9ewpMdDpmdW5jdGlvbigpe3JldHVybiBQLkVGKFsi -aHJlZiIsdGhpcy5hLCJsaW5lIix0aGlzLmIsInBhdGgiLHRoaXMuY10sdC5YLHQuXyl9fQpVLnlELnBy -b3RvdHlwZT17Ckx0OmZ1bmN0aW9uKCl7dmFyIHMscixxLHA9SC5WTShbXSx0LkcpCmZvcihzPXRoaXMu -YixyPXMubGVuZ3RoLHE9MDtxPHMubGVuZ3RoO3MubGVuZ3RoPT09cnx8KDAsSC5saykocyksKytxKXAu -cHVzaChzW3FdLkx0KCkpCnJldHVybiBQLkVGKFsiZGVzY3JpcHRpb24iLHRoaXMuYSwiZW50cmllcyIs -cF0sdC5YLHQuXyl9fQpVLndiLnByb3RvdHlwZT17Ckx0OmZ1bmN0aW9uKCl7dmFyIHMscixxLHA9dGhp -cyxvPVAuRmwodC5YLHQuXykKby5ZNSgwLCJkZXNjcmlwdGlvbiIscC5hKQpzPXAuYgppZihzIT1udWxs -KW8uWTUoMCwiZnVuY3Rpb24iLHMpCnM9cC5jCmlmKHMhPW51bGwpby5ZNSgwLCJsaW5rIixzLkx0KCkp -CnM9cC5kCmlmKHMubGVuZ3RoIT09MCl7cj1ILnQ2KHMpCnE9ci5DKCJsSjwxLFowPHFVKixNaCo+Kj4i -KQpvLlk1KDAsImhpbnRBY3Rpb25zIixQLlkxKG5ldyBILmxKKHMsci5DKCJaMDxxVSosTWgqPiooMSki -KS5hKG5ldyBVLmIwKCkpLHEpLCEwLHEuQygiYUwuRSIpKSl9cmV0dXJuIG99fQpVLmFOLnByb3RvdHlw -ZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBSLm56KHQudC5hKGEpKX0sCiRTOjM4fQpVLmIwLnByb3Rv -dHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0LmFYLmEoYSkuTHQoKX0sCiRTOjM5fQpCLmo4LnBy -b3RvdHlwZT17Ckx0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuRUYoWyJsaW5lIix0aGlzLmEsImV4cGxhbmF0 -aW9uIix0aGlzLmIsIm9mZnNldCIsdGhpcy5jXSx0LlgsdC5fKX19CkIucXAucHJvdG90eXBlPXsKTHQ6 -ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMsaz10Llgsaj1QLkZsKGssdC5kcCkKZm9y -KHM9bC5kLHM9cy5nUHUocykscz1zLmdtKHMpLHI9dC5fLHE9dC5HO3MuRigpOyl7cD1zLmdsKCkKbz1w -LmEKbj1ILlZNKFtdLHEpCmZvcihwPUouSVQocC5iKTtwLkYoKTspe209cC5nbCgpCm4ucHVzaChQLkVG -KFsibGluZSIsbS5hLCJleHBsYW5hdGlvbiIsbS5iLCJvZmZzZXQiLG0uY10sayxyKSl9ai5ZNSgwLG8s -bil9cmV0dXJuIFAuRUYoWyJyZWdpb25zIixsLmEsIm5hdmlnYXRpb25Db250ZW50IixsLmIsInNvdXJj -ZUNvZGUiLGwuYywiZWRpdHMiLGpdLGsscil9fQpULm1RLnByb3RvdHlwZT17fQpMLmUucHJvdG90eXBl -PXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG0KdC5hTC5hKGEpCnM9d2luZG93LmxvY2F0 -aW9uLnBhdGhuYW1lCnI9TC5HNih3aW5kb3cubG9jYXRpb24uaHJlZikKcT1MLmFLKHdpbmRvdy5sb2Nh -dGlvbi5ocmVmKQpMLkdlKCkKaWYocyE9PSIvIiYmcyE9PUouVDAoZG9jdW1lbnQucXVlcnlTZWxlY3Rv -cigiLnJvb3QiKS50ZXh0Q29udGVudCkpTC5HNyhzLHIscSwhMCxuZXcgTC5WVyhzLHIscSkpCnA9ZG9j -dW1lbnQKbz1KLnFGKHAucXVlcnlTZWxlY3RvcigiLmFwcGx5LW1pZ3JhdGlvbiIpKQpuPW8uJHRpCm09 -bi5DKCJ+KDEpPyIpLmEobmV3IEwub1ooKSkKdC5aLmEobnVsbCkKVy5KRShvLmEsby5iLG0sITEsbi5j -KQpuPUoucUYocC5xdWVyeVNlbGVjdG9yKCIucmVydW4tbWlncmF0aW9uIikpCm09bi4kdGkKVy5KRShu -LmEsbi5iLG0uQygifigxKT8iKS5hKG5ldyBMLkhpKCkpLCExLG0uYykKbT1KLnFGKHAucXVlcnlTZWxl -Y3RvcigiLnJlcG9ydC1wcm9ibGVtIikpCm49bS4kdGkKVy5KRShtLmEsbS5iLG4uQygifigxKT8iKS5h -KG5ldyBMLkJUKCkpLCExLG4uYykKcD1KLnFGKHAucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUgLmNs -b3NlIikpCm49cC4kdGkKVy5KRShwLmEscC5iLG4uQygifigxKT8iKS5hKG5ldyBMLlBZKCkpLCExLG4u -YykKbj1KLnFGKCQuYzAoKSkKcD1uLiR0aQpXLkpFKG4uYSxuLmIscC5DKCJ+KDEpPyIpLmEobmV3IEwu -dTgoKSksITEscC5jKX0sCiRTOjE5fQpMLlZXLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7TC5Gcih0 -aGlzLmEsdGhpcy5iLHRoaXMuYyl9LAokUzoyfQpMLm9aLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEp -e3ZhciBzLHIscSxwLG8KdC5PLmEoYSkKaWYoSC5vVChDLm9sLnVzKHdpbmRvdywiVGhpcyB3aWxsIGFw -cGx5IHRoZSBjaGFuZ2VzIHlvdSd2ZSBwcmV2aWV3ZWQgdG8geW91ciB3b3JraW5nIGRpcmVjdG9yeS4g -SXQgaXMgcmVjb21tZW5kZWQgeW91IGNvbW1pdCBhbnkgY2hhbmdlcyB5b3UgbWFkZSBiZWZvcmUgZG9p -bmcgdGhpcy4iKSkpe3M9SC5WTShbXSx0LkcpCmZvcihyPSQuSVIscT1yLmxlbmd0aCxwPTA7cDxyLmxl -bmd0aDtyLmxlbmd0aD09PXF8fCgwLEgubGspKHIpLCsrcClzLnB1c2gocltwXS5MdCgpKQpzPUwudHko -Ii9hcHBseS1taWdyYXRpb24iLFAuRUYoWyJuYXZpZ2F0aW9uVHJlZSIsc10sdC5YLHQuZHApKS5XNyhu -ZXcgTC5qcigpLHQuUCkKbz1uZXcgTC5xbCgpCnQuYjcuYShudWxsKQpyPXMuJHRpCnE9JC5YMwppZihx -IT09Qy5OVSlvPVAuVkgobyxxKQpzLnhmKG5ldyBQLkZlKG5ldyBQLnZzKHEsciksMixudWxsLG8sci5D -KCJAPDE+IikuS3Eoci5jKS5DKCJGZTwxLDI+IikpKX19LAokUzoxfQpMLmpyLnByb3RvdHlwZT17CiQx -OmZ1bmN0aW9uKGEpe3ZhciBzCnQudC5hKGEpCnM9ZG9jdW1lbnQuYm9keQpzLmNsYXNzTGlzdC5yZW1v -dmUoInByb3Bvc2VkIikKcy5jbGFzc0xpc3QuYWRkKCJhcHBsaWVkIil9LAokUzo0Mn0KTC5xbC5wcm90 -b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe0wuQzIoIkNvdWxkbid0IGFwcGx5IG1pZ3JhdGlvbiIsYSxi -KX0sCiRDOiIkMiIsCiRSOjIsCiRTOjE3fQpMLkhpLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3Jl -dHVybiB0aGlzLnhuKHQuTy5hKGEpKX0sCnhuOmZ1bmN0aW9uKGEpe3ZhciBzPTAscj1QLkZYKHQuUCks -cT0xLHAsbz1bXSxuLG0sbCxrLGoKdmFyICRhc3luYyQkMT1QLmx6KGZ1bmN0aW9uKGIsYyl7aWYoYj09 -PTEpe3A9YwpzPXF9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOnE9Mwpkb2N1bWVudC5ib2R5LmNs -YXNzTGlzdC5hZGQoInJlcnVubmluZyIpCnM9NgpyZXR1cm4gUC5qUShMLnR5KCIvcmVydW4tbWlncmF0 -aW9uIixudWxsKSwkYXN5bmMkJDEpCmNhc2UgNjpuPWMKaWYoSC5vVChILnk4KEoueDkobiwic3VjY2Vz -cyIpKSkpd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpCmVsc2UgTC5LMCh0LmVFLmEoSi54OShuLCJlcnJv -cnMiKSkpCm8ucHVzaCg1KQpzPTQKYnJlYWsKY2FzZSAzOnE9MgpqPXAKbT1ILlJ1KGopCmw9SC50cyhq -KQpMLkMyKCJGYWlsZWQgdG8gcmVydW4gbWlncmF0aW9uIixtLGwpCm8ucHVzaCg1KQpzPTQKYnJlYWsK -Y2FzZSAyOm89WzFdCmNhc2UgNDpxPTEKZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJyZXJ1 -bm5pbmciKQpzPW8ucG9wKCkKYnJlYWsKY2FzZSA1OnJldHVybiBQLnlDKG51bGwscikKY2FzZSAxOnJl -dHVybiBQLmYzKHAscil9fSkKcmV0dXJuIFAuREkoJGFzeW5jJCQxLHIpfSwKJFM6MjB9CkwuQlQucHJv -dG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dC5PLmEoYSkKQy5vbC5Qbyh3aW5kb3csUC5YZCgiaHR0cHMi -LCJnaXRodWIuY29tIiwiZGFydC1sYW5nL3Nkay9pc3N1ZXMvbmV3IixQLkVGKFsidGl0bGUiLCJDdXN0 -b21lci1yZXBvcnRlZCBpc3N1ZSB3aXRoIE5OQkQgbWlncmF0aW9uIHRvb2wiLCJsYWJlbHMiLHUuZCwi -Ym9keSIsIiMjIyMgU3RlcHMgdG8gcmVwcm9kdWNlXG5cbiMjIyMgV2hhdCBkaWQgeW91IGV4cGVjdCB0 -byBoYXBwZW4/XG5cbiMjIyMgV2hhdCBhY3R1YWxseSBoYXBwZW5lZD9cblxuX1NjcmVlbnNob3RzIGFy -ZSBhcHByZWNpYXRlZF9cblxuKipEYXJ0IFNESyB2ZXJzaW9uKio6ICIrSC5Faihkb2N1bWVudC5nZXRF -bGVtZW50QnlJZCgic2RrLXZlcnNpb24iKS50ZXh0Q29udGVudCkrIlxuXG5UaGFua3MgZm9yIGZpbGlu -ZyFcbiJdLHQuWCx0LnopKS5nbkQoKSwicmVwb3J0LXByb2JsZW0iKX0sCiRTOjF9CkwuUFkucHJvdG90 -eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMKdC5PLmEoYSkKcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9y -KCIucG9wdXAtcGFuZSIpLnN0eWxlCnMuZGlzcGxheT0ibm9uZSIKcmV0dXJuIm5vbmUifSwKJFM6NDR9 -CkwudTgucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAKdC5PLmEoYSkKcz0kLkQ5 -KCkuaW5uZXJUZXh0CnI9dC5nLmEoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hdi1wYW5lbCBbZGF0 -YS1uYW1lKj0iJytILkVqKHMpKyciXScpLnBhcmVudE5vZGUpCnE9ci5xdWVyeVNlbGVjdG9yKCIuc3Rh -dHVzLWljb24iKQpwPUwueXcoJC5JUixzKQppZihwIGluc3RhbmNlb2YgTC5jRCYmSC5vVChwLngpKXtM -Lk90KHApCkwueG4ocSxwKQpMLkFSKHIscCl9fSwKJFM6MX0KTC5MLnByb3RvdHlwZT17CiQxOmZ1bmN0 -aW9uKGEpe3ZhciBzLHIscQp0LmFMLmEoYSkKcz13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUKcj1MLkc2 -KHdpbmRvdy5sb2NhdGlvbi5ocmVmKQpxPUwuYUsod2luZG93LmxvY2F0aW9uLmhyZWYpCmlmKHMubGVu -Z3RoPjEpTC5HNyhzLHIscSwhMSxudWxsKQplbHNle0wuQkUocyxCLndSKCksITApCkwuQlgoIiZuYnNw -OyIsbnVsbCl9fSwKJFM6MTl9CkwuV3gucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMscixx -LHA9ImNvbGxhcHNlZCIKdC5PLmEoYSkKcz10aGlzLmEKcj1KLllFKHMpCnE9dGhpcy5iCmlmKCFyLmdQ -KHMpLnRnKDAscCkpe3IuZ1AocykuaSgwLHApCkouZFIocSkuaSgwLHApfWVsc2V7ci5nUChzKS5SKDAs -cCkKSi5kUihxKS5SKDAscCl9fSwKJFM6MX0KTC5BTy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2 -YXIgcz1KLnFGKHQuZy5hKGEpKSxyPXMuJHRpLHE9ci5DKCJ+KDEpPyIpLmEobmV3IEwuZE4odGhpcy5h -KSkKdC5aLmEobnVsbCkKVy5KRShzLmEscy5iLHEsITEsci5jKX0sCiRTOjN9CkwuZE4ucHJvdG90eXBl -PXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIEwudDIodC5PLmEoYSksdGhpcy5hKX0sCiRTOjZ9CkwuSG8u -cHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMscixxCnQuZy5hKGEpCnM9Si5xRihhKQpyPXMu -JHRpCnE9ci5DKCJ+KDEpPyIpLmEobmV3IEwueHooYSx0aGlzLmEpKQp0LlouYShudWxsKQpXLkpFKHMu -YSxzLmIscSwhMSxyLmMpfSwKJFM6M30KTC54ei5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIg -cwp0Lk8uYShhKQpzPXRoaXMuYQpMLmhYKHRoaXMuYixQLlFBKHMuZ2V0QXR0cmlidXRlKCJkYXRhLSIr -bmV3IFcuU3kobmV3IFcuaTcocykpLk9VKCJvZmZzZXQiKSksbnVsbCksUC5RQShzLmdldEF0dHJpYnV0 -ZSgiZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KHMpKS5PVSgibGluZSIpKSxudWxsKSl9LAokUzoxfQpM -LklDLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzPUoucUYodC5nLmEoYSkpLHI9cy4kdGkK -ci5DKCJ+KDEpPyIpLmEoTC5pUygpKQp0LlouYShudWxsKQpXLkpFKHMuYSxzLmIsTC5pUygpLCExLHIu -Yyl9LAokUzozfQpMLmZDLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3QuZVEuYShhKQp0aGlzLmEu -YU0oMCx0aGlzLmIpfSwKJFM6NDd9CkwuVG0ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7SC5oKGEp -CnJldHVybiBhLmxlbmd0aD40MD9KLmxkKGEsMCw0MCkrIi4uLiI6YX0sCiRTOjQ4fQpMLm5ULnByb3Rv -dHlwZT17CiQwOmZ1bmN0aW9uKCl7TC5Gcih0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LAokUzoyfQpMLk5Z -LnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7TC5Gcih0aGlzLmEsbnVsbCxudWxsKX0sCiRTOjJ9Ckwu -dWUucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dC5hdy5hKGEpCnJldHVybiBILkVqKGEucSgwLCJz -ZXZlcml0eSIpKSsiIC0gIitILkVqKGEucSgwLCJtZXNzYWdlIikpKyIgYXQgIitILkVqKGEucSgwLCJs -b2NhdGlvbiIpKSsiIC0gKCIrSC5FaihhLnEoMCwiY29kZSIpKSsiKSJ9LAokUzo0OX0KTC5lWC5wcm90 -b3R5cGU9ewokMTpmdW5jdGlvbihhKXt0LmcuYShhKQokLnpCKCkudG9TdHJpbmcKdC5kSC5hKCQub3co -KS5xKDAsImhsanMiKSkuVjcoImhpZ2hsaWdodEJsb2NrIixbYV0pfSwKJFM6M30KTC5FRS5wcm90b3R5 -cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyCnQuTy5hKGEpLnByZXZlbnREZWZhdWx0KCkKcz10aGlz -LmEKcj10aGlzLmIKTC5hZih3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUscyxyLCEwLG5ldyBMLlFMKHMs -cikpCkwuaFgodGhpcy5jLHMscil9LAokUzoxfQpMLlFMLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7 -TC5Gcih3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsdGhpcy5hLHRoaXMuYil9LAokUzoyfQpMLlZTLnBy -b3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzLHI9InNlbGVjdGVkLWZpbGUiCnQuZy5hKGEpCmEu -dG9TdHJpbmcKcz1KLllFKGEpCmlmKGEuZ2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcu -aTcoYSkpLk9VKCJuYW1lIikpPT09dGhpcy5hLmEpcy5nUChhKS5pKDAscikKZWxzZSBzLmdQKGEpLlIo -MCxyKX0sCiRTOjN9CkwuVEQucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMscgp0Lk8uYShh -KQpzPXRoaXMuYQpzd2l0Y2gocy5nTCgpKXtjYXNlIEMuY3c6YnJlYWsKY2FzZSBDLldEOnMubkcoKQpi -cmVhawpjYXNlIEMuWGo6cy5jMigpCmJyZWFrCmNhc2UgQy5kYzpzLmMyKCkKYnJlYWt9cj10aGlzLmIK -TC5obChyLHMpCkwueG4odGhpcy5jLHMpCkwuQVIocixzKX0sCiRTOjF9CkwuSWYucHJvdG90eXBlPXsK -JDE6ZnVuY3Rpb24oYSl7dmFyIHMKdC5PLmEoYSkKcz10aGlzLmEKTC5PdChzKQpMLnhuKHRoaXMuYixz -KQpMLkFSKHRoaXMuYyxzKX0sCiRTOjF9CkwudEIucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0 -dXJuIEwudDIodC5PLmEoYSksITApfSwKJFM6Nn0KTC5tMi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihh -KXtyZXR1cm4gdGhpcy5SSSh0Lk8uYShhKSl9LApSSTpmdW5jdGlvbihhKXt2YXIgcz0wLHI9UC5GWCh0 -LlApLHE9MSxwLG89W10sbj10aGlzLG0sbCxrLGosaSxoLGcsZgp2YXIgJGFzeW5jJCQxPVAubHooZnVu -Y3Rpb24oYixjKXtpZihiPT09MSl7cD1jCnM9cX13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6cT0z -Cmk9ZG9jdW1lbnQKbT1DLkNELnpRKGkucXVlcnlTZWxlY3RvcigiLmNvbnRlbnQiKS5zY3JvbGxUb3Ap -Cmg9dC5YCnM9NgpyZXR1cm4gUC5qUShMLnR5KEwuUTQoIi9hcHBseS1oaW50IixQLkZsKGgsaCkpLG4u -YS5MdCgpKSwkYXN5bmMkJDEpCmNhc2UgNjpoPW4uYgpsPUwuVXMoaC5hKQpzPTcKcmV0dXJuIFAualEo -TC5HNyhsLG51bGwsaC5iLCExLG51bGwpLCRhc3luYyQkMSkKY2FzZSA3OmkuYm9keS5jbGFzc0xpc3Qu -YWRkKCJuZWVkcy1yZXJ1biIpCmk9aS5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpCmkudG9TdHJpbmcK -aS5zY3JvbGxUb3A9Si5WdShtKQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKZj1wCms9SC5SdShmKQpq -PUgudHMoZikKTC5DMigiY291bGRuJ3QgYXBwbHkgaGludCIsayxqKQpzPTUKYnJlYWsKY2FzZSAyOnM9 -MQpicmVhawpjYXNlIDU6cmV0dXJuIFAueUMobnVsbCxyKQpjYXNlIDE6cmV0dXJuIFAuZjMocCxyKX19 -KQpyZXR1cm4gUC5ESSgkYXN5bmMkJDEscil9LAokUzoyMH0KTC5RVy5wcm90b3R5cGU9ewp3OmZ1bmN0 -aW9uKGEpe3JldHVybiB0aGlzLmErIjpcbiIrdGhpcy5ifSwKJGlSejoxfQpMLlhBLnByb3RvdHlwZT17 -CkViOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hMH0sCmkwOmZ1bmN0aW9uKGEpe3JldHVybiEwfSwKJGlr -RjoxfQpMLnZ0LnByb3RvdHlwZT17CmdMOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAsbyxuLG0sbD10aGlz -LmQKaWYobC5sZW5ndGg9PT0wKXJldHVybiBDLmN3CnM9Qy5ObS5ndEgobCkuZ0woKQpmb3Iocj1sLmxl -bmd0aCxxPSEwLHA9ITAsbz0wO288bC5sZW5ndGg7bC5sZW5ndGg9PT1yfHwoMCxILmxrKShsKSwrK28p -e249bFtvXS5nTCgpCmlmKG4hPXMpcz1udWxsCm09biE9PUMuY3cKaWYobSYmbiE9PUMuV0QpcT0hMQpp -ZihtJiZuIT09Qy5YailwPSExfWlmKHMhPW51bGwpcmV0dXJuIHMKaWYocSlyZXR1cm4gQy5XRAppZihw -KXJldHVybiBDLlhqCnJldHVybiBDLmRjfSwKTFY6ZnVuY3Rpb24oKXt2YXIgcyxyLHE9dGhpcy5kCmlm -KHEhPW51bGwpZm9yKHM9cS5sZW5ndGgscj0wO3I8czsrK3IpcVtyXS5iPXRoaXN9LApjMjpmdW5jdGlv -bigpe3ZhciBzLHIscSxwCmZvcihzPXRoaXMuZCxyPXMubGVuZ3RoLHE9MDtxPHMubGVuZ3RoO3MubGVu -Z3RoPT09cnx8KDAsSC5saykocyksKytxKXtwPXNbcV0KaWYocCBpbnN0YW5jZW9mIEwudnQpcC5jMigp -CmVsc2UgaWYocCBpbnN0YW5jZW9mIEwuY0QmJkgub1QocC54KSYmcC5yPT09Qy5YailwLnI9Qy5XRH19 -LApuRzpmdW5jdGlvbigpe3ZhciBzLHIscSxwCmZvcihzPXRoaXMuZCxyPXMubGVuZ3RoLHE9MDtxPHMu -bGVuZ3RoO3MubGVuZ3RoPT09cnx8KDAsSC5saykocyksKytxKXtwPXNbcV0KaWYocCBpbnN0YW5jZW9m -IEwudnQpcC5uRygpCmVsc2UgaWYocCBpbnN0YW5jZW9mIEwuY0QmJkgub1QocC54KSYmcC5yPT09Qy5X -RClwLnI9Qy5Yan19LApMdDpmdW5jdGlvbigpe3ZhciBzLHI9UC5GbCh0LlgsdC5fKQpyLlk1KDAsInR5 -cGUiLCJkaXJlY3RvcnkiKQpyLlk1KDAsIm5hbWUiLHRoaXMuYSkKci5ZNSgwLCJzdWJ0cmVlIixMLlZE -KHRoaXMuZCkpCnM9dGhpcy5jCmlmKHMhPW51bGwpci5ZNSgwLCJwYXRoIixzKQpyZXR1cm4gcn19Ckwu -Y0QucHJvdG90eXBlPXsKTHQ6ZnVuY3Rpb24oKXt2YXIgcyxyPXRoaXMscT1QLkZsKHQuWCx0Ll8pCnEu -WTUoMCwidHlwZSIsImZpbGUiKQpxLlk1KDAsIm5hbWUiLHIuYSkKcz1yLmMKaWYocyE9bnVsbClxLlk1 -KDAsInBhdGgiLHMpCnM9ci5kCmlmKHMhPW51bGwpcS5ZNSgwLCJocmVmIixzKQpzPXIuZQppZihzIT1u -dWxsKXEuWTUoMCwiZWRpdENvdW50IixzKQpzPXIuZgppZihzIT1udWxsKXEuWTUoMCwid2FzRXhwbGlj -aXRseU9wdGVkT3V0IixzKQpzPXIucgppZihzIT1udWxsKXEuWTUoMCwibWlncmF0aW9uU3RhdHVzIixz -LmEpCnM9ci54CmlmKHMhPW51bGwpcS5ZNSgwLCJtaWdyYXRpb25TdGF0dXNDYW5CZUNoYW5nZWQiLHMp -CnJldHVybiBxfSwKZ0w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yfX0KTC5EOC5wcm90b3R5cGU9e30K -TC5POS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJ9fQpMLkdiLnByb3RvdHlw -ZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYn19ClIuTEwucHJvdG90eXBlPXsKTHQ6ZnVuY3Rp -b24oKXtyZXR1cm4gUC5FRihbIm5vZGVJZCIsdGhpcy5iLCJraW5kIix0aGlzLmEuYV0sdC5YLHQuXyl9 -fQpSLk1ELnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0LmZFLmEoYSkuYT09PXRoaXMu -YS5xKDAsImtpbmQiKX0sCiRTOjUwfQpSLkg3LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJu -IHRoaXMuYn19Ck0ubEkucHJvdG90eXBlPXsKV086ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHE9dC5kNApN -LllGKCJhYnNvbHV0ZSIsSC5WTShbYixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0scSkpCnM9 -dGhpcy5hCnM9cy5ZcihiKT4wJiYhcy5oSyhiKQppZihzKXJldHVybiBiCnM9RC5hYigpCnI9SC5WTShb -cyxiLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxxKQpNLllGKCJqb2luIixyKQpyZXR1cm4g -dGhpcy5JUChuZXcgSC51NihyLHQuZUopKX0sCnpmOmZ1bmN0aW9uKGEpe3ZhciBzLHIscT1YLkNMKGEs -dGhpcy5hKQpxLkl4KCkKcz1xLmQKcj1zLmxlbmd0aAppZihyPT09MCl7cz1xLmIKcmV0dXJuIHM9PW51 -bGw/Ii4iOnN9aWYocj09PTEpe3M9cS5iCnJldHVybiBzPT1udWxsPyIuIjpzfWlmKDA+PXIpcmV0dXJu -IEguT0gocywtMSkKcy5wb3AoKQpzPXEuZQppZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpz -LnBvcCgpCnEuSXgoKQpyZXR1cm4gcS53KDApfSwKSVA6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxu -LG0sbCxrLGoKdC5RLmEoYSkKZm9yKHM9YS4kdGkscj1zLkMoImEyKGNYLkUpIikuYShuZXcgTS5xNygp -KSxxPWEuZ20oYSkscz1uZXcgSC5TTyhxLHIscy5DKCJTTzxjWC5FPiIpKSxyPXRoaXMuYSxwPSExLG89 -ITEsbj0iIjtzLkYoKTspe209cS5nbCgpCmlmKHIuaEsobSkmJm8pe2w9WC5DTChtLHIpCms9bi5jaGFy -Q29kZUF0KDApPT0wP246bgpuPUMueEIuTmooaywwLHIuU3AoaywhMCkpCmwuYj1uCmlmKHIuZHMobikp -Qy5ObS5ZNShsLmUsMCxyLmdtSSgpKQpuPWwudygwKX1lbHNlIGlmKHIuWXIobSk+MCl7bz0hci5oSyht -KQpuPUguRWoobSl9ZWxzZXtqPW0ubGVuZ3RoCmlmKGohPT0wKXtpZigwPj1qKXJldHVybiBILk9IKG0s -MCkKaj1yLlVkKG1bMF0pfWVsc2Ugaj0hMQppZighailpZihwKW4rPXIuZ21JKCkKbis9bX1wPXIuZHMo -bSl9cmV0dXJuIG4uY2hhckNvZGVBdCgwKT09MD9uOm59LApvNTpmdW5jdGlvbihhKXt2YXIgcwppZigh -dGhpcy55MyhhKSlyZXR1cm4gYQpzPVguQ0woYSx0aGlzLmEpCnMuclIoKQpyZXR1cm4gcy53KDApfSwK -eTM6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGoKYS50b1N0cmluZwpzPXRoaXMuYQpy -PXMuWXIoYSkKaWYociE9PTApe2lmKHM9PT0kLktrKCkpZm9yKHE9MDtxPHI7KytxKWlmKEMueEIuVyhh -LHEpPT09NDcpcmV0dXJuITAKcD1yCm89NDd9ZWxzZXtwPTAKbz1udWxsfWZvcihuPW5ldyBILnFqKGEp -LmEsbT1uLmxlbmd0aCxxPXAsbD1udWxsO3E8bTsrK3EsbD1vLG89ayl7az1DLnhCLk8obixxKQppZihz -LnI0KGspKXtpZihzPT09JC5LaygpJiZrPT09NDcpcmV0dXJuITAKaWYobyE9bnVsbCYmcy5yNChvKSly -ZXR1cm4hMAppZihvPT09NDYpaj1sPT1udWxsfHxsPT09NDZ8fHMucjQobCkKZWxzZSBqPSExCmlmKGop -cmV0dXJuITB9fWlmKG89PW51bGwpcmV0dXJuITAKaWYocy5yNChvKSlyZXR1cm4hMAppZihvPT09NDYp -cz1sPT1udWxsfHxzLnI0KGwpfHxsPT09NDYKZWxzZSBzPSExCmlmKHMpcmV0dXJuITAKcmV0dXJuITF9 -LApIUDpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbixtLGw9dGhpcyxrPSdVbmFibGUgdG8gZmlu -ZCBhIHBhdGggdG8gIicKYj1sLldPKDAsYikKcz1sLmEKaWYocy5ZcihiKTw9MCYmcy5ZcihhKT4wKXJl -dHVybiBsLm81KGEpCmlmKHMuWXIoYSk8PTB8fHMuaEsoYSkpYT1sLldPKDAsYSkKaWYocy5ZcihhKTw9 -MCYmcy5ZcihiKT4wKXRocm93IEguYihYLkk3KGsrSC5FaihhKSsnIiBmcm9tICInK0guRWooYikrJyIu -JykpCnI9WC5DTChiLHMpCnIuclIoKQpxPVguQ0woYSxzKQpxLnJSKCkKcD1yLmQKbz1wLmxlbmd0aApp -ZihvIT09MCl7aWYoMD49bylyZXR1cm4gSC5PSChwLDApCnA9Si5STShwWzBdLCIuIil9ZWxzZSBwPSEx -CmlmKHApcmV0dXJuIHEudygwKQpwPXIuYgpvPXEuYgppZihwIT1vKXA9cD09bnVsbHx8bz09bnVsbHx8 -IXMuTmMocCxvKQplbHNlIHA9ITEKaWYocClyZXR1cm4gcS53KDApCndoaWxlKCEwKXtwPXIuZApvPXAu -bGVuZ3RoCmlmKG8hPT0wKXtuPXEuZAptPW4ubGVuZ3RoCmlmKG0hPT0wKXtpZigwPj1vKXJldHVybiBI -Lk9IKHAsMCkKcD1wWzBdCmlmKDA+PW0pcmV0dXJuIEguT0gobiwwKQpuPXMuTmMocCxuWzBdKQpwPW59 -ZWxzZSBwPSExfWVsc2UgcD0hMQppZighcClicmVhawpDLk5tLlc0KHIuZCwwKQpDLk5tLlc0KHIuZSwx -KQpDLk5tLlc0KHEuZCwwKQpDLk5tLlc0KHEuZSwxKX1wPXIuZApvPXAubGVuZ3RoCmlmKG8hPT0wKXtp -ZigwPj1vKXJldHVybiBILk9IKHAsMCkKcD1KLlJNKHBbMF0sIi4uIil9ZWxzZSBwPSExCmlmKHApdGhy -b3cgSC5iKFguSTcoaytILkVqKGEpKyciIGZyb20gIicrSC5FaihiKSsnIi4nKSkKcD10Lk4KQy5ObS5V -RyhxLmQsMCxQLk84KHIuZC5sZW5ndGgsIi4uIiwhMSxwKSkKQy5ObS5ZNShxLmUsMCwiIikKQy5ObS5V -RyhxLmUsMSxQLk84KHIuZC5sZW5ndGgscy5nbUkoKSwhMSxwKSkKcz1xLmQKcD1zLmxlbmd0aAppZihw -PT09MClyZXR1cm4iLiIKaWYocD4xJiZKLlJNKEMuTm0uZ3JaKHMpLCIuIikpe3M9cS5kCmlmKDA+PXMu -bGVuZ3RoKXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkKcz1xLmUKaWYoMD49cy5sZW5ndGgpcmV0dXJu -IEguT0gocywtMSkKcy5wb3AoKQppZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgp -CkMuTm0uaShzLCIiKX1xLmI9IiIKcS5JeCgpCnJldHVybiBxLncoMCl9fQpNLnE3LnByb3RvdHlwZT17 -CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBILmgoYSkhPT0iIn0sCiRTOjd9Ck0uTm8ucHJvdG90eXBlPXsK -JDE6ZnVuY3Rpb24oYSl7SC5rKGEpCnJldHVybiBhPT1udWxsPyJudWxsIjonIicrYSsnIid9LAokUzo1 -MX0KQi5mdi5wcm90b3R5cGU9ewp4WjpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMuWXIoYSkKaWYocj4w -KXJldHVybiBKLmxkKGEsMCxyKQppZih0aGlzLmhLKGEpKXtpZigwPj1hLmxlbmd0aClyZXR1cm4gSC5P -SChhLDApCnM9YVswXX1lbHNlIHM9bnVsbApyZXR1cm4gc30sCk5jOmZ1bmN0aW9uKGEsYil7cmV0dXJu -IGE9PWJ9fQpYLldELnByb3RvdHlwZT17Ckl4OmZ1bmN0aW9uKCl7dmFyIHMscixxPXRoaXMKd2hpbGUo -ITApe3M9cS5kCmlmKCEocy5sZW5ndGghPT0wJiZKLlJNKEMuTm0uZ3JaKHMpLCIiKSkpYnJlYWsKcz1x -LmQKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0gocywtMSkKcy5wb3AoKQpzPXEuZQppZigwPj1zLmxl -bmd0aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpfXM9cS5lCnI9cy5sZW5ndGgKaWYociE9PTApQy5O -bS5ZNShzLHItMSwiIil9LApyUjpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMsbD1ILlZN -KFtdLHQucykKZm9yKHM9bS5kLHI9cy5sZW5ndGgscT0wLHA9MDtwPHMubGVuZ3RoO3MubGVuZ3RoPT09 -cnx8KDAsSC5saykocyksKytwKXtvPXNbcF0Kbj1KLmlhKG8pCmlmKCEobi5ETihvLCIuIil8fG4uRE4o -bywiIikpKWlmKG4uRE4obywiLi4iKSl7bj1sLmxlbmd0aAppZihuIT09MCl7aWYoMD49bilyZXR1cm4g -SC5PSChsLC0xKQpsLnBvcCgpfWVsc2UgKytxfWVsc2UgQy5ObS5pKGwsbyl9aWYobS5iPT1udWxsKUMu -Tm0uVUcobCwwLFAuTzgocSwiLi4iLCExLHQuTikpCmlmKGwubGVuZ3RoPT09MCYmbS5iPT1udWxsKUMu -Tm0uaShsLCIuIikKbS5zbkoobCkKcz1tLmEKbS5zUGgoUC5POChsLmxlbmd0aCsxLHMuZ21JKCksITAs -dC5OKSkKcj1tLmIKaWYocj09bnVsbHx8bC5sZW5ndGg9PT0wfHwhcy5kcyhyKSlDLk5tLlk1KG0uZSww -LCIiKQpyPW0uYgppZihyIT1udWxsJiZzPT09JC5LaygpKXtyLnRvU3RyaW5nCm0uYj1ILnlzKHIsIi8i -LCJcXCIpfW0uSXgoKX0sCnc6ZnVuY3Rpb24oYSl7dmFyIHMscixxPXRoaXMscD1xLmIKcD1wIT1udWxs -P3A6IiIKZm9yKHM9MDtzPHEuZC5sZW5ndGg7KytzKXtyPXEuZQppZihzPj1yLmxlbmd0aClyZXR1cm4g -SC5PSChyLHMpCnI9cCtILkVqKHJbc10pCnA9cS5kCmlmKHM+PXAubGVuZ3RoKXJldHVybiBILk9IKHAs -cykKcD1yK0guRWoocFtzXSl9cCs9SC5FaihDLk5tLmdyWihxLmUpKQpyZXR1cm4gcC5jaGFyQ29kZUF0 -KDApPT0wP3A6cH0sCnNuSjpmdW5jdGlvbihhKXt0aGlzLmQ9dC5ELmEoYSl9LApzUGg6ZnVuY3Rpb24o -YSl7dGhpcy5lPXQuRC5hKGEpfX0KWC5kdi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJQ -YXRoRXhjZXB0aW9uOiAiK3RoaXMuYX0sCiRpUno6MX0KTy56TC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9u -KGEpe3JldHVybiB0aGlzLmdvYyh0aGlzKX19CkUuT0YucHJvdG90eXBlPXsKVWQ6ZnVuY3Rpb24oYSl7 -cmV0dXJuIEMueEIudGcoYSwiLyIpfSwKcjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT00N30sCmRzOmZ1 -bmN0aW9uKGEpe3ZhciBzPWEubGVuZ3RoCnJldHVybiBzIT09MCYmQy54Qi5PKGEscy0xKSE9PTQ3fSwK -U3A6ZnVuY3Rpb24oYSxiKXtpZihhLmxlbmd0aCE9PTAmJkMueEIuVyhhLDApPT09NDcpcmV0dXJuIDEK -cmV0dXJuIDB9LApZcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5TcChhLCExKX0sCmhLOmZ1bmN0aW9u -KGEpe3JldHVybiExfSwKZ29jOmZ1bmN0aW9uKCl7cmV0dXJuInBvc2l4In0sCmdtSTpmdW5jdGlvbigp -e3JldHVybiIvIn19CkYucnUucHJvdG90eXBlPXsKVWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMueEIudGco -YSwiLyIpfSwKcjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT00N30sCmRzOmZ1bmN0aW9uKGEpe3ZhciBz -PWEubGVuZ3RoCmlmKHM9PT0wKXJldHVybiExCmlmKEMueEIuTyhhLHMtMSkhPT00NylyZXR1cm4hMApy -ZXR1cm4gQy54Qi5UYyhhLCI6Ly8iKSYmdGhpcy5ZcihhKT09PXN9LApTcDpmdW5jdGlvbihhLGIpe3Zh -ciBzLHIscSxwLG89YS5sZW5ndGgKaWYobz09PTApcmV0dXJuIDAKaWYoQy54Qi5XKGEsMCk9PT00Nyly -ZXR1cm4gMQpmb3Iocz0wO3M8bzsrK3Mpe3I9Qy54Qi5XKGEscykKaWYocj09PTQ3KXJldHVybiAwCmlm -KHI9PT01OCl7aWYocz09PTApcmV0dXJuIDAKcT1DLnhCLlhVKGEsIi8iLEMueEIuUWkoYSwiLy8iLHMr -MSk/cyszOnMpCmlmKHE8PTApcmV0dXJuIG8KaWYoIWJ8fG88cSszKXJldHVybiBxCmlmKCFDLnhCLm4o -YSwiZmlsZTovLyIpKXJldHVybiBxCmlmKCFCLll1KGEscSsxKSlyZXR1cm4gcQpwPXErMwpyZXR1cm4g -bz09PXA/cDpxKzR9fXJldHVybiAwfSwKWXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuU3AoYSwhMSl9 -LApoSzpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGghPT0wJiZDLnhCLlcoYSwwKT09PTQ3fSwKZ29j -OmZ1bmN0aW9uKCl7cmV0dXJuInVybCJ9LApnbUk6ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9fQpMLklWLnBy -b3RvdHlwZT17ClVkOmZ1bmN0aW9uKGEpe3JldHVybiBDLnhCLnRnKGEsIi8iKX0sCnI0OmZ1bmN0aW9u -KGEpe3JldHVybiBhPT09NDd8fGE9PT05Mn0sCmRzOmZ1bmN0aW9uKGEpe3ZhciBzPWEubGVuZ3RoCmlm -KHM9PT0wKXJldHVybiExCnM9Qy54Qi5PKGEscy0xKQpyZXR1cm4hKHM9PT00N3x8cz09PTkyKX0sClNw -OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxPWEubGVuZ3RoCmlmKHE9PT0wKXJldHVybiAwCnM9Qy54Qi5X -KGEsMCkKaWYocz09PTQ3KXJldHVybiAxCmlmKHM9PT05Mil7aWYocTwyfHxDLnhCLlcoYSwxKSE9PTky -KXJldHVybiAxCnI9Qy54Qi5YVShhLCJcXCIsMikKaWYocj4wKXtyPUMueEIuWFUoYSwiXFwiLHIrMSkK -aWYocj4wKXJldHVybiByfXJldHVybiBxfWlmKHE8MylyZXR1cm4gMAppZighQi5PUyhzKSlyZXR1cm4g -MAppZihDLnhCLlcoYSwxKSE9PTU4KXJldHVybiAwCnE9Qy54Qi5XKGEsMikKaWYoIShxPT09NDd8fHE9 -PT05MikpcmV0dXJuIDAKcmV0dXJuIDN9LApZcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5TcChhLCEx -KX0sCmhLOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLllyKGEpPT09MX0sCk90OmZ1bmN0aW9uKGEsYil7 -dmFyIHMKaWYoYT09PWIpcmV0dXJuITAKaWYoYT09PTQ3KXJldHVybiBiPT09OTIKaWYoYT09PTkyKXJl -dHVybiBiPT09NDcKaWYoKGFeYikhPT0zMilyZXR1cm4hMQpzPWF8MzIKcmV0dXJuIHM+PTk3JiZzPD0x -MjJ9LApOYzpmdW5jdGlvbihhLGIpe3ZhciBzLHIscQppZihhPT1iKXJldHVybiEwCnM9YS5sZW5ndGgK -aWYocyE9PWIubGVuZ3RoKXJldHVybiExCmZvcihyPUouclkoYikscT0wO3E8czsrK3EpaWYoIXRoaXMu -T3QoQy54Qi5XKGEscSksci5XKGIscSkpKXJldHVybiExCnJldHVybiEwfSwKZ29jOmZ1bmN0aW9uKCl7 -cmV0dXJuIndpbmRvd3MifSwKZ21JOmZ1bmN0aW9uKCl7cmV0dXJuIlxcIn19OyhmdW5jdGlvbiBhbGlh -c2VzKCl7dmFyIHM9Si5Hdi5wcm90b3R5cGUKcy5VPXMudwpzLlNqPXMuZTcKcz1KLk1GLnByb3RvdHlw -ZQpzLnQ9cy53CnM9UC5jWC5wcm90b3R5cGUKcy5HRz1zLmV2CnM9UC5NaC5wcm90b3R5cGUKcy54Yj1z -LncKcz1XLmN2LnByb3RvdHlwZQpzLkRXPXMucjYKcz1XLm02LnByb3RvdHlwZQpzLmpGPXMuRWIKcz1Q -LkU0LnByb3RvdHlwZQpzLlVyPXMucQpzLmU0PXMuWTUKcz1QLmNvLnByb3RvdHlwZQpzLmJoPXMuWTV9 -KSgpOyhmdW5jdGlvbiBpbnN0YWxsVGVhck9mZnMoKXt2YXIgcz1odW5rSGVscGVycy5fc3RhdGljXzEs -cj1odW5rSGVscGVycy5fc3RhdGljXzAscT1odW5rSGVscGVycy5pbnN0YWxsSW5zdGFuY2VUZWFyT2Zm -LHA9aHVua0hlbHBlcnMuaW5zdGFsbFN0YXRpY1RlYXJPZmYsbz1odW5rSGVscGVycy5faW5zdGFuY2Vf -MXUKcyhQLCJFWCIsIlpWIiw4KQpzKFAsInl0Iiwib0EiLDgpCnMoUCwicVciLCJCeiIsOCkKcihQLCJV -SSIsImVOIiwwKQpxKFAuUGYucHJvdG90eXBlLCJnWUoiLDAsMSxudWxsLFsiJDIiLCIkMSJdLFsidzAi -LCJwbSJdLDI2LDApCnMoUCwiQ3kiLCJOQyIsNCkKcyhQLCJQSCIsIk10Iiw1KQpwKFcsInBTIiw0LG51 -bGwsWyIkNCJdLFsicUQiXSw5LDApCnAoVywiVjQiLDQsbnVsbCxbIiQ0Il0sWyJuWiJdLDksMCkKbyhQ -LkFzLnByb3RvdHlwZSwiZ3VNIiwiViIsNSkKcyhQLCJpRyIsIndZIiw1NCkKcyhQLCJ3MCIsImRVIiwz -NikKcyhMLCJpUyIsImk2Iiw2KX0pKCk7KGZ1bmN0aW9uIGluaGVyaXRhbmNlKCl7dmFyIHM9aHVua0hl -bHBlcnMubWl4aW4scj1odW5rSGVscGVycy5pbmhlcml0LHE9aHVua0hlbHBlcnMuaW5oZXJpdE1hbnkK -cihQLk1oLG51bGwpCnEoUC5NaCxbSC5GSyxKLkd2LEoubTEsUC5jWCxILkU3LFAuWFMsUC5uWSxILmE3 -LFAuQW4sSC5GdSxILkpCLEguU1UsSC5SZSxILnd2LFAuUG4sSC5XVSxILkxJLEguVHAsSC5mOSxILnRl -LEguYnEsSC5YTyxILmtyLFAuWWssSC52aCxILk42LEguVlIsSC5FSyxILlBiLEgudFEsSC5TZCxILkpj -LEguRyxILmxZLFAuVzMsUC5paCxQLkZ5LFAuR1YsUC5DdyxQLlBmLFAuRmUsUC52cyxQLk9NLFAucWgs -UC5NTyxQLmtULFAueEksUC5tMCxQLnBSLFAuYm4sUC5sbSxQLmxELFAuS1AsUC5sZixQLldZLFAuVWss -UC5TaCxQLlJ3LFAuYnosUC5pUCxQLms1LFAuS1ksUC5DRCxQLmFFLFAuTjMsUC5jOCxQLlpkLFAuUm4s -UC5EbixQLlBFLFAuVWYsVy5pZCxXLkZrLFcuSlEsVy5HbSxXLnZELFcubTYsVy5PdyxXLlc5LFcuZFcs -Vy5tayxXLktvLFAuaUosUC5FNCxVLmQyLFUuU2UsVS5NbCxVLnlELFUud2IsQi5qOCxCLnFwLFQubVEs -TC5YQSxMLkQ4LEwuTzksTC5HYixSLkxMLFIuSDcsTS5sSSxPLnpMLFguV0QsWC5kdl0pCnEoSi5Hdixb -Si55RSxKLndlLEouTUYsSi5qZCxKLnFJLEouRHIsSC5FVCxXLkQwLFcuQXosVy5MZSxXLk5oLFcuYWUs -Vy5JQixXLm43LFcuZWEsVy5icixXLlNnLFcudzcsVy5LNyxXLlhXLFAuaEZdKQpxKEouTUYsW0ouaUMs -Si5rZCxKLmM1XSkKcihKLlBvLEouamQpCnEoSi5xSSxbSi5iVSxKLmtEXSkKcShQLmNYLFtILkJSLEgu -YlEsSC5pMSxILlU1LEguQU0sSC51NixILlhSLFAubVcsSC51bl0pCnEoSC5CUixbSC5aeSxILlFDXSkK -cihILm9sLEguWnkpCnIoSC5VcSxILlFDKQpyKEgualYsSC5VcSkKcShQLlhTLFtILm4sSC5yMyxILkdN -LFAuRXosSC5heixILnZWLEguRXEsUC5DNixILmtTLFAuVWQsUC5GLFAudSxQLm1wLFAudWIsUC5kcyxQ -LmxqLFAuVVYsUC5jLEwuUVddKQpyKFAudXksUC5uWSkKcShQLnV5LFtILncyLFcud3osVy5lN10pCnIo -SC5xaixILncyKQpxKEguYlEsW0guYUwsSC5NQixILmk1XSkKcShILmFMLFtILm5ILEgubEosUC5pOF0p -CnIoSC54eSxILmkxKQpxKFAuQW4sW0guTUgsSC5TTyxILlUxXSkKcihILmQ1LEguQU0pCnIoUC5SVSxQ -LlBuKQpyKFAuR2osUC5SVSkKcihILlBELFAuR2opCnIoSC5MUCxILldVKQpxKEguVHAsW0guQ2osSC5s -YyxILmRDLEgud04sSC5WWCxQLnRoLFAuaGEsUC5WcyxQLkZ0LFAueUgsUC5XTSxQLlNYLFAuR3MsUC5k -YSxQLm9RLFAucFYsUC5VNyxQLnZyLFAucnQsUC5LRixQLlpMLFAuUlQsUC5qWixQLnJxLFAuUlcsUC5C -NSxQLnVPLFAucEssUC5WcCxQLk9SLFAucmEsUC55USxQLnhyLFAuTnosUC50aSxQLldGLFAubjEsUC5j -UyxQLlZDLFAuSlQsUC5SWixQLk1FLFAueTUsUC55SSxQLmM2LFAucWQsVy5DdixXLktTLFcuQTMsVy52 -TixXLlV2LFcuRWcsVy5FbyxXLldrLFcuSUEsVy5mbSxQLmpnLFAuVGEsUC5HRSxQLk43LFAudVEsUC5Q -QyxQLm10LFAuUVMsUC5ucCxQLlV0LFUuYU4sVS5iMCxMLmUsTC5WVyxMLm9aLEwuanIsTC5xbCxMLkhp -LEwuQlQsTC5QWSxMLnU4LEwuTCxMLld4LEwuQU8sTC5kTixMLkhvLEwueHosTC5JQyxMLmZDLEwuVG0s -TC5uVCxMLk5ZLEwudWUsTC5lWCxMLkVFLEwuUUwsTC5WUyxMLlRELEwuSWYsTC50QixMLm0yLFIuTUQs -TS5xNyxNLk5vXSkKcihILlcwLFAuRXopCnEoSC5sYyxbSC56eCxILnJUXSkKcihILmtZLFAuQzYpCnIo -UC5pbCxQLllrKQpxKFAuaWwsW0guTjUsUC51dyxXLmNmLFcuU3ldKQpxKFAubVcsW0guS1csUC5xNF0p -CnIoSC5MWixILkVUKQpxKEguTFosW0guUkcsSC5XQl0pCnIoSC5WUCxILlJHKQpyKEguRGcsSC5WUCkK -cihILlpHLEguV0IpCnIoSC5QZyxILlpHKQpxKEguUGcsW0gueGosSC5kRSxILlpBLEguZFQsSC5QcSxI -LmVFLEguVjZdKQpyKEguaU0sSC5rUykKcihQLlpmLFAuUGYpCnIoUC5KaSxQLm0wKQpyKFAuWHYsUC5w -UikKcihQLmI2LFAuWHYpCnIoUC5WaixQLldZKQpxKFAuVWssW1AuQ1YsUC5aaSxQLmJ5XSkKcihQLndJ -LFAua1QpCnEoUC53SSxbUC5VOCxQLm9qLFAuTXgsUC5FMyxQLkdZXSkKcihQLks4LFAuVWQpCnIoUC50 -dSxQLlNoKQpyKFAudTUsUC5aaSkKcShQLnUsW1AuYkosUC5lWV0pCnIoUC5xZSxQLkRuKQpxKFcuRDAs -W1cudUgsVy53YSxXLks1LFcuQ21dKQpxKFcudUgsW1cuY3YsVy5ueCxXLlFGLFcuQ1FdKQpxKFcuY3Ys -W1cucUUsUC5oaV0pCnEoVy5xRSxbVy5HaCxXLmZZLFcubkIsVy5RUCxXLmg0LFcuU04sVy5scCxXLlRi -LFcuSXYsVy5XUCxXLnlZXSkKcihXLm9KLFcuTGUpCnIoVy5oSCxXLkF6KQpyKFcuVmIsVy5RRikKcihX -LmZKLFcud2EpCnEoVy5lYSxbVy53NixXLmV3XSkKcihXLkFqLFcudzYpCnIoVy5yQixXLks3KQpyKFcu -QkgsVy5yQikKcihXLnc0LFcuSUIpCnIoVy5vYSxXLlhXKQpyKFcucmgsVy5vYSkKcihXLmk3LFcuY2Yp -CnIoUC5BcyxQLlZqKQpxKFAuQXMsW1cuSTQsUC5LZV0pCnIoVy5STyxQLnFoKQpyKFcuZXUsVy5STykK -cihXLnhDLFAuTU8pCnIoVy5jdCxXLm02KQpyKFAuQmYsUC5pSikKcShQLkU0LFtQLnI3LFAuY29dKQpy -KFAuVHosUC5jbykKcihQLm5kLFAuaGkpCnEoTC5EOCxbTC52dCxMLmNEXSkKcihCLmZ2LE8uekwpCnEo -Qi5mdixbRS5PRixGLnJ1LEwuSVZdKQpzKEgudzIsSC5SZSkKcyhILlFDLFAubEQpCnMoSC5SRyxQLmxE -KQpzKEguVlAsSC5TVSkKcyhILldCLFAubEQpCnMoSC5aRyxILlNVKQpzKFAublksUC5sRCkKcyhQLldZ -LFAubGYpCnMoUC5SVSxQLktQKQpzKFAucFIsUC5sZikKcyhXLkxlLFcuaWQpCnMoVy5LNyxQLmxEKQpz -KFcuckIsVy5HbSkKcyhXLlhXLFAubEQpCnMoVy5vYSxXLkdtKQpzKFAuY28sUC5sRCl9KSgpCnZhciB2 -PXt0eXBlVW5pdmVyc2U6e2VDOm5ldyBNYXAoKSx0Ujp7fSxlVDp7fSx0UFY6e30sc0VBOltdfSxtYW5n -bGVkR2xvYmFsTmFtZXM6e0lqOiJpbnQiLENQOiJkb3VibGUiLFpaOiJudW0iLHFVOiJTdHJpbmciLGEy -OiJib29sIixjODoiTnVsbCIsek06Ikxpc3QifSxtYW5nbGVkTmFtZXM6e30sZ2V0VHlwZUZyb21OYW1l -OmdldEdsb2JhbEZyb21OYW1lLG1ldGFkYXRhOltdLHR5cGVzOlsifigpIiwiYzgoQWoqKSIsImM4KCki -LCJjOChjdiopIiwiQChAKSIsInFVKHFVKSIsIn4oQWoqKSIsImEyKHFVKSIsIn4ofigpKSIsImEyKGN2 -LHFVLHFVLEpRKSIsImM4KEApIiwifihNaD8sTWg/KSIsIkAoKSIsIn4ocVUsQCkiLCJ+KG42LHFVLElq -KSIsIn4ocVUscVUpIiwiYTIoa0YpIiwiYzgoQCxAKSIsIn4oeHU8cVU+KSIsImM4KGVhKikiLCJiODxj -OD4qKEFqKikiLCJ+KHFVLElqKSIsIn4ocVUscVU/KSIsIm42KEAsQCkiLCJ+KElqLEApIiwiYTIodUgp -IiwifihNaFtHej9dKSIsIn4oZWEpIiwiYzgoTWgsR3opIiwidnM8QD4oQCkiLCJ+KHVILHVIPykiLCJ+ -KEAsQCkiLCJAKHFVKSIsImEyKHh1PHFVPikiLCJAKEAscVUpIiwicjcoQCkiLCJNaD8oQCkiLCJFNChA -KSIsIkxMKihAKSIsIlowPHFVKixNaCo+KihMTCopIiwifihHRCxAKSIsIlowPHFVLHFVPihaMDxxVSxx -VT4scVUpIiwiYzgoWjA8cVUqLE1oKj4qKSIsIn4oQCkiLCJxVSooQWoqKSIsIn4ocVVbQF0pIiwiVHo8 -QD4oQCkiLCJjOChldyopIiwicVUqKHFVKikiLCJxVSooWjA8QCxAPiopIiwiYTIqKEg3KikiLCJxVShx -VT8pIiwiSWooSWosSWopIiwiYzgofigpKSIsIk1oPyhNaD8pIiwiYzgoQCxHeikiXSxpbnRlcmNlcHRv -cnNCeVRhZzpudWxsLGxlYWZUYWdzOm51bGwsYXJyYXlSdGk6dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9u -IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj9TeW1ib2woIiR0aSIpOiIkdGkifQpILnhiKHYudHlw -ZVVuaXZlcnNlLEpTT04ucGFyc2UoJ3siaUMiOiJNRiIsImtkIjoiTUYiLCJjNSI6Ik1GIiwicngiOiJl -YSIsImU1IjoiZWEiLCJZMCI6ImhpIiwidHAiOiJoaSIsIkc4IjoiZXciLCJNciI6InFFIiwiZUwiOiJx -RSIsIkkwIjoidUgiLCJocyI6InVIIiwiWGciOiJRRiIsIm5yIjoiQWoiLCJ5NCI6Inc2IiwiYVAiOiJD -bSIsInhjIjoibngiLCJrSiI6Im54IiwielUiOiJEZyIsImRmIjoiRVQiLCJ5RSI6eyJhMiI6W119LCJ3 -ZSI6eyJjOCI6W119LCJNRiI6eyJ2bSI6W10sIkVIIjpbXX0sImpkIjp7InpNIjpbIjEiXSwiYlEiOlsi -MSJdLCJjWCI6WyIxIl19LCJQbyI6eyJqZCI6WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6 -WyIxIl19LCJtMSI6eyJBbiI6WyIxIl19LCJxSSI6eyJDUCI6W10sIlpaIjpbXX0sImJVIjp7IkNQIjpb -XSwiSWoiOltdLCJaWiI6W119LCJrRCI6eyJDUCI6W10sIlpaIjpbXX0sIkRyIjp7InFVIjpbXSwidlgi -OltdfSwiQlIiOnsiY1giOlsiMiJdfSwiRTciOnsiQW4iOlsiMiJdfSwiWnkiOnsiQlIiOlsiMSIsIjIi -XSwiY1giOlsiMiJdLCJjWC5FIjoiMiJ9LCJvbCI6eyJaeSI6WyIxIiwiMiJdLCJCUiI6WyIxIiwiMiJd -LCJiUSI6WyIyIl0sImNYIjpbIjIiXSwiY1guRSI6IjIifSwiVXEiOnsibEQiOlsiMiJdLCJ6TSI6WyIy -Il0sIkJSIjpbIjEiLCIyIl0sImJRIjpbIjIiXSwiY1giOlsiMiJdfSwialYiOnsiVXEiOlsiMSIsIjIi -XSwibEQiOlsiMiJdLCJ6TSI6WyIyIl0sIkJSIjpbIjEiLCIyIl0sImJRIjpbIjIiXSwiY1giOlsiMiJd -LCJsRC5FIjoiMiIsImNYLkUiOiIyIn0sIm4iOnsiWFMiOltdfSwicjMiOnsiWFMiOltdfSwicWoiOnsi -bEQiOlsiSWoiXSwiUmUiOlsiSWoiXSwiek0iOlsiSWoiXSwiYlEiOlsiSWoiXSwiY1giOlsiSWoiXSwi -bEQuRSI6IklqIiwiUmUuRSI6IklqIn0sIkdNIjp7IlhTIjpbXX0sImJRIjp7ImNYIjpbIjEiXX0sImFM -Ijp7ImJRIjpbIjEiXSwiY1giOlsiMSJdfSwibkgiOnsiYUwiOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpb -IjEiXSwiYUwuRSI6IjEiLCJjWC5FIjoiMSJ9LCJhNyI6eyJBbiI6WyIxIl19LCJpMSI6eyJjWCI6WyIy -Il0sImNYLkUiOiIyIn0sInh5Ijp7ImkxIjpbIjEiLCIyIl0sImJRIjpbIjIiXSwiY1giOlsiMiJdLCJj -WC5FIjoiMiJ9LCJNSCI6eyJBbiI6WyIyIl19LCJsSiI6eyJhTCI6WyIyIl0sImJRIjpbIjIiXSwiY1gi -OlsiMiJdLCJhTC5FIjoiMiIsImNYLkUiOiIyIn0sIlU1Ijp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwi -U08iOnsiQW4iOlsiMSJdfSwiQU0iOnsiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJkNSI6eyJBTSI6WyIx -Il0sImJRIjpbIjEiXSwiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJVMSI6eyJBbiI6WyIxIl19LCJNQiI6 -eyJiUSI6WyIxIl0sImNYIjpbIjEiXSwiY1guRSI6IjEifSwiRnUiOnsiQW4iOlsiMSJdfSwidTYiOnsi -Y1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJKQiI6eyJBbiI6WyIxIl19LCJ3MiI6eyJsRCI6WyIxIl0sIlJl -IjpbIjEiXSwiek0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXX0sInd2Ijp7IkdEIjpbXX0sIlBE -Ijp7IkdqIjpbIjEiLCIyIl0sIlJVIjpbIjEiLCIyIl0sIlBuIjpbIjEiLCIyIl0sIktQIjpbIjEiLCIy -Il0sIlowIjpbIjEiLCIyIl19LCJXVSI6eyJaMCI6WyIxIiwiMiJdfSwiTFAiOnsiV1UiOlsiMSIsIjIi -XSwiWjAiOlsiMSIsIjIiXX0sIlhSIjp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiTEkiOnsidlEiOltd -fSwiVzAiOnsiWFMiOltdfSwiYXoiOnsiWFMiOltdfSwidlYiOnsiWFMiOltdfSwidGUiOnsiUnoiOltd -fSwiWE8iOnsiR3oiOltdfSwiVHAiOnsiRUgiOltdfSwibGMiOnsiRUgiOltdfSwiengiOnsiRUgiOltd -fSwiclQiOnsiRUgiOltdfSwiRXEiOnsiWFMiOltdfSwia1kiOnsiWFMiOltdfSwiTjUiOnsiWWsiOlsi -MSIsIjIiXSwiRm8iOlsiMSIsIjIiXSwiWjAiOlsiMSIsIjIiXSwiWWsuSyI6IjEiLCJZay5WIjoiMiJ9 -LCJpNSI6eyJiUSI6WyIxIl0sImNYIjpbIjEiXSwiY1guRSI6IjEifSwiTjYiOnsiQW4iOlsiMSJdfSwi -VlIiOnsid0wiOltdLCJ2WCI6W119LCJFSyI6eyJpYiI6W10sIk9kIjpbXX0sIktXIjp7ImNYIjpbImli -Il0sImNYLkUiOiJpYiJ9LCJQYiI6eyJBbiI6WyJpYiJdfSwidFEiOnsiT2QiOltdfSwidW4iOnsiY1gi -OlsiT2QiXSwiY1guRSI6Ik9kIn0sIlNkIjp7IkFuIjpbIk9kIl19LCJFVCI6eyJBUyI6W119LCJMWiI6 -eyJYaiI6WyIxIl0sIkVUIjpbXSwiQVMiOltdfSwiRGciOnsibEQiOlsiQ1AiXSwiWGoiOlsiQ1AiXSwi -ek0iOlsiQ1AiXSwiRVQiOltdLCJiUSI6WyJDUCJdLCJBUyI6W10sImNYIjpbIkNQIl0sIlNVIjpbIkNQ -Il0sImxELkUiOiJDUCJ9LCJQZyI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJF -VCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXX0sInhqIjp7ImxE -IjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMiOltd -LCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoifSwiZEUiOnsibEQiOlsiSWoiXSwiWGoi -OlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0s -IlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJaQSI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6 -WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXSwi -bEQuRSI6IklqIn0sImRUIjp7ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpb -XSwiYlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoifSwi -UHEiOnsibEQiOlsiSWoiXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJd -LCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJlRSI6eyJsRCI6WyJJ -aiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1gi -OlsiSWoiXSwiU1UiOlsiSWoiXSwibEQuRSI6IklqIn0sIlY2Ijp7ImxEIjpbIklqIl0sIm42IjpbXSwi +QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGRkZGRkZGRkZGRkZGRkZGR0dHR0dHR0dH +R0dHR0dHR0hISEhISEhISEhISEhISEhISEhISEhISEhISElISEhKRUVCQkJCQkJCQkJCQkJCQkJCQkJC +QkJCQkJCQkJCQkJLQ0NDQ0NDQ0NDQ0NDRENMT05OTk1FRUVFRUVFRUVFRSIscykmMzEKaD1pPD0zMj9z +JjYxNjk0Pj4+cToocyY2M3xoPDw2KT4+PjAKaT1DLnhCLlcoIiBceDAwMDpYRUNDQ0NDTjpsRGIgXHgw +MDA6WEVDQ0NDQ052bERiIFx4MDAwOlhFQ0NDQ0NOOmxEYiBBQUFBQVx4MDBceDAwXHgwMFx4MDBceDAw +QUFBQUEwMDAwMEFBQUFBOjo6OjpBQUFBQUdHMDAwQUFBQUEwMEtLS0FBQUFBRzo6OjpBQUFBQTpJSUlJ +QUFBQUEwMDBceDgwMEFBQUFBXHgwMFx4MDBceDAwXHgwMCBBQUFBQSIsaStxKQppZihpPT09MCl7Zy5h +Kz1ILkx3KGgpCmlmKGY9PT1jKWJyZWFrICRsYWJlbDAkMApicmVha31lbHNlIGlmKChpJjEpIT09MCl7 +aWYocilzd2l0Y2goaSl7Y2FzZSA2OTpjYXNlIDY3OmcuYSs9SC5MdyhqKQpicmVhawpjYXNlIDY1Omcu +YSs9SC5MdyhqKTstLWYKYnJlYWsKZGVmYXVsdDpwPWcuYSs9SC5MdyhqKQpnLmE9cCtILkx3KGopCmJy +ZWFrfWVsc2V7ay5iPWkKay5jPWYtMQpyZXR1cm4iIn1pPTB9aWYoZj09PWMpYnJlYWsgJGxhYmVsMCQw +Cm89ZisxCmlmKGY8MHx8Zj49ZSlyZXR1cm4gSC5PSChhLGYpCnM9YVtmXX1vPWYrMQppZihmPDB8fGY+ +PWUpcmV0dXJuIEguT0goYSxmKQpzPWFbZl0KaWYoczwxMjgpe3doaWxlKCEwKXtpZighKG88Yykpe249 +YwpicmVha31tPW8rMQppZihvPDB8fG8+PWUpcmV0dXJuIEguT0goYSxvKQpzPWFbb10KaWYocz49MTI4 +KXtuPW0tMQpvPW0KYnJlYWt9bz1tfWlmKG4tZjwyMClmb3IobD1mO2w8bjsrK2wpe2lmKGw+PWUpcmV0 +dXJuIEguT0goYSxsKQpnLmErPUguTHcoYVtsXSl9ZWxzZSBnLmErPVAuSE0oYSxmLG4pCmlmKG49PT1j +KWJyZWFrICRsYWJlbDAkMApmPW99ZWxzZSBmPW99aWYoZCYmaT4zMilpZihyKWcuYSs9SC5MdyhqKQpl +bHNle2suYj03NwprLmM9YwpyZXR1cm4iIn1rLmI9aQprLmM9aAplPWcuYQpyZXR1cm4gZS5jaGFyQ29k +ZUF0KDApPT0wP2U6ZX19ClAuV0YucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEK +dC5mby5hKGEpCnM9dGhpcy5iCnI9dGhpcy5hCnMuYSs9ci5hCnE9cy5hKz1ILkVqKGEuYSkKcy5hPXEr +IjogIgpzLmErPVAucChiKQpyLmE9IiwgIn0sCiRTOjQwfQpQLmlQLnByb3RvdHlwZT17CkROOmZ1bmN0 +aW9uKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQpyZXR1cm4gYiBpbnN0YW5jZW9mIFAuaVAmJnRoaXMu +YT09PWIuYSYmITB9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcy5hCnJldHVybihzXkMuam4ud0co +cywzMCkpJjEwNzM3NDE4MjN9LAp3OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMscj1QLkdxKEgudEoocykp +LHE9UC5oMChILk5TKHMpKSxwPVAuaDAoSC5qQShzKSksbz1QLmgwKEguSVgocykpLG49UC5oMChILmNo +KHMpKSxtPVAuaDAoSC5KZChzKSksbD1QLlZ4KEgubzEocykpLGs9cisiLSIrcSsiLSIrcCsiICIrbysi +OiIrbisiOiIrbSsiLiIrbApyZXR1cm4ga319ClAuWFMucHJvdG90eXBlPXsKZ0lJOmZ1bmN0aW9uKCl7 +cmV0dXJuIEgudHModGhpcy4kdGhyb3duSnNFcnJvcil9fQpQLkM2LnByb3RvdHlwZT17Cnc6ZnVuY3Rp +b24oYSl7dmFyIHM9dGhpcy5hCmlmKHMhPW51bGwpcmV0dXJuIkFzc2VydGlvbiBmYWlsZWQ6ICIrUC5w +KHMpCnJldHVybiJBc3NlcnRpb24gZmFpbGVkIn19ClAuRXoucHJvdG90eXBlPXt9ClAuRi5wcm90b3R5 +cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJUaHJvdyBvZiBudWxsLiJ9fQpQLnUucHJvdG90eXBlPXsK +Z1o6ZnVuY3Rpb24oKXtyZXR1cm4iSW52YWxpZCBhcmd1bWVudCIrKCF0aGlzLmE/IihzKSI6IiIpfSwK +Z3U6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sCnc6ZnVuY3Rpb24oYSl7dmFyIHMscixxPXRoaXMscD1xLmMs +bz1wPT1udWxsPyIiOiIgKCIrcCsiKSIsbj1xLmQsbT1uPT1udWxsPyIiOiI6ICIrSC5FaihuKSxsPXEu +Z1ooKStvK20KaWYoIXEuYSlyZXR1cm4gbApzPXEuZ3UoKQpyPVAucChxLmIpCnJldHVybiBsK3MrIjog +IityfX0KUC5iSi5wcm90b3R5cGU9ewpnWjpmdW5jdGlvbigpe3JldHVybiJSYW5nZUVycm9yIn0sCmd1 +OmZ1bmN0aW9uKCl7dmFyIHMscj10aGlzLmUscT10aGlzLmYKaWYocj09bnVsbClzPXEhPW51bGw/Ijog +Tm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAiK0guRWoocSk6IiIKZWxzZSBpZihxPT1udWxsKXM9Ijog +Tm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAiK0guRWoocikKZWxzZSBpZihxPnIpcz0iOiBOb3Qg +aW4gaW5jbHVzaXZlIHJhbmdlICIrSC5FaihyKSsiLi4iK0guRWoocSkKZWxzZSBzPXE8cj8iOiBWYWxp +ZCB2YWx1ZSByYW5nZSBpcyBlbXB0eSI6IjogT25seSB2YWxpZCB2YWx1ZSBpcyAiK0guRWoocikKcmV0 +dXJuIHN9fQpQLmVZLnByb3RvdHlwZT17CmdaOmZ1bmN0aW9uKCl7cmV0dXJuIlJhbmdlRXJyb3IifSwK +Z3U6ZnVuY3Rpb24oKXt2YXIgcyxyPUgudVAodGhpcy5iKQppZih0eXBlb2YgciE9PSJudW1iZXIiKXJl +dHVybiByLkooKQppZihyPDApcmV0dXJuIjogaW5kZXggbXVzdCBub3QgYmUgbmVnYXRpdmUiCnM9dGhp +cy5mCmlmKHM9PT0wKXJldHVybiI6IG5vIGluZGljZXMgYXJlIHZhbGlkIgpyZXR1cm4iOiBpbmRleCBz +aG91bGQgYmUgbGVzcyB0aGFuICIrSC5FaihzKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZ9 +fQpQLm1wLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRoaXMs +aj17fSxpPW5ldyBQLlJuKCIiKQpqLmE9IiIKcz1rLmMKZm9yKHI9cy5sZW5ndGgscT0wLHA9IiIsbz0i +IjtxPHI7KytxLG89IiwgIil7bj1zW3FdCmkuYT1wK28KcD1pLmErPVAucChuKQpqLmE9IiwgIn1rLmQu +SygwLG5ldyBQLldGKGosaSkpCm09UC5wKGsuYSkKbD1pLncoMCkKcj0iTm9TdWNoTWV0aG9kRXJyb3I6 +IG1ldGhvZCBub3QgZm91bmQ6ICciK0guRWooay5iLmEpKyInXG5SZWNlaXZlcjogIittKyJcbkFyZ3Vt +ZW50czogWyIrbCsiXSIKcmV0dXJuIHJ9fQpQLnViLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0 +dXJuIlVuc3VwcG9ydGVkIG9wZXJhdGlvbjogIit0aGlzLmF9fQpQLmRzLnByb3RvdHlwZT17Cnc6ZnVu +Y3Rpb24oYSl7dmFyIHM9dGhpcy5hCnJldHVybiBzIT1udWxsPyJVbmltcGxlbWVudGVkRXJyb3I6ICIr +czoiVW5pbXBsZW1lbnRlZEVycm9yIn19ClAubGoucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1 +cm4iQmFkIHN0YXRlOiAiK3RoaXMuYX19ClAuVVYucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIg +cz10aGlzLmEKaWYocz09bnVsbClyZXR1cm4iQ29uY3VycmVudCBtb2RpZmljYXRpb24gZHVyaW5nIGl0 +ZXJhdGlvbi4iCnJldHVybiJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uOiAi +K1AucChzKSsiLiJ9fQpQLms1LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIk91dCBvZiBN +ZW1vcnkifSwKZ0lJOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LAokaVhTOjF9ClAuS1kucHJvdG90eXBl +PXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iU3RhY2sgT3ZlcmZsb3cifSwKZ0lJOmZ1bmN0aW9uKCl7cmV0 +dXJuIG51bGx9LAokaVhTOjF9ClAuYy5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMu +YQpyZXR1cm4gcz09bnVsbD8iUmVhZGluZyBzdGF0aWMgdmFyaWFibGUgZHVyaW5nIGl0cyBpbml0aWFs +aXphdGlvbiI6IlJlYWRpbmcgc3RhdGljIHZhcmlhYmxlICciK3MrIicgZHVyaW5nIGl0cyBpbml0aWFs +aXphdGlvbiJ9fQpQLkNELnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIkV4Y2VwdGlvbjog +Iit0aGlzLmF9LAokaVJ6OjF9ClAuYUUucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgcyxyLHEs +cCxvLG4sbSxsLGssaixpLGgsZz10aGlzLmEsZj1nIT1udWxsJiYiIiE9PWc/IkZvcm1hdEV4Y2VwdGlv +bjogIitILkVqKGcpOiJGb3JtYXRFeGNlcHRpb24iLGU9dGhpcy5jLGQ9dGhpcy5iCmlmKHR5cGVvZiBk +PT0ic3RyaW5nIil7aWYoZSE9bnVsbClzPWU8MHx8ZT5kLmxlbmd0aAplbHNlIHM9ITEKaWYocyllPW51 +bGwKaWYoZT09bnVsbCl7aWYoZC5sZW5ndGg+NzgpZD1DLnhCLk5qKGQsMCw3NSkrIi4uLiIKcmV0dXJu +IGYrIlxuIitkfWZvcihyPTEscT0wLHA9ITEsbz0wO288ZTsrK28pe249Qy54Qi5XKGQsbykKaWYobj09 +PTEwKXtpZihxIT09b3x8IXApKytyCnE9bysxCnA9ITF9ZWxzZSBpZihuPT09MTMpeysrcgpxPW8rMQpw +PSEwfX1mPXI+MT9mKygiIChhdCBsaW5lICIrcisiLCBjaGFyYWN0ZXIgIisoZS1xKzEpKyIpXG4iKTpm +KygiIChhdCBjaGFyYWN0ZXIgIisoZSsxKSsiKVxuIikKbT1kLmxlbmd0aApmb3Iobz1lO288bTsrK28p +e249Qy54Qi5PKGQsbykKaWYobj09PTEwfHxuPT09MTMpe209bwpicmVha319aWYobS1xPjc4KWlmKGUt +cTw3NSl7bD1xKzc1Cms9cQpqPSIiCmk9Ii4uLiJ9ZWxzZXtpZihtLWU8NzUpe2s9bS03NQpsPW0KaT0i +In1lbHNle2s9ZS0zNgpsPWUrMzYKaT0iLi4uIn1qPSIuLi4ifWVsc2V7bD1tCms9cQpqPSIiCmk9IiJ9 +aD1DLnhCLk5qKGQsayxsKQpyZXR1cm4gZitqK2graSsiXG4iK0MueEIuVCgiICIsZS1rK2oubGVuZ3Ro +KSsiXlxuIn1lbHNlIHJldHVybiBlIT1udWxsP2YrKCIgKGF0IG9mZnNldCAiK0guRWooZSkrIikiKTpm +fSwKJGlSejoxfQpQLmNYLnByb3RvdHlwZT17CmRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEguR0oodGhp +cyxILkxoKHRoaXMpLkMoImNYLkUiKSxiKX0sCkUyOmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1ILkxoKHRo +aXMpCnJldHVybiBILksxKHRoaXMscy5LcShjKS5DKCIxKGNYLkUpIikuYShiKSxzLkMoImNYLkUiKSxj +KX0sCmV2OmZ1bmN0aW9uKGEsYil7dmFyIHM9SC5MaCh0aGlzKQpyZXR1cm4gbmV3IEguVTUodGhpcyxz +LkMoImEyKGNYLkUpIikuYShiKSxzLkMoIlU1PGNYLkU+IikpfSwKdHQ6ZnVuY3Rpb24oYSxiKXtyZXR1 +cm4gUC5ZMSh0aGlzLGIsSC5MaCh0aGlzKS5DKCJjWC5FIikpfSwKYnI6ZnVuY3Rpb24oYSl7cmV0dXJu +IHRoaXMudHQoYSwhMCl9LApnQTpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMuZ20odGhpcykKZm9yKHM9 +MDtyLkYoKTspKytzCnJldHVybiBzfSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLmdtKHRoaXMp +LkYoKX0sCmdvcjpmdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5nbDAodGhpcyl9LAplUjpmdW5jdGlvbihh +LGIpe3JldHVybiBILmJLKHRoaXMsYixILkxoKHRoaXMpLkMoImNYLkUiKSl9LApncjg6ZnVuY3Rpb24o +YSl7dmFyIHMscj10aGlzLmdtKHRoaXMpCmlmKCFyLkYoKSl0aHJvdyBILmIoSC5XcCgpKQpzPXIuZ2wo +KQppZihyLkYoKSl0aHJvdyBILmIoSC5BbSgpKQpyZXR1cm4gc30sCkU6ZnVuY3Rpb24oYSxiKXt2YXIg +cyxyLHEKUC5rMShiLCJpbmRleCIpCmZvcihzPXRoaXMuZ20odGhpcykscj0wO3MuRigpOyl7cT1zLmds +KCkKaWYoYj09PXIpcmV0dXJuIHE7KytyfXRocm93IEguYihQLkNmKGIsdGhpcywiaW5kZXgiLG51bGws +cikpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gUC5FUCh0aGlzLCIoIiwiKSIpfX0KUC5Bbi5wcm90b3R5 +cGU9e30KUC5OMy5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJNYXBFbnRyeSgiK0guRWoo +dGhpcy5hKSsiOiAiK0guRWoodGhpcy5iKSsiKSJ9fQpQLmM4LnByb3RvdHlwZT17CmdpTzpmdW5jdGlv +bihhKXtyZXR1cm4gUC5NaC5wcm90b3R5cGUuZ2lPLmNhbGwoQy5qTix0aGlzKX0sCnc6ZnVuY3Rpb24o +YSl7cmV0dXJuIm51bGwifX0KUC5NaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlAuTWgsJGlNaDoxLApE +TjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzPT09Yn0sCmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gSC5l +USh0aGlzKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIkluc3RhbmNlIG9mICciK0guRWooSC5NKHRoaXMp +KSsiJyJ9LAplNzpmdW5jdGlvbihhLGIpe3Quby5hKGIpCnRocm93IEguYihQLmxyKHRoaXMsYi5nV2Eo +KSxiLmduZCgpLGIuZ1ZtKCkpKX0sCnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudyh0aGlz +KX19ClAuWmQucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iIn0sCiRpR3o6MX0KUC5Sbi5w +cm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sCnc6ZnVuY3Rpb24o +YSl7dmFyIHM9dGhpcy5hCnJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwKJGlCTDoxfQpQLm4x +LnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAKdC5KLmEoYSkKSC5oKGIpCnM9 +Si5yWShiKS5PWShiLCI9IikKaWYocz09PS0xKXtpZihiIT09IiIpYS5ZNSgwLFAua3UoYiwwLGIubGVu +Z3RoLHRoaXMuYSwhMCksIiIpfWVsc2UgaWYocyE9PTApe3I9Qy54Qi5OaihiLDAscykKcT1DLnhCLnlu +KGIscysxKQpwPXRoaXMuYQphLlk1KDAsUC5rdShyLDAsci5sZW5ndGgscCwhMCksUC5rdShxLDAscS5s +ZW5ndGgscCwhMCkpfXJldHVybiBhfSwKJFM6NDF9ClAuY1MucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24o +YSxiKXt0aHJvdyBILmIoUC5ycigiSWxsZWdhbCBJUHY0IGFkZHJlc3MsICIrYSx0aGlzLmEsYikpfSwK +JFM6MjF9ClAuVkMucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt0aHJvdyBILmIoUC5ycigiSWxs +ZWdhbCBJUHY2IGFkZHJlc3MsICIrYSx0aGlzLmEsYikpfSwKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo +aXMuJDIoYSxudWxsKX0sCiRTOjQ1fQpQLkpULnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dmFy +IHMKaWYoYi1hPjQpdGhpcy5hLiQyKCJhbiBJUHY2IHBhcnQgY2FuIG9ubHkgY29udGFpbiBhIG1heGlt +dW0gb2YgNCBoZXggZGlnaXRzIixhKQpzPVAuUUEoQy54Qi5Oaih0aGlzLmIsYSxiKSwxNikKaWYoczww +fHxzPjY1NTM1KXRoaXMuYS4kMigiZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIGAweDAu +LjB4RkZGRmAiLGEpCnJldHVybiBzfSwKJFM6NTJ9ClAuRG4ucHJvdG90eXBlPXsKZ25EOmZ1bmN0aW9u +KCl7dmFyIHMscixxLHA9dGhpcyxvPXAueAppZihvPT09JCl7bz1wLmEKcz1vLmxlbmd0aCE9PTA/bysi +OiI6IiIKcj1wLmMKcT1yPT1udWxsCmlmKCFxfHxvPT09ImZpbGUiKXtvPXMrIi8vIgpzPXAuYgppZihz +Lmxlbmd0aCE9PTApbz1vK3MrIkAiCmlmKCFxKW8rPXIKcz1wLmQKaWYocyE9bnVsbClvPW8rIjoiK0gu +RWoocyl9ZWxzZSBvPXMKbys9cC5lCnM9cC5mCmlmKHMhPW51bGwpbz1vKyI/IitzCnM9cC5yCmlmKHMh +PW51bGwpbz1vKyIjIitzCm89by5jaGFyQ29kZUF0KDApPT0wP286bwppZihwLng9PT0kKXAueD1vCmVs +c2Ugbz1ILnYoSC5HUSgiX3RleHQiKSl9cmV0dXJuIG99LApnRmo6ZnVuY3Rpb24oKXt2YXIgcyxyPXRo +aXMscT1yLnkKaWYocT09PSQpe3M9ci5lCmlmKHMubGVuZ3RoIT09MCYmQy54Qi5XKHMsMCk9PT00Nylz +PUMueEIueW4ocywxKQpxPXMubGVuZ3RoPT09MD9DLnhEOlAuQUYobmV3IEgubEooSC5WTShzLnNwbGl0 +KCIvIiksdC5zKSx0LmRPLmEoUC5QSCgpKSx0LmRvKSx0Lk4pCmlmKHIueT09PSQpci5zS3AocSkKZWxz +ZSBxPUgudihILkdRKCJwYXRoU2VnbWVudHMiKSl9cmV0dXJuIHF9LApnaU86ZnVuY3Rpb24oYSl7dmFy +IHM9dGhpcyxyPXMuegppZihyPT09JCl7cj1KLmhmKHMuZ25EKCkpCmlmKHMuej09PSQpcy56PXIKZWxz +ZSByPUgudihILkdRKCJoYXNoQ29kZSIpKX1yZXR1cm4gcn0sCmdoWTpmdW5jdGlvbigpe3ZhciBzPXRo +aXMscj1zLlEKaWYocj09PSQpe3I9cy5mCnI9bmV3IFAuR2ooUC5XWChyPT1udWxsPyIiOnIpLHQuZHcp +CmlmKHMuUT09PSQpcy5zTk0ocikKZWxzZSByPUgudihILkdRKCJxdWVyeVBhcmFtZXRlcnMiKSl9cmV0 +dXJuIHJ9LApna3U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSwKZ0pmOmZ1bmN0aW9uKGEpe3ZhciBz +PXRoaXMuYwppZihzPT1udWxsKXJldHVybiIiCmlmKEMueEIubihzLCJbIikpcmV0dXJuIEMueEIuTmoo +cywxLHMubGVuZ3RoLTEpCnJldHVybiBzfSwKZ3RwOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuZApyZXR1 +cm4gcz09bnVsbD9QLndLKHRoaXMuYSk6c30sCmd0UDpmdW5jdGlvbigpe3ZhciBzPXRoaXMuZgpyZXR1 +cm4gcz09bnVsbD8iIjpzfSwKZ0thOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5yCnJldHVybiBzPT1udWxs +PyIiOnN9LApoQjpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmEKaWYoYS5sZW5ndGghPT1zLmxlbmd0aCly +ZXR1cm4hMQpyZXR1cm4gUC5OUihhLHMpfSwKbm06ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvLG4s +bSxsLGssaj10aGlzCnQuYzkuYShiKQpzPWouYQpyPXM9PT0iZmlsZSIKcT1qLmIKcD1qLmQKbz1qLmMK +aWYoIShvIT1udWxsKSlvPXEubGVuZ3RoIT09MHx8cCE9bnVsbHx8cj8iIjpudWxsCm49ai5lCmlmKCFy +KW09byE9bnVsbCYmbi5sZW5ndGghPT0wCmVsc2UgbT0hMAppZihtJiYhQy54Qi5uKG4sIi8iKSluPSIv +IituCmw9bgprPVAubGUobnVsbCwwLDAsYikKcmV0dXJuIFAuQ2cocyxxLG8scCxsLGssai5yKX0sCkpo +OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbyxuCmZvcihzPTAscj0wO0MueEIuUWkoYiwiLi4vIixy +KTspe3IrPTM7KytzfXE9Qy54Qi5jbihhLCIvIikKd2hpbGUoITApe2lmKCEocT4wJiZzPjApKWJyZWFr +CnA9Qy54Qi5QayhhLCIvIixxLTEpCmlmKHA8MClicmVhawpvPXEtcApuPW8hPT0yCmlmKCFufHxvPT09 +MylpZihDLnhCLk8oYSxwKzEpPT09NDYpbj0hbnx8Qy54Qi5PKGEscCsyKT09PTQ2CmVsc2Ugbj0hMQpl +bHNlIG49ITEKaWYobilicmVhazstLXMKcT1wfXJldHVybiBDLnhCLmk3KGEscSsxLG51bGwsQy54Qi55 +bihiLHItMypzKSl9LApaSTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tUyhQLmhLKGEpKX0sCm1TOmZ1 +bmN0aW9uKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGk9dGhpcyxoPW51bGwKaWYoYS5nRmkoKS5s +ZW5ndGghPT0wKXtzPWEuZ0ZpKCkKaWYoYS5nY2ooKSl7cj1hLmdrdSgpCnE9YS5nSmYoYSkKcD1hLmd4 +QSgpP2EuZ3RwKGEpOmh9ZWxzZXtwPWgKcT1wCnI9IiJ9bz1QLnhlKGEuZ0lpKGEpKQpuPWEuZ1FEKCk/ +YS5ndFAoKTpofWVsc2V7cz1pLmEKaWYoYS5nY2ooKSl7cj1hLmdrdSgpCnE9YS5nSmYoYSkKcD1QLndC +KGEuZ3hBKCk/YS5ndHAoYSk6aCxzKQpvPVAueGUoYS5nSWkoYSkpCm49YS5nUUQoKT9hLmd0UCgpOmh9 +ZWxzZXtyPWkuYgpxPWkuYwpwPWkuZApvPWkuZQppZihhLmdJaShhKT09PSIiKW49YS5nUUQoKT9hLmd0 +UCgpOmkuZgplbHNle209UC51aihpLG8pCmlmKG0+MCl7bD1DLnhCLk5qKG8sMCxtKQpvPWEuZ3RUKCk/ +bCtQLnhlKGEuZ0lpKGEpKTpsK1AueGUoaS5KaChDLnhCLnluKG8sbC5sZW5ndGgpLGEuZ0lpKGEpKSl9 +ZWxzZSBpZihhLmd0VCgpKW89UC54ZShhLmdJaShhKSkKZWxzZSBpZihvLmxlbmd0aD09PTApaWYocT09 +bnVsbClvPXMubGVuZ3RoPT09MD9hLmdJaShhKTpQLnhlKGEuZ0lpKGEpKQplbHNlIG89UC54ZSgiLyIr +YS5nSWkoYSkpCmVsc2V7az1pLkpoKG8sYS5nSWkoYSkpCmo9cy5sZW5ndGg9PT0wCmlmKCFqfHxxIT1u +dWxsfHxDLnhCLm4obywiLyIpKW89UC54ZShrKQplbHNlIG89UC53RihrLCFqfHxxIT1udWxsKX1uPWEu +Z1FEKCk/YS5ndFAoKTpofX19cmV0dXJuIFAuQ2cocyxyLHEscCxvLG4sYS5nWjgoKT9hLmdLYSgpOmgp +fSwKZ2NqOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYyE9bnVsbH0sCmd4QTpmdW5jdGlvbigpe3JldHVy +biB0aGlzLmQhPW51bGx9LApnUUQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mIT1udWxsfSwKZ1o4OmZ1 +bmN0aW9uKCl7cmV0dXJuIHRoaXMuciE9bnVsbH0sCmd0VDpmdW5jdGlvbigpe3JldHVybiBDLnhCLm4o +dGhpcy5lLCIvIil9LAp0NDpmdW5jdGlvbigpe3ZhciBzLHI9dGhpcyxxPXIuYQppZihxIT09IiImJnEh +PT0iZmlsZSIpdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSAi +K3ErIiBVUkkiKSkKcT1yLmYKaWYoKHE9PW51bGw/IiI6cSkhPT0iIil0aHJvdyBILmIoUC5MNCh1Lmkp +KQpxPXIucgppZigocT09bnVsbD8iIjpxKSE9PSIiKXRocm93IEguYihQLkw0KHUubCkpCnE9JC53USgp +CmlmKEgub1QocSkpcT1QLm1uKHIpCmVsc2V7aWYoci5jIT1udWxsJiZyLmdKZihyKSE9PSIiKUgudihQ +Lkw0KHUuaikpCnM9ci5nRmooKQpQLmtFKHMsITEpCnE9UC52ZyhDLnhCLm4oci5lLCIvIik/Ii8iOiIi +LHMsIi8iKQpxPXEuY2hhckNvZGVBdCgwKT09MD9xOnF9cmV0dXJuIHF9LAp3OmZ1bmN0aW9uKGEpe3Jl +dHVybiB0aGlzLmduRCgpfSwKRE46ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHE9dGhpcwppZihiPT1udWxs +KXJldHVybiExCmlmKHE9PT1iKXJldHVybiEwCmlmKHQuZEQuYihiKSlpZihxLmE9PT1iLmdGaSgpKWlm +KHEuYyE9bnVsbD09PWIuZ2NqKCkpaWYocS5iPT09Yi5na3UoKSlpZihxLmdKZihxKT09PWIuZ0pmKGIp +KWlmKHEuZ3RwKHEpPT09Yi5ndHAoYikpaWYocS5lPT09Yi5nSWkoYikpe3M9cS5mCnI9cz09bnVsbApp +Zighcj09PWIuZ1FEKCkpe2lmKHIpcz0iIgppZihzPT09Yi5ndFAoKSl7cz1xLnIKcj1zPT1udWxsCmlm +KCFyPT09Yi5nWjgoKSl7aWYocilzPSIiCnM9cz09PWIuZ0thKCl9ZWxzZSBzPSExfWVsc2Ugcz0hMX1l +bHNlIHM9ITF9ZWxzZSBzPSExCmVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQpl +bHNlIHM9ITEKZWxzZSBzPSExCnJldHVybiBzfSwKc0twOmZ1bmN0aW9uKGEpe3RoaXMueT10LmJrLmEo +YSl9LApzTk06ZnVuY3Rpb24oYSl7dGhpcy5RPXQuY1ouYShhKX0sCiRpaUQ6MSwKZ0ZpOmZ1bmN0aW9u +KCl7cmV0dXJuIHRoaXMuYX0sCmdJaTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lfX0KUC5SWi5wcm90 +b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gUC5lUChDLlpKLEguaChhKSxDLnhNLCExKX0sCiRT +OjV9ClAuTUUucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlzLmIscj10aGlzLmEK +cy5hKz1yLmEKci5hPSImIgpyPXMuYSs9SC5FaihQLmVQKEMuRjMsYSxDLnhNLCEwKSkKaWYoYiE9bnVs +bCYmYi5sZW5ndGghPT0wKXtzLmE9cisiPSIKcy5hKz1ILkVqKFAuZVAoQy5GMyxiLEMueE0sITApKX19 +LAokUzoyMn0KUC55NS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciBzLHIKSC5oKGEpCmlm +KGI9PW51bGx8fHR5cGVvZiBiPT0ic3RyaW5nIil0aGlzLmEuJDIoYSxILmsoYikpCmVsc2UgZm9yKHM9 +Si5JVCh0LnUuYShiKSkscj10aGlzLmE7cy5GKCk7KXIuJDIoYSxILmgocy5nbCgpKSl9LAokUzoxM30K +UC5QRS5wcm90b3R5cGU9ewpnbFI6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvPXRoaXMsbj1udWxsLG09 +by5jCmlmKG09PW51bGwpe209by5iCmlmKDA+PW0ubGVuZ3RoKXJldHVybiBILk9IKG0sMCkKcz1vLmEK +bT1tWzBdKzEKcj1DLnhCLlhVKHMsIj8iLG0pCnE9cy5sZW5ndGgKaWYocj49MCl7cD1QLlBJKHMscisx +LHEsQy5WQywhMSkKcT1yfWVsc2UgcD1uCm09by5jPW5ldyBQLnFlKCJkYXRhIiwiIixuLG4sUC5QSShz +LG0scSxDLldkLCExKSxwLG4pfXJldHVybiBtfSwKdzpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMuYgpp +ZigwPj1yLmxlbmd0aClyZXR1cm4gSC5PSChyLDApCnM9dGhpcy5hCnJldHVybiByWzBdPT09LTE/ImRh +dGE6IitzOnN9fQpQLnlJLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dmFyIHM9dGhpcy5hCmlm +KGE+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsYSkKcz1zW2FdCkMuTkEuZHUocywwLDk2LGIpCnJldHVy +biBzfSwKJFM6MjN9ClAuYzYucHJvdG90eXBlPXsKJDM6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIscQpm +b3Iocz1iLmxlbmd0aCxyPTA7cjxzOysrcil7cT1DLnhCLlcoYixyKV45NgppZihxPj05NilyZXR1cm4g +SC5PSChhLHEpCmFbcV09Y319LAokUzoxNH0KUC5xZC5wcm90b3R5cGU9ewokMzpmdW5jdGlvbihhLGIs +Yyl7dmFyIHMscixxCmZvcihzPUMueEIuVyhiLDApLHI9Qy54Qi5XKGIsMSk7czw9cjsrK3Mpe3E9KHNe +OTYpPj4+MAppZihxPj05NilyZXR1cm4gSC5PSChhLHEpCmFbcV09Y319LAokUzoxNH0KUC5VZi5wcm90 +b3R5cGU9ewpnY2o6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPjB9LApneEE6ZnVuY3Rpb24oKXtyZXR1 +cm4gdGhpcy5jPjAmJnRoaXMuZCsxPHRoaXMuZX0sCmdRRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmY8 +dGhpcy5yfSwKZ1o4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucjx0aGlzLmEubGVuZ3RofSwKZ3RUOmZ1 +bmN0aW9uKCl7cmV0dXJuIEMueEIuUWkodGhpcy5hLCIvIix0aGlzLmUpfSwKZ0ZpOmZ1bmN0aW9uKCl7 +dmFyIHM9dGhpcy54CnJldHVybiBzPT1udWxsP3RoaXMueD10aGlzLlUyKCk6c30sClUyOmZ1bmN0aW9u +KCl7dmFyIHMscj10aGlzLHE9ci5iCmlmKHE8PTApcmV0dXJuIiIKcz1xPT09NAppZihzJiZDLnhCLm4o +ci5hLCJodHRwIikpcmV0dXJuImh0dHAiCmlmKHE9PT01JiZDLnhCLm4oci5hLCJodHRwcyIpKXJldHVy +biJodHRwcyIKaWYocyYmQy54Qi5uKHIuYSwiZmlsZSIpKXJldHVybiJmaWxlIgppZihxPT09NyYmQy54 +Qi5uKHIuYSwicGFja2FnZSIpKXJldHVybiJwYWNrYWdlIgpyZXR1cm4gQy54Qi5OaihyLmEsMCxxKX0s +CmdrdTpmdW5jdGlvbigpe3ZhciBzPXRoaXMuYyxyPXRoaXMuYiszCnJldHVybiBzPnI/Qy54Qi5Oaih0 +aGlzLmEscixzLTEpOiIifSwKZ0pmOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuYwpyZXR1cm4gcz4wP0Mu +eEIuTmoodGhpcy5hLHMsdGhpcy5kKToiIn0sCmd0cDpmdW5jdGlvbihhKXt2YXIgcyxyPXRoaXMKaWYo +ci5neEEoKSlyZXR1cm4gUC5RQShDLnhCLk5qKHIuYSxyLmQrMSxyLmUpLG51bGwpCnM9ci5iCmlmKHM9 +PT00JiZDLnhCLm4oci5hLCJodHRwIikpcmV0dXJuIDgwCmlmKHM9PT01JiZDLnhCLm4oci5hLCJodHRw +cyIpKXJldHVybiA0NDMKcmV0dXJuIDB9LApnSWk6ZnVuY3Rpb24oYSl7cmV0dXJuIEMueEIuTmoodGhp +cy5hLHRoaXMuZSx0aGlzLmYpfSwKZ3RQOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5mLHI9dGhpcy5yCnJl +dHVybiBzPHI/Qy54Qi5Oaih0aGlzLmEscysxLHIpOiIifSwKZ0thOmZ1bmN0aW9uKCl7dmFyIHM9dGhp +cy5yLHI9dGhpcy5hCnJldHVybiBzPHIubGVuZ3RoP0MueEIueW4ocixzKzEpOiIifSwKZ0ZqOmZ1bmN0 +aW9uKCl7dmFyIHMscixxPXRoaXMuZSxwPXRoaXMuZixvPXRoaXMuYQppZihDLnhCLlFpKG8sIi8iLHEp +KSsrcQppZihxPT09cClyZXR1cm4gQy54RApzPUguVk0oW10sdC5zKQpmb3Iocj1xO3I8cDsrK3IpaWYo +Qy54Qi5PKG8scik9PT00Nyl7Qy5ObS5pKHMsQy54Qi5OaihvLHEscikpCnE9cisxfUMuTm0uaShzLEMu +eEIuTmoobyxxLHApKQpyZXR1cm4gUC5BRihzLHQuTil9LApnaFk6ZnVuY3Rpb24oKXtpZih0aGlzLmY+ +PXRoaXMucilyZXR1cm4gQy5DTQpyZXR1cm4gbmV3IFAuR2ooUC5XWCh0aGlzLmd0UCgpKSx0LmR3KX0s +CmtYOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuZCsxCnJldHVybiBzK2EubGVuZ3RoPT09dGhpcy5lJiZD +LnhCLlFpKHRoaXMuYSxhLHMpfSwKTjk6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLHI9cy5yLHE9cy5hCmlm +KHI+PXEubGVuZ3RoKXJldHVybiBzCnJldHVybiBuZXcgUC5VZihDLnhCLk5qKHEsMCxyKSxzLmIscy5j +LHMuZCxzLmUscy5mLHIscy54KX0sCm5tOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxr +LGosaT10aGlzLGg9bnVsbAp0LmM5LmEoYikKcz1pLmdGaSgpCnI9cz09PSJmaWxlIgpxPWkuYwpwPXE+ +MD9DLnhCLk5qKGkuYSxpLmIrMyxxKToiIgpvPWkuZ3hBKCk/aS5ndHAoaSk6aApxPWkuYwppZihxPjAp +bj1DLnhCLk5qKGkuYSxxLGkuZCkKZWxzZSBuPXAubGVuZ3RoIT09MHx8byE9bnVsbHx8cj8iIjpoCnE9 +aS5hCm09Qy54Qi5OaihxLGkuZSxpLmYpCmlmKCFyKWw9biE9bnVsbCYmbS5sZW5ndGghPT0wCmVsc2Ug +bD0hMAppZihsJiYhQy54Qi5uKG0sIi8iKSltPSIvIittCms9UC5sZShoLDAsMCxiKQpsPWkucgpqPWw8 +cS5sZW5ndGg/Qy54Qi55bihxLGwrMSk6aApyZXR1cm4gUC5DZyhzLHAsbixvLG0sayxqKX0sClpJOmZ1 +bmN0aW9uKGEpe3JldHVybiB0aGlzLm1TKFAuaEsoYSkpfSwKbVM6ZnVuY3Rpb24oYSl7aWYoYSBpbnN0 +YW5jZW9mIFAuVWYpcmV0dXJuIHRoaXMudTEodGhpcyxhKQpyZXR1cm4gdGhpcy5SZSgpLm1TKGEpfSwK +dTE6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjPWIuYgpp +ZihjPjApcmV0dXJuIGIKcz1iLmMKaWYocz4wKXtyPWEuYgppZihyPD0wKXJldHVybiBiCnE9cj09PTQK +aWYocSYmQy54Qi5uKGEuYSwiZmlsZSIpKXA9Yi5lIT09Yi5mCmVsc2UgaWYocSYmQy54Qi5uKGEuYSwi +aHR0cCIpKXA9IWIua1goIjgwIikKZWxzZSBwPSEocj09PTUmJkMueEIubihhLmEsImh0dHBzIikpfHwh +Yi5rWCgiNDQzIikKaWYocCl7bz1yKzEKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooYS5hLDAsbykrQy54 +Qi55bihiLmEsYysxKSxyLHMrbyxiLmQrbyxiLmUrbyxiLmYrbyxiLnIrbyxhLngpfWVsc2UgcmV0dXJu +IHRoaXMuUmUoKS5tUyhiKX1uPWIuZQpjPWIuZgppZihuPT09Yyl7cz1iLnIKaWYoYzxzKXtyPWEuZgpv +PXItYwpyZXR1cm4gbmV3IFAuVWYoQy54Qi5OaihhLmEsMCxyKStDLnhCLnluKGIuYSxjKSxhLmIsYS5j +LGEuZCxhLmUsYytvLHMrbyxhLngpfWM9Yi5hCmlmKHM8Yy5sZW5ndGgpe3I9YS5yCnJldHVybiBuZXcg +UC5VZihDLnhCLk5qKGEuYSwwLHIpK0MueEIueW4oYyxzKSxhLmIsYS5jLGEuZCxhLmUsYS5mLHMrKHIt +cyksYS54KX1yZXR1cm4gYS5OOSgpfXM9Yi5hCmlmKEMueEIuUWkocywiLyIsbikpe209YS5lCmw9UC5S +eCh0aGlzKQprPWw+MD9sOm0Kbz1rLW4KcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooYS5hLDAsaykrQy54 +Qi55bihzLG4pLGEuYixhLmMsYS5kLG0sYytvLGIucitvLGEueCl9aj1hLmUKaT1hLmYKaWYoaj09PWkm +JmEuYz4wKXtmb3IoO0MueEIuUWkocywiLi4vIixuKTspbis9MwpvPWotbisxCnJldHVybiBuZXcgUC5V +ZihDLnhCLk5qKGEuYSwwLGopKyIvIitDLnhCLnluKHMsbiksYS5iLGEuYyxhLmQsaixjK28sYi5yK28s +YS54KX1oPWEuYQpsPVAuUngodGhpcykKaWYobD49MClnPWwKZWxzZSBmb3IoZz1qO0MueEIuUWkoaCwi +Li4vIixnKTspZys9MwpmPTAKd2hpbGUoITApe2U9biszCmlmKCEoZTw9YyYmQy54Qi5RaShzLCIuLi8i +LG4pKSlicmVhazsrK2YKbj1lfWZvcihkPSIiO2k+Zzspey0taQppZihDLnhCLk8oaCxpKT09PTQ3KXtp +ZihmPT09MCl7ZD0iLyIKYnJlYWt9LS1mCmQ9Ii8ifX1pZihpPT09ZyYmYS5iPD0wJiYhQy54Qi5RaSho +LCIvIixqKSl7bi09ZiozCmQ9IiJ9bz1pLW4rZC5sZW5ndGgKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmoo +aCwwLGkpK2QrQy54Qi55bihzLG4pLGEuYixhLmMsYS5kLGosYytvLGIucitvLGEueCl9LAp0NDpmdW5j +dGlvbigpe3ZhciBzLHIscT10aGlzLHA9cS5iCmlmKHA+PTApe3M9IShwPT09NCYmQy54Qi5uKHEuYSwi +ZmlsZSIpKQpwPXN9ZWxzZSBwPSExCmlmKHApdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRyYWN0IGEg +ZmlsZSBwYXRoIGZyb20gYSAiK3EuZ0ZpKCkrIiBVUkkiKSkKcD1xLmYKcz1xLmEKaWYocDxzLmxlbmd0 +aCl7aWYocDxxLnIpdGhyb3cgSC5iKFAuTDQodS5pKSkKdGhyb3cgSC5iKFAuTDQodS5sKSl9cj0kLndR +KCkKaWYoSC5vVChyKSlwPVAubW4ocSkKZWxzZXtpZihxLmM8cS5kKUgudihQLkw0KHUuaikpCnA9Qy54 +Qi5OaihzLHEuZSxwKX1yZXR1cm4gcH0sCmdpTzpmdW5jdGlvbihhKXt2YXIgcz10aGlzLnkKcmV0dXJu +IHM9PW51bGw/dGhpcy55PUMueEIuZ2lPKHRoaXMuYSk6c30sCkROOmZ1bmN0aW9uKGEsYil7aWYoYj09 +bnVsbClyZXR1cm4hMQppZih0aGlzPT09YilyZXR1cm4hMApyZXR1cm4gdC5kRC5iKGIpJiZ0aGlzLmE9 +PT1iLncoMCl9LApSZTpmdW5jdGlvbigpe3ZhciBzPXRoaXMscj1udWxsLHE9cy5nRmkoKSxwPXMuZ2t1 +KCksbz1zLmM+MD9zLmdKZihzKTpyLG49cy5neEEoKT9zLmd0cChzKTpyLG09cy5hLGw9cy5mLGs9Qy54 +Qi5OaihtLHMuZSxsKSxqPXMucgpsPWw8aj9zLmd0UCgpOnIKcmV0dXJuIFAuQ2cocSxwLG8sbixrLGws +ajxtLmxlbmd0aD9zLmdLYSgpOnIpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfSwKJGlpRDox +fQpQLnFlLnByb3RvdHlwZT17fQpXLnFFLnByb3RvdHlwZT17fQpXLkdoLnByb3RvdHlwZT17CnNMVTpm +dW5jdGlvbihhLGIpe2EuaHJlZj1ifSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEpfSwKJGlH +aDoxfQpXLmZZLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKX19ClcubkIu +cHJvdG90eXBlPXskaW5COjF9ClcuQXoucHJvdG90eXBlPXskaUF6OjF9ClcuUVAucHJvdG90eXBlPXsk +aVFQOjF9ClcubngucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofX0KVy5v +Si5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9fQpXLmlkLnByb3RvdHlw +ZT17fQpXLlFGLnByb3RvdHlwZT17fQpXLk5oLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJu +IFN0cmluZyhhKX19ClcuYWUucHJvdG90eXBlPXsKRGM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jcmVh +dGVIVE1MRG9jdW1lbnQoYil9fQpXLklCLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHMscj1h +LmxlZnQKci50b1N0cmluZwpyPSJSZWN0YW5nbGUgKCIrSC5FaihyKSsiLCAiCnM9YS50b3AKcy50b1N0 +cmluZwpzPXIrSC5FaihzKSsiKSAiCnI9YS53aWR0aApyLnRvU3RyaW5nCnI9cytILkVqKHIpKyIgeCAi +CnM9YS5oZWlnaHQKcy50b1N0cmluZwpyZXR1cm4gcitILkVqKHMpfSwKRE46ZnVuY3Rpb24oYSxiKXt2 +YXIgcyxyCmlmKGI9PW51bGwpcmV0dXJuITEKaWYodC5xLmIoYikpe3M9YS5sZWZ0CnMudG9TdHJpbmcK +cj1iLmxlZnQKci50b1N0cmluZwppZihzPT09cil7cz1hLnRvcApzLnRvU3RyaW5nCnI9Yi50b3AKci50 +b1N0cmluZwppZihzPT09cil7cz1hLndpZHRoCnMudG9TdHJpbmcKcj1iLndpZHRoCnIudG9TdHJpbmcK +aWYocz09PXIpe3M9YS5oZWlnaHQKcy50b1N0cmluZwpyPWIuaGVpZ2h0CnIudG9TdHJpbmcKcj1zPT09 +cgpzPXJ9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITF9ZWxzZSBzPSExCnJldHVybiBzfSwKZ2lP +OmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPWEubGVmdApwLnRvU3RyaW5nCnA9Qy5DRC5naU8ocCkKcz1h +LnRvcApzLnRvU3RyaW5nCnM9Qy5DRC5naU8ocykKcj1hLndpZHRoCnIudG9TdHJpbmcKcj1DLkNELmdp +TyhyKQpxPWEuaGVpZ2h0CnEudG9TdHJpbmcKcmV0dXJuIFcuckUocCxzLHIsQy5DRC5naU8ocSkpfSwK +JGl0bjoxfQpXLm43LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH19Clcu +d3oucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS5sZW5ndGh9LApxOmZ1bmN0 +aW9uKGEsYil7dmFyIHMKSC51UChiKQpzPXRoaXMuYQppZihiPDB8fGI+PXMubGVuZ3RoKXJldHVybiBI +Lk9IKHMsYikKcmV0dXJuIHRoaXMuJHRpLmMuYShzW2JdKX0sClk1OmZ1bmN0aW9uKGEsYixjKXt0aGlz +LiR0aS5jLmEoYykKdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBtb2RpZnkgbGlzdCIpKX19ClcuY3YucHJv +dG90eXBlPXsKZ1FnOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgVy5pNyhhKX0sCmdQOmZ1bmN0aW9uKGEp +e3JldHVybiBuZXcgVy5JNChhKX0sCnNQOmZ1bmN0aW9uKGEsYil7dmFyIHMKdC5RLmEoYikKcz10aGlz +LmdQKGEpCnMuVjEoMCkKcy5GVigwLGIpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gYS5sb2NhbE5hbWV9 +LApGRjpmdW5jdGlvbihhKXt2YXIgcz0hIWEuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZAppZihzKWEuc2Ny +b2xsSW50b1ZpZXdJZk5lZWRlZCgpCmVsc2UgYS5zY3JvbGxJbnRvVmlldygpfSwKbno6ZnVuY3Rpb24o +YSxiLGMsZCxlKXt2YXIgcyxyPXRoaXMucjYoYSxjLGQsZSkKc3dpdGNoKGIudG9Mb3dlckNhc2UoKSl7 +Y2FzZSJiZWZvcmViZWdpbiI6cz1hLnBhcmVudE5vZGUKcy50b1N0cmluZwpKLkVoKHMscixhKQpicmVh +awpjYXNlImFmdGVyYmVnaW4iOnM9YS5jaGlsZE5vZGVzCnRoaXMubUsoYSxyLHMubGVuZ3RoPjA/c1sw +XTpudWxsKQpicmVhawpjYXNlImJlZm9yZWVuZCI6YS5hcHBlbmRDaGlsZChyKQpicmVhawpjYXNlImFm +dGVyZW5kIjpzPWEucGFyZW50Tm9kZQpzLnRvU3RyaW5nCkouRWgocyxyLGEubmV4dFNpYmxpbmcpCmJy +ZWFrCmRlZmF1bHQ6SC52KFAueFkoIkludmFsaWQgcG9zaXRpb24gIitiKSl9fSwKcjY6ZnVuY3Rpb24o +YSxiLGMsZCl7dmFyIHMscixxLHAKaWYoYz09bnVsbCl7aWYoZD09bnVsbCl7cz0kLmx0CmlmKHM9PW51 +bGwpe3M9SC5WTShbXSx0LnYpCnI9bmV3IFcudkQocykKQy5ObS5pKHMsVy5UdyhudWxsKSkKQy5ObS5p +KHMsVy5CbCgpKQokLmx0PXIKZD1yfWVsc2UgZD1zfXM9JC5FVQppZihzPT1udWxsKXtzPW5ldyBXLktv +KGQpCiQuRVU9cwpjPXN9ZWxzZXtzLmE9ZApjPXN9fWVsc2UgaWYoZCE9bnVsbCl0aHJvdyBILmIoUC54 +WSgidmFsaWRhdG9yIGNhbiBvbmx5IGJlIHBhc3NlZCBpZiB0cmVlU2FuaXRpemVyIGlzIG51bGwiKSkK +aWYoJC54bz09bnVsbCl7cz1kb2N1bWVudApyPXMuaW1wbGVtZW50YXRpb24Kci50b1N0cmluZwpyPUMu +bUguRGMociwiIikKJC54bz1yCiQuQk89ci5jcmVhdGVSYW5nZSgpCnI9JC54by5jcmVhdGVFbGVtZW50 +KCJiYXNlIikKdC5jUi5hKHIpCnM9cy5iYXNlVVJJCnMudG9TdHJpbmcKci5ocmVmPXMKJC54by5oZWFk +LmFwcGVuZENoaWxkKHIpfXM9JC54bwppZihzLmJvZHk9PW51bGwpe3I9cy5jcmVhdGVFbGVtZW50KCJi +b2R5IikKQy5CWi5zR1Mocyx0LnAuYShyKSl9cz0kLnhvCmlmKHQucC5iKGEpKXtzPXMuYm9keQpzLnRv +U3RyaW5nCnE9c31lbHNle3MudG9TdHJpbmcKcT1zLmNyZWF0ZUVsZW1lbnQoYS50YWdOYW1lKQokLnhv +LmJvZHkuYXBwZW5kQ2hpbGQocSl9aWYoImNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCIgaW4gd2luZG93 +LlJhbmdlLnByb3RvdHlwZSYmIUMuTm0udGcoQy5TcSxhLnRhZ05hbWUpKXskLkJPLnNlbGVjdE5vZGVD +b250ZW50cyhxKQpzPSQuQk8Kcy50b1N0cmluZwpwPXMuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGI9 +PW51bGw/Im51bGwiOmIpfWVsc2V7Si53ZihxLGIpCnA9JC54by5jcmVhdGVEb2N1bWVudEZyYWdtZW50 +KCkKZm9yKDtzPXEuZmlyc3RDaGlsZCxzIT1udWxsOylwLmFwcGVuZENoaWxkKHMpfWlmKHEhPT0kLnhv +LmJvZHkpSi5MdChxKQpjLlBuKHApCmRvY3VtZW50LmFkb3B0Tm9kZShwKQpyZXR1cm4gcH0sCkFIOmZ1 +bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5yNihhLGIsYyxudWxsKX0sCnNoZjpmdW5jdGlvbihhLGIp +e3RoaXMuWUMoYSxiKX0sCnBrOmZ1bmN0aW9uKGEsYixjKXt0aGlzLnNhNChhLG51bGwpCmEuYXBwZW5k +Q2hpbGQodGhpcy5yNihhLGIsbnVsbCxjKSl9LApZQzpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnBr +KGEsYixudWxsKX0sCnNSTjpmdW5jdGlvbihhLGIpe2EuaW5uZXJIVE1MPWJ9LApnbnM6ZnVuY3Rpb24o +YSl7cmV0dXJuIGEudGFnTmFtZX0sCmdWbDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcuZXUoYSwiY2xp +Y2siLCExLHQuayl9LAokaWN2OjF9ClcuQ3YucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJu +IHQuaC5iKHQuQS5hKGEpKX0sCiRTOjI1fQpXLmVhLnByb3RvdHlwZT17JGllYToxfQpXLkQwLnByb3Rv +dHlwZT17Ck9uOmZ1bmN0aW9uKGEsYixjLGQpe3QuYncuYShjKQppZihjIT1udWxsKXRoaXMudihhLGIs +YyxkKX0sCkI6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLk9uKGEsYixjLG51bGwpfSwKdjpmdW5j +dGlvbihhLGIsYyxkKXtyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKGIsSC50Uih0LmJ3LmEoYyksMSks +ZCl9LAokaUQwOjF9ClcuaEgucHJvdG90eXBlPXskaWhIOjF9ClcuaDQucHJvdG90eXBlPXsKZ0E6ZnVu +Y3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofX0KVy5ici5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXty +ZXR1cm4gYS5sZW5ndGh9fQpXLlZiLnByb3RvdHlwZT17CnNHUzpmdW5jdGlvbihhLGIpe2EuYm9keT1i +fX0KVy5mSi5wcm90b3R5cGU9ewplbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYS5vcGVuKGIsYywh +MCl9LAokaWZKOjF9Clcud2EucHJvdG90eXBlPXt9ClcuU2cucHJvdG90eXBlPXskaVNnOjF9Clcudzcu +cHJvdG90eXBlPXsKZ0RyOmZ1bmN0aW9uKGEpe2lmKCJvcmlnaW4iIGluIGEpcmV0dXJuIGEub3JpZ2lu +CnJldHVybiBILkVqKGEucHJvdG9jb2wpKyIvLyIrSC5FaihhLmhvc3QpfSwKdzpmdW5jdGlvbihhKXty +ZXR1cm4gU3RyaW5nKGEpfSwKJGl3NzoxfQpXLkFqLnByb3RvdHlwZT17JGlBajoxfQpXLmU3LnByb3Rv +dHlwZT17CmdyODpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmEscj1zLmNoaWxkTm9kZXMubGVuZ3RoCmlm +KHI9PT0wKXRocm93IEguYihQLlBWKCJObyBlbGVtZW50cyIpKQppZihyPjEpdGhyb3cgSC5iKFAuUFYo +Ik1vcmUgdGhhbiBvbmUgZWxlbWVudCIpKQpzPXMuZmlyc3RDaGlsZApzLnRvU3RyaW5nCnJldHVybiBz +fSwKRlY6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEscCxvCnQuZWguYShiKQppZihiIGluc3RhbmNlb2Yg +Vy5lNyl7cz1iLmEKcj10aGlzLmEKaWYocyE9PXIpZm9yKHE9cy5jaGlsZE5vZGVzLmxlbmd0aCxwPTA7 +cDxxOysrcCl7bz1zLmZpcnN0Q2hpbGQKby50b1N0cmluZwpyLmFwcGVuZENoaWxkKG8pfXJldHVybn1m +b3Iocz1iLmdtKGIpLHI9dGhpcy5hO3MuRigpOylyLmFwcGVuZENoaWxkKHMuZ2woKSl9LApZNTpmdW5j +dGlvbihhLGIsYyl7dmFyIHMscgp0LkEuYShjKQpzPXRoaXMuYQpyPXMuY2hpbGROb2RlcwppZihiPDB8 +fGI+PXIubGVuZ3RoKXJldHVybiBILk9IKHIsYikKcy5yZXBsYWNlQ2hpbGQoYyxyW2JdKX0sCmdtOmZ1 +bmN0aW9uKGEpe3ZhciBzPXRoaXMuYS5jaGlsZE5vZGVzCnJldHVybiBuZXcgVy5XOShzLHMubGVuZ3Ro +LEgueihzKS5DKCJXOTxHbS5FPiIpKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEuY2hpbGRO +b2Rlcy5sZW5ndGh9LApxOmZ1bmN0aW9uKGEsYil7dmFyIHMKSC51UChiKQpzPXRoaXMuYS5jaGlsZE5v +ZGVzCmlmKGI8MHx8Yj49cy5sZW5ndGgpcmV0dXJuIEguT0gocyxiKQpyZXR1cm4gc1tiXX19ClcudUgu +cHJvdG90eXBlPXsKd2c6ZnVuY3Rpb24oYSl7dmFyIHM9YS5wYXJlbnROb2RlCmlmKHMhPW51bGwpcy5y +ZW1vdmVDaGlsZChhKX0sCkQ0OmZ1bmN0aW9uKGEpe3ZhciBzCmZvcig7cz1hLmZpcnN0Q2hpbGQscyE9 +bnVsbDspYS5yZW1vdmVDaGlsZChzKX0sCnc6ZnVuY3Rpb24oYSl7dmFyIHM9YS5ub2RlVmFsdWUKcmV0 +dXJuIHM9PW51bGw/dGhpcy5VKGEpOnN9LApzYTQ6ZnVuY3Rpb24oYSxiKXthLnRleHRDb250ZW50PWJ9 +LAptSzpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuaW5zZXJ0QmVmb3JlKGIsYyl9LAokaXVIOjF9Clcu +QkgucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKcTpmdW5jdGlvbihh +LGIpe0gudVAoYikKaWYoYj4+PjAhPT1ifHxiPj1hLmxlbmd0aCl0aHJvdyBILmIoUC5DZihiLGEsbnVs +bCxudWxsLG51bGwpKQpyZXR1cm4gYVtiXX0sClk1OmZ1bmN0aW9uKGEsYixjKXt0LkEuYShjKQp0aHJv +dyBILmIoUC5MNCgiQ2Fubm90IGFzc2lnbiBlbGVtZW50IG9mIGltbXV0YWJsZSBMaXN0LiIpKX0sCmd0 +SDpmdW5jdGlvbihhKXtpZihhLmxlbmd0aD4wKXJldHVybiBhWzBdCnRocm93IEguYihQLlBWKCJObyBl +bGVtZW50cyIpKX0sCkU6ZnVuY3Rpb24oYSxiKXtpZihiPDB8fGI+PWEubGVuZ3RoKXJldHVybiBILk9I +KGEsYikKcmV0dXJuIGFbYl19LAokaWJROjEsCiRpWGo6MSwKJGljWDoxLAokaXpNOjF9ClcuU04ucHJv +dG90eXBlPXt9ClcuZXcucHJvdG90eXBlPXskaWV3OjF9ClcubHAucHJvdG90eXBlPXsKZ0E6ZnVuY3Rp +b24oYSl7cmV0dXJuIGEubGVuZ3RofX0KVy5UYi5wcm90b3R5cGU9ewpyNjpmdW5jdGlvbihhLGIsYyxk +KXt2YXIgcyxyCmlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90 +b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxiLGMsZCkKcz1XLlU5KCI8dGFibGU+IitILkVqKGIpKyI8L3Rh +YmxlPiIsYyxkKQpyPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpyLnRvU3RyaW5nCnMu +dG9TdHJpbmcKbmV3IFcuZTcocikuRlYoMCxuZXcgVy5lNyhzKSkKcmV0dXJuIHJ9fQpXLkl2LnByb3Rv +dHlwZT17CnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBzLHIscSxwCmlmKCJjcmVhdGVDb250ZXh0dWFs +RnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxiLGMsZCkK +cz1kb2N1bWVudApyPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnM9Qy5JZS5yNihzLmNyZWF0ZUVs +ZW1lbnQoInRhYmxlIiksYixjLGQpCnMudG9TdHJpbmcKcz1uZXcgVy5lNyhzKQpxPXMuZ3I4KHMpCnEu +dG9TdHJpbmcKcz1uZXcgVy5lNyhxKQpwPXMuZ3I4KHMpCnIudG9TdHJpbmcKcC50b1N0cmluZwpuZXcg +Vy5lNyhyKS5GVigwLG5ldyBXLmU3KHApKQpyZXR1cm4gcn19ClcuV1AucHJvdG90eXBlPXsKcjY6ZnVu +Y3Rpb24oYSxiLGMsZCl7dmFyIHMscixxCmlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdp +bmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxiLGMsZCkKcz1kb2N1bWVudApyPXMu +Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnM9Qy5JZS5yNihzLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiks +YixjLGQpCnMudG9TdHJpbmcKcz1uZXcgVy5lNyhzKQpxPXMuZ3I4KHMpCnIudG9TdHJpbmcKcS50b1N0 +cmluZwpuZXcgVy5lNyhyKS5GVigwLG5ldyBXLmU3KHEpKQpyZXR1cm4gcn19ClcueVkucHJvdG90eXBl +PXsKcGs6ZnVuY3Rpb24oYSxiLGMpe3ZhciBzLHIKdGhpcy5zYTQoYSxudWxsKQpzPWEuY29udGVudApz +LnRvU3RyaW5nCkouYlQocykKcj10aGlzLnI2KGEsYixudWxsLGMpCmEuY29udGVudC5hcHBlbmRDaGls +ZChyKX0sCllDOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucGsoYSxiLG51bGwpfSwKJGl5WToxfQpX +Lnc2LnByb3RvdHlwZT17fQpXLks1LnByb3RvdHlwZT17ClBvOmZ1bmN0aW9uKGEsYixjKXt2YXIgcz1X +LlAxKGEub3BlbihiLGMpKQpyZXR1cm4gc30sCmdtVzpmdW5jdGlvbihhKXtyZXR1cm4gYS5sb2NhdGlv +bn0sCnVzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY29uZmlybShiKX0sCiRpSzU6MSwKJGl2NjoxfQpX +LkNtLnByb3RvdHlwZT17JGlDbToxfQpXLkNRLnByb3RvdHlwZT17JGlDUToxfQpXLnc0LnByb3RvdHlw +ZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHMscj1hLmxlZnQKci50b1N0cmluZwpyPSJSZWN0YW5nbGUgKCIr +SC5FaihyKSsiLCAiCnM9YS50b3AKcy50b1N0cmluZwpzPXIrSC5FaihzKSsiKSAiCnI9YS53aWR0aApy +LnRvU3RyaW5nCnI9cytILkVqKHIpKyIgeCAiCnM9YS5oZWlnaHQKcy50b1N0cmluZwpyZXR1cm4gcitI +LkVqKHMpfSwKRE46ZnVuY3Rpb24oYSxiKXt2YXIgcyxyCmlmKGI9PW51bGwpcmV0dXJuITEKaWYodC5x +LmIoYikpe3M9YS5sZWZ0CnMudG9TdHJpbmcKcj1iLmxlZnQKci50b1N0cmluZwppZihzPT09cil7cz1h +LnRvcApzLnRvU3RyaW5nCnI9Yi50b3AKci50b1N0cmluZwppZihzPT09cil7cz1hLndpZHRoCnMudG9T +dHJpbmcKcj1iLndpZHRoCnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS5oZWlnaHQKcy50b1N0cmluZwpy +PWIuaGVpZ2h0CnIudG9TdHJpbmcKcj1zPT09cgpzPXJ9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9 +ITF9ZWxzZSBzPSExCnJldHVybiBzfSwKZ2lPOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwPWEubGVmdApw +LnRvU3RyaW5nCnA9Qy5DRC5naU8ocCkKcz1hLnRvcApzLnRvU3RyaW5nCnM9Qy5DRC5naU8ocykKcj1h +LndpZHRoCnIudG9TdHJpbmcKcj1DLkNELmdpTyhyKQpxPWEuaGVpZ2h0CnEudG9TdHJpbmcKcmV0dXJu +IFcuckUocCxzLHIsQy5DRC5naU8ocSkpfX0KVy5yaC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXty +ZXR1cm4gYS5sZW5ndGh9LApxOmZ1bmN0aW9uKGEsYil7SC51UChiKQppZihiPj4+MCE9PWJ8fGI+PWEu +bGVuZ3RoKXRocm93IEguYihQLkNmKGIsYSxudWxsLG51bGwsbnVsbCkpCnJldHVybiBhW2JdfSwKWTU6 +ZnVuY3Rpb24oYSxiLGMpe3QuQS5hKGMpCnRocm93IEguYihQLkw0KCJDYW5ub3QgYXNzaWduIGVsZW1l +bnQgb2YgaW1tdXRhYmxlIExpc3QuIikpfSwKRTpmdW5jdGlvbihhLGIpe2lmKGI8MHx8Yj49YS5sZW5n +dGgpcmV0dXJuIEguT0goYSxiKQpyZXR1cm4gYVtiXX0sCiRpYlE6MSwKJGlYajoxLAokaWNYOjEsCiRp +ek06MX0KVy5jZi5wcm90b3R5cGU9ewpLOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAsbwp0LmVBLmEo +YikKZm9yKHM9dGhpcy5ndmMoKSxyPXMubGVuZ3RoLHE9dGhpcy5hLHA9MDtwPHMubGVuZ3RoO3MubGVu +Z3RoPT09cnx8KDAsSC5saykocyksKytwKXtvPXNbcF0KYi4kMihvLHEuZ2V0QXR0cmlidXRlKG8pKX19 +LApndmM6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLmEuYXR0cmlidXRlcwptLnRvU3Ry +aW5nCnM9SC5WTShbXSx0LnMpCmZvcihyPW0ubGVuZ3RoLHE9dC5oOSxwPTA7cDxyOysrcCl7aWYocD49 +bS5sZW5ndGgpcmV0dXJuIEguT0gobSxwKQpvPXEuYShtW3BdKQppZihvLm5hbWVzcGFjZVVSST09bnVs +bCl7bj1vLm5hbWUKbi50b1N0cmluZwpDLk5tLmkocyxuKX19cmV0dXJuIHN9LApnbDA6ZnVuY3Rpb24o +YSl7cmV0dXJuIHRoaXMuZ3ZjKCkubGVuZ3RoPT09MH19ClcuaTcucHJvdG90eXBlPXsKeDQ6ZnVuY3Rp +b24oYSl7dmFyIHM9SC5vVCh0aGlzLmEuaGFzQXR0cmlidXRlKGEpKQpyZXR1cm4gc30sCnE6ZnVuY3Rp +b24oYSxiKXtyZXR1cm4gdGhpcy5hLmdldEF0dHJpYnV0ZShILmgoYikpfSwKWTU6ZnVuY3Rpb24oYSxi +LGMpe3RoaXMuYS5zZXRBdHRyaWJ1dGUoYixjKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmd2 +YygpLmxlbmd0aH19ClcuU3kucHJvdG90eXBlPXsKeDQ6ZnVuY3Rpb24oYSl7dmFyIHM9SC5vVCh0aGlz +LmEuYS5oYXNBdHRyaWJ1dGUoImRhdGEtIit0aGlzLk9VKGEpKSkKcmV0dXJuIHN9LApxOmZ1bmN0aW9u +KGEsYil7cmV0dXJuIHRoaXMuYS5hLmdldEF0dHJpYnV0ZSgiZGF0YS0iK3RoaXMuT1UoSC5oKGIpKSl9 +LApZNTpmdW5jdGlvbihhLGIsYyl7dGhpcy5hLmEuc2V0QXR0cmlidXRlKCJkYXRhLSIrdGhpcy5PVShi +KSxjKX0sCks6ZnVuY3Rpb24oYSxiKXt0aGlzLmEuSygwLG5ldyBXLktTKHRoaXMsdC5lQS5hKGIpKSl9 +LApndmM6ZnVuY3Rpb24oKXt2YXIgcz1ILlZNKFtdLHQucykKdGhpcy5hLksoMCxuZXcgVy5BMyh0aGlz +LHMpKQpyZXR1cm4gc30sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmd2YygpLmxlbmd0aH0sCmds +MDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ndmMoKS5sZW5ndGg9PT0wfSwKeHE6ZnVuY3Rpb24oYSl7 +dmFyIHMscixxPUguVk0oYS5zcGxpdCgiLSIpLHQucykKZm9yKHM9MTtzPHEubGVuZ3RoOysrcyl7cj1x +W3NdCmlmKHIubGVuZ3RoPjApQy5ObS5ZNShxLHMsclswXS50b1VwcGVyQ2FzZSgpK0ouS1YociwxKSl9 +cmV0dXJuIEMuTm0uayhxLCIiKX0sCk9VOmZ1bmN0aW9uKGEpe3ZhciBzLHIscSxwLG8KZm9yKHM9YS5s +ZW5ndGgscj0wLHE9IiI7cjxzOysrcil7cD1hW3JdCm89cC50b0xvd2VyQ2FzZSgpCnE9KHAhPT1vJiZy +PjA/cSsiLSI6cSkrb31yZXR1cm4gcS5jaGFyQ29kZUF0KDApPT0wP3E6cX19ClcuS1MucHJvdG90eXBl +PXsKJDI6ZnVuY3Rpb24oYSxiKXtpZihKLnJZKGEpLm4oYSwiZGF0YS0iKSl0aGlzLmIuJDIodGhpcy5h +LnhxKEMueEIueW4oYSw1KSksYil9LAokUzoxNX0KVy5BMy5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihh +LGIpe2lmKEouclkoYSkubihhLCJkYXRhLSIpKUMuTm0uaSh0aGlzLmIsdGhpcy5hLnhxKEMueEIueW4o +YSw1KSkpfSwKJFM6MTV9ClcuSTQucHJvdG90eXBlPXsKRDpmdW5jdGlvbigpe3ZhciBzLHIscSxwLG89 +UC5Mcyh0Lk4pCmZvcihzPXRoaXMuYS5jbGFzc05hbWUuc3BsaXQoIiAiKSxyPXMubGVuZ3RoLHE9MDtx +PHI7KytxKXtwPUouVDAoc1txXSkKaWYocC5sZW5ndGghPT0wKW8uaSgwLHApfXJldHVybiBvfSwKWDpm +dW5jdGlvbihhKXt0aGlzLmEuY2xhc3NOYW1lPXQuQy5hKGEpLmsoMCwiICIpfSwKZ0E6ZnVuY3Rpb24o +YSl7cmV0dXJuIHRoaXMuYS5jbGFzc0xpc3QubGVuZ3RofSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiB0 +aGlzLmEuY2xhc3NMaXN0Lmxlbmd0aD09PTB9LApnb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS5j +bGFzc0xpc3QubGVuZ3RoIT09MH0sClYxOmZ1bmN0aW9uKGEpe3RoaXMuYS5jbGFzc05hbWU9IiJ9LAp0 +ZzpmdW5jdGlvbihhLGIpe3ZhciBzPXRoaXMuYS5jbGFzc0xpc3QuY29udGFpbnMoYikKcmV0dXJuIHN9 +LAppOmZ1bmN0aW9uKGEsYil7dmFyIHMscgpILmgoYikKcz10aGlzLmEuY2xhc3NMaXN0CnI9cy5jb250 +YWlucyhiKQpzLmFkZChiKQpyZXR1cm4hcn0sClI6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyLHEKaWYodHlw +ZW9mIGI9PSJzdHJpbmciKXtzPXRoaXMuYS5jbGFzc0xpc3QKcj1zLmNvbnRhaW5zKGIpCnMucmVtb3Zl +KGIpCnE9cn1lbHNlIHE9ITEKcmV0dXJuIHF9LApGVjpmdW5jdGlvbihhLGIpe1cuVE4odGhpcy5hLHQu +US5hKGIpKX19ClcuRmsucHJvdG90eXBlPXt9ClcuUk8ucHJvdG90eXBlPXt9ClcuZXUucHJvdG90eXBl +PXt9ClcueEMucHJvdG90eXBlPXt9Clcudk4ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJu +IHRoaXMuYS4kMSh0LkIuYShhKSl9LAokUzoyN30KVy5KUS5wcm90b3R5cGU9ewpDWTpmdW5jdGlvbihh +KXt2YXIgcwppZigkLm9yLmE9PT0wKXtmb3Iocz0wO3M8MjYyOysrcykkLm9yLlk1KDAsQy5jbVtzXSxX +LnBTKCkpCmZvcihzPTA7czwxMjsrK3MpJC5vci5ZNSgwLEMuQklbc10sVy5WNCgpKX19LAppMDpmdW5j +dGlvbihhKXtyZXR1cm4gJC5BTigpLnRnKDAsVy5yUyhhKSl9LApFYjpmdW5jdGlvbihhLGIsYyl7dmFy +IHM9JC5vci5xKDAsSC5FaihXLnJTKGEpKSsiOjoiK2IpCmlmKHM9PW51bGwpcz0kLm9yLnEoMCwiKjo6 +IitiKQppZihzPT1udWxsKXJldHVybiExCnJldHVybiBILnk4KHMuJDQoYSxiLGMsdGhpcykpfSwKJGlr +RjoxfQpXLkdtLnByb3RvdHlwZT17CmdtOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgVy5XOShhLHRoaXMu +Z0EoYSksSC56KGEpLkMoIlc5PEdtLkU+IikpfX0KVy52RC5wcm90b3R5cGU9ewppMDpmdW5jdGlvbihh +KXtyZXR1cm4gQy5ObS5Wcih0aGlzLmEsbmV3IFcuVXYoYSkpfSwKRWI6ZnVuY3Rpb24oYSxiLGMpe3Jl +dHVybiBDLk5tLlZyKHRoaXMuYSxuZXcgVy5FZyhhLGIsYykpfSwKJGlrRjoxfQpXLlV2LnByb3RvdHlw +ZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0LkUuYShhKS5pMCh0aGlzLmEpfSwKJFM6MTZ9ClcuRWcu +cHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHQuRS5hKGEpLkViKHRoaXMuYSx0aGlzLmIs +dGhpcy5jKX0sCiRTOjE2fQpXLm02LnByb3RvdHlwZT17CkNZOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBz +LHIscQp0aGlzLmEuRlYoMCxjKQpzPWIuZXYoMCxuZXcgVy5FbygpKQpyPWIuZXYoMCxuZXcgVy5Xaygp +KQp0aGlzLmIuRlYoMCxzKQpxPXRoaXMuYwpxLkZWKDAsQy54RCkKcS5GVigwLHIpfSwKaTA6ZnVuY3Rp +b24oYSl7cmV0dXJuIHRoaXMuYS50ZygwLFcuclMoYSkpfSwKRWI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBz +PXRoaXMscj1XLnJTKGEpLHE9cy5jCmlmKHEudGcoMCxILkVqKHIpKyI6OiIrYikpcmV0dXJuIHMuZC5E +dChjKQplbHNlIGlmKHEudGcoMCwiKjo6IitiKSlyZXR1cm4gcy5kLkR0KGMpCmVsc2V7cT1zLmIKaWYo +cS50ZygwLEguRWoocikrIjo6IitiKSlyZXR1cm4hMAplbHNlIGlmKHEudGcoMCwiKjo6IitiKSlyZXR1 +cm4hMAplbHNlIGlmKHEudGcoMCxILkVqKHIpKyI6OioiKSlyZXR1cm4hMAplbHNlIGlmKHEudGcoMCwi +Kjo6KiIpKXJldHVybiEwfXJldHVybiExfSwKJGlrRjoxfQpXLkVvLnByb3RvdHlwZT17CiQxOmZ1bmN0 +aW9uKGEpe3JldHVybiFDLk5tLnRnKEMuQkksSC5oKGEpKX0sCiRTOjd9ClcuV2sucHJvdG90eXBlPXsK +JDE6ZnVuY3Rpb24oYSl7cmV0dXJuIEMuTm0udGcoQy5CSSxILmgoYSkpfSwKJFM6N30KVy5jdC5wcm90 +b3R5cGU9ewpFYjpmdW5jdGlvbihhLGIsYyl7aWYodGhpcy5qRihhLGIsYykpcmV0dXJuITAKaWYoYj09 +PSJ0ZW1wbGF0ZSImJmM9PT0iIilyZXR1cm4hMAppZihhLmdldEF0dHJpYnV0ZSgidGVtcGxhdGUiKT09 +PSIiKXJldHVybiB0aGlzLmUudGcoMCxiKQpyZXR1cm4hMX19ClcuSUEucHJvdG90eXBlPXsKJDE6ZnVu +Y3Rpb24oYSl7cmV0dXJuIlRFTVBMQVRFOjoiK0guRWooSC5oKGEpKX0sCiRTOjV9ClcuT3cucHJvdG90 +eXBlPXsKaTA6ZnVuY3Rpb24oYSl7dmFyIHMKaWYodC5ldy5iKGEpKXJldHVybiExCnM9dC5nNy5iKGEp +CmlmKHMmJlcuclMoYSk9PT0iZm9yZWlnbk9iamVjdCIpcmV0dXJuITEKaWYocylyZXR1cm4hMApyZXR1 +cm4hMX0sCkViOmZ1bmN0aW9uKGEsYixjKXtpZihiPT09ImlzInx8Qy54Qi5uKGIsIm9uIikpcmV0dXJu +ITEKcmV0dXJuIHRoaXMuaTAoYSl9LAokaWtGOjF9ClcuVzkucHJvdG90eXBlPXsKRjpmdW5jdGlvbigp +e3ZhciBzPXRoaXMscj1zLmMrMSxxPXMuYgppZihyPHEpe3Muc3AoSi54OShzLmEscikpCnMuYz1yCnJl +dHVybiEwfXMuc3AobnVsbCkKcy5jPXEKcmV0dXJuITF9LApnbDpmdW5jdGlvbigpe3JldHVybiB0aGlz +LmR9LApzcDpmdW5jdGlvbihhKXt0aGlzLmQ9dGhpcy4kdGkuQygiMT8iKS5hKGEpfSwKJGlBbjoxfQpX +LmRXLnByb3RvdHlwZT17JGlEMDoxLCRpdjY6MX0KVy5tay5wcm90b3R5cGU9eyRpeTA6MX0KVy5Lby5w +cm90b3R5cGU9ewpQbjpmdW5jdGlvbihhKXt2YXIgcz10aGlzLHI9bmV3IFcuZm0ocykKcy5iPSExCnIu +JDIoYSxudWxsKQpmb3IoO3MuYjspe3MuYj0hMQpyLiQyKGEsbnVsbCl9fSwKRVA6ZnVuY3Rpb24oYSxi +KXt2YXIgcz10aGlzLmI9ITAKaWYoYiE9bnVsbD9iIT09YS5wYXJlbnROb2RlOnMpSi5MdChhKQplbHNl +IGIucmVtb3ZlQ2hpbGQoYSl9LApJNDpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxwLG8sbj0hMCxtPW51 +bGwsbD1udWxsCnRyeXttPUouaWcoYSkKbD1tLmEuZ2V0QXR0cmlidXRlKCJpcyIpCnQuaC5hKGEpCnM9 +ZnVuY3Rpb24oYyl7aWYoIShjLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApKXJldHVy +biB0cnVlCmlmKGMuaWQ9PSdsYXN0Q2hpbGQnfHxjLm5hbWU9PSdsYXN0Q2hpbGQnfHxjLmlkPT0ncHJl +dmlvdXNTaWJsaW5nJ3x8Yy5uYW1lPT0ncHJldmlvdXNTaWJsaW5nJ3x8Yy5pZD09J2NoaWxkcmVuJ3x8 +Yy5uYW1lPT0nY2hpbGRyZW4nKXJldHVybiB0cnVlCnZhciBrPWMuY2hpbGROb2RlcwppZihjLmxhc3RD +aGlsZCYmYy5sYXN0Q2hpbGQhPT1rW2subGVuZ3RoLTFdKXJldHVybiB0cnVlCmlmKGMuY2hpbGRyZW4p +aWYoIShjLmNoaWxkcmVuIGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb258fGMuY2hpbGRyZW4gaW5zdGFu +Y2VvZiBOb2RlTGlzdCkpcmV0dXJuIHRydWUKdmFyIGo9MAppZihjLmNoaWxkcmVuKWo9Yy5jaGlsZHJl +bi5sZW5ndGgKZm9yKHZhciBpPTA7aTxqO2krKyl7dmFyIGg9Yy5jaGlsZHJlbltpXQppZihoLmlkPT0n +YXR0cmlidXRlcyd8fGgubmFtZT09J2F0dHJpYnV0ZXMnfHxoLmlkPT0nbGFzdENoaWxkJ3x8aC5uYW1l +PT0nbGFzdENoaWxkJ3x8aC5pZD09J3ByZXZpb3VzU2libGluZyd8fGgubmFtZT09J3ByZXZpb3VzU2li +bGluZyd8fGguaWQ9PSdjaGlsZHJlbid8fGgubmFtZT09J2NoaWxkcmVuJylyZXR1cm4gdHJ1ZX1yZXR1 +cm4gZmFsc2V9KGEpCm49SC5vVChzKT8hMDohKGEuYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9k +ZU1hcCl9Y2F0Y2gocCl7SC5SdShwKX1yPSJlbGVtZW50IHVucHJpbnRhYmxlIgp0cnl7cj1KLmooYSl9 +Y2F0Y2gocCl7SC5SdShwKX10cnl7cT1XLnJTKGEpCnRoaXMua1IodC5oLmEoYSksYixuLHIscSx0LmYu +YShtKSxILmsobCkpfWNhdGNoKHApe2lmKEguUnUocCkgaW5zdGFuY2VvZiBQLnUpdGhyb3cgcAplbHNl +e3RoaXMuRVAoYSxiKQp3aW5kb3cKbz0iUmVtb3ZpbmcgY29ycnVwdGVkIGVsZW1lbnQgIitILkVqKHIp +CmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53YXJuKG8pfX19LApr +UjpmdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzCmlmKGMpe20uRVAo +YSxiKQp3aW5kb3cKcz0iUmVtb3ZpbmcgZWxlbWVudCBkdWUgdG8gY29ycnVwdGVkIGF0dHJpYnV0ZXMg +b24gPCIrZCsiPiIKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndh +cm4ocykKcmV0dXJufWlmKCFtLmEuaTAoYSkpe20uRVAoYSxiKQp3aW5kb3cKcz0iUmVtb3ZpbmcgZGlz +YWxsb3dlZCBlbGVtZW50IDwiK0guRWooZSkrIj4gZnJvbSAiK0guRWooYikKaWYodHlwZW9mIGNvbnNv +bGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4ocykKcmV0dXJufWlmKGchPW51bGwpaWYo +IW0uYS5FYihhLCJpcyIsZykpe20uRVAoYSxiKQp3aW5kb3cKcz0iUmVtb3ZpbmcgZGlzYWxsb3dlZCB0 +eXBlIGV4dGVuc2lvbiA8IitILkVqKGUpKycgaXM9IicrZysnIj4nCmlmKHR5cGVvZiBjb25zb2xlIT0i +dW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53YXJuKHMpCnJldHVybn1zPWYuZ3ZjKCkKcj1ILlZNKHMu +c2xpY2UoMCksSC50NihzKSkKZm9yKHE9Zi5ndmMoKS5sZW5ndGgtMSxzPWYuYTtxPj0wOy0tcSl7aWYo +cT49ci5sZW5ndGgpcmV0dXJuIEguT0gocixxKQpwPXJbcV0Kbz1tLmEKbj1KLmNIKHApCkguaChwKQpp +Zighby5FYihhLG4scy5nZXRBdHRyaWJ1dGUocCkpKXt3aW5kb3cKbz0iUmVtb3ZpbmcgZGlzYWxsb3dl +ZCBhdHRyaWJ1dGUgPCIrSC5FaihlKSsiICIrcCsnPSInK0guRWoocy5nZXRBdHRyaWJ1dGUocCkpKyci +PicKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4obykKcy5y +ZW1vdmVBdHRyaWJ1dGUocCl9fWlmKHQuYVcuYihhKSl7cz1hLmNvbnRlbnQKcy50b1N0cmluZwptLlBu +KHMpfX0sCiRpb246MX0KVy5mbS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciBzLHIscSxw +LG8sbixtPXRoaXMuYQpzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOm0uSTQoYSxiKQpicmVhawpjYXNl +IDg6Y2FzZSAxMTpjYXNlIDM6Y2FzZSA0OmJyZWFrCmRlZmF1bHQ6bS5FUChhLGIpfXM9YS5sYXN0Q2hp +bGQKZm9yKHE9dC5BO251bGwhPXM7KXtyPW51bGwKdHJ5e3I9cy5wcmV2aW91c1NpYmxpbmcKaWYociE9 +bnVsbCl7cD1yLm5leHRTaWJsaW5nCm89cwpvPXA9PW51bGw/byE9bnVsbDpwIT09bwpwPW99ZWxzZSBw +PSExCmlmKHApe3A9UC5QVigiQ29ycnVwdCBIVE1MIikKdGhyb3cgSC5iKHApfX1jYXRjaChuKXtILlJ1 +KG4pCnA9cS5hKHMpCm0uYj0hMApvPXAucGFyZW50Tm9kZQpvPWE9PW51bGw/byE9bnVsbDphIT09bwpp +ZihvKXtvPXAucGFyZW50Tm9kZQppZihvIT1udWxsKW8ucmVtb3ZlQ2hpbGQocCl9ZWxzZSBhLnJlbW92 +ZUNoaWxkKHApCnM9bnVsbApyPWEubGFzdENoaWxkfWlmKHMhPW51bGwpdGhpcy4kMihzLGEpCnM9cn19 +LAokUzozMH0KVy5MZS5wcm90b3R5cGU9e30KVy5LNy5wcm90b3R5cGU9e30KVy5yQi5wcm90b3R5cGU9 +e30KVy5YVy5wcm90b3R5cGU9e30KVy5vYS5wcm90b3R5cGU9e30KUC5pSi5wcm90b3R5cGU9ewpWSDpm +dW5jdGlvbihhKXt2YXIgcyxyPXRoaXMuYSxxPXIubGVuZ3RoCmZvcihzPTA7czxxOysrcylpZihyW3Nd +PT09YSlyZXR1cm4gcwpDLk5tLmkocixhKQpDLk5tLmkodGhpcy5iLG51bGwpCnJldHVybiBxfSwKUHY6 +ZnVuY3Rpb24oYSl7dmFyIHMscixxLHA9dGhpcyxvPXt9CmlmKGE9PW51bGwpcmV0dXJuIGEKaWYoSC5s +KGEpKXJldHVybiBhCmlmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQppZih0eXBlb2YgYT09InN0 +cmluZyIpcmV0dXJuIGEKaWYoYSBpbnN0YW5jZW9mIFAuaVApcmV0dXJuIG5ldyBEYXRlKGEuYSkKaWYo +dC5mdi5iKGEpKXRocm93IEguYihQLlNZKCJzdHJ1Y3R1cmVkIGNsb25lIG9mIFJlZ0V4cCIpKQppZih0 +LmM4LmIoYSkpcmV0dXJuIGEKaWYodC53LmIoYSkpcmV0dXJuIGEKaWYodC5JLmIoYSkpcmV0dXJuIGEK +cz10LmRFLmIoYSl8fCExCmlmKHMpcmV0dXJuIGEKaWYodC5mLmIoYSkpe3I9cC5WSChhKQpzPXAuYgpp +ZihyPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLHIpCnE9by5hPXNbcl0KaWYocSE9bnVsbClyZXR1cm4g +cQpxPXt9Cm8uYT1xCkMuTm0uWTUocyxyLHEpCmEuSygwLG5ldyBQLmpnKG8scCkpCnJldHVybiBvLmF9 +aWYodC5qLmIoYSkpe3I9cC5WSChhKQpvPXAuYgppZihyPj1vLmxlbmd0aClyZXR1cm4gSC5PSChvLHIp +CnE9b1tyXQppZihxIT1udWxsKXJldHVybiBxCnJldHVybiBwLmVrKGEscil9aWYodC5lSC5iKGEpKXty +PXAuVkgoYSkKcz1wLmIKaWYocj49cy5sZW5ndGgpcmV0dXJuIEguT0gocyxyKQpxPW8uYj1zW3JdCmlm +KHEhPW51bGwpcmV0dXJuIHEKcT17fQpvLmI9cQpDLk5tLlk1KHMscixxKQpwLmltKGEsbmV3IFAuVGEo +byxwKSkKcmV0dXJuIG8uYn10aHJvdyBILmIoUC5TWSgic3RydWN0dXJlZCBjbG9uZSBvZiBvdGhlciB0 +eXBlIikpfSwKZWs6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPUouVTYoYSkscT1yLmdBKGEpLHA9bmV3IEFy +cmF5KHEpCkMuTm0uWTUodGhpcy5iLGIscCkKZm9yKHM9MDtzPHE7KytzKUMuTm0uWTUocCxzLHRoaXMu +UHYoci5xKGEscykpKQpyZXR1cm4gcH19ClAuamcucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt0 +aGlzLmEuYVthXT10aGlzLmIuUHYoYil9LAokUzozMX0KUC5UYS5wcm90b3R5cGU9ewokMjpmdW5jdGlv +bihhLGIpe3RoaXMuYS5iW2FdPXRoaXMuYi5QdihiKX0sCiRTOjE3fQpQLkJmLnByb3RvdHlwZT17Cmlt +OmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAKdC5iOC5hKGIpCmZvcihzPU9iamVjdC5rZXlzKGEpLHI9 +cy5sZW5ndGgscT0wO3E8cjsrK3Epe3A9c1txXQpiLiQyKHAsYVtwXSl9fX0KUC5Bcy5wcm90b3R5cGU9 +ewpWOmZ1bmN0aW9uKGEpe3ZhciBzCkguaChhKQpzPSQuaEcoKS5iCmlmKHR5cGVvZiBhIT0ic3RyaW5n +IilILnYoSC50TChhKSkKaWYocy50ZXN0KGEpKXJldHVybiBhCnRocm93IEguYihQLkwzKGEsInZhbHVl +IiwiTm90IGEgdmFsaWQgY2xhc3MgdG9rZW4iKSl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLkQo +KS5rKDAsIiAiKX0sCmdtOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXMuRCgpCnJldHVybiBQLnJqKHMscy5y +LEguTGgocykuYyl9LApnbDA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuRCgpLmE9PT0wfSwKZ29yOmZ1 +bmN0aW9uKGEpe3JldHVybiB0aGlzLkQoKS5hIT09MH0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz +LkQoKS5hfSwKdGc6ZnVuY3Rpb24oYSxiKXt0aGlzLlYoYikKcmV0dXJuIHRoaXMuRCgpLnRnKDAsYil9 +LAppOmZ1bmN0aW9uKGEsYil7dmFyIHMKSC5oKGIpCnRoaXMuVihiKQpzPXRoaXMuT1MobmV3IFAuR0Uo +YikpCnJldHVybiBILnk4KHM9PW51bGw/ITE6cyl9LApSOmZ1bmN0aW9uKGEsYil7dmFyIHMscgppZih0 +eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuITEKdGhpcy5WKGIpCnM9dGhpcy5EKCkKcj1zLlIoMCxiKQp0 +aGlzLlgocykKcmV0dXJuIHJ9LApGVjpmdW5jdGlvbihhLGIpe3RoaXMuT1MobmV3IFAuTjcodGhpcyx0 +LlEuYShiKSkpfSwKZVI6ZnVuY3Rpb24oYSxiKXt2YXIgcz10aGlzLkQoKQpyZXR1cm4gSC5iSyhzLGIs +SC5MaChzKS5DKCJsZi5FIikpfSwKRTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLkQoKS5FKDAsYil9 +LApWMTpmdW5jdGlvbihhKXt0aGlzLk9TKG5ldyBQLnVRKCkpfSwKT1M6ZnVuY3Rpb24oYSl7dmFyIHMs +cgp0LmJVLmEoYSkKcz10aGlzLkQoKQpyPWEuJDEocykKdGhpcy5YKHMpCnJldHVybiByfX0KUC5HRS5w +cm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdC5DLmEoYSkuaSgwLHRoaXMuYSl9LAokUzoz +M30KUC5ONy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcz10aGlzLmIscj1ILnQ2KHMpCnJl +dHVybiB0LkMuYShhKS5GVigwLG5ldyBILmxKKHMsci5DKCJxVSgxKSIpLmEodGhpcy5hLmd1TSgpKSxy +LkMoImxKPDEscVU+IikpKX0sCiRTOjE4fQpQLnVRLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3Qu +Qy5hKGEpCmlmKGEuYT4wKXthLmI9YS5jPWEuZD1hLmU9YS5mPW51bGwKYS5hPTAKYS5TKCl9cmV0dXJu +IG51bGx9LAokUzoxOH0KUC5oRi5wcm90b3R5cGU9eyRpaEY6MX0KUC5QQy5wcm90b3R5cGU9ewokMTpm +dW5jdGlvbihhKXt2YXIgcwp0LlkuYShhKQpzPWZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gZnVuY3Rpb24o +KXtyZXR1cm4gYihjLGQsdGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSl9 +fShQLlI0LGEsITEpClAuRG0ocywkLncoKSxhKQpyZXR1cm4gc30sCiRTOjR9ClAubXQucHJvdG90eXBl +PXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyB0aGlzLmEoYSl9LAokUzo0fQpQLlFTLnByb3RvdHlw +ZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5yNyhhKX0sCiRTOjM1fQpQLm5wLnByb3RvdHlw +ZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5UeihhLHQuYW0pfSwKJFM6NDZ9ClAuVXQucHJv +dG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLkU0KGEpfSwKJFM6Mzd9ClAuRTQucHJv +dG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nIiYmdHlwZW9mIGIhPSJu +dW1iZXIiKXRocm93IEguYihQLnhZKCJwcm9wZXJ0eSBpcyBub3QgYSBTdHJpbmcgb3IgbnVtIikpCnJl +dHVybiBQLmRVKHRoaXMuYVtiXSl9LApZNTpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIhPSJzdHJp +bmciJiZ0eXBlb2YgYiE9Im51bWJlciIpdGhyb3cgSC5iKFAueFkoInByb3BlcnR5IGlzIG5vdCBhIFN0 +cmluZyBvciBudW0iKSkKdGhpcy5hW2JdPVAud1koYyl9LApETjpmdW5jdGlvbihhLGIpe2lmKGI9PW51 +bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFuY2VvZiBQLkU0JiZ0aGlzLmE9PT1iLmF9LAp3OmZ1bmN0 +aW9uKGEpe3ZhciBzLHIKdHJ5e3M9U3RyaW5nKHRoaXMuYSkKcmV0dXJuIHN9Y2F0Y2gocil7SC5SdShy +KQpzPXRoaXMueGIoMCkKcmV0dXJuIHN9fSwKVjc6ZnVuY3Rpb24oYSxiKXt2YXIgcyxyPXRoaXMuYQpp +ZihiPT1udWxsKXM9bnVsbAplbHNle3M9SC50NihiKQpzPVAuQ0gobmV3IEgubEooYixzLkMoIkAoMSki +KS5hKFAuaUcoKSkscy5DKCJsSjwxLEA+IikpLCEwLHQueil9cmV0dXJuIFAuZFUoclthXS5hcHBseShy +LHMpKX0sCmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gMH19ClAucjcucHJvdG90eXBlPXt9ClAuVHoucHJv +dG90eXBlPXsKY1A6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcyxyPWE8MHx8YT49cy5nQShzKQppZihyKXRo +cm93IEguYihQLlRFKGEsMCxzLmdBKHMpLG51bGwsbnVsbCkpfSwKcTpmdW5jdGlvbihhLGIpe2lmKEgu +b2soYikpdGhpcy5jUChiKQpyZXR1cm4gdGhpcy4kdGkuYy5hKHRoaXMuVXIoMCxiKSl9LApZNTpmdW5j +dGlvbihhLGIsYyl7dGhpcy5jUChiKQp0aGlzLmJoKDAsYixjKX0sCmdBOmZ1bmN0aW9uKGEpe3ZhciBz +PXRoaXMuYS5sZW5ndGgKaWYodHlwZW9mIHM9PT0ibnVtYmVyIiYmcz4+PjA9PT1zKXJldHVybiBzCnRo +cm93IEguYihQLlBWKCJCYWQgSnNBcnJheSBsZW5ndGgiKSl9LAokaWJROjEsCiRpY1g6MSwKJGl6TTox +fQpQLmNvLnByb3RvdHlwZT17Clk1OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5lNCgwLGIsYyl9 +fQpQLm5kLnByb3RvdHlwZT17JGluZDoxfQpQLktlLnByb3RvdHlwZT17CkQ6ZnVuY3Rpb24oKXt2YXIg +cyxyLHEscCxvPXRoaXMuYS5nZXRBdHRyaWJ1dGUoImNsYXNzIiksbj1QLkxzKHQuTikKaWYobz09bnVs +bClyZXR1cm4gbgpmb3Iocz1vLnNwbGl0KCIgIikscj1zLmxlbmd0aCxxPTA7cTxyOysrcSl7cD1KLlQw +KHNbcV0pCmlmKHAubGVuZ3RoIT09MCluLmkoMCxwKX1yZXR1cm4gbn0sClg6ZnVuY3Rpb24oYSl7dGhp +cy5hLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGEuaygwLCIgIikpfX0KUC5oaS5wcm90b3R5cGU9ewpnUDpm +dW5jdGlvbihhKXtyZXR1cm4gbmV3IFAuS2UoYSl9LApzaGY6ZnVuY3Rpb24oYSxiKXt0aGlzLllDKGEs +Yil9LApyNjpmdW5jdGlvbihhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4KaWYoZD09bnVsbCl7cz1ILlZN +KFtdLHQudikKZD1uZXcgVy52RChzKQpDLk5tLmkocyxXLlR3KG51bGwpKQpDLk5tLmkocyxXLkJsKCkp +CkMuTm0uaShzLG5ldyBXLk93KCkpfWM9bmV3IFcuS28oZCkKcj0nPHN2ZyB2ZXJzaW9uPSIxLjEiPicr +SC5FaihiKSsiPC9zdmc+IgpzPWRvY3VtZW50CnE9cy5ib2R5CnEudG9TdHJpbmcKcD1DLlJZLkFIKHEs +cixjKQpvPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnAudG9TdHJpbmcKcz1uZXcgVy5lNyhwKQpu +PXMuZ3I4KHMpCmZvcig7cz1uLmZpcnN0Q2hpbGQscyE9bnVsbDspby5hcHBlbmRDaGlsZChzKQpyZXR1 +cm4gb30sCm56OmZ1bmN0aW9uKGEsYixjLGQsZSl7dGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBpbnZva2Ug +aW5zZXJ0QWRqYWNlbnRIdG1sIG9uIFNWRy4iKSl9LApnVmw6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBX +LmV1KGEsImNsaWNrIiwhMSx0LmspfSwKJGloaToxfQpVLmQyLnByb3RvdHlwZT17Ckx0OmZ1bmN0aW9u +KCl7dmFyIHMscixxLHAsbz10aGlzLG49dC5YLG09dC5fLGw9UC5GbChuLG0pLGs9by5hCmlmKGshPW51 +bGwpe3M9SC5WTShbXSx0LkcpCmZvcihyPWsubGVuZ3RoLHE9MDtxPGsubGVuZ3RoO2subGVuZ3RoPT09 +cnx8KDAsSC5saykoayksKytxKXtwPWtbcV0Kcy5wdXNoKFAuRUYoWyJkZXNjcmlwdGlvbiIscC5hLCJo +cmVmIixwLmJdLG4sbSkpfWwuWTUoMCwiZWRpdHMiLHMpfWwuWTUoMCwiZXhwbGFuYXRpb24iLG8uYikK +bC5ZNSgwLCJsaW5lIixvLmMpCmwuWTUoMCwiZGlzcGxheVBhdGgiLG8uZCkKbC5ZNSgwLCJ1cmlQYXRo +IixvLmUpCm49by5mCmlmKG4hPW51bGwpe209SC5WTShbXSx0LkcpCmZvcihrPW4ubGVuZ3RoLHE9MDtx +PG4ubGVuZ3RoO24ubGVuZ3RoPT09a3x8KDAsSC5saykobiksKytxKW0ucHVzaChuW3FdLkx0KCkpCmwu +WTUoMCwidHJhY2VzIixtKX1yZXR1cm4gbH19ClUuU2UucHJvdG90eXBlPXsKTHQ6ZnVuY3Rpb24oKXty +ZXR1cm4gUC5FRihbImRlc2NyaXB0aW9uIix0aGlzLmEsImhyZWYiLHRoaXMuYl0sdC5YLHQuXyl9fQpV +Lk1sLnByb3RvdHlwZT17Ckx0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuRUYoWyJocmVmIix0aGlzLmEsImxp +bmUiLHRoaXMuYiwicGF0aCIsdGhpcy5jXSx0LlgsdC5fKX19ClUueUQucHJvdG90eXBlPXsKTHQ6ZnVu +Y3Rpb24oKXt2YXIgcyxyLHEscD1ILlZNKFtdLHQuRykKZm9yKHM9dGhpcy5iLHI9cy5sZW5ndGgscT0w +O3E8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxILmxrKShzKSwrK3EpcC5wdXNoKHNbcV0uTHQoKSkK +cmV0dXJuIFAuRUYoWyJkZXNjcmlwdGlvbiIsdGhpcy5hLCJlbnRyaWVzIixwXSx0LlgsdC5fKX19ClUu +d2IucHJvdG90eXBlPXsKTHQ6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscD10aGlzLG89UC5GbCh0LlgsdC5f +KQpvLlk1KDAsImRlc2NyaXB0aW9uIixwLmEpCnM9cC5iCmlmKHMhPW51bGwpby5ZNSgwLCJmdW5jdGlv +biIscykKcz1wLmMKaWYocyE9bnVsbClvLlk1KDAsImxpbmsiLHMuTHQoKSkKcz1wLmQKaWYocy5sZW5n +dGghPT0wKXtyPUgudDYocykKcT1yLkMoImxKPDEsWjA8cVUqLE1oKj4qPiIpCm8uWTUoMCwiaGludEFj +dGlvbnMiLFAuWTEobmV3IEgubEoocyxyLkMoIlowPHFVKixNaCo+KigxKSIpLmEobmV3IFUuYjAoKSks +cSksITAscS5DKCJhTC5FIikpKX1yZXR1cm4gb319ClUuYU4ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24o +YSl7cmV0dXJuIFIubnoodC50LmEoYSkpfSwKJFM6Mzh9ClUuYjAucHJvdG90eXBlPXsKJDE6ZnVuY3Rp +b24oYSl7cmV0dXJuIHQuYVguYShhKS5MdCgpfSwKJFM6Mzl9CkIuajgucHJvdG90eXBlPXsKTHQ6ZnVu +Y3Rpb24oKXtyZXR1cm4gUC5FRihbImxpbmUiLHRoaXMuYSwiZXhwbGFuYXRpb24iLHRoaXMuYiwib2Zm +c2V0Iix0aGlzLmNdLHQuWCx0Ll8pfX0KQi5xcC5wcm90b3R5cGU9ewpMdDpmdW5jdGlvbigpe3ZhciBz +LHIscSxwLG8sbixtLGw9dGhpcyxrPXQuWCxqPVAuRmwoayx0LmRwKQpmb3Iocz1sLmQscz1zLmdQdShz +KSxzPXMuZ20ocykscj10Ll8scT10Lkc7cy5GKCk7KXtwPXMuZ2woKQpvPXAuYQpuPUguVk0oW10scSkK +Zm9yKHA9Si5JVChwLmIpO3AuRigpOyl7bT1wLmdsKCkKbi5wdXNoKFAuRUYoWyJsaW5lIixtLmEsImV4 +cGxhbmF0aW9uIixtLmIsIm9mZnNldCIsbS5jXSxrLHIpKX1qLlk1KDAsbyxuKX1yZXR1cm4gUC5FRihb +InJlZ2lvbnMiLGwuYSwibmF2aWdhdGlvbkNvbnRlbnQiLGwuYiwic291cmNlQ29kZSIsbC5jLCJlZGl0 +cyIsal0sayxyKX19ClQubVEucHJvdG90eXBlPXt9CkwuZS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihh +KXt2YXIgcyxyLHEscCxvLG4sbQp0LmFMLmEoYSkKcz13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUKcj1M +Lkc2KHdpbmRvdy5sb2NhdGlvbi5ocmVmKQpxPUwuYUsod2luZG93LmxvY2F0aW9uLmhyZWYpCkwuR2Uo +KQppZihzIT09Ii8iJiZzIT09Si5UMChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucm9vdCIpLnRleHRD +b250ZW50KSlMLkc3KHMscixxLCEwLG5ldyBMLlZXKHMscixxKSkKcD1kb2N1bWVudApvPUoucUYocC5x +dWVyeVNlbGVjdG9yKCIuYXBwbHktbWlncmF0aW9uIikpCm49by4kdGkKbT1uLkMoIn4oMSk/IikuYShu +ZXcgTC5vWigpKQp0LlouYShudWxsKQpXLkpFKG8uYSxvLmIsbSwhMSxuLmMpCm49Si5xRihwLnF1ZXJ5 +U2VsZWN0b3IoIi5yZXJ1bi1taWdyYXRpb24iKSkKbT1uLiR0aQpXLkpFKG4uYSxuLmIsbS5DKCJ+KDEp +PyIpLmEobmV3IEwuSGkoKSksITEsbS5jKQptPUoucUYocC5xdWVyeVNlbGVjdG9yKCIucmVwb3J0LXBy +b2JsZW0iKSkKbj1tLiR0aQpXLkpFKG0uYSxtLmIsbi5DKCJ+KDEpPyIpLmEobmV3IEwuQlQoKSksITEs +bi5jKQpwPUoucUYocC5xdWVyeVNlbGVjdG9yKCIucG9wdXAtcGFuZSAuY2xvc2UiKSkKbj1wLiR0aQpX +LkpFKHAuYSxwLmIsbi5DKCJ+KDEpPyIpLmEobmV3IEwuUFkoKSksITEsbi5jKQpuPUoucUYoJC5jMCgp +KQpwPW4uJHRpClcuSkUobi5hLG4uYixwLkMoIn4oMSk/IikuYShuZXcgTC51OCgpKSwhMSxwLmMpfSwK +JFM6MTl9CkwuVlcucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtMLkZyKHRoaXMuYSx0aGlzLmIsdGhp +cy5jKX0sCiRTOjJ9Ckwub1oucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHMscixxLHAsbwp0 +Lk8uYShhKQppZihILm9UKEMub2wudXMod2luZG93LCJUaGlzIHdpbGwgYXBwbHkgdGhlIGNoYW5nZXMg +eW91J3ZlIHByZXZpZXdlZCB0byB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LiBJdCBpcyByZWNvbW1lbmRl +ZCB5b3UgY29tbWl0IGFueSBjaGFuZ2VzIHlvdSBtYWRlIGJlZm9yZSBkb2luZyB0aGlzLiIpKSl7cz1I +LlZNKFtdLHQuRykKZm9yKHI9JC5JUixxPXIubGVuZ3RoLHA9MDtwPHIubGVuZ3RoO3IubGVuZ3RoPT09 +cXx8KDAsSC5saykociksKytwKXMucHVzaChyW3BdLkx0KCkpCnM9TC50eSgiL2FwcGx5LW1pZ3JhdGlv +biIsUC5FRihbIm5hdmlnYXRpb25UcmVlIixzXSx0LlgsdC5kcCkpLlc3KG5ldyBMLmpyKCksdC5QKQpv +PW5ldyBMLnFsKCkKdC5iNy5hKG51bGwpCnI9cy4kdGkKcT0kLlgzCmlmKHEhPT1DLk5VKW89UC5WSChv +LHEpCnMueGYobmV3IFAuRmUobmV3IFAudnMocSxyKSwyLG51bGwsbyxyLkMoIkA8MT4iKS5LcShyLmMp +LkMoIkZlPDEsMj4iKSkpfX0sCiRTOjF9CkwuanIucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFy +IHMKdC50LmEoYSkKcz1kb2N1bWVudC5ib2R5CnMuY2xhc3NMaXN0LnJlbW92ZSgicHJvcG9zZWQiKQpz +LmNsYXNzTGlzdC5hZGQoImFwcGxpZWQiKX0sCiRTOjQyfQpMLnFsLnByb3RvdHlwZT17CiQyOmZ1bmN0 +aW9uKGEsYil7TC5DMigiQ291bGRuJ3QgYXBwbHkgbWlncmF0aW9uIixhLGIpfSwKJEM6IiQyIiwKJFI6 +MiwKJFM6MTd9CkwuSGkucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMueG4odC5P +LmEoYSkpfSwKeG46ZnVuY3Rpb24oYSl7dmFyIHM9MCxyPVAuRlgodC5QKSxxPTEscCxvPVtdLG4sbSxs +LGssagp2YXIgJGFzeW5jJCQxPVAubHooZnVuY3Rpb24oYixjKXtpZihiPT09MSl7cD1jCnM9cX13aGls +ZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6cT0zCmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgicmVy +dW5uaW5nIikKcz02CnJldHVybiBQLmpRKEwudHkoIi9yZXJ1bi1taWdyYXRpb24iLG51bGwpLCRhc3lu +YyQkMSkKY2FzZSA2Om49YwppZihILm9UKEgueTgoSi54OShuLCJzdWNjZXNzIikpKSl3aW5kb3cubG9j +YXRpb24ucmVsb2FkKCkKZWxzZSBMLkswKHQuZUUuYShKLng5KG4sImVycm9ycyIpKSkKby5wdXNoKDUp +CnM9NApicmVhawpjYXNlIDM6cT0yCmo9cAptPUguUnUoaikKbD1ILnRzKGopCkwuQzIoIkZhaWxlZCB0 +byByZXJ1biBtaWdyYXRpb24iLG0sbCkKby5wdXNoKDUpCnM9NApicmVhawpjYXNlIDI6bz1bMV0KY2Fz +ZSA0OnE9MQpkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoInJlcnVubmluZyIpCnM9by5wb3Ao +KQpicmVhawpjYXNlIDU6cmV0dXJuIFAueUMobnVsbCxyKQpjYXNlIDE6cmV0dXJuIFAuZjMocCxyKX19 +KQpyZXR1cm4gUC5ESSgkYXN5bmMkJDEscil9LAokUzoyMH0KTC5CVC5wcm90b3R5cGU9ewokMTpmdW5j +dGlvbihhKXt0Lk8uYShhKQpDLm9sLlBvKHdpbmRvdyxQLlhkKCJodHRwcyIsImdpdGh1Yi5jb20iLCJk +YXJ0LWxhbmcvc2RrL2lzc3Vlcy9uZXciLFAuRUYoWyJ0aXRsZSIsIkN1c3RvbWVyLXJlcG9ydGVkIGlz +c3VlIHdpdGggTk5CRCBtaWdyYXRpb24gdG9vbCIsImxhYmVscyIsdS5kLCJib2R5IiwiIyMjIyBTdGVw +cyB0byByZXByb2R1Y2VcblxuIyMjIyBXaGF0IGRpZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj9cblxuIyMj +IyBXaGF0IGFjdHVhbGx5IGhhcHBlbmVkP1xuXG5fU2NyZWVuc2hvdHMgYXJlIGFwcHJlY2lhdGVkX1xu +XG4qKkRhcnQgU0RLIHZlcnNpb24qKjogIitILkVqKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZGst +dmVyc2lvbiIpLnRleHRDb250ZW50KSsiXG5cblRoYW5rcyBmb3IgZmlsaW5nIVxuIl0sdC5YLHQueikp +LmduRCgpLCJyZXBvcnQtcHJvYmxlbSIpfSwKJFM6MX0KTC5QWS5wcm90b3R5cGU9ewokMTpmdW5jdGlv +bihhKXt2YXIgcwp0Lk8uYShhKQpzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5wb3B1cC1wYW5lIiku +c3R5bGUKcy5kaXNwbGF5PSJub25lIgpyZXR1cm4ibm9uZSJ9LAokUzo0NH0KTC51OC5wcm90b3R5cGU9 +ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyLHEscAp0Lk8uYShhKQpzPSQuRDkoKS5pbm5lclRleHQKcj10 +LmcuYShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubmF2LXBhbmVsIFtkYXRhLW5hbWUqPSInK0guRWoo +Vy5MaihzKSkrJyJdJykucGFyZW50Tm9kZSkKcT1yLnF1ZXJ5U2VsZWN0b3IoIi5zdGF0dXMtaWNvbiIp +CnA9TC55dygkLklSLHMpCmlmKHAgaW5zdGFuY2VvZiBMLmNEJiZILm9UKHAueCkpe0wuT3QocCkKTC54 +bihxLHApCkwuQVIocixwKX19LAokUzoxfQpMLkwucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFy +IHMscixxCnQuYUwuYShhKQpzPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZQpyPUwuRzYod2luZG93Lmxv +Y2F0aW9uLmhyZWYpCnE9TC5hSyh3aW5kb3cubG9jYXRpb24uaHJlZikKaWYocy5sZW5ndGg+MSlMLkc3 +KHMscixxLCExLG51bGwpCmVsc2V7TC5CRShzLEIud1IoKSwhMCkKTC5CWCgiJm5ic3A7IixudWxsKX19 +LAokUzoxOX0KTC5XeC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyLHEscD0iY29sbGFw +c2VkIgp0Lk8uYShhKQpzPXRoaXMuYQpyPUouWUUocykKcT10aGlzLmIKaWYoIXIuZ1AocykudGcoMCxw +KSl7ci5nUChzKS5pKDAscCkKSi5kUihxKS5pKDAscCl9ZWxzZXtyLmdQKHMpLlIoMCxwKQpKLmRSKHEp +LlIoMCxwKX19LAokUzoxfQpMLkFPLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzPUoucUYo +dC5nLmEoYSkpLHI9cy4kdGkscT1yLkMoIn4oMSk/IikuYShuZXcgTC5kTih0aGlzLmEpKQp0LlouYShu +dWxsKQpXLkpFKHMuYSxzLmIscSwhMSxyLmMpfSwKJFM6M30KTC5kTi5wcm90b3R5cGU9ewokMTpmdW5j +dGlvbihhKXtyZXR1cm4gTC50Mih0Lk8uYShhKSx0aGlzLmEpfSwKJFM6Nn0KTC5Iby5wcm90b3R5cGU9 +ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyLHEKdC5nLmEoYSkKcz1KLnFGKGEpCnI9cy4kdGkKcT1yLkMo +In4oMSk/IikuYShuZXcgTC54eihhLHRoaXMuYSkpCnQuWi5hKG51bGwpClcuSkUocy5hLHMuYixxLCEx +LHIuYyl9LAokUzozfQpMLnh6LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciBzCnQuTy5hKGEp +CnM9dGhpcy5hCkwuaFgodGhpcy5iLFAuUUEocy5nZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgVy5TeShu +ZXcgVy5pNyhzKSkuT1UoIm9mZnNldCIpKSxudWxsKSxQLlFBKHMuZ2V0QXR0cmlidXRlKCJkYXRhLSIr +bmV3IFcuU3kobmV3IFcuaTcocykpLk9VKCJsaW5lIikpLG51bGwpKX0sCiRTOjF9CkwuSUMucHJvdG90 +eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHM9Si5xRih0LmcuYShhKSkscj1zLiR0aQpyLkMoIn4oMSk/ +IikuYShMLmlTKCkpCnQuWi5hKG51bGwpClcuSkUocy5hLHMuYixMLmlTKCksITEsci5jKX0sCiRTOjN9 +CkwuZkMucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dC5lUS5hKGEpCnRoaXMuYS5hTSgwLHRoaXMu +Yil9LAokUzo0N30KTC5UbS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtILmgoYSkKcmV0dXJuIGEu +bGVuZ3RoPjQwP0oubGQoYSwwLDQwKSsiLi4uIjphfSwKJFM6NDh9CkwublQucHJvdG90eXBlPXsKJDA6 +ZnVuY3Rpb24oKXtMLkZyKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sCiRTOjJ9CkwuTlkucHJvdG90eXBl +PXsKJDA6ZnVuY3Rpb24oKXtMLkZyKHRoaXMuYSxudWxsLG51bGwpfSwKJFM6Mn0KTC51ZS5wcm90b3R5 +cGU9ewokMTpmdW5jdGlvbihhKXt0LmF3LmEoYSkKcmV0dXJuIEguRWooYS5xKDAsInNldmVyaXR5Iikp +KyIgLSAiK0guRWooYS5xKDAsIm1lc3NhZ2UiKSkrIiBhdCAiK0guRWooYS5xKDAsImxvY2F0aW9uIikp +KyIgLSAoIitILkVqKGEucSgwLCJjb2RlIikpKyIpIn0sCiRTOjQ5fQpMLmVYLnByb3RvdHlwZT17CiQx +OmZ1bmN0aW9uKGEpe3QuZy5hKGEpCiQuekIoKS50b1N0cmluZwp0LmRILmEoJC5vdygpLnEoMCwiaGxq +cyIpKS5WNygiaGlnaGxpZ2h0QmxvY2siLFthXSl9LAokUzozfQpMLkVFLnByb3RvdHlwZT17CiQxOmZ1 +bmN0aW9uKGEpe3ZhciBzLHIKdC5PLmEoYSkucHJldmVudERlZmF1bHQoKQpzPXRoaXMuYQpyPXRoaXMu +YgpMLmFmKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxzLHIsITAsbmV3IEwuUUwocyxyKSkKTC5oWCh0 +aGlzLmMscyxyKX0sCiRTOjF9CkwuUUwucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtMLkZyKHdpbmRv +dy5sb2NhdGlvbi5wYXRobmFtZSx0aGlzLmEsdGhpcy5iKX0sCiRTOjJ9CkwuVlMucHJvdG90eXBlPXsK +JDE6ZnVuY3Rpb24oYSl7dmFyIHMscj0ic2VsZWN0ZWQtZmlsZSIKdC5nLmEoYSkKYS50b1N0cmluZwpz +PUouWUUoYSkKaWYoYS5nZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgVy5TeShuZXcgVy5pNyhhKSkuT1Uo +Im5hbWUiKSk9PT10aGlzLmEuYSlzLmdQKGEpLmkoMCxyKQplbHNlIHMuZ1AoYSkuUigwLHIpfSwKJFM6 +M30KTC5URC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgcyxyCnQuTy5hKGEpCnM9dGhpcy5h +CnN3aXRjaChzLmdMKCkpe2Nhc2UgQy5jdzpicmVhawpjYXNlIEMuV0Q6cy5uRygpCmJyZWFrCmNhc2Ug +Qy5YajpzLmMyKCkKYnJlYWsKY2FzZSBDLmRjOnMuYzIoKQpicmVha31yPXRoaXMuYgpMLmhsKHIscykK +TC54bih0aGlzLmMscykKTC5BUihyLHMpfSwKJFM6MX0KTC5JZi5wcm90b3R5cGU9ewokMTpmdW5jdGlv +bihhKXt2YXIgcwp0Lk8uYShhKQpzPXRoaXMuYQpMLk90KHMpCkwueG4odGhpcy5iLHMpCkwuQVIodGhp +cy5jLHMpfSwKJFM6MX0KTC50Qi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gTC50Mih0 +Lk8uYShhKSwhMCl9LAokUzo2fQpMLm0yLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0 +aGlzLlJJKHQuTy5hKGEpKX0sClJJOmZ1bmN0aW9uKGEpe3ZhciBzPTAscj1QLkZYKHQuUCkscT0xLHAs +bz1bXSxuPXRoaXMsbSxsLGssaixpLGgsZyxmCnZhciAkYXN5bmMkJDE9UC5seihmdW5jdGlvbihiLGMp +e2lmKGI9PT0xKXtwPWMKcz1xfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpxPTMKaT1kb2N1bWVu +dAptPUMuQ0QuelEoaS5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpLnNjcm9sbFRvcCkKaD10LlgKcz02 +CnJldHVybiBQLmpRKEwudHkoTC5RNCgiL2FwcGx5LWhpbnQiLFAuRmwoaCxoKSksbi5hLkx0KCkpLCRh +c3luYyQkMSkKY2FzZSA2Omg9bi5iCmw9TC5VcyhoLmEpCnM9NwpyZXR1cm4gUC5qUShMLkc3KGwsbnVs +bCxoLmIsITEsbnVsbCksJGFzeW5jJCQxKQpjYXNlIDc6aS5ib2R5LmNsYXNzTGlzdC5hZGQoIm5lZWRz +LXJlcnVuIikKaT1pLnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50IikKaS50b1N0cmluZwppLnNjcm9sbFRv +cD1KLlZ1KG0pCnE9MQpzPTUKYnJlYWsKY2FzZSAzOnE9MgpmPXAKaz1ILlJ1KGYpCmo9SC50cyhmKQpM +LkMyKCJjb3VsZG4ndCBhcHBseSBoaW50IixrLGopCnM9NQpicmVhawpjYXNlIDI6cz0xCmJyZWFrCmNh +c2UgNTpyZXR1cm4gUC55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5mMyhwLHIpfX0pCnJldHVybiBQ +LkRJKCRhc3luYyQkMSxyKX0sCiRTOjIwfQpMLlFXLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0 +dXJuIHRoaXMuYSsiOlxuIit0aGlzLmJ9LAokaVJ6OjF9CkwuWEEucHJvdG90eXBlPXsKRWI6ZnVuY3Rp +b24oYSxiLGMpe3JldHVybiEwfSwKaTA6ZnVuY3Rpb24oYSl7cmV0dXJuITB9LAokaWtGOjF9CkwudnQu +cHJvdG90eXBlPXsKZ0w6ZnVuY3Rpb24oKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMuZAppZihsLmxl +bmd0aD09PTApcmV0dXJuIEMuY3cKcz1DLk5tLmd0SChsKS5nTCgpCmZvcihyPWwubGVuZ3RoLHE9ITAs +cD0hMCxvPTA7bzxsLmxlbmd0aDtsLmxlbmd0aD09PXJ8fCgwLEgubGspKGwpLCsrbyl7bj1sW29dLmdM +KCkKaWYobiE9cylzPW51bGwKbT1uIT09Qy5jdwppZihtJiZuIT09Qy5XRClxPSExCmlmKG0mJm4hPT1D +LlhqKXA9ITF9aWYocyE9bnVsbClyZXR1cm4gcwppZihxKXJldHVybiBDLldECmlmKHApcmV0dXJuIEMu +WGoKcmV0dXJuIEMuZGN9LApMVjpmdW5jdGlvbigpe3ZhciBzLHIscT10aGlzLmQKaWYocSE9bnVsbClm +b3Iocz1xLmxlbmd0aCxyPTA7cjxzOysrcilxW3JdLmI9dGhpc30sCmMyOmZ1bmN0aW9uKCl7dmFyIHMs +cixxLHAKZm9yKHM9dGhpcy5kLHI9cy5sZW5ndGgscT0wO3E8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwo +MCxILmxrKShzKSwrK3Epe3A9c1txXQppZihwIGluc3RhbmNlb2YgTC52dClwLmMyKCkKZWxzZSBpZihw +IGluc3RhbmNlb2YgTC5jRCYmSC5vVChwLngpJiZwLnI9PT1DLlhqKXAucj1DLldEfX0sCm5HOmZ1bmN0 +aW9uKCl7dmFyIHMscixxLHAKZm9yKHM9dGhpcy5kLHI9cy5sZW5ndGgscT0wO3E8cy5sZW5ndGg7cy5s +ZW5ndGg9PT1yfHwoMCxILmxrKShzKSwrK3Epe3A9c1txXQppZihwIGluc3RhbmNlb2YgTC52dClwLm5H +KCkKZWxzZSBpZihwIGluc3RhbmNlb2YgTC5jRCYmSC5vVChwLngpJiZwLnI9PT1DLldEKXAucj1DLlhq +fX0sCkx0OmZ1bmN0aW9uKCl7dmFyIHMscj1QLkZsKHQuWCx0Ll8pCnIuWTUoMCwidHlwZSIsImRpcmVj +dG9yeSIpCnIuWTUoMCwibmFtZSIsdGhpcy5hKQpyLlk1KDAsInN1YnRyZWUiLEwuVkQodGhpcy5kKSkK +cz10aGlzLmMKaWYocyE9bnVsbClyLlk1KDAsInBhdGgiLHMpCnJldHVybiByfX0KTC5jRC5wcm90b3R5 +cGU9ewpMdDpmdW5jdGlvbigpe3ZhciBzLHI9dGhpcyxxPVAuRmwodC5YLHQuXykKcS5ZNSgwLCJ0eXBl +IiwiZmlsZSIpCnEuWTUoMCwibmFtZSIsci5hKQpzPXIuYwppZihzIT1udWxsKXEuWTUoMCwicGF0aCIs +cykKcz1yLmQKaWYocyE9bnVsbClxLlk1KDAsImhyZWYiLHMpCnM9ci5lCmlmKHMhPW51bGwpcS5ZNSgw +LCJlZGl0Q291bnQiLHMpCnM9ci5mCmlmKHMhPW51bGwpcS5ZNSgwLCJ3YXNFeHBsaWNpdGx5T3B0ZWRP +dXQiLHMpCnM9ci5yCmlmKHMhPW51bGwpcS5ZNSgwLCJtaWdyYXRpb25TdGF0dXMiLHMuYSkKcz1yLngK +aWYocyE9bnVsbClxLlk1KDAsIm1pZ3JhdGlvblN0YXR1c0NhbkJlQ2hhbmdlZCIscykKcmV0dXJuIHF9 +LApnTDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJ9fQpMLkQ4LnByb3RvdHlwZT17fQpMLk85LnByb3Rv +dHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYn19CkwuR2IucHJvdG90eXBlPXsKdzpmdW5j +dGlvbihhKXtyZXR1cm4gdGhpcy5ifX0KUi5MTC5wcm90b3R5cGU9ewpMdDpmdW5jdGlvbigpe3JldHVy +biBQLkVGKFsibm9kZUlkIix0aGlzLmIsImtpbmQiLHRoaXMuYS5hXSx0LlgsdC5fKX19ClIuTUQucHJv +dG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHQuZkUuYShhKS5hPT09dGhpcy5hLnEoMCwia2lu +ZCIpfSwKJFM6NTB9ClIuSDcucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ifX0K +TS5sSS5wcm90b3R5cGU9ewpXTzpmdW5jdGlvbihhLGIpe3ZhciBzLHIscT10LmQ0Ck0uWUYoImFic29s +dXRlIixILlZNKFtiLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxxKSkKcz10aGlzLmEKcz1z +LllyKGIpPjAmJiFzLmhLKGIpCmlmKHMpcmV0dXJuIGIKcz1ELmFiKCkKcj1ILlZNKFtzLGIsbnVsbCxu +dWxsLG51bGwsbnVsbCxudWxsLG51bGxdLHEpCk0uWUYoImpvaW4iLHIpCnJldHVybiB0aGlzLklQKG5l +dyBILnU2KHIsdC5lSikpfSwKemY6ZnVuY3Rpb24oYSl7dmFyIHMscixxPVguQ0woYSx0aGlzLmEpCnEu +SXgoKQpzPXEuZApyPXMubGVuZ3RoCmlmKHI9PT0wKXtzPXEuYgpyZXR1cm4gcz09bnVsbD8iLiI6c31p +ZihyPT09MSl7cz1xLmIKcmV0dXJuIHM9PW51bGw/Ii4iOnN9aWYoMD49cilyZXR1cm4gSC5PSChzLC0x +KQpzLnBvcCgpCnM9cS5lCmlmKDA+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkKcS5J +eCgpCnJldHVybiBxLncoMCl9LApJUDpmdW5jdGlvbihhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssagp0 +LlEuYShhKQpmb3Iocz1hLiR0aSxyPXMuQygiYTIoY1guRSkiKS5hKG5ldyBNLnE3KCkpLHE9YS5nbShh +KSxzPW5ldyBILlNPKHEscixzLkMoIlNPPGNYLkU+IikpLHI9dGhpcy5hLHA9ITEsbz0hMSxuPSIiO3Mu +RigpOyl7bT1xLmdsKCkKaWYoci5oSyhtKSYmbyl7bD1YLkNMKG0scikKaz1uLmNoYXJDb2RlQXQoMCk9 +PTA/bjpuCm49Qy54Qi5OaihrLDAsci5TcChrLCEwKSkKbC5iPW4KaWYoci5kcyhuKSlDLk5tLlk1KGwu +ZSwwLHIuZ21JKCkpCm49bC53KDApfWVsc2UgaWYoci5ZcihtKT4wKXtvPSFyLmhLKG0pCm49SC5Faiht +KX1lbHNle2o9bS5sZW5ndGgKaWYoaiE9PTApe2lmKDA+PWopcmV0dXJuIEguT0gobSwwKQpqPXIuVWQo +bVswXSl9ZWxzZSBqPSExCmlmKCFqKWlmKHApbis9ci5nbUkoKQpuKz1tfXA9ci5kcyhtKX1yZXR1cm4g +bi5jaGFyQ29kZUF0KDApPT0wP246bn0sCm81OmZ1bmN0aW9uKGEpe3ZhciBzCmlmKCF0aGlzLnkzKGEp +KXJldHVybiBhCnM9WC5DTChhLHRoaXMuYSkKcy5yUigpCnJldHVybiBzLncoMCl9LAp5MzpmdW5jdGlv +bihhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssagphLnRvU3RyaW5nCnM9dGhpcy5hCnI9cy5ZcihhKQpp +ZihyIT09MCl7aWYocz09PSQuS2soKSlmb3IocT0wO3E8cjsrK3EpaWYoQy54Qi5XKGEscSk9PT00Nyly +ZXR1cm4hMApwPXIKbz00N31lbHNle3A9MApvPW51bGx9Zm9yKG49bmV3IEgucWooYSkuYSxtPW4ubGVu +Z3RoLHE9cCxsPW51bGw7cTxtOysrcSxsPW8sbz1rKXtrPUMueEIuTyhuLHEpCmlmKHMucjQoaykpe2lm +KHM9PT0kLktrKCkmJms9PT00NylyZXR1cm4hMAppZihvIT1udWxsJiZzLnI0KG8pKXJldHVybiEwCmlm +KG89PT00NilqPWw9PW51bGx8fGw9PT00Nnx8cy5yNChsKQplbHNlIGo9ITEKaWYoailyZXR1cm4hMH19 +aWYobz09bnVsbClyZXR1cm4hMAppZihzLnI0KG8pKXJldHVybiEwCmlmKG89PT00NilzPWw9PW51bGx8 +fHMucjQobCl8fGw9PT00NgplbHNlIHM9ITEKaWYocylyZXR1cm4hMApyZXR1cm4hMX0sCkhQOmZ1bmN0 +aW9uKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbD10aGlzLGs9J1VuYWJsZSB0byBmaW5kIGEgcGF0aCB0 +byAiJwpiPWwuV08oMCxiKQpzPWwuYQppZihzLllyKGIpPD0wJiZzLllyKGEpPjApcmV0dXJuIGwubzUo +YSkKaWYocy5ZcihhKTw9MHx8cy5oSyhhKSlhPWwuV08oMCxhKQppZihzLllyKGEpPD0wJiZzLllyKGIp +PjApdGhyb3cgSC5iKFguSTcoaytILkVqKGEpKyciIGZyb20gIicrSC5FaihiKSsnIi4nKSkKcj1YLkNM +KGIscykKci5yUigpCnE9WC5DTChhLHMpCnEuclIoKQpwPXIuZApvPXAubGVuZ3RoCmlmKG8hPT0wKXtp +ZigwPj1vKXJldHVybiBILk9IKHAsMCkKcD1KLlJNKHBbMF0sIi4iKX1lbHNlIHA9ITEKaWYocClyZXR1 +cm4gcS53KDApCnA9ci5iCm89cS5iCmlmKHAhPW8pcD1wPT1udWxsfHxvPT1udWxsfHwhcy5OYyhwLG8p +CmVsc2UgcD0hMQppZihwKXJldHVybiBxLncoMCkKd2hpbGUoITApe3A9ci5kCm89cC5sZW5ndGgKaWYo +byE9PTApe249cS5kCm09bi5sZW5ndGgKaWYobSE9PTApe2lmKDA+PW8pcmV0dXJuIEguT0gocCwwKQpw +PXBbMF0KaWYoMD49bSlyZXR1cm4gSC5PSChuLDApCm49cy5OYyhwLG5bMF0pCnA9bn1lbHNlIHA9ITF9 +ZWxzZSBwPSExCmlmKCFwKWJyZWFrCkMuTm0uVzQoci5kLDApCkMuTm0uVzQoci5lLDEpCkMuTm0uVzQo +cS5kLDApCkMuTm0uVzQocS5lLDEpfXA9ci5kCm89cC5sZW5ndGgKaWYobyE9PTApe2lmKDA+PW8pcmV0 +dXJuIEguT0gocCwwKQpwPUouUk0ocFswXSwiLi4iKX1lbHNlIHA9ITEKaWYocCl0aHJvdyBILmIoWC5J +NyhrK0guRWooYSkrJyIgZnJvbSAiJytILkVqKGIpKyciLicpKQpwPXQuTgpDLk5tLlVHKHEuZCwwLFAu +Tzgoci5kLmxlbmd0aCwiLi4iLCExLHApKQpDLk5tLlk1KHEuZSwwLCIiKQpDLk5tLlVHKHEuZSwxLFAu +Tzgoci5kLmxlbmd0aCxzLmdtSSgpLCExLHApKQpzPXEuZApwPXMubGVuZ3RoCmlmKHA9PT0wKXJldHVy +biIuIgppZihwPjEmJkouUk0oQy5ObS5ncloocyksIi4iKSl7cz1xLmQKaWYoMD49cy5sZW5ndGgpcmV0 +dXJuIEguT0gocywtMSkKcy5wb3AoKQpzPXEuZQppZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLC0x +KQpzLnBvcCgpCmlmKDA+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkKQy5ObS5pKHMs +IiIpfXEuYj0iIgpxLkl4KCkKcmV0dXJuIHEudygwKX19Ck0ucTcucHJvdG90eXBlPXsKJDE6ZnVuY3Rp +b24oYSl7cmV0dXJuIEguaChhKSE9PSIifSwKJFM6N30KTS5Oby5wcm90b3R5cGU9ewokMTpmdW5jdGlv +bihhKXtILmsoYSkKcmV0dXJuIGE9PW51bGw/Im51bGwiOiciJythKyciJ30sCiRTOjUxfQpCLmZ2LnBy +b3RvdHlwZT17CnhaOmZ1bmN0aW9uKGEpe3ZhciBzLHI9dGhpcy5ZcihhKQppZihyPjApcmV0dXJuIEou +bGQoYSwwLHIpCmlmKHRoaXMuaEsoYSkpe2lmKDA+PWEubGVuZ3RoKXJldHVybiBILk9IKGEsMCkKcz1h +WzBdfWVsc2Ugcz1udWxsCnJldHVybiBzfSwKTmM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09Yn19Clgu +V0QucHJvdG90eXBlPXsKSXg6ZnVuY3Rpb24oKXt2YXIgcyxyLHE9dGhpcwp3aGlsZSghMCl7cz1xLmQK +aWYoIShzLmxlbmd0aCE9PTAmJkouUk0oQy5ObS5ncloocyksIiIpKSlicmVhawpzPXEuZAppZigwPj1z +Lmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCnM9cS5lCmlmKDA+PXMubGVuZ3RoKXJldHVy +biBILk9IKHMsLTEpCnMucG9wKCl9cz1xLmUKcj1zLmxlbmd0aAppZihyIT09MClDLk5tLlk1KHMsci0x +LCIiKX0sCnJSOmZ1bmN0aW9uKCl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxsPUguVk0oW10sdC5zKQpm +b3Iocz1tLmQscj1zLmxlbmd0aCxxPTAscD0wO3A8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxILmxr +KShzKSwrK3Ape289c1twXQpuPUouaWEobykKaWYoIShuLkROKG8sIi4iKXx8bi5ETihvLCIiKSkpaWYo +bi5ETihvLCIuLiIpKXtuPWwubGVuZ3RoCmlmKG4hPT0wKXtpZigwPj1uKXJldHVybiBILk9IKGwsLTEp +CmwucG9wKCl9ZWxzZSArK3F9ZWxzZSBDLk5tLmkobCxvKX1pZihtLmI9PW51bGwpQy5ObS5VRyhsLDAs +UC5POChxLCIuLiIsITEsdC5OKSkKaWYobC5sZW5ndGg9PT0wJiZtLmI9PW51bGwpQy5ObS5pKGwsIi4i +KQptLnNuSihsKQpzPW0uYQptLnNQaChQLk84KGwubGVuZ3RoKzEscy5nbUkoKSwhMCx0Lk4pKQpyPW0u +YgppZihyPT1udWxsfHxsLmxlbmd0aD09PTB8fCFzLmRzKHIpKUMuTm0uWTUobS5lLDAsIiIpCnI9bS5i +CmlmKHIhPW51bGwmJnM9PT0kLktrKCkpe3IudG9TdHJpbmcKbS5iPUgueXMociwiLyIsIlxcIil9bS5J +eCgpfSwKdzpmdW5jdGlvbihhKXt2YXIgcyxyLHE9dGhpcyxwPXEuYgpwPXAhPW51bGw/cDoiIgpmb3Io +cz0wO3M8cS5kLmxlbmd0aDsrK3Mpe3I9cS5lCmlmKHM+PXIubGVuZ3RoKXJldHVybiBILk9IKHIscykK +cj1wK0guRWoocltzXSkKcD1xLmQKaWYocz49cC5sZW5ndGgpcmV0dXJuIEguT0gocCxzKQpwPXIrSC5F +aihwW3NdKX1wKz1ILkVqKEMuTm0uZ3JaKHEuZSkpCnJldHVybiBwLmNoYXJDb2RlQXQoMCk9PTA/cDpw +fSwKc25KOmZ1bmN0aW9uKGEpe3RoaXMuZD10LkQuYShhKX0sCnNQaDpmdW5jdGlvbihhKXt0aGlzLmU9 +dC5ELmEoYSl9fQpYLmR2LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlBhdGhFeGNlcHRp +b246ICIrdGhpcy5hfSwKJGlSejoxfQpPLnpMLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJu +IHRoaXMuZ29jKHRoaXMpfX0KRS5PRi5wcm90b3R5cGU9ewpVZDpmdW5jdGlvbihhKXtyZXR1cm4gQy54 +Qi50ZyhhLCIvIil9LApyNDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PTQ3fSwKZHM6ZnVuY3Rpb24oYSl7 +dmFyIHM9YS5sZW5ndGgKcmV0dXJuIHMhPT0wJiZDLnhCLk8oYSxzLTEpIT09NDd9LApTcDpmdW5jdGlv +bihhLGIpe2lmKGEubGVuZ3RoIT09MCYmQy54Qi5XKGEsMCk9PT00NylyZXR1cm4gMQpyZXR1cm4gMH0s +CllyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLlNwKGEsITEpfSwKaEs6ZnVuY3Rpb24oYSl7cmV0dXJu +ITF9LApnb2M6ZnVuY3Rpb24oKXtyZXR1cm4icG9zaXgifSwKZ21JOmZ1bmN0aW9uKCl7cmV0dXJuIi8i +fX0KRi5ydS5wcm90b3R5cGU9ewpVZDpmdW5jdGlvbihhKXtyZXR1cm4gQy54Qi50ZyhhLCIvIil9LApy +NDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PTQ3fSwKZHM6ZnVuY3Rpb24oYSl7dmFyIHM9YS5sZW5ndGgK +aWYocz09PTApcmV0dXJuITEKaWYoQy54Qi5PKGEscy0xKSE9PTQ3KXJldHVybiEwCnJldHVybiBDLnhC +LlRjKGEsIjovLyIpJiZ0aGlzLllyKGEpPT09c30sClNwOmZ1bmN0aW9uKGEsYil7dmFyIHMscixxLHAs +bz1hLmxlbmd0aAppZihvPT09MClyZXR1cm4gMAppZihDLnhCLlcoYSwwKT09PTQ3KXJldHVybiAxCmZv +cihzPTA7czxvOysrcyl7cj1DLnhCLlcoYSxzKQppZihyPT09NDcpcmV0dXJuIDAKaWYocj09PTU4KXtp +ZihzPT09MClyZXR1cm4gMApxPUMueEIuWFUoYSwiLyIsQy54Qi5RaShhLCIvLyIscysxKT9zKzM6cykK +aWYocTw9MClyZXR1cm4gbwppZighYnx8bzxxKzMpcmV0dXJuIHEKaWYoIUMueEIubihhLCJmaWxlOi8v +IikpcmV0dXJuIHEKaWYoIUIuWXUoYSxxKzEpKXJldHVybiBxCnA9cSszCnJldHVybiBvPT09cD9wOnEr +NH19cmV0dXJuIDB9LApZcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5TcChhLCExKX0sCmhLOmZ1bmN0 +aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PTAmJkMueEIuVyhhLDApPT09NDd9LApnb2M6ZnVuY3Rpb24o +KXtyZXR1cm4idXJsIn0sCmdtSTpmdW5jdGlvbigpe3JldHVybiIvIn19CkwuSVYucHJvdG90eXBlPXsK +VWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMueEIudGcoYSwiLyIpfSwKcjQ6ZnVuY3Rpb24oYSl7cmV0dXJu +IGE9PT00N3x8YT09PTkyfSwKZHM6ZnVuY3Rpb24oYSl7dmFyIHM9YS5sZW5ndGgKaWYocz09PTApcmV0 +dXJuITEKcz1DLnhCLk8oYSxzLTEpCnJldHVybiEocz09PTQ3fHxzPT09OTIpfSwKU3A6ZnVuY3Rpb24o +YSxiKXt2YXIgcyxyLHE9YS5sZW5ndGgKaWYocT09PTApcmV0dXJuIDAKcz1DLnhCLlcoYSwwKQppZihz +PT09NDcpcmV0dXJuIDEKaWYocz09PTkyKXtpZihxPDJ8fEMueEIuVyhhLDEpIT09OTIpcmV0dXJuIDEK +cj1DLnhCLlhVKGEsIlxcIiwyKQppZihyPjApe3I9Qy54Qi5YVShhLCJcXCIscisxKQppZihyPjApcmV0 +dXJuIHJ9cmV0dXJuIHF9aWYocTwzKXJldHVybiAwCmlmKCFCLk9TKHMpKXJldHVybiAwCmlmKEMueEIu +VyhhLDEpIT09NTgpcmV0dXJuIDAKcT1DLnhCLlcoYSwyKQppZighKHE9PT00N3x8cT09PTkyKSlyZXR1 +cm4gMApyZXR1cm4gM30sCllyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLlNwKGEsITEpfSwKaEs6ZnVu +Y3Rpb24oYSl7cmV0dXJuIHRoaXMuWXIoYSk9PT0xfSwKT3Q6ZnVuY3Rpb24oYSxiKXt2YXIgcwppZihh +PT09YilyZXR1cm4hMAppZihhPT09NDcpcmV0dXJuIGI9PT05MgppZihhPT09OTIpcmV0dXJuIGI9PT00 +NwppZigoYV5iKSE9PTMyKXJldHVybiExCnM9YXwzMgpyZXR1cm4gcz49OTcmJnM8PTEyMn0sCk5jOmZ1 +bmN0aW9uKGEsYil7dmFyIHMscixxCmlmKGE9PWIpcmV0dXJuITAKcz1hLmxlbmd0aAppZihzIT09Yi5s +ZW5ndGgpcmV0dXJuITEKZm9yKHI9Si5yWShiKSxxPTA7cTxzOysrcSlpZighdGhpcy5PdChDLnhCLlco +YSxxKSxyLlcoYixxKSkpcmV0dXJuITEKcmV0dXJuITB9LApnb2M6ZnVuY3Rpb24oKXtyZXR1cm4id2lu +ZG93cyJ9LApnbUk6ZnVuY3Rpb24oKXtyZXR1cm4iXFwifX07KGZ1bmN0aW9uIGFsaWFzZXMoKXt2YXIg +cz1KLkd2LnByb3RvdHlwZQpzLlU9cy53CnMuU2o9cy5lNwpzPUouTUYucHJvdG90eXBlCnMudD1zLncK +cz1QLmNYLnByb3RvdHlwZQpzLkdHPXMuZXYKcz1QLk1oLnByb3RvdHlwZQpzLnhiPXMudwpzPVcuY3Yu +cHJvdG90eXBlCnMuRFc9cy5yNgpzPVcubTYucHJvdG90eXBlCnMuakY9cy5FYgpzPVAuRTQucHJvdG90 +eXBlCnMuVXI9cy5xCnMuZTQ9cy5ZNQpzPVAuY28ucHJvdG90eXBlCnMuYmg9cy5ZNX0pKCk7KGZ1bmN0 +aW9uIGluc3RhbGxUZWFyT2Zmcygpe3ZhciBzPWh1bmtIZWxwZXJzLl9zdGF0aWNfMSxyPWh1bmtIZWxw +ZXJzLl9zdGF0aWNfMCxxPWh1bmtIZWxwZXJzLmluc3RhbGxJbnN0YW5jZVRlYXJPZmYscD1odW5rSGVs +cGVycy5pbnN0YWxsU3RhdGljVGVhck9mZixvPWh1bmtIZWxwZXJzLl9pbnN0YW5jZV8xdQpzKFAsIkVY +IiwiWlYiLDgpCnMoUCwieXQiLCJvQSIsOCkKcyhQLCJxVyIsIkJ6Iiw4KQpyKFAsIlVJIiwiZU4iLDAp +CnEoUC5QZi5wcm90b3R5cGUsImdZSiIsMCwxLG51bGwsWyIkMiIsIiQxIl0sWyJ3MCIsInBtIl0sMjYs +MCkKcyhQLCJDeSIsIk5DIiw0KQpzKFAsIlBIIiwiTXQiLDUpCnAoVywicFMiLDQsbnVsbCxbIiQ0Il0s +WyJxRCJdLDksMCkKcChXLCJWNCIsNCxudWxsLFsiJDQiXSxbIm5aIl0sOSwwKQpvKFAuQXMucHJvdG90 +eXBlLCJndU0iLCJWIiw1KQpzKFAsImlHIiwid1kiLDU0KQpzKFAsIncwIiwiZFUiLDM2KQpzKEwsImlT +IiwiaTYiLDYpfSkoKTsoZnVuY3Rpb24gaW5oZXJpdGFuY2UoKXt2YXIgcz1odW5rSGVscGVycy5taXhp +bixyPWh1bmtIZWxwZXJzLmluaGVyaXQscT1odW5rSGVscGVycy5pbmhlcml0TWFueQpyKFAuTWgsbnVs +bCkKcShQLk1oLFtILkZLLEouR3YsSi5tMSxQLmNYLEguRTcsUC5YUyxQLm5ZLEguYTcsUC5BbixILkZ1 +LEguSkIsSC5TVSxILlJlLEgud3YsUC5QbixILldVLEguTEksSC5UcCxILmY5LEgudGUsSC5icSxILlhP +LEgua3IsUC5ZayxILnZoLEguTjYsSC5WUixILkVLLEguUGIsSC50USxILlNkLEguSmMsSC5HLEgubFks +UC5XMyxQLmloLFAuRnksUC5HVixQLkN3LFAuUGYsUC5GZSxQLnZzLFAuT00sUC5xaCxQLk1PLFAua1Qs +UC54SSxQLm0wLFAucFIsUC5ibixQLmxtLFAubEQsUC5LUCxQLmxmLFAuV1ksUC5VayxQLlNoLFAuUncs +UC5ieixQLmlQLFAuazUsUC5LWSxQLkNELFAuYUUsUC5OMyxQLmM4LFAuWmQsUC5SbixQLkRuLFAuUEUs +UC5VZixXLmlkLFcuRmssVy5KUSxXLkdtLFcudkQsVy5tNixXLk93LFcuVzksVy5kVyxXLm1rLFcuS28s +UC5pSixQLkU0LFUuZDIsVS5TZSxVLk1sLFUueUQsVS53YixCLmo4LEIucXAsVC5tUSxMLlhBLEwuRDgs +TC5POSxMLkdiLFIuTEwsUi5INyxNLmxJLE8uekwsWC5XRCxYLmR2XSkKcShKLkd2LFtKLnlFLEoud2Us +Si5NRixKLmpkLEoucUksSi5EcixILkVULFcuRDAsVy5BeixXLkxlLFcuTmgsVy5hZSxXLklCLFcubjcs +Vy5lYSxXLmJyLFcuU2csVy53NyxXLks3LFcuWFcsUC5oRl0pCnEoSi5NRixbSi5pQyxKLmtkLEouYzVd +KQpyKEouUG8sSi5qZCkKcShKLnFJLFtKLmJVLEoua0RdKQpxKFAuY1gsW0guQlIsSC5iUSxILmkxLEgu +VTUsSC5BTSxILnU2LEguWFIsUC5tVyxILnVuXSkKcShILkJSLFtILlp5LEguUUNdKQpyKEgub2wsSC5a +eSkKcihILlVxLEguUUMpCnIoSC5qVixILlVxKQpxKFAuWFMsW0gubixILnIzLEguR00sUC5FeixILmF6 +LEgudlYsSC5FcSxQLkM2LEgua1MsUC5VZCxQLkYsUC51LFAubXAsUC51YixQLmRzLFAubGosUC5VVixQ +LmMsTC5RV10pCnIoUC51eSxQLm5ZKQpxKFAudXksW0gudzIsVy53eixXLmU3XSkKcihILnFqLEgudzIp +CnEoSC5iUSxbSC5hTCxILk1CLEguaTVdKQpxKEguYUwsW0gubkgsSC5sSixQLmk4XSkKcihILnh5LEgu +aTEpCnEoUC5BbixbSC5NSCxILlNPLEguVTFdKQpyKEguZDUsSC5BTSkKcihQLlJVLFAuUG4pCnIoUC5H +aixQLlJVKQpyKEguUEQsUC5HaikKcihILkxQLEguV1UpCnEoSC5UcCxbSC5DaixILmxjLEguZEMsSC53 +TixILlZYLFAudGgsUC5oYSxQLlZzLFAuRnQsUC55SCxQLldNLFAuU1gsUC5HcyxQLmRhLFAub1EsUC5w +VixQLlU3LFAudnIsUC5ydCxQLktGLFAuWkwsUC5SVCxQLmpaLFAucnEsUC5SVyxQLkI1LFAudU8sUC5w +SyxQLlZwLFAuT1IsUC5yYSxQLnlRLFAueHIsUC5OeixQLnRpLFAuV0YsUC5uMSxQLmNTLFAuVkMsUC5K +VCxQLlJaLFAuTUUsUC55NSxQLnlJLFAuYzYsUC5xZCxXLkN2LFcuS1MsVy5BMyxXLnZOLFcuVXYsVy5F +ZyxXLkVvLFcuV2ssVy5JQSxXLmZtLFAuamcsUC5UYSxQLkdFLFAuTjcsUC51USxQLlBDLFAubXQsUC5R +UyxQLm5wLFAuVXQsVS5hTixVLmIwLEwuZSxMLlZXLEwub1osTC5qcixMLnFsLEwuSGksTC5CVCxMLlBZ +LEwudTgsTC5MLEwuV3gsTC5BTyxMLmROLEwuSG8sTC54eixMLklDLEwuZkMsTC5UbSxMLm5ULEwuTlks +TC51ZSxMLmVYLEwuRUUsTC5RTCxMLlZTLEwuVEQsTC5JZixMLnRCLEwubTIsUi5NRCxNLnE3LE0uTm9d +KQpyKEguVzAsUC5FeikKcShILmxjLFtILnp4LEguclRdKQpyKEgua1ksUC5DNikKcihQLmlsLFAuWWsp +CnEoUC5pbCxbSC5ONSxQLnV3LFcuY2YsVy5TeV0pCnEoUC5tVyxbSC5LVyxQLnE0XSkKcihILkxaLEgu +RVQpCnEoSC5MWixbSC5SRyxILldCXSkKcihILlZQLEguUkcpCnIoSC5EZyxILlZQKQpyKEguWkcsSC5X +QikKcihILlBnLEguWkcpCnEoSC5QZyxbSC54aixILmRFLEguWkEsSC5kVCxILlBxLEguZUUsSC5WNl0p +CnIoSC5pTSxILmtTKQpyKFAuWmYsUC5QZikKcihQLkppLFAubTApCnIoUC5YdixQLnBSKQpyKFAuYjYs +UC5YdikKcihQLlZqLFAuV1kpCnEoUC5VayxbUC5DVixQLlppLFAuYnldKQpyKFAud0ksUC5rVCkKcShQ +LndJLFtQLlU4LFAub2osUC5NeCxQLkUzLFAuR1ldKQpyKFAuSzgsUC5VZCkKcihQLnR1LFAuU2gpCnIo +UC51NSxQLlppKQpxKFAudSxbUC5iSixQLmVZXSkKcihQLnFlLFAuRG4pCnEoVy5EMCxbVy51SCxXLndh +LFcuSzUsVy5DbV0pCnEoVy51SCxbVy5jdixXLm54LFcuUUYsVy5DUV0pCnEoVy5jdixbVy5xRSxQLmhp +XSkKcShXLnFFLFtXLkdoLFcuZlksVy5uQixXLlFQLFcuaDQsVy5TTixXLmxwLFcuVGIsVy5JdixXLldQ +LFcueVldKQpyKFcub0osVy5MZSkKcihXLmhILFcuQXopCnIoVy5WYixXLlFGKQpyKFcuZkosVy53YSkK +cShXLmVhLFtXLnc2LFcuZXddKQpyKFcuQWosVy53NikKcihXLnJCLFcuSzcpCnIoVy5CSCxXLnJCKQpy +KFcudzQsVy5JQikKcihXLm9hLFcuWFcpCnIoVy5yaCxXLm9hKQpyKFcuaTcsVy5jZikKcihQLkFzLFAu +VmopCnEoUC5BcyxbVy5JNCxQLktlXSkKcihXLlJPLFAucWgpCnIoVy5ldSxXLlJPKQpyKFcueEMsUC5N +TykKcihXLmN0LFcubTYpCnIoUC5CZixQLmlKKQpxKFAuRTQsW1AucjcsUC5jb10pCnIoUC5UeixQLmNv +KQpyKFAubmQsUC5oaSkKcShMLkQ4LFtMLnZ0LEwuY0RdKQpyKEIuZnYsTy56TCkKcShCLmZ2LFtFLk9G +LEYucnUsTC5JVl0pCnMoSC53MixILlJlKQpzKEguUUMsUC5sRCkKcyhILlJHLFAubEQpCnMoSC5WUCxI +LlNVKQpzKEguV0IsUC5sRCkKcyhILlpHLEguU1UpCnMoUC5uWSxQLmxEKQpzKFAuV1ksUC5sZikKcyhQ +LlJVLFAuS1ApCnMoUC5wUixQLmxmKQpzKFcuTGUsVy5pZCkKcyhXLks3LFAubEQpCnMoVy5yQixXLkdt +KQpzKFcuWFcsUC5sRCkKcyhXLm9hLFcuR20pCnMoUC5jbyxQLmxEKX0pKCkKdmFyIHY9e3R5cGVVbml2 +ZXJzZTp7ZUM6bmV3IE1hcCgpLHRSOnt9LGVUOnt9LHRQVjp7fSxzRUE6W119LG1hbmdsZWRHbG9iYWxO +YW1lczp7SWo6ImludCIsQ1A6ImRvdWJsZSIsWlo6Im51bSIscVU6IlN0cmluZyIsYTI6ImJvb2wiLGM4 +OiJOdWxsIix6TToiTGlzdCJ9LG1hbmdsZWROYW1lczp7fSxnZXRUeXBlRnJvbU5hbWU6Z2V0R2xvYmFs +RnJvbU5hbWUsbWV0YWRhdGE6W10sdHlwZXM6WyJ+KCkiLCJjOChBaiopIiwiYzgoKSIsImM4KGN2Kiki +LCJAKEApIiwicVUocVUpIiwifihBaiopIiwiYTIocVUpIiwifih+KCkpIiwiYTIoY3YscVUscVUsSlEp +IiwiYzgoQCkiLCJ+KE1oPyxNaD8pIiwiQCgpIiwifihxVSxAKSIsIn4objYscVUsSWopIiwifihxVSxx +VSkiLCJhMihrRikiLCJjOChALEApIiwifih4dTxxVT4pIiwiYzgoZWEqKSIsImI4PGM4PiooQWoqKSIs +In4ocVUsSWopIiwifihxVSxxVT8pIiwibjYoQCxAKSIsIn4oSWosQCkiLCJhMih1SCkiLCJ+KE1oW0d6 +P10pIiwifihlYSkiLCJjOChNaCxHeikiLCJ2czxAPihAKSIsIn4odUgsdUg/KSIsIn4oQCxAKSIsIkAo +cVUpIiwiYTIoeHU8cVU+KSIsIkAoQCxxVSkiLCJyNyhAKSIsIk1oPyhAKSIsIkU0KEApIiwiTEwqKEAp +IiwiWjA8cVUqLE1oKj4qKExMKikiLCJ+KEdELEApIiwiWjA8cVUscVU+KFowPHFVLHFVPixxVSkiLCJj +OChaMDxxVSosTWgqPiopIiwifihAKSIsInFVKihBaiopIiwifihxVVtAXSkiLCJUejxAPihAKSIsImM4 +KGV3KikiLCJxVSoocVUqKSIsInFVKihaMDxALEA+KikiLCJhMiooSDcqKSIsInFVKHFVPykiLCJJaihJ +aixJaikiLCJjOCh+KCkpIiwiTWg/KE1oPykiLCJjOChALEd6KSJdLGludGVyY2VwdG9yc0J5VGFnOm51 +bGwsbGVhZlRhZ3M6bnVsbCxhcnJheVJ0aTp0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2Yg +U3ltYm9sKCk9PSJzeW1ib2wiP1N5bWJvbCgiJHRpIik6IiR0aSJ9CkgueGIodi50eXBlVW5pdmVyc2Us +SlNPTi5wYXJzZSgneyJpQyI6Ik1GIiwia2QiOiJNRiIsImM1IjoiTUYiLCJyeCI6ImVhIiwiZTUiOiJl +YSIsIlkwIjoiaGkiLCJ0cCI6ImhpIiwiRzgiOiJldyIsIk1yIjoicUUiLCJlTCI6InFFIiwiSTAiOiJ1 +SCIsImhzIjoidUgiLCJYZyI6IlFGIiwibnIiOiJBaiIsInk0IjoidzYiLCJhUCI6IkNtIiwieGMiOiJu +eCIsImtKIjoibngiLCJ6VSI6IkRnIiwiZGYiOiJFVCIsInlFIjp7ImEyIjpbXX0sIndlIjp7ImM4Ijpb +XX0sIk1GIjp7InZtIjpbXSwiRUgiOltdfSwiamQiOnsiek0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpb +IjEiXX0sIlBvIjp7ImpkIjpbIjEiXSwiek0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXX0sIm0x +Ijp7IkFuIjpbIjEiXX0sInFJIjp7IkNQIjpbXSwiWloiOltdfSwiYlUiOnsiQ1AiOltdLCJJaiI6W10s +IlpaIjpbXX0sImtEIjp7IkNQIjpbXSwiWloiOltdfSwiRHIiOnsicVUiOltdLCJ2WCI6W119LCJCUiI6 +eyJjWCI6WyIyIl19LCJFNyI6eyJBbiI6WyIyIl19LCJaeSI6eyJCUiI6WyIxIiwiMiJdLCJjWCI6WyIy +Il0sImNYLkUiOiIyIn0sIm9sIjp7Ilp5IjpbIjEiLCIyIl0sIkJSIjpbIjEiLCIyIl0sImJRIjpbIjIi +XSwiY1giOlsiMiJdLCJjWC5FIjoiMiJ9LCJVcSI6eyJsRCI6WyIyIl0sInpNIjpbIjIiXSwiQlIiOlsi +MSIsIjIiXSwiYlEiOlsiMiJdLCJjWCI6WyIyIl19LCJqViI6eyJVcSI6WyIxIiwiMiJdLCJsRCI6WyIy +Il0sInpNIjpbIjIiXSwiQlIiOlsiMSIsIjIiXSwiYlEiOlsiMiJdLCJjWCI6WyIyIl0sImxELkUiOiIy +IiwiY1guRSI6IjIifSwibiI6eyJYUyI6W119LCJyMyI6eyJYUyI6W119LCJxaiI6eyJsRCI6WyJJaiJd +LCJSZSI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJiUSI6WyJJaiJdLCJjWCI6WyJJaiJdLCJsRC5FIjoiSWoi +LCJSZS5FIjoiSWoifSwiR00iOnsiWFMiOltdfSwiYlEiOnsiY1giOlsiMSJdfSwiYUwiOnsiYlEiOlsi +MSJdLCJjWCI6WyIxIl19LCJuSCI6eyJhTCI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdLCJhTC5F +IjoiMSIsImNYLkUiOiIxIn0sImE3Ijp7IkFuIjpbIjEiXX0sImkxIjp7ImNYIjpbIjIiXSwiY1guRSI6 +IjIifSwieHkiOnsiaTEiOlsiMSIsIjIiXSwiYlEiOlsiMiJdLCJjWCI6WyIyIl0sImNYLkUiOiIyIn0s +Ik1IIjp7IkFuIjpbIjIiXX0sImxKIjp7ImFMIjpbIjIiXSwiYlEiOlsiMiJdLCJjWCI6WyIyIl0sImFM +LkUiOiIyIiwiY1guRSI6IjIifSwiVTUiOnsiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJTTyI6eyJBbiI6 +WyIxIl19LCJBTSI6eyJjWCI6WyIxIl0sImNYLkUiOiIxIn0sImQ1Ijp7IkFNIjpbIjEiXSwiYlEiOlsi +MSJdLCJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIlUxIjp7IkFuIjpbIjEiXX0sIk1CIjp7ImJRIjpbIjEi +XSwiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJGdSI6eyJBbiI6WyIxIl19LCJ1NiI6eyJjWCI6WyIxIl0s +ImNYLkUiOiIxIn0sIkpCIjp7IkFuIjpbIjEiXX0sIncyIjp7ImxEIjpbIjEiXSwiUmUiOlsiMSJdLCJ6 +TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwid3YiOnsiR0QiOltdfSwiUEQiOnsiR2oiOlsi +MSIsIjIiXSwiUlUiOlsiMSIsIjIiXSwiUG4iOlsiMSIsIjIiXSwiS1AiOlsiMSIsIjIiXSwiWjAiOlsi +MSIsIjIiXX0sIldVIjp7IlowIjpbIjEiLCIyIl19LCJMUCI6eyJXVSI6WyIxIiwiMiJdLCJaMCI6WyIx +IiwiMiJdfSwiWFIiOnsiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJMSSI6eyJ2USI6W119LCJXMCI6eyJY +UyI6W119LCJheiI6eyJYUyI6W119LCJ2ViI6eyJYUyI6W119LCJ0ZSI6eyJSeiI6W119LCJYTyI6eyJH +eiI6W119LCJUcCI6eyJFSCI6W119LCJsYyI6eyJFSCI6W119LCJ6eCI6eyJFSCI6W119LCJyVCI6eyJF +SCI6W119LCJFcSI6eyJYUyI6W119LCJrWSI6eyJYUyI6W119LCJONSI6eyJZayI6WyIxIiwiMiJdLCJG +byI6WyIxIiwiMiJdLCJaMCI6WyIxIiwiMiJdLCJZay5LIjoiMSIsIllrLlYiOiIyIn0sImk1Ijp7ImJR +IjpbIjEiXSwiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJONiI6eyJBbiI6WyIxIl19LCJWUiI6eyJ3TCI6 +W10sInZYIjpbXX0sIkVLIjp7ImliIjpbXSwiT2QiOltdfSwiS1ciOnsiY1giOlsiaWIiXSwiY1guRSI6 +ImliIn0sIlBiIjp7IkFuIjpbImliIl19LCJ0USI6eyJPZCI6W119LCJ1biI6eyJjWCI6WyJPZCJdLCJj +WC5FIjoiT2QifSwiU2QiOnsiQW4iOlsiT2QiXX0sIkVUIjp7IkFTIjpbXX0sIkxaIjp7IlhqIjpbIjEi +XSwiRVQiOltdLCJBUyI6W119LCJEZyI6eyJsRCI6WyJDUCJdLCJYaiI6WyJDUCJdLCJ6TSI6WyJDUCJd +LCJFVCI6W10sImJRIjpbIkNQIl0sIkFTIjpbXSwiY1giOlsiQ1AiXSwiU1UiOlsiQ1AiXSwibEQuRSI6 +IkNQIn0sIlBnIjp7ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwiYlEi +OlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdfSwieGoiOnsibEQiOlsiSWoiXSwi WGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklq -Il0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJrUyI6eyJYUyI6W119LCJpTSI6eyJYUyI6W119LCJH -ViI6eyJBbiI6WyIxIl19LCJxNCI6eyJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIkN3Ijp7IlhTIjpbXX0s -IlpmIjp7IlBmIjpbIjEiXX0sInZzIjp7ImI4IjpbIjEiXX0sIm0wIjp7IlFtIjpbXX0sIkppIjp7Im0w -IjpbXSwiUW0iOltdfSwiYjYiOnsibGYiOlsiMSJdLCJ4dSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsi -MSJdLCJsZi5FIjoiMSJ9LCJsbSI6eyJBbiI6WyIxIl19LCJtVyI6eyJjWCI6WyIxIl19LCJ1eSI6eyJs -RCI6WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJpbCI6eyJZayI6WyIxIiwi -MiJdLCJaMCI6WyIxIiwiMiJdfSwiWWsiOnsiWjAiOlsiMSIsIjIiXX0sIlBuIjp7IlowIjpbIjEiLCIy -Il19LCJHaiI6eyJSVSI6WyIxIiwiMiJdLCJQbiI6WyIxIiwiMiJdLCJLUCI6WyIxIiwiMiJdLCJaMCI6 -WyIxIiwiMiJdfSwiVmoiOnsibGYiOlsiMSJdLCJ4dSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJd -fSwiWHYiOnsibGYiOlsiMSJdLCJ4dSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwidXciOnsi -WWsiOlsicVUiLCJAIl0sIlowIjpbInFVIiwiQCJdLCJZay5LIjoicVUiLCJZay5WIjoiQCJ9LCJpOCI6 -eyJhTCI6WyJxVSJdLCJiUSI6WyJxVSJdLCJjWCI6WyJxVSJdLCJhTC5FIjoicVUiLCJjWC5FIjoicVUi -fSwiQ1YiOnsiVWsiOlsiek08SWo+IiwicVUiXSwiVWsuUyI6InpNPElqPiJ9LCJVOCI6eyJ3SSI6WyJ6 -TTxJaj4iLCJxVSJdfSwiWmkiOnsiVWsiOlsicVUiLCJ6TTxJaj4iXX0sIlVkIjp7IlhTIjpbXX0sIks4 -Ijp7IlhTIjpbXX0sImJ5Ijp7IlVrIjpbIk1oPyIsInFVIl0sIlVrLlMiOiJNaD8ifSwib2oiOnsid0ki -OlsiTWg/IiwicVUiXX0sIk14Ijp7IndJIjpbInFVIiwiTWg/Il19LCJ1NSI6eyJVayI6WyJxVSIsInpN -PElqPiJdLCJVay5TIjoicVUifSwiRTMiOnsid0kiOlsicVUiLCJ6TTxJaj4iXX0sIkdZIjp7IndJIjpb -InpNPElqPiIsInFVIl19LCJDUCI6eyJaWiI6W119LCJJaiI6eyJaWiI6W119LCJ6TSI6eyJiUSI6WyIx -Il0sImNYIjpbIjEiXX0sImliIjp7Ik9kIjpbXX0sInh1Ijp7ImJRIjpbIjEiXSwiY1giOlsiMSJdfSwi -cVUiOnsidlgiOltdfSwiQzYiOnsiWFMiOltdfSwiRXoiOnsiWFMiOltdfSwiRiI6eyJYUyI6W119LCJ1 -Ijp7IlhTIjpbXX0sImJKIjp7IlhTIjpbXX0sImVZIjp7IlhTIjpbXX0sIm1wIjp7IlhTIjpbXX0sInVi -Ijp7IlhTIjpbXX0sImRzIjp7IlhTIjpbXX0sImxqIjp7IlhTIjpbXX0sIlVWIjp7IlhTIjpbXX0sIms1 -Ijp7IlhTIjpbXX0sIktZIjp7IlhTIjpbXX0sImMiOnsiWFMiOltdfSwiQ0QiOnsiUnoiOltdfSwiYUUi -OnsiUnoiOltdfSwiWmQiOnsiR3oiOltdfSwiUm4iOnsiQkwiOltdfSwiRG4iOnsiaUQiOltdfSwiVWYi -OnsiaUQiOltdfSwicWUiOnsiaUQiOltdfSwicUUiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIkdo -Ijp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119LCJmWSI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwi -bkIiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIlFQIjp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119 -LCJueCI6eyJ1SCI6W10sIkQwIjpbXX0sIlFGIjp7InVIIjpbXSwiRDAiOltdfSwiSUIiOnsidG4iOlsi -WloiXX0sInd6Ijp7ImxEIjpbIjEiXSwiek0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXSwibEQu -RSI6IjEifSwiY3YiOnsidUgiOltdLCJEMCI6W119LCJoSCI6eyJBeiI6W119LCJoNCI6eyJjdiI6W10s -InVIIjpbXSwiRDAiOltdfSwiVmIiOnsidUgiOltdLCJEMCI6W119LCJmSiI6eyJEMCI6W119LCJ3YSI6 -eyJEMCI6W119LCJBaiI6eyJlYSI6W119LCJlNyI6eyJsRCI6WyJ1SCJdLCJ6TSI6WyJ1SCJdLCJiUSI6 -WyJ1SCJdLCJjWCI6WyJ1SCJdLCJsRC5FIjoidUgifSwidUgiOnsiRDAiOltdfSwiQkgiOnsibEQiOlsi -dUgiXSwiR20iOlsidUgiXSwiek0iOlsidUgiXSwiWGoiOlsidUgiXSwiYlEiOlsidUgiXSwiY1giOlsi -dUgiXSwibEQuRSI6InVIIiwiR20uRSI6InVIIn0sIlNOIjp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119 -LCJldyI6eyJlYSI6W119LCJscCI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwiVGIiOnsiY3YiOltd -LCJ1SCI6W10sIkQwIjpbXX0sIkl2Ijp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119LCJXUCI6eyJjdiI6 -W10sInVIIjpbXSwiRDAiOltdfSwieVkiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sInc2Ijp7ImVh -IjpbXX0sIks1Ijp7InY2IjpbXSwiRDAiOltdfSwiQ20iOnsiRDAiOltdfSwiQ1EiOnsidUgiOltdLCJE -MCI6W119LCJ3NCI6eyJ0biI6WyJaWiJdfSwicmgiOnsibEQiOlsidUgiXSwiR20iOlsidUgiXSwiek0i -OlsidUgiXSwiWGoiOlsidUgiXSwiYlEiOlsidUgiXSwiY1giOlsidUgiXSwibEQuRSI6InVIIiwiR20u -RSI6InVIIn0sImNmIjp7IllrIjpbInFVIiwicVUiXSwiWjAiOlsicVUiLCJxVSJdfSwiaTciOnsiWWsi -OlsicVUiLCJxVSJdLCJaMCI6WyJxVSIsInFVIl0sIllrLksiOiJxVSIsIllrLlYiOiJxVSJ9LCJTeSI6 -eyJZayI6WyJxVSIsInFVIl0sIlowIjpbInFVIiwicVUiXSwiWWsuSyI6InFVIiwiWWsuViI6InFVIn0s -Ikk0Ijp7ImxmIjpbInFVIl0sInh1IjpbInFVIl0sImJRIjpbInFVIl0sImNYIjpbInFVIl0sImxmLkUi -OiJxVSJ9LCJSTyI6eyJxaCI6WyIxIl19LCJldSI6eyJSTyI6WyIxIl0sInFoIjpbIjEiXX0sInhDIjp7 -Ik1PIjpbIjEiXX0sIkpRIjp7ImtGIjpbXX0sInZEIjp7ImtGIjpbXX0sIm02Ijp7ImtGIjpbXX0sImN0 -Ijp7ImtGIjpbXX0sIk93Ijp7ImtGIjpbXX0sIlc5Ijp7IkFuIjpbIjEiXX0sImRXIjp7InY2IjpbXSwi -RDAiOltdfSwibWsiOnsieTAiOltdfSwiS28iOnsib24iOltdfSwiQXMiOnsibGYiOlsicVUiXSwieHUi -OlsicVUiXSwiYlEiOlsicVUiXSwiY1giOlsicVUiXX0sInI3Ijp7IkU0IjpbXX0sIlR6Ijp7ImxEIjpb -IjEiXSwiek0iOlsiMSJdLCJiUSI6WyIxIl0sIkU0IjpbXSwiY1giOlsiMSJdLCJsRC5FIjoiMSJ9LCJu -ZCI6eyJoaSI6W10sImN2IjpbXSwidUgiOltdLCJEMCI6W119LCJLZSI6eyJsZiI6WyJxVSJdLCJ4dSI6 -WyJxVSJdLCJiUSI6WyJxVSJdLCJjWCI6WyJxVSJdLCJsZi5FIjoicVUifSwiaGkiOnsiY3YiOltdLCJ1 -SCI6W10sIkQwIjpbXX0sIlFXIjp7IlhTIjpbXSwiUnoiOltdfSwiWEEiOnsia0YiOltdfSwidnQiOnsi -RDgiOltdfSwiY0QiOnsiRDgiOltdfSwiZHYiOnsiUnoiOltdfSwiT0YiOnsiZnYiOltdfSwicnUiOnsi -ZnYiOltdfSwiSVYiOnsiZnYiOltdfSwibjYiOnsiek0iOlsiSWoiXSwiYlEiOlsiSWoiXSwiY1giOlsi -SWoiXSwiQVMiOltdfX0nKSkKSC5GRih2LnR5cGVVbml2ZXJzZSxKU09OLnBhcnNlKCd7IncyIjoxLCJR -QyI6MiwiTFoiOjEsImtUIjoyLCJtVyI6MSwidXkiOjEsImlsIjoyLCJWaiI6MSwiWHYiOjEsIm5ZIjox -LCJXWSI6MSwicFIiOjEsImNvIjoxfScpKQp2YXIgdT17bDoiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBh -dGggZnJvbSBhIFVSSSB3aXRoIGEgZnJhZ21lbnQgY29tcG9uZW50IixpOiJDYW5ub3QgZXh0cmFjdCBh -IGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBxdWVyeSBjb21wb25lbnQiLGo6IkNhbm5vdCBleHRy -YWN0IGEgbm9uLVdpbmRvd3MgZmlsZSBwYXRoIGZyb20gYSBmaWxlIFVSSSB3aXRoIGFuIGF1dGhvcml0 -eSIsZzoiYG51bGxgIGVuY291bnRlcmVkIGFzIHRoZSByZXN1bHQgZnJvbSBleHByZXNzaW9uIHdpdGgg -dHlwZSBgTmV2ZXJgLiIsZDoiYXJlYS1hbmFseXplcixhbmFseXplci1ubmJkLW1pZ3JhdGlvbix0eXBl -LWJ1ZyJ9CnZhciB0PShmdW5jdGlvbiBydGlpKCl7dmFyIHM9SC5OMApyZXR1cm57bjpzKCJDdyIpLGNS -OnMoIm5CIiksdzpzKCJBeiIpLHA6cygiUVAiKSxnRjpzKCJQRDxHRCxAPiIpLGQ6cygiYlE8QD4iKSxo -OnMoImN2IikscjpzKCJYUyIpLEI6cygiZWEiKSxhUzpzKCJEMCIpLGc4OnMoIlJ6IiksYzg6cygiaEgi -KSxZOnMoIkVIIiksZTpzKCJiODxAPiIpLEk6cygiU2ciKSxvOnMoInZRIiksZWg6cygiY1g8dUg+Iiks -UTpzKCJjWDxxVT4iKSx1OnMoImNYPEA+IiksdjpzKCJqZDxrRj4iKSxzOnMoImpkPHFVPiIpLGdOOnMo -ImpkPG42PiIpLGI6cygiamQ8QD4iKSxhOnMoImpkPElqPiIpLGQ3OnMoImpkPFNlKj4iKSxoNDpzKCJq -ZDxqOCo+IiksRzpzKCJqZDxaMDxxVSosTWgqPio+IiksY1E6cygiamQ8RDgqPiIpLGk6cygiamQ8cVUq -PiIpLGFBOnMoImpkPHlEKj4iKSxhSjpzKCJqZDx3Yio+IiksVjpzKCJqZDxJaio+IiksZDQ6cygiamQ8 -cVU/PiIpLFQ6cygid2UiKSxlSDpzKCJ2bSIpLHg6cygiYzUiKSxhVTpzKCJYajxAPiIpLGFtOnMoIlR6 -PEA+IiksZW86cygiTjU8R0QsQD4iKSxkejpzKCJoRiIpLEQ6cygiek08cVU+IiksajpzKCJ6TTxAPiIp -LEw6cygiek08SWo+IiksSjpzKCJaMDxxVSxxVT4iKSxmOnMoIlowPEAsQD4iKSxkbzpzKCJsSjxxVSxA -PiIpLGZqOnMoImxKPHFVKixxVT4iKSxmUDpzKCJsSjxxVSoscVUqPiIpLGRFOnMoIkVUIiksYm06cygi -VjYiKSxBOnMoInVIIiksRTpzKCJrRiIpLFA6cygiYzgiKSxLOnMoIk1oIikscTpzKCJ0bjxaWj4iKSxm -djpzKCJ3TCIpLGV3OnMoIm5kIiksQzpzKCJ4dTxxVT4iKSxsOnMoIkd6IiksTjpzKCJxVSIpLGQwOnMo -InFVKHFVKikiKSxnNzpzKCJoaSIpLGZvOnMoIkdEIiksYVc6cygieVkiKSxhazpzKCJBUyIpLGdjOnMo -Im42IiksYko6cygia2QiKSxkdzpzKCJHajxxVSxxVT4iKSxkRDpzKCJpRCIpLGVKOnMoInU2PHFVPiIp -LGc0OnMoIks1IiksY2k6cygidjYiKSxnMjpzKCJDbSIpLGJDOnMoIlpmPGZKKj4iKSxoOTpzKCJDUSIp -LGFjOnMoImU3IiksazpzKCJldTxBaio+IiksUjpzKCJ3ejxjdio+IiksYzpzKCJ2czxAPiIpLGZKOnMo -InZzPElqPiIpLGdWOnMoInZzPGZKKj4iKSxjcjpzKCJKUSIpLHk6cygiYTIiKSxhbDpzKCJhMihNaCki -KSxnUjpzKCJDUCIpLHo6cygiQCIpLGZPOnMoIkAoKSIpLGJJOnMoIkAoTWgpIiksYWc6cygiQChNaCxH -eikiKSxiVTpzKCJAKHh1PHFVPikiKSxkTzpzKCJAKHFVKSIpLGI4OnMoIkAoQCxAKSIpLFM6cygiSWoi -KSxkZDpzKCJHaCoiKSxnOnMoImN2KiIpLGFMOnMoImVhKiIpLGFYOnMoIkxMKiIpLGZFOnMoIkg3KiIp -LFU6cygiY1g8QD4qIiksZEg6cygiRTQqIiksZks6cygiek08QD4qIiksZF86cygiek08ajgqPioiKSxk -cDpzKCJ6TTxaMDxxVSosTWgqPio+KiIpLGVFOnMoInpNPE1oKj4qIiksYXc6cygiWjA8QCxAPioiKSx0 -OnMoIlowPHFVKixNaCo+KiIpLE86cygiQWoqIiksY0Y6cygiMCYqIiksXzpzKCJNaCoiKSxlUTpzKCJl -dyoiKSxYOnMoInFVKiIpLGVxOnMoInFVKihxVSopIiksY2g6cygiRDA/IiksYkc6cygiYjg8Yzg+PyIp -LGJrOnMoInpNPHFVPj8iKSxiTTpzKCJ6TTxAPj8iKSxjWjpzKCJaMDxxVSxxVT4/IiksYzk6cygiWjA8 -cVUsQD4/IiksVzpzKCJNaD8iKSxGOnMoIkZlPEAsQD4/IiksbTpzKCJibj8iKSxiNzpzKCJhMihNaCk/ -IiksYnc6cygiQChlYSk/IiksZlY6cygiTWg/KE1oPyxNaD8pPyIpLGRBOnMoIk1oPyhAKT8iKSxaOnMo -In4oKT8iKSxlYjpzKCJ+KGV3Kik/IiksZGk6cygiWloiKSxIOnMoIn4iKSxNOnMoIn4oKSIpLGVBOnMo -In4ocVUscVUpIiksY0E6cygifihxVSxAKSIpfX0pKCk7KGZ1bmN0aW9uIGNvbnN0YW50cygpe3ZhciBz -PWh1bmtIZWxwZXJzLm1ha2VDb25zdExpc3QKQy54bj1XLkdoLnByb3RvdHlwZQpDLlJZPVcuUVAucHJv -dG90eXBlCkMubUg9Vy5hZS5wcm90b3R5cGUKQy5CWj1XLlZiLnByb3RvdHlwZQpDLkR0PVcuZkoucHJv -dG90eXBlCkMuT2s9Si5Hdi5wcm90b3R5cGUKQy5ObT1KLmpkLnByb3RvdHlwZQpDLmpuPUouYlUucHJv -dG90eXBlCkMuak49Si53ZS5wcm90b3R5cGUKQy5DRD1KLnFJLnByb3RvdHlwZQpDLnhCPUouRHIucHJv -dG90eXBlCkMuREc9Si5jNS5wcm90b3R5cGUKQy5FeD1XLnc3LnByb3RvdHlwZQpDLk5BPUguVjYucHJv -dG90eXBlCkMudDU9Vy5CSC5wcm90b3R5cGUKQy5MdD1XLlNOLnByb3RvdHlwZQpDLlpRPUouaUMucHJv -dG90eXBlCkMuSWU9Vy5UYi5wcm90b3R5cGUKQy52Qj1KLmtkLnByb3RvdHlwZQpDLm9sPVcuSzUucHJv -dG90eXBlCkMueTg9bmV3IFAuVTgoKQpDLmg5PW5ldyBQLkNWKCkKQy5Hdz1uZXcgSC5GdShILk4wKCJG -dTwwJio+IikpCkMuTzQ9ZnVuY3Rpb24gZ2V0VGFnRmFsbGJhY2sobykgewogIHZhciBzID0gT2JqZWN0 -LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pOwogIHJldHVybiBzLnN1YnN0cmluZyg4LCBzLmxlbmd0 -aCAtIDEpOwp9CkMuWXE9ZnVuY3Rpb24oKSB7CiAgdmFyIHRvU3RyaW5nRnVuY3Rpb24gPSBPYmplY3Qu -cHJvdG90eXBlLnRvU3RyaW5nOwogIGZ1bmN0aW9uIGdldFRhZyhvKSB7CiAgICB2YXIgcyA9IHRvU3Ry -aW5nRnVuY3Rpb24uY2FsbChvKTsKICAgIHJldHVybiBzLnN1YnN0cmluZyg4LCBzLmxlbmd0aCAtIDEp -OwogIH0KICBmdW5jdGlvbiBnZXRVbmtub3duVGFnKG9iamVjdCwgdGFnKSB7CiAgICBpZiAoL15IVE1M -W0EtWl0uKkVsZW1lbnQkLy50ZXN0KHRhZykpIHsKICAgICAgdmFyIG5hbWUgPSB0b1N0cmluZ0Z1bmN0 -aW9uLmNhbGwob2JqZWN0KTsKICAgICAgaWYgKG5hbWUgPT0gIltvYmplY3QgT2JqZWN0XSIpIHJldHVy -biBudWxsOwogICAgICByZXR1cm4gIkhUTUxFbGVtZW50IjsKICAgIH0KICB9CiAgZnVuY3Rpb24gZ2V0 -VW5rbm93blRhZ0dlbmVyaWNCcm93c2VyKG9iamVjdCwgdGFnKSB7CiAgICBpZiAoc2VsZi5IVE1MRWxl -bWVudCAmJiBvYmplY3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgcmV0dXJuICJIVE1MRWxlbWVudCI7 -CiAgICByZXR1cm4gZ2V0VW5rbm93blRhZyhvYmplY3QsIHRhZyk7CiAgfQogIGZ1bmN0aW9uIHByb3Rv -dHlwZUZvclRhZyh0YWcpIHsKICAgIGlmICh0eXBlb2Ygd2luZG93ID09ICJ1bmRlZmluZWQiKSByZXR1 -cm4gbnVsbDsKICAgIGlmICh0eXBlb2Ygd2luZG93W3RhZ10gPT0gInVuZGVmaW5lZCIpIHJldHVybiBu -dWxsOwogICAgdmFyIGNvbnN0cnVjdG9yID0gd2luZG93W3RhZ107CiAgICBpZiAodHlwZW9mIGNvbnN0 -cnVjdG9yICE9ICJmdW5jdGlvbiIpIHJldHVybiBudWxsOwogICAgcmV0dXJuIGNvbnN0cnVjdG9yLnBy -b3RvdHlwZTsKICB9CiAgZnVuY3Rpb24gZGlzY3JpbWluYXRvcih0YWcpIHsgcmV0dXJuIG51bGw7IH0K -ICB2YXIgaXNCcm93c2VyID0gdHlwZW9mIG5hdmlnYXRvciA9PSAib2JqZWN0IjsKICByZXR1cm4gewog -ICAgZ2V0VGFnOiBnZXRUYWcsCiAgICBnZXRVbmtub3duVGFnOiBpc0Jyb3dzZXIgPyBnZXRVbmtub3du -VGFnR2VuZXJpY0Jyb3dzZXIgOiBnZXRVbmtub3duVGFnLAogICAgcHJvdG90eXBlRm9yVGFnOiBwcm90 -b3R5cGVGb3JUYWcsCiAgICBkaXNjcmltaW5hdG9yOiBkaXNjcmltaW5hdG9yIH07Cn0KQy53Yj1mdW5j -dGlvbihnZXRUYWdGYWxsYmFjaykgewogIHJldHVybiBmdW5jdGlvbihob29rcykgewogICAgaWYgKHR5 -cGVvZiBuYXZpZ2F0b3IgIT0gIm9iamVjdCIpIHJldHVybiBob29rczsKICAgIHZhciB1YSA9IG5hdmln -YXRvci51c2VyQWdlbnQ7CiAgICBpZiAodWEuaW5kZXhPZigiRHVtcFJlbmRlclRyZWUiKSA+PSAwKSBy -ZXR1cm4gaG9va3M7CiAgICBpZiAodWEuaW5kZXhPZigiQ2hyb21lIikgPj0gMCkgewogICAgICBmdW5j -dGlvbiBjb25maXJtKHApIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyA9PSAib2JqZWN0IiAm -JiB3aW5kb3dbcF0gJiYgd2luZG93W3BdLm5hbWUgPT0gcDsKICAgICAgfQogICAgICBpZiAoY29uZmly -bSgiV2luZG93IikgJiYgY29uZmlybSgiSFRNTEVsZW1lbnQiKSkgcmV0dXJuIGhvb2tzOwogICAgfQog -ICAgaG9va3MuZ2V0VGFnID0gZ2V0VGFnRmFsbGJhY2s7CiAgfTsKfQpDLktVPWZ1bmN0aW9uKGhvb2tz -KSB7CiAgaWYgKHR5cGVvZiBkYXJ0RXhwZXJpbWVudGFsRml4dXBHZXRUYWcgIT0gImZ1bmN0aW9uIikg -cmV0dXJuIGhvb2tzOwogIGhvb2tzLmdldFRhZyA9IGRhcnRFeHBlcmltZW50YWxGaXh1cEdldFRhZyho -b29rcy5nZXRUYWcpOwp9CkMuZlE9ZnVuY3Rpb24oaG9va3MpIHsKICB2YXIgZ2V0VGFnID0gaG9va3Mu -Z2V0VGFnOwogIHZhciBwcm90b3R5cGVGb3JUYWcgPSBob29rcy5wcm90b3R5cGVGb3JUYWc7CiAgZnVu -Y3Rpb24gZ2V0VGFnRml4ZWQobykgewogICAgdmFyIHRhZyA9IGdldFRhZyhvKTsKICAgIGlmICh0YWcg -PT0gIkRvY3VtZW50IikgewogICAgICBpZiAoISFvLnhtbFZlcnNpb24pIHJldHVybiAiIURvY3VtZW50 -IjsKICAgICAgcmV0dXJuICIhSFRNTERvY3VtZW50IjsKICAgIH0KICAgIHJldHVybiB0YWc7CiAgfQog -IGZ1bmN0aW9uIHByb3RvdHlwZUZvclRhZ0ZpeGVkKHRhZykgewogICAgaWYgKHRhZyA9PSAiRG9jdW1l -bnQiKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBwcm90b3R5cGVGb3JUYWcodGFnKTsKICB9CiAgaG9v -a3MuZ2V0VGFnID0gZ2V0VGFnRml4ZWQ7CiAgaG9va3MucHJvdG90eXBlRm9yVGFnID0gcHJvdG90eXBl -Rm9yVGFnRml4ZWQ7Cn0KQy5kaz1mdW5jdGlvbihob29rcykgewogIHZhciB1c2VyQWdlbnQgPSB0eXBl -b2YgbmF2aWdhdG9yID09ICJvYmplY3QiID8gbmF2aWdhdG9yLnVzZXJBZ2VudCA6ICIiOwogIGlmICh1 -c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpID09IC0xKSByZXR1cm4gaG9va3M7CiAgdmFyIGdldFRh -ZyA9IGhvb2tzLmdldFRhZzsKICB2YXIgcXVpY2tNYXAgPSB7CiAgICAiQmVmb3JlVW5sb2FkRXZlbnQi -OiAiRXZlbnQiLAogICAgIkRhdGFUcmFuc2ZlciI6ICJDbGlwYm9hcmQiLAogICAgIkdlb0dlb2xvY2F0 -aW9uIjogIkdlb2xvY2F0aW9uIiwKICAgICJMb2NhdGlvbiI6ICIhTG9jYXRpb24iLAogICAgIldvcmtl -ck1lc3NhZ2VFdmVudCI6ICJNZXNzYWdlRXZlbnQiLAogICAgIlhNTERvY3VtZW50IjogIiFEb2N1bWVu -dCJ9OwogIGZ1bmN0aW9uIGdldFRhZ0ZpcmVmb3gobykgewogICAgdmFyIHRhZyA9IGdldFRhZyhvKTsK -ICAgIHJldHVybiBxdWlja01hcFt0YWddIHx8IHRhZzsKICB9CiAgaG9va3MuZ2V0VGFnID0gZ2V0VGFn -RmlyZWZveDsKfQpDLnhpPWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFyIHVzZXJBZ2VudCA9IHR5cGVvZiBu -YXZpZ2F0b3IgPT0gIm9iamVjdCIgPyBuYXZpZ2F0b3IudXNlckFnZW50IDogIiI7CiAgaWYgKHVzZXJB -Z2VudC5pbmRleE9mKCJUcmlkZW50LyIpID09IC0xKSByZXR1cm4gaG9va3M7CiAgdmFyIGdldFRhZyA9 -IGhvb2tzLmdldFRhZzsKICB2YXIgcXVpY2tNYXAgPSB7CiAgICAiQmVmb3JlVW5sb2FkRXZlbnQiOiAi -RXZlbnQiLAogICAgIkRhdGFUcmFuc2ZlciI6ICJDbGlwYm9hcmQiLAogICAgIkhUTUxEREVsZW1lbnQi -OiAiSFRNTEVsZW1lbnQiLAogICAgIkhUTUxEVEVsZW1lbnQiOiAiSFRNTEVsZW1lbnQiLAogICAgIkhU -TUxQaHJhc2VFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJQb3NpdGlvbiI6ICJHZW9wb3NpdGlv -biIKICB9OwogIGZ1bmN0aW9uIGdldFRhZ0lFKG8pIHsKICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAg -ICB2YXIgbmV3VGFnID0gcXVpY2tNYXBbdGFnXTsKICAgIGlmIChuZXdUYWcpIHJldHVybiBuZXdUYWc7 -CiAgICBpZiAodGFnID09ICJPYmplY3QiKSB7CiAgICAgIGlmICh3aW5kb3cuRGF0YVZpZXcgJiYgKG8g -aW5zdGFuY2VvZiB3aW5kb3cuRGF0YVZpZXcpKSByZXR1cm4gIkRhdGFWaWV3IjsKICAgIH0KICAgIHJl -dHVybiB0YWc7CiAgfQogIGZ1bmN0aW9uIHByb3RvdHlwZUZvclRhZ0lFKHRhZykgewogICAgdmFyIGNv -bnN0cnVjdG9yID0gd2luZG93W3RhZ107CiAgICBpZiAoY29uc3RydWN0b3IgPT0gbnVsbCkgcmV0dXJu -IG51bGw7CiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlOwogIH0KICBob29rcy5nZXRUYWcg -PSBnZXRUYWdJRTsKICBob29rcy5wcm90b3R5cGVGb3JUYWcgPSBwcm90b3R5cGVGb3JUYWdJRTsKfQpD -Lmk3PWZ1bmN0aW9uKGhvb2tzKSB7IHJldHVybiBob29rczsgfQoKQy5DdD1uZXcgUC5ieSgpCkMuRXE9 -bmV3IFAuazUoKQpDLnhNPW5ldyBQLnU1KCkKQy5Raz1uZXcgUC5FMygpCkMuTnY9bmV3IEgua3IoKQpD -Lk5VPW5ldyBQLkppKCkKQy5wZD1uZXcgUC5aZCgpCkMuQWQ9bmV3IFIuSDcoMCwiSGludEFjdGlvbktp -bmQuYWRkTnVsbGFibGVIaW50IikKQy5uZT1uZXcgUi5INygxLCJIaW50QWN0aW9uS2luZC5hZGROb25O -dWxsYWJsZUhpbnQiKQpDLm15PW5ldyBSLkg3KDIsIkhpbnRBY3Rpb25LaW5kLmNoYW5nZVRvTnVsbGFi -bGVIaW50IikKQy5yeD1uZXcgUi5INygzLCJIaW50QWN0aW9uS2luZC5jaGFuZ2VUb05vbk51bGxhYmxl -SGludCIpCkMud1Y9bmV3IFIuSDcoNCwiSGludEFjdGlvbktpbmQucmVtb3ZlTnVsbGFibGVIaW50IikK -Qy5mUj1uZXcgUi5INyg1LCJIaW50QWN0aW9uS2luZC5yZW1vdmVOb25OdWxsYWJsZUhpbnQiKQpDLkEz -PW5ldyBQLk14KG51bGwpCkMublg9bmV3IFAub2oobnVsbCkKQy5jdz1uZXcgTC5HYigwLCJVbml0TWln -cmF0aW9uU3RhdHVzLmFscmVhZHlNaWdyYXRlZCIpCkMuZGM9bmV3IEwuR2IoMSwiVW5pdE1pZ3JhdGlv -blN0YXR1cy5pbmRldGVybWluYXRlIikKQy5XRD1uZXcgTC5HYigyLCJVbml0TWlncmF0aW9uU3RhdHVz -Lm1pZ3JhdGluZyIpCkMuWGo9bmV3IEwuR2IoMywiVW5pdE1pZ3JhdGlvblN0YXR1cy5vcHRpbmdPdXQi -KQpDLmwwPUguVk0ocyhbQy5jdyxDLmRjLEMuV0QsQy5Yal0pLEguTjAoImpkPEdiKj4iKSkKQy5haz1I -LlZNKHMoWzAsMCwzMjc3NiwzMzc5MiwxLDEwMjQwLDAsMF0pLHQuVikKQy5jbT1ILlZNKHMoWyIqOjpj -bGFzcyIsIio6OmRpciIsIio6OmRyYWdnYWJsZSIsIio6OmhpZGRlbiIsIio6OmlkIiwiKjo6aW5lcnQi -LCIqOjppdGVtcHJvcCIsIio6Oml0ZW1yZWYiLCIqOjppdGVtc2NvcGUiLCIqOjpsYW5nIiwiKjo6c3Bl -bGxjaGVjayIsIio6OnRpdGxlIiwiKjo6dHJhbnNsYXRlIiwiQTo6YWNjZXNza2V5IiwiQTo6Y29vcmRz -IiwiQTo6aHJlZmxhbmciLCJBOjpuYW1lIiwiQTo6c2hhcGUiLCJBOjp0YWJpbmRleCIsIkE6OnRhcmdl -dCIsIkE6OnR5cGUiLCJBUkVBOjphY2Nlc3NrZXkiLCJBUkVBOjphbHQiLCJBUkVBOjpjb29yZHMiLCJB -UkVBOjpub2hyZWYiLCJBUkVBOjpzaGFwZSIsIkFSRUE6OnRhYmluZGV4IiwiQVJFQTo6dGFyZ2V0Iiwi -QVVESU86OmNvbnRyb2xzIiwiQVVESU86Omxvb3AiLCJBVURJTzo6bWVkaWFncm91cCIsIkFVRElPOjpt -dXRlZCIsIkFVRElPOjpwcmVsb2FkIiwiQkRPOjpkaXIiLCJCT0RZOjphbGluayIsIkJPRFk6OmJnY29s -b3IiLCJCT0RZOjpsaW5rIiwiQk9EWTo6dGV4dCIsIkJPRFk6OnZsaW5rIiwiQlI6OmNsZWFyIiwiQlVU -VE9OOjphY2Nlc3NrZXkiLCJCVVRUT046OmRpc2FibGVkIiwiQlVUVE9OOjpuYW1lIiwiQlVUVE9OOjp0 -YWJpbmRleCIsIkJVVFRPTjo6dHlwZSIsIkJVVFRPTjo6dmFsdWUiLCJDQU5WQVM6OmhlaWdodCIsIkNB -TlZBUzo6d2lkdGgiLCJDQVBUSU9OOjphbGlnbiIsIkNPTDo6YWxpZ24iLCJDT0w6OmNoYXIiLCJDT0w6 -OmNoYXJvZmYiLCJDT0w6OnNwYW4iLCJDT0w6OnZhbGlnbiIsIkNPTDo6d2lkdGgiLCJDT0xHUk9VUDo6 -YWxpZ24iLCJDT0xHUk9VUDo6Y2hhciIsIkNPTEdST1VQOjpjaGFyb2ZmIiwiQ09MR1JPVVA6OnNwYW4i -LCJDT0xHUk9VUDo6dmFsaWduIiwiQ09MR1JPVVA6OndpZHRoIiwiQ09NTUFORDo6Y2hlY2tlZCIsIkNP -TU1BTkQ6OmNvbW1hbmQiLCJDT01NQU5EOjpkaXNhYmxlZCIsIkNPTU1BTkQ6OmxhYmVsIiwiQ09NTUFO -RDo6cmFkaW9ncm91cCIsIkNPTU1BTkQ6OnR5cGUiLCJEQVRBOjp2YWx1ZSIsIkRFTDo6ZGF0ZXRpbWUi -LCJERVRBSUxTOjpvcGVuIiwiRElSOjpjb21wYWN0IiwiRElWOjphbGlnbiIsIkRMOjpjb21wYWN0Iiwi -RklFTERTRVQ6OmRpc2FibGVkIiwiRk9OVDo6Y29sb3IiLCJGT05UOjpmYWNlIiwiRk9OVDo6c2l6ZSIs -IkZPUk06OmFjY2VwdCIsIkZPUk06OmF1dG9jb21wbGV0ZSIsIkZPUk06OmVuY3R5cGUiLCJGT1JNOjpt -ZXRob2QiLCJGT1JNOjpuYW1lIiwiRk9STTo6bm92YWxpZGF0ZSIsIkZPUk06OnRhcmdldCIsIkZSQU1F -OjpuYW1lIiwiSDE6OmFsaWduIiwiSDI6OmFsaWduIiwiSDM6OmFsaWduIiwiSDQ6OmFsaWduIiwiSDU6 -OmFsaWduIiwiSDY6OmFsaWduIiwiSFI6OmFsaWduIiwiSFI6Om5vc2hhZGUiLCJIUjo6c2l6ZSIsIkhS -Ojp3aWR0aCIsIkhUTUw6OnZlcnNpb24iLCJJRlJBTUU6OmFsaWduIiwiSUZSQU1FOjpmcmFtZWJvcmRl -ciIsIklGUkFNRTo6aGVpZ2h0IiwiSUZSQU1FOjptYXJnaW5oZWlnaHQiLCJJRlJBTUU6Om1hcmdpbndp -ZHRoIiwiSUZSQU1FOjp3aWR0aCIsIklNRzo6YWxpZ24iLCJJTUc6OmFsdCIsIklNRzo6Ym9yZGVyIiwi -SU1HOjpoZWlnaHQiLCJJTUc6OmhzcGFjZSIsIklNRzo6aXNtYXAiLCJJTUc6Om5hbWUiLCJJTUc6OnVz -ZW1hcCIsIklNRzo6dnNwYWNlIiwiSU1HOjp3aWR0aCIsIklOUFVUOjphY2NlcHQiLCJJTlBVVDo6YWNj -ZXNza2V5IiwiSU5QVVQ6OmFsaWduIiwiSU5QVVQ6OmFsdCIsIklOUFVUOjphdXRvY29tcGxldGUiLCJJ -TlBVVDo6YXV0b2ZvY3VzIiwiSU5QVVQ6OmNoZWNrZWQiLCJJTlBVVDo6ZGlzYWJsZWQiLCJJTlBVVDo6 -aW5wdXRtb2RlIiwiSU5QVVQ6OmlzbWFwIiwiSU5QVVQ6Omxpc3QiLCJJTlBVVDo6bWF4IiwiSU5QVVQ6 -Om1heGxlbmd0aCIsIklOUFVUOjptaW4iLCJJTlBVVDo6bXVsdGlwbGUiLCJJTlBVVDo6bmFtZSIsIklO -UFVUOjpwbGFjZWhvbGRlciIsIklOUFVUOjpyZWFkb25seSIsIklOUFVUOjpyZXF1aXJlZCIsIklOUFVU -OjpzaXplIiwiSU5QVVQ6OnN0ZXAiLCJJTlBVVDo6dGFiaW5kZXgiLCJJTlBVVDo6dHlwZSIsIklOUFVU -Ojp1c2VtYXAiLCJJTlBVVDo6dmFsdWUiLCJJTlM6OmRhdGV0aW1lIiwiS0VZR0VOOjpkaXNhYmxlZCIs -IktFWUdFTjo6a2V5dHlwZSIsIktFWUdFTjo6bmFtZSIsIkxBQkVMOjphY2Nlc3NrZXkiLCJMQUJFTDo6 -Zm9yIiwiTEVHRU5EOjphY2Nlc3NrZXkiLCJMRUdFTkQ6OmFsaWduIiwiTEk6OnR5cGUiLCJMSTo6dmFs -dWUiLCJMSU5LOjpzaXplcyIsIk1BUDo6bmFtZSIsIk1FTlU6OmNvbXBhY3QiLCJNRU5VOjpsYWJlbCIs -Ik1FTlU6OnR5cGUiLCJNRVRFUjo6aGlnaCIsIk1FVEVSOjpsb3ciLCJNRVRFUjo6bWF4IiwiTUVURVI6 -Om1pbiIsIk1FVEVSOjp2YWx1ZSIsIk9CSkVDVDo6dHlwZW11c3RtYXRjaCIsIk9MOjpjb21wYWN0Iiwi -T0w6OnJldmVyc2VkIiwiT0w6OnN0YXJ0IiwiT0w6OnR5cGUiLCJPUFRHUk9VUDo6ZGlzYWJsZWQiLCJP -UFRHUk9VUDo6bGFiZWwiLCJPUFRJT046OmRpc2FibGVkIiwiT1BUSU9OOjpsYWJlbCIsIk9QVElPTjo6 -c2VsZWN0ZWQiLCJPUFRJT046OnZhbHVlIiwiT1VUUFVUOjpmb3IiLCJPVVRQVVQ6Om5hbWUiLCJQOjph -bGlnbiIsIlBSRTo6d2lkdGgiLCJQUk9HUkVTUzo6bWF4IiwiUFJPR1JFU1M6Om1pbiIsIlBST0dSRVNT -Ojp2YWx1ZSIsIlNFTEVDVDo6YXV0b2NvbXBsZXRlIiwiU0VMRUNUOjpkaXNhYmxlZCIsIlNFTEVDVDo6 -bXVsdGlwbGUiLCJTRUxFQ1Q6Om5hbWUiLCJTRUxFQ1Q6OnJlcXVpcmVkIiwiU0VMRUNUOjpzaXplIiwi -U0VMRUNUOjp0YWJpbmRleCIsIlNPVVJDRTo6dHlwZSIsIlRBQkxFOjphbGlnbiIsIlRBQkxFOjpiZ2Nv -bG9yIiwiVEFCTEU6OmJvcmRlciIsIlRBQkxFOjpjZWxscGFkZGluZyIsIlRBQkxFOjpjZWxsc3BhY2lu -ZyIsIlRBQkxFOjpmcmFtZSIsIlRBQkxFOjpydWxlcyIsIlRBQkxFOjpzdW1tYXJ5IiwiVEFCTEU6Ondp -ZHRoIiwiVEJPRFk6OmFsaWduIiwiVEJPRFk6OmNoYXIiLCJUQk9EWTo6Y2hhcm9mZiIsIlRCT0RZOjp2 -YWxpZ24iLCJURDo6YWJiciIsIlREOjphbGlnbiIsIlREOjpheGlzIiwiVEQ6OmJnY29sb3IiLCJURDo6 -Y2hhciIsIlREOjpjaGFyb2ZmIiwiVEQ6OmNvbHNwYW4iLCJURDo6aGVhZGVycyIsIlREOjpoZWlnaHQi -LCJURDo6bm93cmFwIiwiVEQ6OnJvd3NwYW4iLCJURDo6c2NvcGUiLCJURDo6dmFsaWduIiwiVEQ6Ondp -ZHRoIiwiVEVYVEFSRUE6OmFjY2Vzc2tleSIsIlRFWFRBUkVBOjphdXRvY29tcGxldGUiLCJURVhUQVJF -QTo6Y29scyIsIlRFWFRBUkVBOjpkaXNhYmxlZCIsIlRFWFRBUkVBOjppbnB1dG1vZGUiLCJURVhUQVJF -QTo6bmFtZSIsIlRFWFRBUkVBOjpwbGFjZWhvbGRlciIsIlRFWFRBUkVBOjpyZWFkb25seSIsIlRFWFRB -UkVBOjpyZXF1aXJlZCIsIlRFWFRBUkVBOjpyb3dzIiwiVEVYVEFSRUE6OnRhYmluZGV4IiwiVEVYVEFS -RUE6OndyYXAiLCJURk9PVDo6YWxpZ24iLCJURk9PVDo6Y2hhciIsIlRGT09UOjpjaGFyb2ZmIiwiVEZP -T1Q6OnZhbGlnbiIsIlRIOjphYmJyIiwiVEg6OmFsaWduIiwiVEg6OmF4aXMiLCJUSDo6Ymdjb2xvciIs -IlRIOjpjaGFyIiwiVEg6OmNoYXJvZmYiLCJUSDo6Y29sc3BhbiIsIlRIOjpoZWFkZXJzIiwiVEg6Omhl -aWdodCIsIlRIOjpub3dyYXAiLCJUSDo6cm93c3BhbiIsIlRIOjpzY29wZSIsIlRIOjp2YWxpZ24iLCJU -SDo6d2lkdGgiLCJUSEVBRDo6YWxpZ24iLCJUSEVBRDo6Y2hhciIsIlRIRUFEOjpjaGFyb2ZmIiwiVEhF -QUQ6OnZhbGlnbiIsIlRSOjphbGlnbiIsIlRSOjpiZ2NvbG9yIiwiVFI6OmNoYXIiLCJUUjo6Y2hhcm9m -ZiIsIlRSOjp2YWxpZ24iLCJUUkFDSzo6ZGVmYXVsdCIsIlRSQUNLOjpraW5kIiwiVFJBQ0s6OmxhYmVs -IiwiVFJBQ0s6OnNyY2xhbmciLCJVTDo6Y29tcGFjdCIsIlVMOjp0eXBlIiwiVklERU86OmNvbnRyb2xz -IiwiVklERU86OmhlaWdodCIsIlZJREVPOjpsb29wIiwiVklERU86Om1lZGlhZ3JvdXAiLCJWSURFTzo6 -bXV0ZWQiLCJWSURFTzo6cHJlbG9hZCIsIlZJREVPOjp3aWR0aCJdKSx0LmkpCkMuVkM9SC5WTShzKFsw -LDAsNjU0OTAsNDUwNTUsNjU1MzUsMzQ4MTUsNjU1MzQsMTg0MzFdKSx0LlYpCkMubUs9SC5WTShzKFsw -LDAsMjY2MjQsMTAyMyw2NTUzNCwyMDQ3LDY1NTM0LDIwNDddKSx0LlYpCkMuU3E9SC5WTShzKFsiSEVB -RCIsIkFSRUEiLCJCQVNFIiwiQkFTRUZPTlQiLCJCUiIsIkNPTCIsIkNPTEdST1VQIiwiRU1CRUQiLCJG -UkFNRSIsIkZSQU1FU0VUIiwiSFIiLCJJTUFHRSIsIklNRyIsIklOUFVUIiwiSVNJTkRFWCIsIkxJTksi -LCJNRVRBIiwiUEFSQU0iLCJTT1VSQ0UiLCJTVFlMRSIsIlRJVExFIiwiV0JSIl0pLHQuaSkKQy5oVT1I -LlZNKHMoW10pLHQuYikKQy5kbj1ILlZNKHMoW10pLEguTjAoImpkPExMKj4iKSkKQy54RD1ILlZNKHMo -W10pLHQuaSkKQy50bz1ILlZNKHMoWzAsMCwzMjcyMiwxMjI4Nyw2NTUzNCwzNDgxNSw2NTUzNCwxODQz -MV0pLHQuVikKQy5yaz1ILlZNKHMoW0MuQWQsQy5uZSxDLm15LEMucngsQy53VixDLmZSXSksSC5OMCgi -amQ8SDcqPiIpKQpDLkYzPUguVk0ocyhbMCwwLDI0NTc2LDEwMjMsNjU1MzQsMzQ4MTUsNjU1MzQsMTg0 -MzFdKSx0LlYpCkMuZWE9SC5WTShzKFswLDAsMzI3NTQsMTEyNjMsNjU1MzQsMzQ4MTUsNjU1MzQsMTg0 -MzFdKSx0LlYpCkMuWko9SC5WTShzKFswLDAsMzI3MjIsMTIyODcsNjU1MzUsMzQ4MTUsNjU1MzQsMTg0 -MzFdKSx0LlYpCkMuV2Q9SC5WTShzKFswLDAsNjU0OTAsMTIyODcsNjU1MzUsMzQ4MTUsNjU1MzQsMTg0 -MzFdKSx0LlYpCkMuUXg9SC5WTShzKFsiYmluZCIsImlmIiwicmVmIiwicmVwZWF0Iiwic3ludGF4Il0p -LHQuaSkKQy5CST1ILlZNKHMoWyJBOjpocmVmIiwiQVJFQTo6aHJlZiIsIkJMT0NLUVVPVEU6OmNpdGUi -LCJCT0RZOjpiYWNrZ3JvdW5kIiwiQ09NTUFORDo6aWNvbiIsIkRFTDo6Y2l0ZSIsIkZPUk06OmFjdGlv -biIsIklNRzo6c3JjIiwiSU5QVVQ6OnNyYyIsIklOUzo6Y2l0ZSIsIlE6OmNpdGUiLCJWSURFTzo6cG9z -dGVyIl0pLHQuaSkKQy5EeD1uZXcgSC5MUCgwLHt9LEMueEQsSC5OMCgiTFA8cVUqLHpNPGo4Kj4qPiIp -KQpDLkNNPW5ldyBILkxQKDAse30sQy54RCxILk4wKCJMUDxxVSoscVUqPiIpKQpDLmlIPUguVk0ocyhb -XSksSC5OMCgiamQ8R0QqPiIpKQpDLldPPW5ldyBILkxQKDAse30sQy5pSCxILk4wKCJMUDxHRCosQD4i -KSkKQy5ZMj1uZXcgTC5POSgiTmF2aWdhdGlvblRyZWVOb2RlVHlwZS5kaXJlY3RvcnkiKQpDLnJmPW5l -dyBMLk85KCJOYXZpZ2F0aW9uVHJlZU5vZGVUeXBlLmZpbGUiKQpDLlRlPW5ldyBILnd2KCJjYWxsIikK -Qy5vRT1uZXcgUC5HWSghMSkKQy53UT1uZXcgUC5GeShudWxsLDIpfSkoKTsoZnVuY3Rpb24gc3RhdGlj -RmllbGRzKCl7JC56bT1udWxsCiQueWo9MAokLm1KPW51bGwKJC5QND1udWxsCiQuTkY9bnVsbAokLlRY -PW51bGwKJC54Nz1udWxsCiQubnc9bnVsbAokLnZ2PW51bGwKJC5Cdj1udWxsCiQuUzY9bnVsbAokLms4 -PW51bGwKJC5tZz1udWxsCiQuVUQ9ITEKJC5YMz1DLk5VCiQueGc9SC5WTShbXSxILk4wKCJqZDxNaD4i -KSkKJC54bz1udWxsCiQuQk89bnVsbAokLmx0PW51bGwKJC5FVT1udWxsCiQub3I9UC5GbCh0Lk4sdC5Z -KQokLklSPW51bGwKJC5JNj1udWxsCiQuRmY9bnVsbH0pKCk7KGZ1bmN0aW9uIGxhenlJbml0aWFsaXpl -cnMoKXt2YXIgcz1odW5rSGVscGVycy5sYXp5RmluYWwscj1odW5rSGVscGVycy5sYXp5T2xkCnMoJCwi -ZmEiLCJ3IixmdW5jdGlvbigpe3JldHVybiBILllnKCJfJGRhcnRfZGFydENsb3N1cmUiKX0pCnMoJCwi -VTIiLCJTbiIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILlM3KHsKdG9TdHJpbmc6ZnVuY3Rpb24oKXty -ZXR1cm4iJHJlY2VpdmVyJCJ9fSkpfSkKcygkLCJ4cSIsImxxIixmdW5jdGlvbigpe3JldHVybiBILmNN -KEguUzcoeyRtZXRob2QkOm51bGwsCnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIiRyZWNlaXZlciQi -fX0pKX0pCnMoJCwiUjEiLCJOOSIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILlM3KG51bGwpKX0pCnMo -JCwiZk4iLCJpSSIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShmdW5jdGlvbigpe3ZhciAkYXJndW1lbnRz -RXhwciQ9IiRhcmd1bWVudHMkIgp0cnl7bnVsbC4kbWV0aG9kJCgkYXJndW1lbnRzRXhwciQpfWNhdGNo -KHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKX0pCnMoJCwicWkiLCJVTiIsZnVuY3Rpb24oKXtyZXR1cm4g -SC5jTShILlM3KHZvaWQgMCkpfSkKcygkLCJyWiIsIlpoIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1 -bmN0aW9uKCl7dmFyICRhcmd1bWVudHNFeHByJD0iJGFyZ3VtZW50cyQiCnRyeXsodm9pZCAwKS4kbWV0 -aG9kJCgkYXJndW1lbnRzRXhwciQpfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKX0pCnMoJCwi -a3EiLCJyTiIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILk1qKG51bGwpKX0pCnMoJCwidHQiLCJjMyIs -ZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShmdW5jdGlvbigpe3RyeXtudWxsLiRtZXRob2QkfWNhdGNoKHEp -e3JldHVybiBxLm1lc3NhZ2V9fSgpKX0pCnMoJCwiZHQiLCJISyIsZnVuY3Rpb24oKXtyZXR1cm4gSC5j -TShILk1qKHZvaWQgMCkpfSkKcygkLCJBNyIsInIxIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0 -aW9uKCl7dHJ5eyh2b2lkIDApLiRtZXRob2QkfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKX0p -CnMoJCwiV2MiLCJ1dCIsZnVuY3Rpb24oKXtyZXR1cm4gUC5PaigpfSkKcygkLCJraCIsInJmIixmdW5j -dGlvbigpe3JldHVybiBuZXcgUC54cigpLiQwKCl9KQpzKCQsImRIIiwiSEciLGZ1bmN0aW9uKCl7cmV0 -dXJuIG5ldyBQLk56KCkuJDAoKX0pCnMoJCwiaGoiLCJWNyIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IElu -dDhBcnJheShILlhGKEguVk0oWy0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0y -LC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0y -LC0yLC0yLC0yLC0xLC0yLC0yLC0yLC0yLC0yLDYyLC0yLDYyLC0yLDYzLDUyLDUzLDU0LDU1LDU2LDU3 -LDU4LDU5LDYwLDYxLC0yLC0yLC0yLC0xLC0yLC0yLC0yLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEs -MTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsLTIsLTIsLTIsLTIsNjMsLTIs -MjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUs -NDYsNDcsNDgsNDksNTAsNTEsLTIsLTIsLTIsLTIsLTJdLHQuYSkpKX0pCnMoJCwiTTUiLCJ3USIsZnVu -Y3Rpb24oKXtyZXR1cm4gdHlwZW9mIHByb2Nlc3MhPSJ1bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBl -LnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9PSJbb2JqZWN0IHByb2Nlc3NdIiYmcHJvY2Vzcy5wbGF0Zm9y -bT09IndpbjMyIn0pCnMoJCwibWYiLCJ6NCIsZnVuY3Rpb24oKXtyZXR1cm4gUC5udSgiXltcXC1cXC4w -LTlBLVpfYS16fl0qJCIpfSkKcygkLCJPUSIsInZaIixmdW5jdGlvbigpe3JldHVybiBQLktOKCl9KQpz -KCQsIlNDIiwiQU4iLGZ1bmN0aW9uKCl7cmV0dXJuIFAudE0oWyJBIiwiQUJCUiIsIkFDUk9OWU0iLCJB -RERSRVNTIiwiQVJFQSIsIkFSVElDTEUiLCJBU0lERSIsIkFVRElPIiwiQiIsIkJESSIsIkJETyIsIkJJ -RyIsIkJMT0NLUVVPVEUiLCJCUiIsIkJVVFRPTiIsIkNBTlZBUyIsIkNBUFRJT04iLCJDRU5URVIiLCJD -SVRFIiwiQ09ERSIsIkNPTCIsIkNPTEdST1VQIiwiQ09NTUFORCIsIkRBVEEiLCJEQVRBTElTVCIsIkRE -IiwiREVMIiwiREVUQUlMUyIsIkRGTiIsIkRJUiIsIkRJViIsIkRMIiwiRFQiLCJFTSIsIkZJRUxEU0VU -IiwiRklHQ0FQVElPTiIsIkZJR1VSRSIsIkZPTlQiLCJGT09URVIiLCJGT1JNIiwiSDEiLCJIMiIsIkgz -IiwiSDQiLCJINSIsIkg2IiwiSEVBREVSIiwiSEdST1VQIiwiSFIiLCJJIiwiSUZSQU1FIiwiSU1HIiwi -SU5QVVQiLCJJTlMiLCJLQkQiLCJMQUJFTCIsIkxFR0VORCIsIkxJIiwiTUFQIiwiTUFSSyIsIk1FTlUi -LCJNRVRFUiIsIk5BViIsIk5PQlIiLCJPTCIsIk9QVEdST1VQIiwiT1BUSU9OIiwiT1VUUFVUIiwiUCIs -IlBSRSIsIlBST0dSRVNTIiwiUSIsIlMiLCJTQU1QIiwiU0VDVElPTiIsIlNFTEVDVCIsIlNNQUxMIiwi -U09VUkNFIiwiU1BBTiIsIlNUUklLRSIsIlNUUk9ORyIsIlNVQiIsIlNVTU1BUlkiLCJTVVAiLCJUQUJM -RSIsIlRCT0RZIiwiVEQiLCJURVhUQVJFQSIsIlRGT09UIiwiVEgiLCJUSEVBRCIsIlRJTUUiLCJUUiIs -IlRSQUNLIiwiVFQiLCJVIiwiVUwiLCJWQVIiLCJWSURFTyIsIldCUiJdLHQuTil9KQpzKCQsIlg0Iiwi -aEciLGZ1bmN0aW9uKCl7cmV0dXJuIFAubnUoIl5cXFMrJCIpfSkKcygkLCJ3TyIsIm93IixmdW5jdGlv -bigpe3JldHVybiBQLk5EKHNlbGYpfSkKcygkLCJrdCIsIlI4IixmdW5jdGlvbigpe3JldHVybiBILlln -KCJfJGRhcnRfZGFydE9iamVjdCIpfSkKcygkLCJmSyIsImtJIixmdW5jdGlvbigpe3JldHVybiBmdW5j -dGlvbiBEYXJ0T2JqZWN0KGEpe3RoaXMubz1hfX0pCnIoJCwicXQiLCJ6QiIsZnVuY3Rpb24oKXtyZXR1 -cm4gbmV3IFQubVEoKX0pCnIoJCwiT2wiLCJVRSIsZnVuY3Rpb24oKXtyZXR1cm4gUC5oSyhDLm9sLmdt -VyhXLngzKCkpLmhyZWYpLmdoWSgpLnEoMCwiYXV0aFRva2VuIil9KQpyKCQsImhUIiwieVAiLGZ1bmN0 -aW9uKCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9yKCIuZWRpdC1saXN0IC5wYW5lbC1jb250ZW50 -Iil9KQpyKCQsIlc2IiwiaEwiLGZ1bmN0aW9uKCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9yKCIu -ZWRpdC1wYW5lbCAucGFuZWwtY29udGVudCIpfSkKcigkLCJUUiIsIkRXIixmdW5jdGlvbigpe3JldHVy -biBXLlpyKCkucXVlcnlTZWxlY3RvcigiZm9vdGVyIil9KQpyKCQsIkVZIiwiZmkiLGZ1bmN0aW9uKCl7 -cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9yKCJoZWFkZXIiKX0pCnIoJCwiYkEiLCJjMCIsZnVuY3Rp -b24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoIiNtaWdyYXRlLXVuaXQtc3RhdHVzLWljb24i -KX0pCnIoJCwidDAiLCJiTiIsZnVuY3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoIiNt -aWdyYXRlLXVuaXQtc3RhdHVzLWljb24tbGFiZWwiKX0pCnIoJCwiYXYiLCJEOSIsZnVuY3Rpb24oKXty -ZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoIiN1bml0LW5hbWUiKX0pCnIoJCwiZmUiLCJLRyIsZnVu -Y3Rpb24oKXtyZXR1cm4gbmV3IEwuWEEoKX0pCnMoJCwiZW8iLCJuVSIsZnVuY3Rpb24oKXtyZXR1cm4g -bmV3IE0ubEkoJC5IaygpKX0pCnMoJCwieXIiLCJiRCIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEUuT0Yo -UC5udSgiLyIpLFAubnUoIlteL10kIiksUC5udSgiXi8iKSl9KQpzKCQsIk1rIiwiS2siLGZ1bmN0aW9u -KCl7cmV0dXJuIG5ldyBMLklWKFAubnUoIlsvXFxcXF0iKSxQLm51KCJbXi9cXFxcXSQiKSxQLm51KCJe -KFxcXFxcXFxcW15cXFxcXStcXFxcW15cXFxcL10rfFthLXpBLVpdOlsvXFxcXF0pIiksUC5udSgiXlsv -XFxcXF0oPyFbL1xcXFxdKSIpKX0pCnMoJCwiYWsiLCJFYiIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEYu -cnUoUC5udSgiLyIpLFAubnUoIiheW2EtekEtWl1bLSsuYS16QS1aXFxkXSo6Ly98W14vXSkkIiksUC5u -dSgiW2EtekEtWl1bLSsuYS16QS1aXFxkXSo6Ly9bXi9dKiIpLFAubnUoIl4vIikpfSkKcygkLCJscyIs -IkhrIixmdW5jdGlvbigpe3JldHVybiBPLlJoKCl9KX0pKCk7KGZ1bmN0aW9uIG5hdGl2ZVN1cHBvcnQo -KXshZnVuY3Rpb24oKXt2YXIgcz1mdW5jdGlvbihhKXt2YXIgbT17fQptW2FdPTEKcmV0dXJuIE9iamVj -dC5rZXlzKGh1bmtIZWxwZXJzLmNvbnZlcnRUb0Zhc3RPYmplY3QobSkpWzBdfQp2LmdldElzb2xhdGVU -YWc9ZnVuY3Rpb24oYSl7cmV0dXJuIHMoIl9fX2RhcnRfIithK3YuaXNvbGF0ZVRhZyl9CnZhciByPSJf -X19kYXJ0X2lzb2xhdGVfdGFnc18iCnZhciBxPU9iamVjdFtyXXx8KE9iamVjdFtyXT1PYmplY3QuY3Jl -YXRlKG51bGwpKQp2YXIgcD0iX1p4WXhYIgpmb3IodmFyIG89MDs7bysrKXt2YXIgbj1zKHArIl8iK28r -Il8iKQppZighKG4gaW4gcSkpe3Fbbl09MQp2Lmlzb2xhdGVUYWc9bgpicmVha319di5kaXNwYXRjaFBy -b3BlcnR5TmFtZT12LmdldElzb2xhdGVUYWcoImRpc3BhdGNoX3JlY29yZCIpfSgpCmh1bmtIZWxwZXJz -LnNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcoe0RPTUVycm9yOkouR3YsTWVkaWFFcnJvcjpKLkd2 -LE5hdmlnYXRvcjpKLkd2LE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZTpKLkd2LE5hdmlnYXRvclVz -ZXJNZWRpYUVycm9yOkouR3YsT3ZlcmNvbnN0cmFpbmVkRXJyb3I6Si5HdixQb3NpdGlvbkVycm9yOkou -R3YsUmFuZ2U6Si5HdixTUUxFcnJvcjpKLkd2LERhdGFWaWV3OkguRVQsQXJyYXlCdWZmZXJWaWV3Okgu -RVQsRmxvYXQzMkFycmF5OkguRGcsRmxvYXQ2NEFycmF5OkguRGcsSW50MTZBcnJheTpILnhqLEludDMy -QXJyYXk6SC5kRSxJbnQ4QXJyYXk6SC5aQSxVaW50MTZBcnJheTpILmRULFVpbnQzMkFycmF5OkguUHEs -VWludDhDbGFtcGVkQXJyYXk6SC5lRSxDYW52YXNQaXhlbEFycmF5OkguZUUsVWludDhBcnJheTpILlY2 -LEhUTUxBdWRpb0VsZW1lbnQ6Vy5xRSxIVE1MQlJFbGVtZW50OlcucUUsSFRNTEJ1dHRvbkVsZW1lbnQ6 -Vy5xRSxIVE1MQ2FudmFzRWxlbWVudDpXLnFFLEhUTUxDb250ZW50RWxlbWVudDpXLnFFLEhUTUxETGlz -dEVsZW1lbnQ6Vy5xRSxIVE1MRGF0YUVsZW1lbnQ6Vy5xRSxIVE1MRGF0YUxpc3RFbGVtZW50OlcucUUs -SFRNTERldGFpbHNFbGVtZW50OlcucUUsSFRNTERpYWxvZ0VsZW1lbnQ6Vy5xRSxIVE1MRGl2RWxlbWVu -dDpXLnFFLEhUTUxFbWJlZEVsZW1lbnQ6Vy5xRSxIVE1MRmllbGRTZXRFbGVtZW50OlcucUUsSFRNTEhS -RWxlbWVudDpXLnFFLEhUTUxIZWFkRWxlbWVudDpXLnFFLEhUTUxIZWFkaW5nRWxlbWVudDpXLnFFLEhU -TUxIdG1sRWxlbWVudDpXLnFFLEhUTUxJRnJhbWVFbGVtZW50OlcucUUsSFRNTEltYWdlRWxlbWVudDpX -LnFFLEhUTUxJbnB1dEVsZW1lbnQ6Vy5xRSxIVE1MTElFbGVtZW50OlcucUUsSFRNTExhYmVsRWxlbWVu -dDpXLnFFLEhUTUxMZWdlbmRFbGVtZW50OlcucUUsSFRNTExpbmtFbGVtZW50OlcucUUsSFRNTE1hcEVs -ZW1lbnQ6Vy5xRSxIVE1MTWVkaWFFbGVtZW50OlcucUUsSFRNTE1lbnVFbGVtZW50OlcucUUsSFRNTE1l -dGFFbGVtZW50OlcucUUsSFRNTE1ldGVyRWxlbWVudDpXLnFFLEhUTUxNb2RFbGVtZW50OlcucUUsSFRN -TE9MaXN0RWxlbWVudDpXLnFFLEhUTUxPYmplY3RFbGVtZW50OlcucUUsSFRNTE9wdEdyb3VwRWxlbWVu -dDpXLnFFLEhUTUxPcHRpb25FbGVtZW50OlcucUUsSFRNTE91dHB1dEVsZW1lbnQ6Vy5xRSxIVE1MUGFy -YW1FbGVtZW50OlcucUUsSFRNTFBpY3R1cmVFbGVtZW50OlcucUUsSFRNTFByZUVsZW1lbnQ6Vy5xRSxI -VE1MUHJvZ3Jlc3NFbGVtZW50OlcucUUsSFRNTFF1b3RlRWxlbWVudDpXLnFFLEhUTUxTY3JpcHRFbGVt -ZW50OlcucUUsSFRNTFNoYWRvd0VsZW1lbnQ6Vy5xRSxIVE1MU2xvdEVsZW1lbnQ6Vy5xRSxIVE1MU291 -cmNlRWxlbWVudDpXLnFFLEhUTUxTcGFuRWxlbWVudDpXLnFFLEhUTUxTdHlsZUVsZW1lbnQ6Vy5xRSxI -VE1MVGFibGVDYXB0aW9uRWxlbWVudDpXLnFFLEhUTUxUYWJsZUNlbGxFbGVtZW50OlcucUUsSFRNTFRh -YmxlRGF0YUNlbGxFbGVtZW50OlcucUUsSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6Vy5xRSxIVE1M -VGFibGVDb2xFbGVtZW50OlcucUUsSFRNTFRleHRBcmVhRWxlbWVudDpXLnFFLEhUTUxUaW1lRWxlbWVu -dDpXLnFFLEhUTUxUaXRsZUVsZW1lbnQ6Vy5xRSxIVE1MVHJhY2tFbGVtZW50OlcucUUsSFRNTFVMaXN0 -RWxlbWVudDpXLnFFLEhUTUxVbmtub3duRWxlbWVudDpXLnFFLEhUTUxWaWRlb0VsZW1lbnQ6Vy5xRSxI -VE1MRGlyZWN0b3J5RWxlbWVudDpXLnFFLEhUTUxGb250RWxlbWVudDpXLnFFLEhUTUxGcmFtZUVsZW1l -bnQ6Vy5xRSxIVE1MRnJhbWVTZXRFbGVtZW50OlcucUUsSFRNTE1hcnF1ZWVFbGVtZW50OlcucUUsSFRN -TEVsZW1lbnQ6Vy5xRSxIVE1MQW5jaG9yRWxlbWVudDpXLkdoLEhUTUxBcmVhRWxlbWVudDpXLmZZLEhU -TUxCYXNlRWxlbWVudDpXLm5CLEJsb2I6Vy5BeixIVE1MQm9keUVsZW1lbnQ6Vy5RUCxDREFUQVNlY3Rp -b246Vy5ueCxDaGFyYWN0ZXJEYXRhOlcubngsQ29tbWVudDpXLm54LFByb2Nlc3NpbmdJbnN0cnVjdGlv -bjpXLm54LFRleHQ6Vy5ueCxDU1NTdHlsZURlY2xhcmF0aW9uOlcub0osTVNTdHlsZUNTU1Byb3BlcnRp -ZXM6Vy5vSixDU1MyUHJvcGVydGllczpXLm9KLFhNTERvY3VtZW50OlcuUUYsRG9jdW1lbnQ6Vy5RRixE -T01FeGNlcHRpb246Vy5OaCxET01JbXBsZW1lbnRhdGlvbjpXLmFlLERPTVJlY3RSZWFkT25seTpXLklC -LERPTVRva2VuTGlzdDpXLm43LEVsZW1lbnQ6Vy5jdixBYm9ydFBheW1lbnRFdmVudDpXLmVhLEFuaW1h -dGlvbkV2ZW50OlcuZWEsQW5pbWF0aW9uUGxheWJhY2tFdmVudDpXLmVhLEFwcGxpY2F0aW9uQ2FjaGVF -cnJvckV2ZW50OlcuZWEsQmFja2dyb3VuZEZldGNoQ2xpY2tFdmVudDpXLmVhLEJhY2tncm91bmRGZXRj -aEV2ZW50OlcuZWEsQmFja2dyb3VuZEZldGNoRmFpbEV2ZW50OlcuZWEsQmFja2dyb3VuZEZldGNoZWRF -dmVudDpXLmVhLEJlZm9yZUluc3RhbGxQcm9tcHRFdmVudDpXLmVhLEJlZm9yZVVubG9hZEV2ZW50Olcu -ZWEsQmxvYkV2ZW50OlcuZWEsQ2FuTWFrZVBheW1lbnRFdmVudDpXLmVhLENsaXBib2FyZEV2ZW50Olcu -ZWEsQ2xvc2VFdmVudDpXLmVhLEN1c3RvbUV2ZW50OlcuZWEsRGV2aWNlTW90aW9uRXZlbnQ6Vy5lYSxE -ZXZpY2VPcmllbnRhdGlvbkV2ZW50OlcuZWEsRXJyb3JFdmVudDpXLmVhLEV4dGVuZGFibGVFdmVudDpX -LmVhLEV4dGVuZGFibGVNZXNzYWdlRXZlbnQ6Vy5lYSxGZXRjaEV2ZW50OlcuZWEsRm9udEZhY2VTZXRM -b2FkRXZlbnQ6Vy5lYSxGb3JlaWduRmV0Y2hFdmVudDpXLmVhLEdhbWVwYWRFdmVudDpXLmVhLEhhc2hD -aGFuZ2VFdmVudDpXLmVhLEluc3RhbGxFdmVudDpXLmVhLE1lZGlhRW5jcnlwdGVkRXZlbnQ6Vy5lYSxN -ZWRpYUtleU1lc3NhZ2VFdmVudDpXLmVhLE1lZGlhUXVlcnlMaXN0RXZlbnQ6Vy5lYSxNZWRpYVN0cmVh -bUV2ZW50OlcuZWEsTWVkaWFTdHJlYW1UcmFja0V2ZW50OlcuZWEsTWVzc2FnZUV2ZW50OlcuZWEsTUlE -SUNvbm5lY3Rpb25FdmVudDpXLmVhLE1JRElNZXNzYWdlRXZlbnQ6Vy5lYSxNdXRhdGlvbkV2ZW50Olcu -ZWEsTm90aWZpY2F0aW9uRXZlbnQ6Vy5lYSxQYWdlVHJhbnNpdGlvbkV2ZW50OlcuZWEsUGF5bWVudFJl -cXVlc3RFdmVudDpXLmVhLFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ6Vy5lYSxQb3BTdGF0ZUV2ZW50 -OlcuZWEsUHJlc2VudGF0aW9uQ29ubmVjdGlvbkF2YWlsYWJsZUV2ZW50OlcuZWEsUHJlc2VudGF0aW9u -Q29ubmVjdGlvbkNsb3NlRXZlbnQ6Vy5lYSxQcm9taXNlUmVqZWN0aW9uRXZlbnQ6Vy5lYSxQdXNoRXZl -bnQ6Vy5lYSxSVENEYXRhQ2hhbm5lbEV2ZW50OlcuZWEsUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDpXLmVh -LFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQ6Vy5lYSxSVENUcmFja0V2ZW50OlcuZWEsU2VjdXJpdHlQ -b2xpY3lWaW9sYXRpb25FdmVudDpXLmVhLFNlbnNvckVycm9yRXZlbnQ6Vy5lYSxTcGVlY2hSZWNvZ25p -dGlvbkVycm9yOlcuZWEsU3BlZWNoUmVjb2duaXRpb25FdmVudDpXLmVhLFNwZWVjaFN5bnRoZXNpc0V2 -ZW50OlcuZWEsU3RvcmFnZUV2ZW50OlcuZWEsU3luY0V2ZW50OlcuZWEsVHJhY2tFdmVudDpXLmVhLFRy -YW5zaXRpb25FdmVudDpXLmVhLFdlYktpdFRyYW5zaXRpb25FdmVudDpXLmVhLFZSRGV2aWNlRXZlbnQ6 -Vy5lYSxWUkRpc3BsYXlFdmVudDpXLmVhLFZSU2Vzc2lvbkV2ZW50OlcuZWEsTW9qb0ludGVyZmFjZVJl -cXVlc3RFdmVudDpXLmVhLFVTQkNvbm5lY3Rpb25FdmVudDpXLmVhLElEQlZlcnNpb25DaGFuZ2VFdmVu -dDpXLmVhLEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OlcuZWEsT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50 -OlcuZWEsV2ViR0xDb250ZXh0RXZlbnQ6Vy5lYSxFdmVudDpXLmVhLElucHV0RXZlbnQ6Vy5lYSxTdWJt -aXRFdmVudDpXLmVhLEV2ZW50VGFyZ2V0OlcuRDAsRmlsZTpXLmhILEhUTUxGb3JtRWxlbWVudDpXLmg0 -LEhpc3Rvcnk6Vy5icixIVE1MRG9jdW1lbnQ6Vy5WYixYTUxIdHRwUmVxdWVzdDpXLmZKLFhNTEh0dHBS -ZXF1ZXN0RXZlbnRUYXJnZXQ6Vy53YSxJbWFnZURhdGE6Vy5TZyxMb2NhdGlvbjpXLnc3LE1vdXNlRXZl -bnQ6Vy5BaixEcmFnRXZlbnQ6Vy5BaixQb2ludGVyRXZlbnQ6Vy5BaixXaGVlbEV2ZW50OlcuQWosRG9j -dW1lbnRGcmFnbWVudDpXLnVILFNoYWRvd1Jvb3Q6Vy51SCxEb2N1bWVudFR5cGU6Vy51SCxOb2RlOlcu -dUgsTm9kZUxpc3Q6Vy5CSCxSYWRpb05vZGVMaXN0OlcuQkgsSFRNTFBhcmFncmFwaEVsZW1lbnQ6Vy5T -TixQcm9ncmVzc0V2ZW50OlcuZXcsUmVzb3VyY2VQcm9ncmVzc0V2ZW50OlcuZXcsSFRNTFNlbGVjdEVs -ZW1lbnQ6Vy5scCxIVE1MVGFibGVFbGVtZW50OlcuVGIsSFRNTFRhYmxlUm93RWxlbWVudDpXLkl2LEhU -TUxUYWJsZVNlY3Rpb25FbGVtZW50OlcuV1AsSFRNTFRlbXBsYXRlRWxlbWVudDpXLnlZLENvbXBvc2l0 -aW9uRXZlbnQ6Vy53NixGb2N1c0V2ZW50OlcudzYsS2V5Ym9hcmRFdmVudDpXLnc2LFRleHRFdmVudDpX -Lnc2LFRvdWNoRXZlbnQ6Vy53NixVSUV2ZW50OlcudzYsV2luZG93OlcuSzUsRE9NV2luZG93OlcuSzUs -RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6Vy5DbSxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6Vy5D -bSxTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTpXLkNtLFdvcmtlckdsb2JhbFNjb3BlOlcuQ20sQXR0cjpX -LkNRLENsaWVudFJlY3Q6Vy53NCxET01SZWN0OlcudzQsTmFtZWROb2RlTWFwOlcucmgsTW96TmFtZWRB -dHRyTWFwOlcucmgsSURCS2V5UmFuZ2U6UC5oRixTVkdTY3JpcHRFbGVtZW50OlAubmQsU1ZHQUVsZW1l -bnQ6UC5oaSxTVkdBbmltYXRlRWxlbWVudDpQLmhpLFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OlAuaGks -U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6UC5oaSxTVkdBbmltYXRpb25FbGVtZW50OlAuaGksU1ZH -Q2lyY2xlRWxlbWVudDpQLmhpLFNWR0NsaXBQYXRoRWxlbWVudDpQLmhpLFNWR0RlZnNFbGVtZW50OlAu -aGksU1ZHRGVzY0VsZW1lbnQ6UC5oaSxTVkdEaXNjYXJkRWxlbWVudDpQLmhpLFNWR0VsbGlwc2VFbGVt -ZW50OlAuaGksU1ZHRkVCbGVuZEVsZW1lbnQ6UC5oaSxTVkdGRUNvbG9yTWF0cml4RWxlbWVudDpQLmhp -LFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OlAuaGksU1ZHRkVDb21wb3NpdGVFbGVtZW50OlAu -aGksU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6UC5oaSxTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l -bnQ6UC5oaSxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6UC5oaSxTVkdGRURpc3RhbnRMaWdodEVs -ZW1lbnQ6UC5oaSxTVkdGRUZsb29kRWxlbWVudDpQLmhpLFNWR0ZFRnVuY0FFbGVtZW50OlAuaGksU1ZH -RkVGdW5jQkVsZW1lbnQ6UC5oaSxTVkdGRUZ1bmNHRWxlbWVudDpQLmhpLFNWR0ZFRnVuY1JFbGVtZW50 -OlAuaGksU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OlAuaGksU1ZHRkVJbWFnZUVsZW1lbnQ6UC5oaSxT -VkdGRU1lcmdlRWxlbWVudDpQLmhpLFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDpQLmhpLFNWR0ZFTW9ycGhv -bG9neUVsZW1lbnQ6UC5oaSxTVkdGRU9mZnNldEVsZW1lbnQ6UC5oaSxTVkdGRVBvaW50TGlnaHRFbGVt -ZW50OlAuaGksU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDpQLmhpLFNWR0ZFU3BvdExpZ2h0RWxl -bWVudDpQLmhpLFNWR0ZFVGlsZUVsZW1lbnQ6UC5oaSxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OlAuaGks -U1ZHRmlsdGVyRWxlbWVudDpQLmhpLFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OlAuaGksU1ZHR0VsZW1l -bnQ6UC5oaSxTVkdHZW9tZXRyeUVsZW1lbnQ6UC5oaSxTVkdHcmFwaGljc0VsZW1lbnQ6UC5oaSxTVkdJ -bWFnZUVsZW1lbnQ6UC5oaSxTVkdMaW5lRWxlbWVudDpQLmhpLFNWR0xpbmVhckdyYWRpZW50RWxlbWVu -dDpQLmhpLFNWR01hcmtlckVsZW1lbnQ6UC5oaSxTVkdNYXNrRWxlbWVudDpQLmhpLFNWR01ldGFkYXRh -RWxlbWVudDpQLmhpLFNWR1BhdGhFbGVtZW50OlAuaGksU1ZHUGF0dGVybkVsZW1lbnQ6UC5oaSxTVkdQ -b2x5Z29uRWxlbWVudDpQLmhpLFNWR1BvbHlsaW5lRWxlbWVudDpQLmhpLFNWR1JhZGlhbEdyYWRpZW50 -RWxlbWVudDpQLmhpLFNWR1JlY3RFbGVtZW50OlAuaGksU1ZHU2V0RWxlbWVudDpQLmhpLFNWR1N0b3BF -bGVtZW50OlAuaGksU1ZHU3R5bGVFbGVtZW50OlAuaGksU1ZHU1ZHRWxlbWVudDpQLmhpLFNWR1N3aXRj -aEVsZW1lbnQ6UC5oaSxTVkdTeW1ib2xFbGVtZW50OlAuaGksU1ZHVFNwYW5FbGVtZW50OlAuaGksU1ZH -VGV4dENvbnRlbnRFbGVtZW50OlAuaGksU1ZHVGV4dEVsZW1lbnQ6UC5oaSxTVkdUZXh0UGF0aEVsZW1l -bnQ6UC5oaSxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OlAuaGksU1ZHVGl0bGVFbGVtZW50OlAuaGks -U1ZHVXNlRWxlbWVudDpQLmhpLFNWR1ZpZXdFbGVtZW50OlAuaGksU1ZHR3JhZGllbnRFbGVtZW50OlAu -aGksU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6UC5oaSxTVkdGRURyb3BTaGFkb3dF -bGVtZW50OlAuaGksU1ZHTVBhdGhFbGVtZW50OlAuaGksU1ZHRWxlbWVudDpQLmhpfSkKaHVua0hlbHBl -cnMuc2V0T3JVcGRhdGVMZWFmVGFncyh7RE9NRXJyb3I6dHJ1ZSxNZWRpYUVycm9yOnRydWUsTmF2aWdh -dG9yOnRydWUsTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlOnRydWUsTmF2aWdhdG9yVXNlck1lZGlh -RXJyb3I6dHJ1ZSxPdmVyY29uc3RyYWluZWRFcnJvcjp0cnVlLFBvc2l0aW9uRXJyb3I6dHJ1ZSxSYW5n -ZTp0cnVlLFNRTEVycm9yOnRydWUsRGF0YVZpZXc6dHJ1ZSxBcnJheUJ1ZmZlclZpZXc6ZmFsc2UsRmxv -YXQzMkFycmF5OnRydWUsRmxvYXQ2NEFycmF5OnRydWUsSW50MTZBcnJheTp0cnVlLEludDMyQXJyYXk6 -dHJ1ZSxJbnQ4QXJyYXk6dHJ1ZSxVaW50MTZBcnJheTp0cnVlLFVpbnQzMkFycmF5OnRydWUsVWludDhD -bGFtcGVkQXJyYXk6dHJ1ZSxDYW52YXNQaXhlbEFycmF5OnRydWUsVWludDhBcnJheTpmYWxzZSxIVE1M -QXVkaW9FbGVtZW50OnRydWUsSFRNTEJSRWxlbWVudDp0cnVlLEhUTUxCdXR0b25FbGVtZW50OnRydWUs -SFRNTENhbnZhc0VsZW1lbnQ6dHJ1ZSxIVE1MQ29udGVudEVsZW1lbnQ6dHJ1ZSxIVE1MRExpc3RFbGVt -ZW50OnRydWUsSFRNTERhdGFFbGVtZW50OnRydWUsSFRNTERhdGFMaXN0RWxlbWVudDp0cnVlLEhUTUxE -ZXRhaWxzRWxlbWVudDp0cnVlLEhUTUxEaWFsb2dFbGVtZW50OnRydWUsSFRNTERpdkVsZW1lbnQ6dHJ1 -ZSxIVE1MRW1iZWRFbGVtZW50OnRydWUsSFRNTEZpZWxkU2V0RWxlbWVudDp0cnVlLEhUTUxIUkVsZW1l -bnQ6dHJ1ZSxIVE1MSGVhZEVsZW1lbnQ6dHJ1ZSxIVE1MSGVhZGluZ0VsZW1lbnQ6dHJ1ZSxIVE1MSHRt -bEVsZW1lbnQ6dHJ1ZSxIVE1MSUZyYW1lRWxlbWVudDp0cnVlLEhUTUxJbWFnZUVsZW1lbnQ6dHJ1ZSxI -VE1MSW5wdXRFbGVtZW50OnRydWUsSFRNTExJRWxlbWVudDp0cnVlLEhUTUxMYWJlbEVsZW1lbnQ6dHJ1 -ZSxIVE1MTGVnZW5kRWxlbWVudDp0cnVlLEhUTUxMaW5rRWxlbWVudDp0cnVlLEhUTUxNYXBFbGVtZW50 -OnRydWUsSFRNTE1lZGlhRWxlbWVudDp0cnVlLEhUTUxNZW51RWxlbWVudDp0cnVlLEhUTUxNZXRhRWxl -bWVudDp0cnVlLEhUTUxNZXRlckVsZW1lbnQ6dHJ1ZSxIVE1MTW9kRWxlbWVudDp0cnVlLEhUTUxPTGlz -dEVsZW1lbnQ6dHJ1ZSxIVE1MT2JqZWN0RWxlbWVudDp0cnVlLEhUTUxPcHRHcm91cEVsZW1lbnQ6dHJ1 -ZSxIVE1MT3B0aW9uRWxlbWVudDp0cnVlLEhUTUxPdXRwdXRFbGVtZW50OnRydWUsSFRNTFBhcmFtRWxl -bWVudDp0cnVlLEhUTUxQaWN0dXJlRWxlbWVudDp0cnVlLEhUTUxQcmVFbGVtZW50OnRydWUsSFRNTFBy -b2dyZXNzRWxlbWVudDp0cnVlLEhUTUxRdW90ZUVsZW1lbnQ6dHJ1ZSxIVE1MU2NyaXB0RWxlbWVudDp0 -cnVlLEhUTUxTaGFkb3dFbGVtZW50OnRydWUsSFRNTFNsb3RFbGVtZW50OnRydWUsSFRNTFNvdXJjZUVs -ZW1lbnQ6dHJ1ZSxIVE1MU3BhbkVsZW1lbnQ6dHJ1ZSxIVE1MU3R5bGVFbGVtZW50OnRydWUsSFRNTFRh -YmxlQ2FwdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDZWxsRWxlbWVudDp0cnVlLEhUTUxUYWJsZURh -dGFDZWxsRWxlbWVudDp0cnVlLEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50OnRydWUsSFRNTFRhYmxl -Q29sRWxlbWVudDp0cnVlLEhUTUxUZXh0QXJlYUVsZW1lbnQ6dHJ1ZSxIVE1MVGltZUVsZW1lbnQ6dHJ1 -ZSxIVE1MVGl0bGVFbGVtZW50OnRydWUsSFRNTFRyYWNrRWxlbWVudDp0cnVlLEhUTUxVTGlzdEVsZW1l -bnQ6dHJ1ZSxIVE1MVW5rbm93bkVsZW1lbnQ6dHJ1ZSxIVE1MVmlkZW9FbGVtZW50OnRydWUsSFRNTERp -cmVjdG9yeUVsZW1lbnQ6dHJ1ZSxIVE1MRm9udEVsZW1lbnQ6dHJ1ZSxIVE1MRnJhbWVFbGVtZW50OnRy -dWUsSFRNTEZyYW1lU2V0RWxlbWVudDp0cnVlLEhUTUxNYXJxdWVlRWxlbWVudDp0cnVlLEhUTUxFbGVt -ZW50OmZhbHNlLEhUTUxBbmNob3JFbGVtZW50OnRydWUsSFRNTEFyZWFFbGVtZW50OnRydWUsSFRNTEJh -c2VFbGVtZW50OnRydWUsQmxvYjpmYWxzZSxIVE1MQm9keUVsZW1lbnQ6dHJ1ZSxDREFUQVNlY3Rpb246 -dHJ1ZSxDaGFyYWN0ZXJEYXRhOnRydWUsQ29tbWVudDp0cnVlLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjp0 -cnVlLFRleHQ6dHJ1ZSxDU1NTdHlsZURlY2xhcmF0aW9uOnRydWUsTVNTdHlsZUNTU1Byb3BlcnRpZXM6 -dHJ1ZSxDU1MyUHJvcGVydGllczp0cnVlLFhNTERvY3VtZW50OnRydWUsRG9jdW1lbnQ6ZmFsc2UsRE9N -RXhjZXB0aW9uOnRydWUsRE9NSW1wbGVtZW50YXRpb246dHJ1ZSxET01SZWN0UmVhZE9ubHk6ZmFsc2Us -RE9NVG9rZW5MaXN0OnRydWUsRWxlbWVudDpmYWxzZSxBYm9ydFBheW1lbnRFdmVudDp0cnVlLEFuaW1h -dGlvbkV2ZW50OnRydWUsQW5pbWF0aW9uUGxheWJhY2tFdmVudDp0cnVlLEFwcGxpY2F0aW9uQ2FjaGVF -cnJvckV2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoQ2xpY2tFdmVudDp0cnVlLEJhY2tncm91bmRGZXRj -aEV2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoRmFpbEV2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoZWRF -dmVudDp0cnVlLEJlZm9yZUluc3RhbGxQcm9tcHRFdmVudDp0cnVlLEJlZm9yZVVubG9hZEV2ZW50OnRy -dWUsQmxvYkV2ZW50OnRydWUsQ2FuTWFrZVBheW1lbnRFdmVudDp0cnVlLENsaXBib2FyZEV2ZW50OnRy -dWUsQ2xvc2VFdmVudDp0cnVlLEN1c3RvbUV2ZW50OnRydWUsRGV2aWNlTW90aW9uRXZlbnQ6dHJ1ZSxE -ZXZpY2VPcmllbnRhdGlvbkV2ZW50OnRydWUsRXJyb3JFdmVudDp0cnVlLEV4dGVuZGFibGVFdmVudDp0 -cnVlLEV4dGVuZGFibGVNZXNzYWdlRXZlbnQ6dHJ1ZSxGZXRjaEV2ZW50OnRydWUsRm9udEZhY2VTZXRM -b2FkRXZlbnQ6dHJ1ZSxGb3JlaWduRmV0Y2hFdmVudDp0cnVlLEdhbWVwYWRFdmVudDp0cnVlLEhhc2hD -aGFuZ2VFdmVudDp0cnVlLEluc3RhbGxFdmVudDp0cnVlLE1lZGlhRW5jcnlwdGVkRXZlbnQ6dHJ1ZSxN -ZWRpYUtleU1lc3NhZ2VFdmVudDp0cnVlLE1lZGlhUXVlcnlMaXN0RXZlbnQ6dHJ1ZSxNZWRpYVN0cmVh -bUV2ZW50OnRydWUsTWVkaWFTdHJlYW1UcmFja0V2ZW50OnRydWUsTWVzc2FnZUV2ZW50OnRydWUsTUlE -SUNvbm5lY3Rpb25FdmVudDp0cnVlLE1JRElNZXNzYWdlRXZlbnQ6dHJ1ZSxNdXRhdGlvbkV2ZW50OnRy -dWUsTm90aWZpY2F0aW9uRXZlbnQ6dHJ1ZSxQYWdlVHJhbnNpdGlvbkV2ZW50OnRydWUsUGF5bWVudFJl -cXVlc3RFdmVudDp0cnVlLFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ6dHJ1ZSxQb3BTdGF0ZUV2ZW50 -OnRydWUsUHJlc2VudGF0aW9uQ29ubmVjdGlvbkF2YWlsYWJsZUV2ZW50OnRydWUsUHJlc2VudGF0aW9u -Q29ubmVjdGlvbkNsb3NlRXZlbnQ6dHJ1ZSxQcm9taXNlUmVqZWN0aW9uRXZlbnQ6dHJ1ZSxQdXNoRXZl -bnQ6dHJ1ZSxSVENEYXRhQ2hhbm5lbEV2ZW50OnRydWUsUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDp0cnVl -LFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQ6dHJ1ZSxSVENUcmFja0V2ZW50OnRydWUsU2VjdXJpdHlQ -b2xpY3lWaW9sYXRpb25FdmVudDp0cnVlLFNlbnNvckVycm9yRXZlbnQ6dHJ1ZSxTcGVlY2hSZWNvZ25p -dGlvbkVycm9yOnRydWUsU3BlZWNoUmVjb2duaXRpb25FdmVudDp0cnVlLFNwZWVjaFN5bnRoZXNpc0V2 -ZW50OnRydWUsU3RvcmFnZUV2ZW50OnRydWUsU3luY0V2ZW50OnRydWUsVHJhY2tFdmVudDp0cnVlLFRy -YW5zaXRpb25FdmVudDp0cnVlLFdlYktpdFRyYW5zaXRpb25FdmVudDp0cnVlLFZSRGV2aWNlRXZlbnQ6 -dHJ1ZSxWUkRpc3BsYXlFdmVudDp0cnVlLFZSU2Vzc2lvbkV2ZW50OnRydWUsTW9qb0ludGVyZmFjZVJl -cXVlc3RFdmVudDp0cnVlLFVTQkNvbm5lY3Rpb25FdmVudDp0cnVlLElEQlZlcnNpb25DaGFuZ2VFdmVu -dDp0cnVlLEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OnRydWUsT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50 -OnRydWUsV2ViR0xDb250ZXh0RXZlbnQ6dHJ1ZSxFdmVudDpmYWxzZSxJbnB1dEV2ZW50OmZhbHNlLFN1 -Ym1pdEV2ZW50OmZhbHNlLEV2ZW50VGFyZ2V0OmZhbHNlLEZpbGU6dHJ1ZSxIVE1MRm9ybUVsZW1lbnQ6 -dHJ1ZSxIaXN0b3J5OnRydWUsSFRNTERvY3VtZW50OnRydWUsWE1MSHR0cFJlcXVlc3Q6dHJ1ZSxYTUxI -dHRwUmVxdWVzdEV2ZW50VGFyZ2V0OmZhbHNlLEltYWdlRGF0YTp0cnVlLExvY2F0aW9uOnRydWUsTW91 -c2VFdmVudDp0cnVlLERyYWdFdmVudDp0cnVlLFBvaW50ZXJFdmVudDp0cnVlLFdoZWVsRXZlbnQ6dHJ1 -ZSxEb2N1bWVudEZyYWdtZW50OnRydWUsU2hhZG93Um9vdDp0cnVlLERvY3VtZW50VHlwZTp0cnVlLE5v -ZGU6ZmFsc2UsTm9kZUxpc3Q6dHJ1ZSxSYWRpb05vZGVMaXN0OnRydWUsSFRNTFBhcmFncmFwaEVsZW1l -bnQ6dHJ1ZSxQcm9ncmVzc0V2ZW50OnRydWUsUmVzb3VyY2VQcm9ncmVzc0V2ZW50OnRydWUsSFRNTFNl -bGVjdEVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVFbGVtZW50OnRydWUsSFRNTFRhYmxlUm93RWxlbWVudDp0 -cnVlLEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OnRydWUsSFRNTFRlbXBsYXRlRWxlbWVudDp0cnVlLENv -bXBvc2l0aW9uRXZlbnQ6dHJ1ZSxGb2N1c0V2ZW50OnRydWUsS2V5Ym9hcmRFdmVudDp0cnVlLFRleHRF -dmVudDp0cnVlLFRvdWNoRXZlbnQ6dHJ1ZSxVSUV2ZW50OmZhbHNlLFdpbmRvdzp0cnVlLERPTVdpbmRv -dzp0cnVlLERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOnRydWUsU2VydmljZVdvcmtlckdsb2JhbFNj -b3BlOnRydWUsU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxXb3JrZXJHbG9iYWxTY29wZTp0cnVl -LEF0dHI6dHJ1ZSxDbGllbnRSZWN0OnRydWUsRE9NUmVjdDp0cnVlLE5hbWVkTm9kZU1hcDp0cnVlLE1v -ek5hbWVkQXR0ck1hcDp0cnVlLElEQktleVJhbmdlOnRydWUsU1ZHU2NyaXB0RWxlbWVudDp0cnVlLFNW -R0FFbGVtZW50OnRydWUsU1ZHQW5pbWF0ZUVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRlTW90aW9uRWxlbWVu -dDp0cnVlLFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OnRydWUsU1ZHQW5pbWF0aW9uRWxlbWVudDp0 -cnVlLFNWR0NpcmNsZUVsZW1lbnQ6dHJ1ZSxTVkdDbGlwUGF0aEVsZW1lbnQ6dHJ1ZSxTVkdEZWZzRWxl -bWVudDp0cnVlLFNWR0Rlc2NFbGVtZW50OnRydWUsU1ZHRGlzY2FyZEVsZW1lbnQ6dHJ1ZSxTVkdFbGxp -cHNlRWxlbWVudDp0cnVlLFNWR0ZFQmxlbmRFbGVtZW50OnRydWUsU1ZHRkVDb2xvck1hdHJpeEVsZW1l -bnQ6dHJ1ZSxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDp0cnVlLFNWR0ZFQ29tcG9zaXRlRWxl -bWVudDp0cnVlLFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OnRydWUsU1ZHRkVEaWZmdXNlTGlnaHRp -bmdFbGVtZW50OnRydWUsU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OnRydWUsU1ZHRkVEaXN0YW50 -TGlnaHRFbGVtZW50OnRydWUsU1ZHRkVGbG9vZEVsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNBRWxlbWVudDp0 -cnVlLFNWR0ZFRnVuY0JFbGVtZW50OnRydWUsU1ZHRkVGdW5jR0VsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNS -RWxlbWVudDp0cnVlLFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDp0cnVlLFNWR0ZFSW1hZ2VFbGVtZW50 -OnRydWUsU1ZHRkVNZXJnZUVsZW1lbnQ6dHJ1ZSxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6dHJ1ZSxTVkdG -RU1vcnBob2xvZ3lFbGVtZW50OnRydWUsU1ZHRkVPZmZzZXRFbGVtZW50OnRydWUsU1ZHRkVQb2ludExp -Z2h0RWxlbWVudDp0cnVlLFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6dHJ1ZSxTVkdGRVNwb3RM -aWdodEVsZW1lbnQ6dHJ1ZSxTVkdGRVRpbGVFbGVtZW50OnRydWUsU1ZHRkVUdXJidWxlbmNlRWxlbWVu -dDp0cnVlLFNWR0ZpbHRlckVsZW1lbnQ6dHJ1ZSxTVkdGb3JlaWduT2JqZWN0RWxlbWVudDp0cnVlLFNW -R0dFbGVtZW50OnRydWUsU1ZHR2VvbWV0cnlFbGVtZW50OnRydWUsU1ZHR3JhcGhpY3NFbGVtZW50OnRy -dWUsU1ZHSW1hZ2VFbGVtZW50OnRydWUsU1ZHTGluZUVsZW1lbnQ6dHJ1ZSxTVkdMaW5lYXJHcmFkaWVu -dEVsZW1lbnQ6dHJ1ZSxTVkdNYXJrZXJFbGVtZW50OnRydWUsU1ZHTWFza0VsZW1lbnQ6dHJ1ZSxTVkdN -ZXRhZGF0YUVsZW1lbnQ6dHJ1ZSxTVkdQYXRoRWxlbWVudDp0cnVlLFNWR1BhdHRlcm5FbGVtZW50OnRy -dWUsU1ZHUG9seWdvbkVsZW1lbnQ6dHJ1ZSxTVkdQb2x5bGluZUVsZW1lbnQ6dHJ1ZSxTVkdSYWRpYWxH -cmFkaWVudEVsZW1lbnQ6dHJ1ZSxTVkdSZWN0RWxlbWVudDp0cnVlLFNWR1NldEVsZW1lbnQ6dHJ1ZSxT -VkdTdG9wRWxlbWVudDp0cnVlLFNWR1N0eWxlRWxlbWVudDp0cnVlLFNWR1NWR0VsZW1lbnQ6dHJ1ZSxT -VkdTd2l0Y2hFbGVtZW50OnRydWUsU1ZHU3ltYm9sRWxlbWVudDp0cnVlLFNWR1RTcGFuRWxlbWVudDp0 -cnVlLFNWR1RleHRDb250ZW50RWxlbWVudDp0cnVlLFNWR1RleHRFbGVtZW50OnRydWUsU1ZHVGV4dFBh -dGhFbGVtZW50OnRydWUsU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDp0cnVlLFNWR1RpdGxlRWxlbWVu -dDp0cnVlLFNWR1VzZUVsZW1lbnQ6dHJ1ZSxTVkdWaWV3RWxlbWVudDp0cnVlLFNWR0dyYWRpZW50RWxl -bWVudDp0cnVlLFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OnRydWUsU1ZHRkVEcm9w -U2hhZG93RWxlbWVudDp0cnVlLFNWR01QYXRoRWxlbWVudDp0cnVlLFNWR0VsZW1lbnQ6ZmFsc2V9KQpI -LkxaLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXciCkguUkcuJG5hdGl2ZVN1cGVy -Y2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5WUC4kbmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlC -dWZmZXJWaWV3IgpILkRnLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXciCkguV0Iu -JG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5aRy4kbmF0aXZlU3VwZXJjbGFz -c1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpILlBnLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZl -clZpZXcifSkoKQpjb252ZXJ0QWxsVG9GYXN0T2JqZWN0KHcpCmNvbnZlcnRUb0Zhc3RPYmplY3QoJCk7 -KGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkb2N1bWVudD09PSJ1bmRlZmluZWQiKXthKG51bGwpCnJldHVy -bn1pZih0eXBlb2YgZG9jdW1lbnQuY3VycmVudFNjcmlwdCE9InVuZGVmaW5lZCIpe2EoZG9jdW1lbnQu -Y3VycmVudFNjcmlwdCkKcmV0dXJufXZhciBzPWRvY3VtZW50LnNjcmlwdHMKZnVuY3Rpb24gb25Mb2Fk -KGIpe2Zvcih2YXIgcT0wO3E8cy5sZW5ndGg7KytxKXNbcV0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9h -ZCIsb25Mb2FkLGZhbHNlKQphKGIudGFyZ2V0KX1mb3IodmFyIHI9MDtyPHMubGVuZ3RoOysrcilzW3Jd -LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG9uTG9hZCxmYWxzZSl9KShmdW5jdGlvbihhKXt2LmN1cnJl -bnRTY3JpcHQ9YQp2YXIgcz1MLklxCmlmKHR5cGVvZiBkYXJ0TWFpblJ1bm5lcj09PSJmdW5jdGlvbiIp -ZGFydE1haW5SdW5uZXIocyxbXSkKZWxzZSBzKFtdKX0pfSkoKQovLyMgc291cmNlTWFwcGluZ1VSTD1t -aWdyYXRpb24uanMubWFwCg== +Il0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJkRSI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6 +TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoi +XSwibEQuRSI6IklqIn0sIlpBIjp7ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVU +IjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoi +fSwiZFQiOnsibEQiOlsiSWoiXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJ +aiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJQcSI6eyJsRCI6 +WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwi +Y1giOlsiSWoiXSwiU1UiOlsiSWoiXSwibEQuRSI6IklqIn0sImVFIjp7ImxEIjpbIklqIl0sIlhqIjpb +IklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJT +VSI6WyJJaiJdLCJsRC5FIjoiSWoifSwiVjYiOnsibEQiOlsiSWoiXSwibjYiOltdLCJYaiI6WyJJaiJd +LCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsi +SWoiXSwibEQuRSI6IklqIn0sImtTIjp7IlhTIjpbXX0sImlNIjp7IlhTIjpbXX0sIkdWIjp7IkFuIjpb +IjEiXX0sInE0Ijp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiQ3ciOnsiWFMiOltdfSwiWmYiOnsiUGYi +OlsiMSJdfSwidnMiOnsiYjgiOlsiMSJdfSwibTAiOnsiUW0iOltdfSwiSmkiOnsibTAiOltdLCJRbSI6 +W119LCJiNiI6eyJsZiI6WyIxIl0sInh1IjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImxmLkUi +OiIxIn0sImxtIjp7IkFuIjpbIjEiXX0sIm1XIjp7ImNYIjpbIjEiXX0sInV5Ijp7ImxEIjpbIjEiXSwi +ek0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXX0sImlsIjp7IllrIjpbIjEiLCIyIl0sIlowIjpb +IjEiLCIyIl19LCJZayI6eyJaMCI6WyIxIiwiMiJdfSwiUG4iOnsiWjAiOlsiMSIsIjIiXX0sIkdqIjp7 +IlJVIjpbIjEiLCIyIl0sIlBuIjpbIjEiLCIyIl0sIktQIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19 +LCJWaiI6eyJsZiI6WyIxIl0sInh1IjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJYdiI6eyJs +ZiI6WyIxIl0sInh1IjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJ1dyI6eyJZayI6WyJxVSIs +IkAiXSwiWjAiOlsicVUiLCJAIl0sIllrLksiOiJxVSIsIllrLlYiOiJAIn0sImk4Ijp7ImFMIjpbInFV +Il0sImJRIjpbInFVIl0sImNYIjpbInFVIl0sImFMLkUiOiJxVSIsImNYLkUiOiJxVSJ9LCJDViI6eyJV +ayI6WyJ6TTxJaj4iLCJxVSJdLCJVay5TIjoiek08SWo+In0sIlU4Ijp7IndJIjpbInpNPElqPiIsInFV +Il19LCJaaSI6eyJVayI6WyJxVSIsInpNPElqPiJdfSwiVWQiOnsiWFMiOltdfSwiSzgiOnsiWFMiOltd +fSwiYnkiOnsiVWsiOlsiTWg/IiwicVUiXSwiVWsuUyI6Ik1oPyJ9LCJvaiI6eyJ3SSI6WyJNaD8iLCJx +VSJdfSwiTXgiOnsid0kiOlsicVUiLCJNaD8iXX0sInU1Ijp7IlVrIjpbInFVIiwiek08SWo+Il0sIlVr +LlMiOiJxVSJ9LCJFMyI6eyJ3SSI6WyJxVSIsInpNPElqPiJdfSwiR1kiOnsid0kiOlsiek08SWo+Iiwi +cVUiXX0sIkNQIjp7IlpaIjpbXX0sIklqIjp7IlpaIjpbXX0sInpNIjp7ImJRIjpbIjEiXSwiY1giOlsi +MSJdfSwiaWIiOnsiT2QiOltdfSwieHUiOnsiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJxVSI6eyJ2WCI6 +W119LCJDNiI6eyJYUyI6W119LCJFeiI6eyJYUyI6W119LCJGIjp7IlhTIjpbXX0sInUiOnsiWFMiOltd +fSwiYkoiOnsiWFMiOltdfSwiZVkiOnsiWFMiOltdfSwibXAiOnsiWFMiOltdfSwidWIiOnsiWFMiOltd +fSwiZHMiOnsiWFMiOltdfSwibGoiOnsiWFMiOltdfSwiVVYiOnsiWFMiOltdfSwiazUiOnsiWFMiOltd +fSwiS1kiOnsiWFMiOltdfSwiYyI6eyJYUyI6W119LCJDRCI6eyJSeiI6W119LCJhRSI6eyJSeiI6W119 +LCJaZCI6eyJHeiI6W119LCJSbiI6eyJCTCI6W119LCJEbiI6eyJpRCI6W119LCJVZiI6eyJpRCI6W119 +LCJxZSI6eyJpRCI6W119LCJxRSI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwiR2giOnsiY3YiOltd +LCJ1SCI6W10sIkQwIjpbXX0sImZZIjp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119LCJuQiI6eyJjdiI6 +W10sInVIIjpbXSwiRDAiOltdfSwiUVAiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIm54Ijp7InVI +IjpbXSwiRDAiOltdfSwiUUYiOnsidUgiOltdLCJEMCI6W119LCJJQiI6eyJ0biI6WyJaWiJdfSwid3oi +OnsibEQiOlsiMSJdLCJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdLCJsRC5FIjoiMSJ9LCJj +diI6eyJ1SCI6W10sIkQwIjpbXX0sImhIIjp7IkF6IjpbXX0sImg0Ijp7ImN2IjpbXSwidUgiOltdLCJE +MCI6W119LCJWYiI6eyJ1SCI6W10sIkQwIjpbXX0sImZKIjp7IkQwIjpbXX0sIndhIjp7IkQwIjpbXX0s +IkFqIjp7ImVhIjpbXX0sImU3Ijp7ImxEIjpbInVIIl0sInpNIjpbInVIIl0sImJRIjpbInVIIl0sImNY +IjpbInVIIl0sImxELkUiOiJ1SCJ9LCJ1SCI6eyJEMCI6W119LCJCSCI6eyJsRCI6WyJ1SCJdLCJHbSI6 +WyJ1SCJdLCJ6TSI6WyJ1SCJdLCJYaiI6WyJ1SCJdLCJiUSI6WyJ1SCJdLCJjWCI6WyJ1SCJdLCJsRC5F +IjoidUgiLCJHbS5FIjoidUgifSwiU04iOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sImV3Ijp7ImVh +IjpbXX0sImxwIjp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119LCJUYiI6eyJjdiI6W10sInVIIjpbXSwi +RDAiOltdfSwiSXYiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIldQIjp7ImN2IjpbXSwidUgiOltd +LCJEMCI6W119LCJ5WSI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwidzYiOnsiZWEiOltdfSwiSzUi +OnsidjYiOltdLCJEMCI6W119LCJDbSI6eyJEMCI6W119LCJDUSI6eyJ1SCI6W10sIkQwIjpbXX0sInc0 +Ijp7InRuIjpbIlpaIl19LCJyaCI6eyJsRCI6WyJ1SCJdLCJHbSI6WyJ1SCJdLCJ6TSI6WyJ1SCJdLCJY +aiI6WyJ1SCJdLCJiUSI6WyJ1SCJdLCJjWCI6WyJ1SCJdLCJsRC5FIjoidUgiLCJHbS5FIjoidUgifSwi +Y2YiOnsiWWsiOlsicVUiLCJxVSJdLCJaMCI6WyJxVSIsInFVIl19LCJpNyI6eyJZayI6WyJxVSIsInFV +Il0sIlowIjpbInFVIiwicVUiXSwiWWsuSyI6InFVIiwiWWsuViI6InFVIn0sIlN5Ijp7IllrIjpbInFV +IiwicVUiXSwiWjAiOlsicVUiLCJxVSJdLCJZay5LIjoicVUiLCJZay5WIjoicVUifSwiSTQiOnsibGYi +OlsicVUiXSwieHUiOlsicVUiXSwiYlEiOlsicVUiXSwiY1giOlsicVUiXSwibGYuRSI6InFVIn0sIlJP +Ijp7InFoIjpbIjEiXX0sImV1Ijp7IlJPIjpbIjEiXSwicWgiOlsiMSJdfSwieEMiOnsiTU8iOlsiMSJd +fSwiSlEiOnsia0YiOltdfSwidkQiOnsia0YiOltdfSwibTYiOnsia0YiOltdfSwiY3QiOnsia0YiOltd +fSwiT3ciOnsia0YiOltdfSwiVzkiOnsiQW4iOlsiMSJdfSwiZFciOnsidjYiOltdLCJEMCI6W119LCJt +ayI6eyJ5MCI6W119LCJLbyI6eyJvbiI6W119LCJBcyI6eyJsZiI6WyJxVSJdLCJ4dSI6WyJxVSJdLCJi +USI6WyJxVSJdLCJjWCI6WyJxVSJdfSwicjciOnsiRTQiOltdfSwiVHoiOnsibEQiOlsiMSJdLCJ6TSI6 +WyIxIl0sImJRIjpbIjEiXSwiRTQiOltdLCJjWCI6WyIxIl0sImxELkUiOiIxIn0sIm5kIjp7ImhpIjpb +XSwiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIktlIjp7ImxmIjpbInFVIl0sInh1IjpbInFVIl0sImJR +IjpbInFVIl0sImNYIjpbInFVIl0sImxmLkUiOiJxVSJ9LCJoaSI6eyJjdiI6W10sInVIIjpbXSwiRDAi +OltdfSwiUVciOnsiWFMiOltdLCJSeiI6W119LCJYQSI6eyJrRiI6W119LCJ2dCI6eyJEOCI6W119LCJj +RCI6eyJEOCI6W119LCJkdiI6eyJSeiI6W119LCJPRiI6eyJmdiI6W119LCJydSI6eyJmdiI6W119LCJJ +ViI6eyJmdiI6W119LCJuNiI6eyJ6TSI6WyJJaiJdLCJiUSI6WyJJaiJdLCJjWCI6WyJJaiJdLCJBUyI6 +W119fScpKQpILkZGKHYudHlwZVVuaXZlcnNlLEpTT04ucGFyc2UoJ3sidzIiOjEsIlFDIjoyLCJMWiI6 +MSwia1QiOjIsIm1XIjoxLCJ1eSI6MSwiaWwiOjIsIlZqIjoxLCJYdiI6MSwiblkiOjEsIldZIjoxLCJw +UiI6MSwiY28iOjF9JykpCnZhciB1PXtsOiJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEg +VVJJIHdpdGggYSBmcmFnbWVudCBjb21wb25lbnQiLGk6IkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRo +IGZyb20gYSBVUkkgd2l0aCBhIHF1ZXJ5IGNvbXBvbmVudCIsajoiQ2Fubm90IGV4dHJhY3QgYSBub24t +V2luZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJIHdpdGggYW4gYXV0aG9yaXR5IixnOiJgbnVs +bGAgZW5jb3VudGVyZWQgYXMgdGhlIHJlc3VsdCBmcm9tIGV4cHJlc3Npb24gd2l0aCB0eXBlIGBOZXZl +cmAuIixkOiJhcmVhLWFuYWx5emVyLGFuYWx5emVyLW5uYmQtbWlncmF0aW9uLHR5cGUtYnVnIn0KdmFy +IHQ9KGZ1bmN0aW9uIHJ0aWkoKXt2YXIgcz1ILk4wCnJldHVybntuOnMoIkN3IiksY1I6cygibkIiKSx3 +OnMoIkF6IikscDpzKCJRUCIpLGdGOnMoIlBEPEdELEA+IiksZDpzKCJiUTxAPiIpLGg6cygiY3YiKSxy +OnMoIlhTIiksQjpzKCJlYSIpLGFTOnMoIkQwIiksZzg6cygiUnoiKSxjODpzKCJoSCIpLFk6cygiRUgi +KSxlOnMoImI4PEA+IiksSTpzKCJTZyIpLG86cygidlEiKSxlaDpzKCJjWDx1SD4iKSxROnMoImNYPHFV +PiIpLHU6cygiY1g8QD4iKSx2OnMoImpkPGtGPiIpLHM6cygiamQ8cVU+IiksZ046cygiamQ8bjY+Iiks +YjpzKCJqZDxAPiIpLGE6cygiamQ8SWo+IiksZDc6cygiamQ8U2UqPiIpLGg0OnMoImpkPGo4Kj4iKSxH +OnMoImpkPFowPHFVKixNaCo+Kj4iKSxjUTpzKCJqZDxEOCo+IiksaTpzKCJqZDxxVSo+IiksYUE6cygi +amQ8eUQqPiIpLGFKOnMoImpkPHdiKj4iKSxWOnMoImpkPElqKj4iKSxkNDpzKCJqZDxxVT8+IiksVDpz +KCJ3ZSIpLGVIOnMoInZtIikseDpzKCJjNSIpLGFVOnMoIlhqPEA+IiksYW06cygiVHo8QD4iKSxlbzpz +KCJONTxHRCxAPiIpLGR6OnMoImhGIiksRDpzKCJ6TTxxVT4iKSxqOnMoInpNPEA+IiksTDpzKCJ6TTxJ +aj4iKSxKOnMoIlowPHFVLHFVPiIpLGY6cygiWjA8QCxAPiIpLGRvOnMoImxKPHFVLEA+IiksZmo6cygi +bEo8cVUqLHFVPiIpLGZQOnMoImxKPHFVKixxVSo+IiksZEU6cygiRVQiKSxibTpzKCJWNiIpLEE6cygi +dUgiKSxFOnMoImtGIiksUDpzKCJjOCIpLEs6cygiTWgiKSxxOnMoInRuPFpaPiIpLGZ2OnMoIndMIiks +ZXc6cygibmQiKSxDOnMoInh1PHFVPiIpLGw6cygiR3oiKSxOOnMoInFVIiksZDA6cygicVUocVUqKSIp +LGc3OnMoImhpIiksZm86cygiR0QiKSxhVzpzKCJ5WSIpLGFrOnMoIkFTIiksZ2M6cygibjYiKSxiSjpz +KCJrZCIpLGR3OnMoIkdqPHFVLHFVPiIpLGREOnMoImlEIiksZUo6cygidTY8cVU+IiksZzQ6cygiSzUi +KSxjaTpzKCJ2NiIpLGcyOnMoIkNtIiksYkM6cygiWmY8ZkoqPiIpLGg5OnMoIkNRIiksYWM6cygiZTci +KSxrOnMoImV1PEFqKj4iKSxSOnMoInd6PGN2Kj4iKSxjOnMoInZzPEA+IiksZko6cygidnM8SWo+Iiks +Z1Y6cygidnM8ZkoqPiIpLGNyOnMoIkpRIikseTpzKCJhMiIpLGFsOnMoImEyKE1oKSIpLGdSOnMoIkNQ +IiksejpzKCJAIiksZk86cygiQCgpIiksYkk6cygiQChNaCkiKSxhZzpzKCJAKE1oLEd6KSIpLGJVOnMo +IkAoeHU8cVU+KSIpLGRPOnMoIkAocVUpIiksYjg6cygiQChALEApIiksUzpzKCJJaiIpLGRkOnMoIkdo +KiIpLGc6cygiY3YqIiksYUw6cygiZWEqIiksYVg6cygiTEwqIiksZkU6cygiSDcqIiksVTpzKCJjWDxA +PioiKSxkSDpzKCJFNCoiKSxmSzpzKCJ6TTxAPioiKSxkXzpzKCJ6TTxqOCo+KiIpLGRwOnMoInpNPFow +PHFVKixNaCo+Kj4qIiksZUU6cygiek08TWgqPioiKSxhdzpzKCJaMDxALEA+KiIpLHQ6cygiWjA8cVUq +LE1oKj4qIiksTzpzKCJBaioiKSxjRjpzKCIwJioiKSxfOnMoIk1oKiIpLGVROnMoImV3KiIpLFg6cygi +cVUqIiksZXE6cygicVUqKHFVKikiKSxjaDpzKCJEMD8iKSxiRzpzKCJiODxjOD4/IiksYms6cygiek08 +cVU+PyIpLGJNOnMoInpNPEA+PyIpLGNaOnMoIlowPHFVLHFVPj8iKSxjOTpzKCJaMDxxVSxAPj8iKSxX +OnMoIk1oPyIpLEY6cygiRmU8QCxAPj8iKSxtOnMoImJuPyIpLGI3OnMoImEyKE1oKT8iKSxidzpzKCJA +KGVhKT8iKSxmVjpzKCJNaD8oTWg/LE1oPyk/IiksZEE6cygiTWg/KEApPyIpLFo6cygifigpPyIpLGVi +OnMoIn4oZXcqKT8iKSxkaTpzKCJaWiIpLEg6cygifiIpLE06cygifigpIiksZUE6cygifihxVSxxVSki +KSxjQTpzKCJ+KHFVLEApIil9fSkoKTsoZnVuY3Rpb24gY29uc3RhbnRzKCl7dmFyIHM9aHVua0hlbHBl +cnMubWFrZUNvbnN0TGlzdApDLnhuPVcuR2gucHJvdG90eXBlCkMuUlk9Vy5RUC5wcm90b3R5cGUKQy5t +SD1XLmFlLnByb3RvdHlwZQpDLkJaPVcuVmIucHJvdG90eXBlCkMuRHQ9Vy5mSi5wcm90b3R5cGUKQy5P +az1KLkd2LnByb3RvdHlwZQpDLk5tPUouamQucHJvdG90eXBlCkMuam49Si5iVS5wcm90b3R5cGUKQy5q +Tj1KLndlLnByb3RvdHlwZQpDLkNEPUoucUkucHJvdG90eXBlCkMueEI9Si5Eci5wcm90b3R5cGUKQy5E +Rz1KLmM1LnByb3RvdHlwZQpDLkV4PVcudzcucHJvdG90eXBlCkMuTkE9SC5WNi5wcm90b3R5cGUKQy50 +NT1XLkJILnByb3RvdHlwZQpDLkx0PVcuU04ucHJvdG90eXBlCkMuWlE9Si5pQy5wcm90b3R5cGUKQy5J +ZT1XLlRiLnByb3RvdHlwZQpDLnZCPUoua2QucHJvdG90eXBlCkMub2w9Vy5LNS5wcm90b3R5cGUKQy55 +OD1uZXcgUC5VOCgpCkMuaDk9bmV3IFAuQ1YoKQpDLkd3PW5ldyBILkZ1KEguTjAoIkZ1PDAmKj4iKSkK +Qy5PND1mdW5jdGlvbiBnZXRUYWdGYWxsYmFjayhvKSB7CiAgdmFyIHMgPSBPYmplY3QucHJvdG90eXBl +LnRvU3RyaW5nLmNhbGwobyk7CiAgcmV0dXJuIHMuc3Vic3RyaW5nKDgsIHMubGVuZ3RoIC0gMSk7Cn0K +Qy5ZcT1mdW5jdGlvbigpIHsKICB2YXIgdG9TdHJpbmdGdW5jdGlvbiA9IE9iamVjdC5wcm90b3R5cGUu +dG9TdHJpbmc7CiAgZnVuY3Rpb24gZ2V0VGFnKG8pIHsKICAgIHZhciBzID0gdG9TdHJpbmdGdW5jdGlv +bi5jYWxsKG8pOwogICAgcmV0dXJuIHMuc3Vic3RyaW5nKDgsIHMubGVuZ3RoIC0gMSk7CiAgfQogIGZ1 +bmN0aW9uIGdldFVua25vd25UYWcob2JqZWN0LCB0YWcpIHsKICAgIGlmICgvXkhUTUxbQS1aXS4qRWxl +bWVudCQvLnRlc3QodGFnKSkgewogICAgICB2YXIgbmFtZSA9IHRvU3RyaW5nRnVuY3Rpb24uY2FsbChv +YmplY3QpOwogICAgICBpZiAobmFtZSA9PSAiW29iamVjdCBPYmplY3RdIikgcmV0dXJuIG51bGw7CiAg +ICAgIHJldHVybiAiSFRNTEVsZW1lbnQiOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRVbmtub3duVGFn +R2VuZXJpY0Jyb3dzZXIob2JqZWN0LCB0YWcpIHsKICAgIGlmIChzZWxmLkhUTUxFbGVtZW50ICYmIG9i +amVjdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSByZXR1cm4gIkhUTUxFbGVtZW50IjsKICAgIHJldHVy +biBnZXRVbmtub3duVGFnKG9iamVjdCwgdGFnKTsKICB9CiAgZnVuY3Rpb24gcHJvdG90eXBlRm9yVGFn +KHRhZykgewogICAgaWYgKHR5cGVvZiB3aW5kb3cgPT0gInVuZGVmaW5lZCIpIHJldHVybiBudWxsOwog +ICAgaWYgKHR5cGVvZiB3aW5kb3dbdGFnXSA9PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CiAgICB2 +YXIgY29uc3RydWN0b3IgPSB3aW5kb3dbdGFnXTsKICAgIGlmICh0eXBlb2YgY29uc3RydWN0b3IgIT0g +ImZ1bmN0aW9uIikgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlOwog +IH0KICBmdW5jdGlvbiBkaXNjcmltaW5hdG9yKHRhZykgeyByZXR1cm4gbnVsbDsgfQogIHZhciBpc0Jy +b3dzZXIgPSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmplY3QiOwogIHJldHVybiB7CiAgICBnZXRUYWc6 +IGdldFRhZywKICAgIGdldFVua25vd25UYWc6IGlzQnJvd3NlciA/IGdldFVua25vd25UYWdHZW5lcmlj +QnJvd3NlciA6IGdldFVua25vd25UYWcsCiAgICBwcm90b3R5cGVGb3JUYWc6IHByb3RvdHlwZUZvclRh +ZywKICAgIGRpc2NyaW1pbmF0b3I6IGRpc2NyaW1pbmF0b3IgfTsKfQpDLndiPWZ1bmN0aW9uKGdldFRh +Z0ZhbGxiYWNrKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKGhvb2tzKSB7CiAgICBpZiAodHlwZW9mIG5hdmln +YXRvciAhPSAib2JqZWN0IikgcmV0dXJuIGhvb2tzOwogICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJB +Z2VudDsKICAgIGlmICh1YS5pbmRleE9mKCJEdW1wUmVuZGVyVHJlZSIpID49IDApIHJldHVybiBob29r +czsKICAgIGlmICh1YS5pbmRleE9mKCJDaHJvbWUiKSA+PSAwKSB7CiAgICAgIGZ1bmN0aW9uIGNvbmZp +cm0ocCkgewogICAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ID09ICJvYmplY3QiICYmIHdpbmRvd1tw +XSAmJiB3aW5kb3dbcF0ubmFtZSA9PSBwOwogICAgICB9CiAgICAgIGlmIChjb25maXJtKCJXaW5kb3ci +KSAmJiBjb25maXJtKCJIVE1MRWxlbWVudCIpKSByZXR1cm4gaG9va3M7CiAgICB9CiAgICBob29rcy5n +ZXRUYWcgPSBnZXRUYWdGYWxsYmFjazsKICB9Owp9CkMuS1U9ZnVuY3Rpb24oaG9va3MpIHsKICBpZiAo +dHlwZW9mIGRhcnRFeHBlcmltZW50YWxGaXh1cEdldFRhZyAhPSAiZnVuY3Rpb24iKSByZXR1cm4gaG9v +a3M7CiAgaG9va3MuZ2V0VGFnID0gZGFydEV4cGVyaW1lbnRhbEZpeHVwR2V0VGFnKGhvb2tzLmdldFRh +Zyk7Cn0KQy5mUT1mdW5jdGlvbihob29rcykgewogIHZhciBnZXRUYWcgPSBob29rcy5nZXRUYWc7CiAg +dmFyIHByb3RvdHlwZUZvclRhZyA9IGhvb2tzLnByb3RvdHlwZUZvclRhZzsKICBmdW5jdGlvbiBnZXRU +YWdGaXhlZChvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgaWYgKHRhZyA9PSAiRG9jdW1l +bnQiKSB7CiAgICAgIGlmICghIW8ueG1sVmVyc2lvbikgcmV0dXJuICIhRG9jdW1lbnQiOwogICAgICBy +ZXR1cm4gIiFIVE1MRG9jdW1lbnQiOwogICAgfQogICAgcmV0dXJuIHRhZzsKICB9CiAgZnVuY3Rpb24g +cHJvdG90eXBlRm9yVGFnRml4ZWQodGFnKSB7CiAgICBpZiAodGFnID09ICJEb2N1bWVudCIpIHJldHVy +biBudWxsOwogICAgcmV0dXJuIHByb3RvdHlwZUZvclRhZyh0YWcpOwogIH0KICBob29rcy5nZXRUYWcg +PSBnZXRUYWdGaXhlZDsKICBob29rcy5wcm90b3R5cGVGb3JUYWcgPSBwcm90b3R5cGVGb3JUYWdGaXhl +ZDsKfQpDLmRrPWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFyIHVzZXJBZ2VudCA9IHR5cGVvZiBuYXZpZ2F0 +b3IgPT0gIm9iamVjdCIgPyBuYXZpZ2F0b3IudXNlckFnZW50IDogIiI7CiAgaWYgKHVzZXJBZ2VudC5p +bmRleE9mKCJGaXJlZm94IikgPT0gLTEpIHJldHVybiBob29rczsKICB2YXIgZ2V0VGFnID0gaG9va3Mu +Z2V0VGFnOwogIHZhciBxdWlja01hcCA9IHsKICAgICJCZWZvcmVVbmxvYWRFdmVudCI6ICJFdmVudCIs +CiAgICAiRGF0YVRyYW5zZmVyIjogIkNsaXBib2FyZCIsCiAgICAiR2VvR2VvbG9jYXRpb24iOiAiR2Vv +bG9jYXRpb24iLAogICAgIkxvY2F0aW9uIjogIiFMb2NhdGlvbiIsCiAgICAiV29ya2VyTWVzc2FnZUV2 +ZW50IjogIk1lc3NhZ2VFdmVudCIsCiAgICAiWE1MRG9jdW1lbnQiOiAiIURvY3VtZW50In07CiAgZnVu +Y3Rpb24gZ2V0VGFnRmlyZWZveChvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgcmV0dXJu +IHF1aWNrTWFwW3RhZ10gfHwgdGFnOwogIH0KICBob29rcy5nZXRUYWcgPSBnZXRUYWdGaXJlZm94Owp9 +CkMueGk9ZnVuY3Rpb24oaG9va3MpIHsKICB2YXIgdXNlckFnZW50ID0gdHlwZW9mIG5hdmlnYXRvciA9 +PSAib2JqZWN0IiA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAiIjsKICBpZiAodXNlckFnZW50LmluZGV4 +T2YoIlRyaWRlbnQvIikgPT0gLTEpIHJldHVybiBob29rczsKICB2YXIgZ2V0VGFnID0gaG9va3MuZ2V0 +VGFnOwogIHZhciBxdWlja01hcCA9IHsKICAgICJCZWZvcmVVbmxvYWRFdmVudCI6ICJFdmVudCIsCiAg +ICAiRGF0YVRyYW5zZmVyIjogIkNsaXBib2FyZCIsCiAgICAiSFRNTERERWxlbWVudCI6ICJIVE1MRWxl +bWVudCIsCiAgICAiSFRNTERURWxlbWVudCI6ICJIVE1MRWxlbWVudCIsCiAgICAiSFRNTFBocmFzZUVs +ZW1lbnQiOiAiSFRNTEVsZW1lbnQiLAogICAgIlBvc2l0aW9uIjogIkdlb3Bvc2l0aW9uIgogIH07CiAg +ZnVuY3Rpb24gZ2V0VGFnSUUobykgewogICAgdmFyIHRhZyA9IGdldFRhZyhvKTsKICAgIHZhciBuZXdU +YWcgPSBxdWlja01hcFt0YWddOwogICAgaWYgKG5ld1RhZykgcmV0dXJuIG5ld1RhZzsKICAgIGlmICh0 +YWcgPT0gIk9iamVjdCIpIHsKICAgICAgaWYgKHdpbmRvdy5EYXRhVmlldyAmJiAobyBpbnN0YW5jZW9m +IHdpbmRvdy5EYXRhVmlldykpIHJldHVybiAiRGF0YVZpZXciOwogICAgfQogICAgcmV0dXJuIHRhZzsK +ICB9CiAgZnVuY3Rpb24gcHJvdG90eXBlRm9yVGFnSUUodGFnKSB7CiAgICB2YXIgY29uc3RydWN0b3Ig +PSB3aW5kb3dbdGFnXTsKICAgIGlmIChjb25zdHJ1Y3RvciA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAg +IHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiAgfQogIGhvb2tzLmdldFRhZyA9IGdldFRhZ0lF +OwogIGhvb2tzLnByb3RvdHlwZUZvclRhZyA9IHByb3RvdHlwZUZvclRhZ0lFOwp9CkMuaTc9ZnVuY3Rp +b24oaG9va3MpIHsgcmV0dXJuIGhvb2tzOyB9CgpDLkN0PW5ldyBQLmJ5KCkKQy5FcT1uZXcgUC5rNSgp +CkMueE09bmV3IFAudTUoKQpDLlFrPW5ldyBQLkUzKCkKQy5Odj1uZXcgSC5rcigpCkMuTlU9bmV3IFAu +SmkoKQpDLnBkPW5ldyBQLlpkKCkKQy5BZD1uZXcgUi5INygwLCJIaW50QWN0aW9uS2luZC5hZGROdWxs +YWJsZUhpbnQiKQpDLm5lPW5ldyBSLkg3KDEsIkhpbnRBY3Rpb25LaW5kLmFkZE5vbk51bGxhYmxlSGlu +dCIpCkMubXk9bmV3IFIuSDcoMiwiSGludEFjdGlvbktpbmQuY2hhbmdlVG9OdWxsYWJsZUhpbnQiKQpD +LnJ4PW5ldyBSLkg3KDMsIkhpbnRBY3Rpb25LaW5kLmNoYW5nZVRvTm9uTnVsbGFibGVIaW50IikKQy53 +Vj1uZXcgUi5INyg0LCJIaW50QWN0aW9uS2luZC5yZW1vdmVOdWxsYWJsZUhpbnQiKQpDLmZSPW5ldyBS +Lkg3KDUsIkhpbnRBY3Rpb25LaW5kLnJlbW92ZU5vbk51bGxhYmxlSGludCIpCkMuQTM9bmV3IFAuTXgo +bnVsbCkKQy5uWD1uZXcgUC5vaihudWxsKQpDLmN3PW5ldyBMLkdiKDAsIlVuaXRNaWdyYXRpb25TdGF0 +dXMuYWxyZWFkeU1pZ3JhdGVkIikKQy5kYz1uZXcgTC5HYigxLCJVbml0TWlncmF0aW9uU3RhdHVzLmlu +ZGV0ZXJtaW5hdGUiKQpDLldEPW5ldyBMLkdiKDIsIlVuaXRNaWdyYXRpb25TdGF0dXMubWlncmF0aW5n +IikKQy5Yaj1uZXcgTC5HYigzLCJVbml0TWlncmF0aW9uU3RhdHVzLm9wdGluZ091dCIpCkMubDA9SC5W +TShzKFtDLmN3LEMuZGMsQy5XRCxDLlhqXSksSC5OMCgiamQ8R2IqPiIpKQpDLmFrPUguVk0ocyhbMCww +LDMyNzc2LDMzNzkyLDEsMTAyNDAsMCwwXSksdC5WKQpDLmNtPUguVk0ocyhbIio6OmNsYXNzIiwiKjo6 +ZGlyIiwiKjo6ZHJhZ2dhYmxlIiwiKjo6aGlkZGVuIiwiKjo6aWQiLCIqOjppbmVydCIsIio6Oml0ZW1w +cm9wIiwiKjo6aXRlbXJlZiIsIio6Oml0ZW1zY29wZSIsIio6OmxhbmciLCIqOjpzcGVsbGNoZWNrIiwi +Kjo6dGl0bGUiLCIqOjp0cmFuc2xhdGUiLCJBOjphY2Nlc3NrZXkiLCJBOjpjb29yZHMiLCJBOjpocmVm +bGFuZyIsIkE6Om5hbWUiLCJBOjpzaGFwZSIsIkE6OnRhYmluZGV4IiwiQTo6dGFyZ2V0IiwiQTo6dHlw +ZSIsIkFSRUE6OmFjY2Vzc2tleSIsIkFSRUE6OmFsdCIsIkFSRUE6OmNvb3JkcyIsIkFSRUE6Om5vaHJl +ZiIsIkFSRUE6OnNoYXBlIiwiQVJFQTo6dGFiaW5kZXgiLCJBUkVBOjp0YXJnZXQiLCJBVURJTzo6Y29u +dHJvbHMiLCJBVURJTzo6bG9vcCIsIkFVRElPOjptZWRpYWdyb3VwIiwiQVVESU86Om11dGVkIiwiQVVE +SU86OnByZWxvYWQiLCJCRE86OmRpciIsIkJPRFk6OmFsaW5rIiwiQk9EWTo6Ymdjb2xvciIsIkJPRFk6 +OmxpbmsiLCJCT0RZOjp0ZXh0IiwiQk9EWTo6dmxpbmsiLCJCUjo6Y2xlYXIiLCJCVVRUT046OmFjY2Vz +c2tleSIsIkJVVFRPTjo6ZGlzYWJsZWQiLCJCVVRUT046Om5hbWUiLCJCVVRUT046OnRhYmluZGV4Iiwi +QlVUVE9OOjp0eXBlIiwiQlVUVE9OOjp2YWx1ZSIsIkNBTlZBUzo6aGVpZ2h0IiwiQ0FOVkFTOjp3aWR0 +aCIsIkNBUFRJT046OmFsaWduIiwiQ09MOjphbGlnbiIsIkNPTDo6Y2hhciIsIkNPTDo6Y2hhcm9mZiIs +IkNPTDo6c3BhbiIsIkNPTDo6dmFsaWduIiwiQ09MOjp3aWR0aCIsIkNPTEdST1VQOjphbGlnbiIsIkNP +TEdST1VQOjpjaGFyIiwiQ09MR1JPVVA6OmNoYXJvZmYiLCJDT0xHUk9VUDo6c3BhbiIsIkNPTEdST1VQ +Ojp2YWxpZ24iLCJDT0xHUk9VUDo6d2lkdGgiLCJDT01NQU5EOjpjaGVja2VkIiwiQ09NTUFORDo6Y29t +bWFuZCIsIkNPTU1BTkQ6OmRpc2FibGVkIiwiQ09NTUFORDo6bGFiZWwiLCJDT01NQU5EOjpyYWRpb2dy +b3VwIiwiQ09NTUFORDo6dHlwZSIsIkRBVEE6OnZhbHVlIiwiREVMOjpkYXRldGltZSIsIkRFVEFJTFM6 +Om9wZW4iLCJESVI6OmNvbXBhY3QiLCJESVY6OmFsaWduIiwiREw6OmNvbXBhY3QiLCJGSUVMRFNFVDo6 +ZGlzYWJsZWQiLCJGT05UOjpjb2xvciIsIkZPTlQ6OmZhY2UiLCJGT05UOjpzaXplIiwiRk9STTo6YWNj +ZXB0IiwiRk9STTo6YXV0b2NvbXBsZXRlIiwiRk9STTo6ZW5jdHlwZSIsIkZPUk06Om1ldGhvZCIsIkZP +Uk06Om5hbWUiLCJGT1JNOjpub3ZhbGlkYXRlIiwiRk9STTo6dGFyZ2V0IiwiRlJBTUU6Om5hbWUiLCJI +MTo6YWxpZ24iLCJIMjo6YWxpZ24iLCJIMzo6YWxpZ24iLCJINDo6YWxpZ24iLCJINTo6YWxpZ24iLCJI +Njo6YWxpZ24iLCJIUjo6YWxpZ24iLCJIUjo6bm9zaGFkZSIsIkhSOjpzaXplIiwiSFI6OndpZHRoIiwi +SFRNTDo6dmVyc2lvbiIsIklGUkFNRTo6YWxpZ24iLCJJRlJBTUU6OmZyYW1lYm9yZGVyIiwiSUZSQU1F +OjpoZWlnaHQiLCJJRlJBTUU6Om1hcmdpbmhlaWdodCIsIklGUkFNRTo6bWFyZ2lud2lkdGgiLCJJRlJB +TUU6OndpZHRoIiwiSU1HOjphbGlnbiIsIklNRzo6YWx0IiwiSU1HOjpib3JkZXIiLCJJTUc6OmhlaWdo +dCIsIklNRzo6aHNwYWNlIiwiSU1HOjppc21hcCIsIklNRzo6bmFtZSIsIklNRzo6dXNlbWFwIiwiSU1H +Ojp2c3BhY2UiLCJJTUc6OndpZHRoIiwiSU5QVVQ6OmFjY2VwdCIsIklOUFVUOjphY2Nlc3NrZXkiLCJJ +TlBVVDo6YWxpZ24iLCJJTlBVVDo6YWx0IiwiSU5QVVQ6OmF1dG9jb21wbGV0ZSIsIklOUFVUOjphdXRv +Zm9jdXMiLCJJTlBVVDo6Y2hlY2tlZCIsIklOUFVUOjpkaXNhYmxlZCIsIklOUFVUOjppbnB1dG1vZGUi +LCJJTlBVVDo6aXNtYXAiLCJJTlBVVDo6bGlzdCIsIklOUFVUOjptYXgiLCJJTlBVVDo6bWF4bGVuZ3Ro +IiwiSU5QVVQ6Om1pbiIsIklOUFVUOjptdWx0aXBsZSIsIklOUFVUOjpuYW1lIiwiSU5QVVQ6OnBsYWNl +aG9sZGVyIiwiSU5QVVQ6OnJlYWRvbmx5IiwiSU5QVVQ6OnJlcXVpcmVkIiwiSU5QVVQ6OnNpemUiLCJJ +TlBVVDo6c3RlcCIsIklOUFVUOjp0YWJpbmRleCIsIklOUFVUOjp0eXBlIiwiSU5QVVQ6OnVzZW1hcCIs +IklOUFVUOjp2YWx1ZSIsIklOUzo6ZGF0ZXRpbWUiLCJLRVlHRU46OmRpc2FibGVkIiwiS0VZR0VOOjpr +ZXl0eXBlIiwiS0VZR0VOOjpuYW1lIiwiTEFCRUw6OmFjY2Vzc2tleSIsIkxBQkVMOjpmb3IiLCJMRUdF +TkQ6OmFjY2Vzc2tleSIsIkxFR0VORDo6YWxpZ24iLCJMSTo6dHlwZSIsIkxJOjp2YWx1ZSIsIkxJTks6 +OnNpemVzIiwiTUFQOjpuYW1lIiwiTUVOVTo6Y29tcGFjdCIsIk1FTlU6OmxhYmVsIiwiTUVOVTo6dHlw +ZSIsIk1FVEVSOjpoaWdoIiwiTUVURVI6OmxvdyIsIk1FVEVSOjptYXgiLCJNRVRFUjo6bWluIiwiTUVU +RVI6OnZhbHVlIiwiT0JKRUNUOjp0eXBlbXVzdG1hdGNoIiwiT0w6OmNvbXBhY3QiLCJPTDo6cmV2ZXJz +ZWQiLCJPTDo6c3RhcnQiLCJPTDo6dHlwZSIsIk9QVEdST1VQOjpkaXNhYmxlZCIsIk9QVEdST1VQOjps +YWJlbCIsIk9QVElPTjo6ZGlzYWJsZWQiLCJPUFRJT046OmxhYmVsIiwiT1BUSU9OOjpzZWxlY3RlZCIs +Ik9QVElPTjo6dmFsdWUiLCJPVVRQVVQ6OmZvciIsIk9VVFBVVDo6bmFtZSIsIlA6OmFsaWduIiwiUFJF +Ojp3aWR0aCIsIlBST0dSRVNTOjptYXgiLCJQUk9HUkVTUzo6bWluIiwiUFJPR1JFU1M6OnZhbHVlIiwi +U0VMRUNUOjphdXRvY29tcGxldGUiLCJTRUxFQ1Q6OmRpc2FibGVkIiwiU0VMRUNUOjptdWx0aXBsZSIs +IlNFTEVDVDo6bmFtZSIsIlNFTEVDVDo6cmVxdWlyZWQiLCJTRUxFQ1Q6OnNpemUiLCJTRUxFQ1Q6OnRh +YmluZGV4IiwiU09VUkNFOjp0eXBlIiwiVEFCTEU6OmFsaWduIiwiVEFCTEU6OmJnY29sb3IiLCJUQUJM +RTo6Ym9yZGVyIiwiVEFCTEU6OmNlbGxwYWRkaW5nIiwiVEFCTEU6OmNlbGxzcGFjaW5nIiwiVEFCTEU6 +OmZyYW1lIiwiVEFCTEU6OnJ1bGVzIiwiVEFCTEU6OnN1bW1hcnkiLCJUQUJMRTo6d2lkdGgiLCJUQk9E +WTo6YWxpZ24iLCJUQk9EWTo6Y2hhciIsIlRCT0RZOjpjaGFyb2ZmIiwiVEJPRFk6OnZhbGlnbiIsIlRE +OjphYmJyIiwiVEQ6OmFsaWduIiwiVEQ6OmF4aXMiLCJURDo6Ymdjb2xvciIsIlREOjpjaGFyIiwiVEQ6 +OmNoYXJvZmYiLCJURDo6Y29sc3BhbiIsIlREOjpoZWFkZXJzIiwiVEQ6OmhlaWdodCIsIlREOjpub3dy +YXAiLCJURDo6cm93c3BhbiIsIlREOjpzY29wZSIsIlREOjp2YWxpZ24iLCJURDo6d2lkdGgiLCJURVhU +QVJFQTo6YWNjZXNza2V5IiwiVEVYVEFSRUE6OmF1dG9jb21wbGV0ZSIsIlRFWFRBUkVBOjpjb2xzIiwi +VEVYVEFSRUE6OmRpc2FibGVkIiwiVEVYVEFSRUE6OmlucHV0bW9kZSIsIlRFWFRBUkVBOjpuYW1lIiwi +VEVYVEFSRUE6OnBsYWNlaG9sZGVyIiwiVEVYVEFSRUE6OnJlYWRvbmx5IiwiVEVYVEFSRUE6OnJlcXVp +cmVkIiwiVEVYVEFSRUE6OnJvd3MiLCJURVhUQVJFQTo6dGFiaW5kZXgiLCJURVhUQVJFQTo6d3JhcCIs +IlRGT09UOjphbGlnbiIsIlRGT09UOjpjaGFyIiwiVEZPT1Q6OmNoYXJvZmYiLCJURk9PVDo6dmFsaWdu +IiwiVEg6OmFiYnIiLCJUSDo6YWxpZ24iLCJUSDo6YXhpcyIsIlRIOjpiZ2NvbG9yIiwiVEg6OmNoYXIi +LCJUSDo6Y2hhcm9mZiIsIlRIOjpjb2xzcGFuIiwiVEg6OmhlYWRlcnMiLCJUSDo6aGVpZ2h0IiwiVEg6 +Om5vd3JhcCIsIlRIOjpyb3dzcGFuIiwiVEg6OnNjb3BlIiwiVEg6OnZhbGlnbiIsIlRIOjp3aWR0aCIs +IlRIRUFEOjphbGlnbiIsIlRIRUFEOjpjaGFyIiwiVEhFQUQ6OmNoYXJvZmYiLCJUSEVBRDo6dmFsaWdu +IiwiVFI6OmFsaWduIiwiVFI6OmJnY29sb3IiLCJUUjo6Y2hhciIsIlRSOjpjaGFyb2ZmIiwiVFI6OnZh +bGlnbiIsIlRSQUNLOjpkZWZhdWx0IiwiVFJBQ0s6OmtpbmQiLCJUUkFDSzo6bGFiZWwiLCJUUkFDSzo6 +c3JjbGFuZyIsIlVMOjpjb21wYWN0IiwiVUw6OnR5cGUiLCJWSURFTzo6Y29udHJvbHMiLCJWSURFTzo6 +aGVpZ2h0IiwiVklERU86Omxvb3AiLCJWSURFTzo6bWVkaWFncm91cCIsIlZJREVPOjptdXRlZCIsIlZJ +REVPOjpwcmVsb2FkIiwiVklERU86OndpZHRoIl0pLHQuaSkKQy5WQz1ILlZNKHMoWzAsMCw2NTQ5MCw0 +NTA1NSw2NTUzNSwzNDgxNSw2NTUzNCwxODQzMV0pLHQuVikKQy5tSz1ILlZNKHMoWzAsMCwyNjYyNCwx +MDIzLDY1NTM0LDIwNDcsNjU1MzQsMjA0N10pLHQuVikKQy5TcT1ILlZNKHMoWyJIRUFEIiwiQVJFQSIs +IkJBU0UiLCJCQVNFRk9OVCIsIkJSIiwiQ09MIiwiQ09MR1JPVVAiLCJFTUJFRCIsIkZSQU1FIiwiRlJB +TUVTRVQiLCJIUiIsIklNQUdFIiwiSU1HIiwiSU5QVVQiLCJJU0lOREVYIiwiTElOSyIsIk1FVEEiLCJQ +QVJBTSIsIlNPVVJDRSIsIlNUWUxFIiwiVElUTEUiLCJXQlIiXSksdC5pKQpDLmhVPUguVk0ocyhbXSks +dC5iKQpDLmRuPUguVk0ocyhbXSksSC5OMCgiamQ8TEwqPiIpKQpDLnhEPUguVk0ocyhbXSksdC5pKQpD +LnRvPUguVk0ocyhbMCwwLDMyNzIyLDEyMjg3LDY1NTM0LDM0ODE1LDY1NTM0LDE4NDMxXSksdC5WKQpD +LnJrPUguVk0ocyhbQy5BZCxDLm5lLEMubXksQy5yeCxDLndWLEMuZlJdKSxILk4wKCJqZDxINyo+Iikp +CkMuRjM9SC5WTShzKFswLDAsMjQ1NzYsMTAyMyw2NTUzNCwzNDgxNSw2NTUzNCwxODQzMV0pLHQuVikK +Qy5lYT1ILlZNKHMoWzAsMCwzMjc1NCwxMTI2Myw2NTUzNCwzNDgxNSw2NTUzNCwxODQzMV0pLHQuVikK +Qy5aSj1ILlZNKHMoWzAsMCwzMjcyMiwxMjI4Nyw2NTUzNSwzNDgxNSw2NTUzNCwxODQzMV0pLHQuVikK +Qy5XZD1ILlZNKHMoWzAsMCw2NTQ5MCwxMjI4Nyw2NTUzNSwzNDgxNSw2NTUzNCwxODQzMV0pLHQuVikK +Qy5ReD1ILlZNKHMoWyJiaW5kIiwiaWYiLCJyZWYiLCJyZXBlYXQiLCJzeW50YXgiXSksdC5pKQpDLkJJ +PUguVk0ocyhbIkE6OmhyZWYiLCJBUkVBOjpocmVmIiwiQkxPQ0tRVU9URTo6Y2l0ZSIsIkJPRFk6OmJh +Y2tncm91bmQiLCJDT01NQU5EOjppY29uIiwiREVMOjpjaXRlIiwiRk9STTo6YWN0aW9uIiwiSU1HOjpz +cmMiLCJJTlBVVDo6c3JjIiwiSU5TOjpjaXRlIiwiUTo6Y2l0ZSIsIlZJREVPOjpwb3N0ZXIiXSksdC5p +KQpDLkR4PW5ldyBILkxQKDAse30sQy54RCxILk4wKCJMUDxxVSosek08ajgqPio+IikpCkMuQ009bmV3 +IEguTFAoMCx7fSxDLnhELEguTjAoIkxQPHFVKixxVSo+IikpCkMuaUg9SC5WTShzKFtdKSxILk4wKCJq +ZDxHRCo+IikpCkMuV089bmV3IEguTFAoMCx7fSxDLmlILEguTjAoIkxQPEdEKixAPiIpKQpDLlkyPW5l +dyBMLk85KCJOYXZpZ2F0aW9uVHJlZU5vZGVUeXBlLmRpcmVjdG9yeSIpCkMucmY9bmV3IEwuTzkoIk5h +dmlnYXRpb25UcmVlTm9kZVR5cGUuZmlsZSIpCkMuVGU9bmV3IEgud3YoImNhbGwiKQpDLm9FPW5ldyBQ +LkdZKCExKQpDLndRPW5ldyBQLkZ5KG51bGwsMil9KSgpOyhmdW5jdGlvbiBzdGF0aWNGaWVsZHMoKXsk +LnptPW51bGwKJC55aj0wCiQubUo9bnVsbAokLlA0PW51bGwKJC5ORj1udWxsCiQuVFg9bnVsbAokLng3 +PW51bGwKJC5udz1udWxsCiQudnY9bnVsbAokLkJ2PW51bGwKJC5TNj1udWxsCiQuazg9bnVsbAokLm1n +PW51bGwKJC5VRD0hMQokLlgzPUMuTlUKJC54Zz1ILlZNKFtdLEguTjAoImpkPE1oPiIpKQokLnhvPW51 +bGwKJC5CTz1udWxsCiQubHQ9bnVsbAokLkVVPW51bGwKJC5vcj1QLkZsKHQuTix0LlkpCiQuSVI9bnVs +bAokLkk2PW51bGwKJC5GZj1udWxsfSkoKTsoZnVuY3Rpb24gbGF6eUluaXRpYWxpemVycygpe3ZhciBz +PWh1bmtIZWxwZXJzLmxhenlGaW5hbCxyPWh1bmtIZWxwZXJzLmxhenlPbGQKcygkLCJmYSIsInciLGZ1 +bmN0aW9uKCl7cmV0dXJuIEguWWcoIl8kZGFydF9kYXJ0Q2xvc3VyZSIpfSkKcygkLCJVMiIsIlNuIixm +dW5jdGlvbigpe3JldHVybiBILmNNKEguUzcoewp0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiIkcmVj +ZWl2ZXIkIn19KSl9KQpzKCQsInhxIiwibHEiLGZ1bmN0aW9uKCl7cmV0dXJuIEguY00oSC5TNyh7JG1l +dGhvZCQ6bnVsbCwKdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iJHJlY2VpdmVyJCJ9fSkpfSkKcygk +LCJSMSIsIk45IixmdW5jdGlvbigpe3JldHVybiBILmNNKEguUzcobnVsbCkpfSkKcygkLCJmTiIsImlJ +IixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dmFyICRhcmd1bWVudHNFeHByJD0iJGFy +Z3VtZW50cyQiCnRyeXtudWxsLiRtZXRob2QkKCRhcmd1bWVudHNFeHByJCl9Y2F0Y2gocSl7cmV0dXJu +IHEubWVzc2FnZX19KCkpfSkKcygkLCJxaSIsIlVOIixmdW5jdGlvbigpe3JldHVybiBILmNNKEguUzco +dm9pZCAwKSl9KQpzKCQsInJaIiwiWmgiLGZ1bmN0aW9uKCl7cmV0dXJuIEguY00oZnVuY3Rpb24oKXt2 +YXIgJGFyZ3VtZW50c0V4cHIkPSIkYXJndW1lbnRzJCIKdHJ5eyh2b2lkIDApLiRtZXRob2QkKCRhcmd1 +bWVudHNFeHByJCl9Y2F0Y2gocSl7cmV0dXJuIHEubWVzc2FnZX19KCkpfSkKcygkLCJrcSIsInJOIixm +dW5jdGlvbigpe3JldHVybiBILmNNKEguTWoobnVsbCkpfSkKcygkLCJ0dCIsImMzIixmdW5jdGlvbigp +e3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dHJ5e251bGwuJG1ldGhvZCR9Y2F0Y2gocSl7cmV0dXJuIHEu +bWVzc2FnZX19KCkpfSkKcygkLCJkdCIsIkhLIixmdW5jdGlvbigpe3JldHVybiBILmNNKEguTWoodm9p +ZCAwKSl9KQpzKCQsIkE3IiwicjEiLGZ1bmN0aW9uKCl7cmV0dXJuIEguY00oZnVuY3Rpb24oKXt0cnl7 +KHZvaWQgMCkuJG1ldGhvZCR9Y2F0Y2gocSl7cmV0dXJuIHEubWVzc2FnZX19KCkpfSkKcygkLCJXYyIs +InV0IixmdW5jdGlvbigpe3JldHVybiBQLk9qKCl9KQpzKCQsImtoIiwicmYiLGZ1bmN0aW9uKCl7cmV0 +dXJuIG5ldyBQLnhyKCkuJDAoKX0pCnMoJCwiZEgiLCJIRyIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFAu +TnooKS4kMCgpfSkKcygkLCJoaiIsIlY3IixmdW5jdGlvbigpe3JldHVybiBuZXcgSW50OEFycmF5KEgu +WEYoSC5WTShbLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIs +LTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIs +LTEsLTIsLTIsLTIsLTIsLTIsNjIsLTIsNjIsLTIsNjMsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAs +NjEsLTIsLTIsLTIsLTEsLTIsLTIsLTIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwx +NSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwtMiwtMiwtMiwtMiw2MywtMiwyNiwyNywyOCwy +OSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0 +OSw1MCw1MSwtMiwtMiwtMiwtMiwtMl0sdC5hKSkpfSkKcygkLCJNNSIsIndRIixmdW5jdGlvbigpe3Jl +dHVybiB0eXBlb2YgcHJvY2VzcyE9InVuZGVmaW5lZCImJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu +Y2FsbChwcm9jZXNzKT09IltvYmplY3QgcHJvY2Vzc10iJiZwcm9jZXNzLnBsYXRmb3JtPT0id2luMzIi +fSkKcygkLCJtZiIsIno0IixmdW5jdGlvbigpe3JldHVybiBQLm51KCJeW1xcLVxcLjAtOUEtWl9hLXp+ +XSokIil9KQpzKCQsIk9RIiwidloiLGZ1bmN0aW9uKCl7cmV0dXJuIFAuS04oKX0pCnMoJCwiU0MiLCJB +TiIsZnVuY3Rpb24oKXtyZXR1cm4gUC50TShbIkEiLCJBQkJSIiwiQUNST05ZTSIsIkFERFJFU1MiLCJB +UkVBIiwiQVJUSUNMRSIsIkFTSURFIiwiQVVESU8iLCJCIiwiQkRJIiwiQkRPIiwiQklHIiwiQkxPQ0tR +VU9URSIsIkJSIiwiQlVUVE9OIiwiQ0FOVkFTIiwiQ0FQVElPTiIsIkNFTlRFUiIsIkNJVEUiLCJDT0RF +IiwiQ09MIiwiQ09MR1JPVVAiLCJDT01NQU5EIiwiREFUQSIsIkRBVEFMSVNUIiwiREQiLCJERUwiLCJE +RVRBSUxTIiwiREZOIiwiRElSIiwiRElWIiwiREwiLCJEVCIsIkVNIiwiRklFTERTRVQiLCJGSUdDQVBU +SU9OIiwiRklHVVJFIiwiRk9OVCIsIkZPT1RFUiIsIkZPUk0iLCJIMSIsIkgyIiwiSDMiLCJINCIsIkg1 +IiwiSDYiLCJIRUFERVIiLCJIR1JPVVAiLCJIUiIsIkkiLCJJRlJBTUUiLCJJTUciLCJJTlBVVCIsIklO +UyIsIktCRCIsIkxBQkVMIiwiTEVHRU5EIiwiTEkiLCJNQVAiLCJNQVJLIiwiTUVOVSIsIk1FVEVSIiwi +TkFWIiwiTk9CUiIsIk9MIiwiT1BUR1JPVVAiLCJPUFRJT04iLCJPVVRQVVQiLCJQIiwiUFJFIiwiUFJP +R1JFU1MiLCJRIiwiUyIsIlNBTVAiLCJTRUNUSU9OIiwiU0VMRUNUIiwiU01BTEwiLCJTT1VSQ0UiLCJT +UEFOIiwiU1RSSUtFIiwiU1RST05HIiwiU1VCIiwiU1VNTUFSWSIsIlNVUCIsIlRBQkxFIiwiVEJPRFki +LCJURCIsIlRFWFRBUkVBIiwiVEZPT1QiLCJUSCIsIlRIRUFEIiwiVElNRSIsIlRSIiwiVFJBQ0siLCJU +VCIsIlUiLCJVTCIsIlZBUiIsIlZJREVPIiwiV0JSIl0sdC5OKX0pCnMoJCwiWDQiLCJoRyIsZnVuY3Rp +b24oKXtyZXR1cm4gUC5udSgiXlxcUyskIil9KQpzKCQsIndPIiwib3ciLGZ1bmN0aW9uKCl7cmV0dXJu +IFAuTkQoc2VsZil9KQpzKCQsImt0IiwiUjgiLGZ1bmN0aW9uKCl7cmV0dXJuIEguWWcoIl8kZGFydF9k +YXJ0T2JqZWN0Iil9KQpzKCQsImZLIiwia0kiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIERhcnRP +YmplY3QoYSl7dGhpcy5vPWF9fSkKcigkLCJxdCIsInpCIixmdW5jdGlvbigpe3JldHVybiBuZXcgVC5t +USgpfSkKcigkLCJPbCIsIlVFIixmdW5jdGlvbigpe3JldHVybiBQLmhLKEMub2wuZ21XKFcueDMoKSku +aHJlZikuZ2hZKCkucSgwLCJhdXRoVG9rZW4iKX0pCnIoJCwiaFQiLCJ5UCIsZnVuY3Rpb24oKXtyZXR1 +cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0LWxpc3QgLnBhbmVsLWNvbnRlbnQiKX0pCnIoJCwi +VzYiLCJoTCIsZnVuY3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0LXBhbmVs +IC5wYW5lbC1jb250ZW50Iil9KQpyKCQsIlRSIiwiRFciLGZ1bmN0aW9uKCl7cmV0dXJuIFcuWnIoKS5x +dWVyeVNlbGVjdG9yKCJmb290ZXIiKX0pCnIoJCwiRVkiLCJmaSIsZnVuY3Rpb24oKXtyZXR1cm4gVy5a +cigpLnF1ZXJ5U2VsZWN0b3IoImhlYWRlciIpfSkKcigkLCJiQSIsImMwIixmdW5jdGlvbigpe3JldHVy +biBXLlpyKCkucXVlcnlTZWxlY3RvcigiI21pZ3JhdGUtdW5pdC1zdGF0dXMtaWNvbiIpfSkKcigkLCJ0 +MCIsImJOIixmdW5jdGlvbigpe3JldHVybiBXLlpyKCkucXVlcnlTZWxlY3RvcigiI21pZ3JhdGUtdW5p +dC1zdGF0dXMtaWNvbi1sYWJlbCIpfSkKcigkLCJhdiIsIkQ5IixmdW5jdGlvbigpe3JldHVybiBXLlpy +KCkucXVlcnlTZWxlY3RvcigiI3VuaXQtbmFtZSIpfSkKcigkLCJmZSIsIktHIixmdW5jdGlvbigpe3Jl +dHVybiBuZXcgTC5YQSgpfSkKcygkLCJlbyIsIm5VIixmdW5jdGlvbigpe3JldHVybiBuZXcgTS5sSSgk +LkhrKCkpfSkKcygkLCJ5ciIsImJEIixmdW5jdGlvbigpe3JldHVybiBuZXcgRS5PRihQLm51KCIvIiks +UC5udSgiW14vXSQiKSxQLm51KCJeLyIpKX0pCnMoJCwiTWsiLCJLayIsZnVuY3Rpb24oKXtyZXR1cm4g +bmV3IEwuSVYoUC5udSgiWy9cXFxcXSIpLFAubnUoIlteL1xcXFxdJCIpLFAubnUoIl4oXFxcXFxcXFxb +XlxcXFxdK1xcXFxbXlxcXFwvXSt8W2EtekEtWl06Wy9cXFxcXSkiKSxQLm51KCJeWy9cXFxcXSg/IVsv +XFxcXF0pIikpfSkKcygkLCJhayIsIkViIixmdW5jdGlvbigpe3JldHVybiBuZXcgRi5ydShQLm51KCIv +IiksUC5udSgiKF5bYS16QS1aXVstKy5hLXpBLVpcXGRdKjovL3xbXi9dKSQiKSxQLm51KCJbYS16QS1a +XVstKy5hLXpBLVpcXGRdKjovL1teL10qIiksUC5udSgiXi8iKSl9KQpzKCQsImxzIiwiSGsiLGZ1bmN0 +aW9uKCl7cmV0dXJuIE8uUmgoKX0pfSkoKTsoZnVuY3Rpb24gbmF0aXZlU3VwcG9ydCgpeyFmdW5jdGlv +bigpe3ZhciBzPWZ1bmN0aW9uKGEpe3ZhciBtPXt9Cm1bYV09MQpyZXR1cm4gT2JqZWN0LmtleXMoaHVu +a0hlbHBlcnMuY29udmVydFRvRmFzdE9iamVjdChtKSlbMF19CnYuZ2V0SXNvbGF0ZVRhZz1mdW5jdGlv +bihhKXtyZXR1cm4gcygiX19fZGFydF8iK2Erdi5pc29sYXRlVGFnKX0KdmFyIHI9Il9fX2RhcnRfaXNv +bGF0ZV90YWdzXyIKdmFyIHE9T2JqZWN0W3JdfHwoT2JqZWN0W3JdPU9iamVjdC5jcmVhdGUobnVsbCkp +CnZhciBwPSJfWnhZeFgiCmZvcih2YXIgbz0wOztvKyspe3ZhciBuPXMocCsiXyIrbysiXyIpCmlmKCEo +biBpbiBxKSl7cVtuXT0xCnYuaXNvbGF0ZVRhZz1uCmJyZWFrfX12LmRpc3BhdGNoUHJvcGVydHlOYW1l +PXYuZ2V0SXNvbGF0ZVRhZygiZGlzcGF0Y2hfcmVjb3JkIil9KCkKaHVua0hlbHBlcnMuc2V0T3JVcGRh +dGVJbnRlcmNlcHRvcnNCeVRhZyh7RE9NRXJyb3I6Si5HdixNZWRpYUVycm9yOkouR3YsTmF2aWdhdG9y +OkouR3YsTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlOkouR3YsTmF2aWdhdG9yVXNlck1lZGlhRXJy +b3I6Si5HdixPdmVyY29uc3RyYWluZWRFcnJvcjpKLkd2LFBvc2l0aW9uRXJyb3I6Si5HdixSYW5nZTpK +Lkd2LFNRTEVycm9yOkouR3YsRGF0YVZpZXc6SC5FVCxBcnJheUJ1ZmZlclZpZXc6SC5FVCxGbG9hdDMy +QXJyYXk6SC5EZyxGbG9hdDY0QXJyYXk6SC5EZyxJbnQxNkFycmF5OkgueGosSW50MzJBcnJheTpILmRF +LEludDhBcnJheTpILlpBLFVpbnQxNkFycmF5OkguZFQsVWludDMyQXJyYXk6SC5QcSxVaW50OENsYW1w +ZWRBcnJheTpILmVFLENhbnZhc1BpeGVsQXJyYXk6SC5lRSxVaW50OEFycmF5OkguVjYsSFRNTEF1ZGlv +RWxlbWVudDpXLnFFLEhUTUxCUkVsZW1lbnQ6Vy5xRSxIVE1MQnV0dG9uRWxlbWVudDpXLnFFLEhUTUxD +YW52YXNFbGVtZW50OlcucUUsSFRNTENvbnRlbnRFbGVtZW50OlcucUUsSFRNTERMaXN0RWxlbWVudDpX +LnFFLEhUTUxEYXRhRWxlbWVudDpXLnFFLEhUTUxEYXRhTGlzdEVsZW1lbnQ6Vy5xRSxIVE1MRGV0YWls +c0VsZW1lbnQ6Vy5xRSxIVE1MRGlhbG9nRWxlbWVudDpXLnFFLEhUTUxEaXZFbGVtZW50OlcucUUsSFRN +TEVtYmVkRWxlbWVudDpXLnFFLEhUTUxGaWVsZFNldEVsZW1lbnQ6Vy5xRSxIVE1MSFJFbGVtZW50Olcu +cUUsSFRNTEhlYWRFbGVtZW50OlcucUUsSFRNTEhlYWRpbmdFbGVtZW50OlcucUUsSFRNTEh0bWxFbGVt +ZW50OlcucUUsSFRNTElGcmFtZUVsZW1lbnQ6Vy5xRSxIVE1MSW1hZ2VFbGVtZW50OlcucUUsSFRNTElu +cHV0RWxlbWVudDpXLnFFLEhUTUxMSUVsZW1lbnQ6Vy5xRSxIVE1MTGFiZWxFbGVtZW50OlcucUUsSFRN +TExlZ2VuZEVsZW1lbnQ6Vy5xRSxIVE1MTGlua0VsZW1lbnQ6Vy5xRSxIVE1MTWFwRWxlbWVudDpXLnFF +LEhUTUxNZWRpYUVsZW1lbnQ6Vy5xRSxIVE1MTWVudUVsZW1lbnQ6Vy5xRSxIVE1MTWV0YUVsZW1lbnQ6 +Vy5xRSxIVE1MTWV0ZXJFbGVtZW50OlcucUUsSFRNTE1vZEVsZW1lbnQ6Vy5xRSxIVE1MT0xpc3RFbGVt +ZW50OlcucUUsSFRNTE9iamVjdEVsZW1lbnQ6Vy5xRSxIVE1MT3B0R3JvdXBFbGVtZW50OlcucUUsSFRN +TE9wdGlvbkVsZW1lbnQ6Vy5xRSxIVE1MT3V0cHV0RWxlbWVudDpXLnFFLEhUTUxQYXJhbUVsZW1lbnQ6 +Vy5xRSxIVE1MUGljdHVyZUVsZW1lbnQ6Vy5xRSxIVE1MUHJlRWxlbWVudDpXLnFFLEhUTUxQcm9ncmVz +c0VsZW1lbnQ6Vy5xRSxIVE1MUXVvdGVFbGVtZW50OlcucUUsSFRNTFNjcmlwdEVsZW1lbnQ6Vy5xRSxI +VE1MU2hhZG93RWxlbWVudDpXLnFFLEhUTUxTbG90RWxlbWVudDpXLnFFLEhUTUxTb3VyY2VFbGVtZW50 +OlcucUUsSFRNTFNwYW5FbGVtZW50OlcucUUsSFRNTFN0eWxlRWxlbWVudDpXLnFFLEhUTUxUYWJsZUNh +cHRpb25FbGVtZW50OlcucUUsSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6Vy5xRSxIVE1MVGFibGVEYXRhQ2Vs +bEVsZW1lbnQ6Vy5xRSxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudDpXLnFFLEhUTUxUYWJsZUNvbEVs +ZW1lbnQ6Vy5xRSxIVE1MVGV4dEFyZWFFbGVtZW50OlcucUUsSFRNTFRpbWVFbGVtZW50OlcucUUsSFRN +TFRpdGxlRWxlbWVudDpXLnFFLEhUTUxUcmFja0VsZW1lbnQ6Vy5xRSxIVE1MVUxpc3RFbGVtZW50Olcu +cUUsSFRNTFVua25vd25FbGVtZW50OlcucUUsSFRNTFZpZGVvRWxlbWVudDpXLnFFLEhUTUxEaXJlY3Rv +cnlFbGVtZW50OlcucUUsSFRNTEZvbnRFbGVtZW50OlcucUUsSFRNTEZyYW1lRWxlbWVudDpXLnFFLEhU +TUxGcmFtZVNldEVsZW1lbnQ6Vy5xRSxIVE1MTWFycXVlZUVsZW1lbnQ6Vy5xRSxIVE1MRWxlbWVudDpX +LnFFLEhUTUxBbmNob3JFbGVtZW50OlcuR2gsSFRNTEFyZWFFbGVtZW50OlcuZlksSFRNTEJhc2VFbGVt +ZW50OlcubkIsQmxvYjpXLkF6LEhUTUxCb2R5RWxlbWVudDpXLlFQLENEQVRBU2VjdGlvbjpXLm54LENo +YXJhY3RlckRhdGE6Vy5ueCxDb21tZW50OlcubngsUHJvY2Vzc2luZ0luc3RydWN0aW9uOlcubngsVGV4 +dDpXLm54LENTU1N0eWxlRGVjbGFyYXRpb246Vy5vSixNU1N0eWxlQ1NTUHJvcGVydGllczpXLm9KLENT +UzJQcm9wZXJ0aWVzOlcub0osWE1MRG9jdW1lbnQ6Vy5RRixEb2N1bWVudDpXLlFGLERPTUV4Y2VwdGlv +bjpXLk5oLERPTUltcGxlbWVudGF0aW9uOlcuYWUsRE9NUmVjdFJlYWRPbmx5OlcuSUIsRE9NVG9rZW5M +aXN0OlcubjcsRWxlbWVudDpXLmN2LEFib3J0UGF5bWVudEV2ZW50OlcuZWEsQW5pbWF0aW9uRXZlbnQ6 +Vy5lYSxBbmltYXRpb25QbGF5YmFja0V2ZW50OlcuZWEsQXBwbGljYXRpb25DYWNoZUVycm9yRXZlbnQ6 +Vy5lYSxCYWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50OlcuZWEsQmFja2dyb3VuZEZldGNoRXZlbnQ6Vy5l +YSxCYWNrZ3JvdW5kRmV0Y2hGYWlsRXZlbnQ6Vy5lYSxCYWNrZ3JvdW5kRmV0Y2hlZEV2ZW50OlcuZWEs +QmVmb3JlSW5zdGFsbFByb21wdEV2ZW50OlcuZWEsQmVmb3JlVW5sb2FkRXZlbnQ6Vy5lYSxCbG9iRXZl +bnQ6Vy5lYSxDYW5NYWtlUGF5bWVudEV2ZW50OlcuZWEsQ2xpcGJvYXJkRXZlbnQ6Vy5lYSxDbG9zZUV2 +ZW50OlcuZWEsQ3VzdG9tRXZlbnQ6Vy5lYSxEZXZpY2VNb3Rpb25FdmVudDpXLmVhLERldmljZU9yaWVu +dGF0aW9uRXZlbnQ6Vy5lYSxFcnJvckV2ZW50OlcuZWEsRXh0ZW5kYWJsZUV2ZW50OlcuZWEsRXh0ZW5k +YWJsZU1lc3NhZ2VFdmVudDpXLmVhLEZldGNoRXZlbnQ6Vy5lYSxGb250RmFjZVNldExvYWRFdmVudDpX +LmVhLEZvcmVpZ25GZXRjaEV2ZW50OlcuZWEsR2FtZXBhZEV2ZW50OlcuZWEsSGFzaENoYW5nZUV2ZW50 +OlcuZWEsSW5zdGFsbEV2ZW50OlcuZWEsTWVkaWFFbmNyeXB0ZWRFdmVudDpXLmVhLE1lZGlhS2V5TWVz +c2FnZUV2ZW50OlcuZWEsTWVkaWFRdWVyeUxpc3RFdmVudDpXLmVhLE1lZGlhU3RyZWFtRXZlbnQ6Vy5l +YSxNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6Vy5lYSxNZXNzYWdlRXZlbnQ6Vy5lYSxNSURJQ29ubmVjdGlv +bkV2ZW50OlcuZWEsTUlESU1lc3NhZ2VFdmVudDpXLmVhLE11dGF0aW9uRXZlbnQ6Vy5lYSxOb3RpZmlj +YXRpb25FdmVudDpXLmVhLFBhZ2VUcmFuc2l0aW9uRXZlbnQ6Vy5lYSxQYXltZW50UmVxdWVzdEV2ZW50 +OlcuZWEsUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDpXLmVhLFBvcFN0YXRlRXZlbnQ6Vy5lYSxQcmVz +ZW50YXRpb25Db25uZWN0aW9uQXZhaWxhYmxlRXZlbnQ6Vy5lYSxQcmVzZW50YXRpb25Db25uZWN0aW9u +Q2xvc2VFdmVudDpXLmVhLFByb21pc2VSZWplY3Rpb25FdmVudDpXLmVhLFB1c2hFdmVudDpXLmVhLFJU +Q0RhdGFDaGFubmVsRXZlbnQ6Vy5lYSxSVENEVE1GVG9uZUNoYW5nZUV2ZW50OlcuZWEsUlRDUGVlckNv +bm5lY3Rpb25JY2VFdmVudDpXLmVhLFJUQ1RyYWNrRXZlbnQ6Vy5lYSxTZWN1cml0eVBvbGljeVZpb2xh +dGlvbkV2ZW50OlcuZWEsU2Vuc29yRXJyb3JFdmVudDpXLmVhLFNwZWVjaFJlY29nbml0aW9uRXJyb3I6 +Vy5lYSxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OlcuZWEsU3BlZWNoU3ludGhlc2lzRXZlbnQ6Vy5lYSxT +dG9yYWdlRXZlbnQ6Vy5lYSxTeW5jRXZlbnQ6Vy5lYSxUcmFja0V2ZW50OlcuZWEsVHJhbnNpdGlvbkV2 +ZW50OlcuZWEsV2ViS2l0VHJhbnNpdGlvbkV2ZW50OlcuZWEsVlJEZXZpY2VFdmVudDpXLmVhLFZSRGlz +cGxheUV2ZW50OlcuZWEsVlJTZXNzaW9uRXZlbnQ6Vy5lYSxNb2pvSW50ZXJmYWNlUmVxdWVzdEV2ZW50 +OlcuZWEsVVNCQ29ubmVjdGlvbkV2ZW50OlcuZWEsSURCVmVyc2lvbkNoYW5nZUV2ZW50OlcuZWEsQXVk +aW9Qcm9jZXNzaW5nRXZlbnQ6Vy5lYSxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6Vy5lYSxXZWJH +TENvbnRleHRFdmVudDpXLmVhLEV2ZW50OlcuZWEsSW5wdXRFdmVudDpXLmVhLFN1Ym1pdEV2ZW50Olcu +ZWEsRXZlbnRUYXJnZXQ6Vy5EMCxGaWxlOlcuaEgsSFRNTEZvcm1FbGVtZW50OlcuaDQsSGlzdG9yeTpX +LmJyLEhUTUxEb2N1bWVudDpXLlZiLFhNTEh0dHBSZXF1ZXN0OlcuZkosWE1MSHR0cFJlcXVlc3RFdmVu +dFRhcmdldDpXLndhLEltYWdlRGF0YTpXLlNnLExvY2F0aW9uOlcudzcsTW91c2VFdmVudDpXLkFqLERy +YWdFdmVudDpXLkFqLFBvaW50ZXJFdmVudDpXLkFqLFdoZWVsRXZlbnQ6Vy5BaixEb2N1bWVudEZyYWdt +ZW50OlcudUgsU2hhZG93Um9vdDpXLnVILERvY3VtZW50VHlwZTpXLnVILE5vZGU6Vy51SCxOb2RlTGlz +dDpXLkJILFJhZGlvTm9kZUxpc3Q6Vy5CSCxIVE1MUGFyYWdyYXBoRWxlbWVudDpXLlNOLFByb2dyZXNz +RXZlbnQ6Vy5ldyxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6Vy5ldyxIVE1MU2VsZWN0RWxlbWVudDpXLmxw +LEhUTUxUYWJsZUVsZW1lbnQ6Vy5UYixIVE1MVGFibGVSb3dFbGVtZW50OlcuSXYsSFRNTFRhYmxlU2Vj +dGlvbkVsZW1lbnQ6Vy5XUCxIVE1MVGVtcGxhdGVFbGVtZW50OlcueVksQ29tcG9zaXRpb25FdmVudDpX +Lnc2LEZvY3VzRXZlbnQ6Vy53NixLZXlib2FyZEV2ZW50OlcudzYsVGV4dEV2ZW50OlcudzYsVG91Y2hF +dmVudDpXLnc2LFVJRXZlbnQ6Vy53NixXaW5kb3c6Vy5LNSxET01XaW5kb3c6Vy5LNSxEZWRpY2F0ZWRX +b3JrZXJHbG9iYWxTY29wZTpXLkNtLFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTpXLkNtLFNoYXJlZFdv +cmtlckdsb2JhbFNjb3BlOlcuQ20sV29ya2VyR2xvYmFsU2NvcGU6Vy5DbSxBdHRyOlcuQ1EsQ2xpZW50 +UmVjdDpXLnc0LERPTVJlY3Q6Vy53NCxOYW1lZE5vZGVNYXA6Vy5yaCxNb3pOYW1lZEF0dHJNYXA6Vy5y +aCxJREJLZXlSYW5nZTpQLmhGLFNWR1NjcmlwdEVsZW1lbnQ6UC5uZCxTVkdBRWxlbWVudDpQLmhpLFNW +R0FuaW1hdGVFbGVtZW50OlAuaGksU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6UC5oaSxTVkdBbmltYXRl +VHJhbnNmb3JtRWxlbWVudDpQLmhpLFNWR0FuaW1hdGlvbkVsZW1lbnQ6UC5oaSxTVkdDaXJjbGVFbGVt +ZW50OlAuaGksU1ZHQ2xpcFBhdGhFbGVtZW50OlAuaGksU1ZHRGVmc0VsZW1lbnQ6UC5oaSxTVkdEZXNj +RWxlbWVudDpQLmhpLFNWR0Rpc2NhcmRFbGVtZW50OlAuaGksU1ZHRWxsaXBzZUVsZW1lbnQ6UC5oaSxT +VkdGRUJsZW5kRWxlbWVudDpQLmhpLFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OlAuaGksU1ZHRkVDb21w +b25lbnRUcmFuc2ZlckVsZW1lbnQ6UC5oaSxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6UC5oaSxTVkdGRUNv +bnZvbHZlTWF0cml4RWxlbWVudDpQLmhpLFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDpQLmhpLFNW +R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDpQLmhpLFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDpQLmhp +LFNWR0ZFRmxvb2RFbGVtZW50OlAuaGksU1ZHRkVGdW5jQUVsZW1lbnQ6UC5oaSxTVkdGRUZ1bmNCRWxl +bWVudDpQLmhpLFNWR0ZFRnVuY0dFbGVtZW50OlAuaGksU1ZHRkVGdW5jUkVsZW1lbnQ6UC5oaSxTVkdG +RUdhdXNzaWFuQmx1ckVsZW1lbnQ6UC5oaSxTVkdGRUltYWdlRWxlbWVudDpQLmhpLFNWR0ZFTWVyZ2VF +bGVtZW50OlAuaGksU1ZHRkVNZXJnZU5vZGVFbGVtZW50OlAuaGksU1ZHRkVNb3JwaG9sb2d5RWxlbWVu +dDpQLmhpLFNWR0ZFT2Zmc2V0RWxlbWVudDpQLmhpLFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6UC5oaSxT +VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OlAuaGksU1ZHRkVTcG90TGlnaHRFbGVtZW50OlAuaGks +U1ZHRkVUaWxlRWxlbWVudDpQLmhpLFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6UC5oaSxTVkdGaWx0ZXJF +bGVtZW50OlAuaGksU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6UC5oaSxTVkdHRWxlbWVudDpQLmhpLFNW +R0dlb21ldHJ5RWxlbWVudDpQLmhpLFNWR0dyYXBoaWNzRWxlbWVudDpQLmhpLFNWR0ltYWdlRWxlbWVu +dDpQLmhpLFNWR0xpbmVFbGVtZW50OlAuaGksU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OlAuaGksU1ZH +TWFya2VyRWxlbWVudDpQLmhpLFNWR01hc2tFbGVtZW50OlAuaGksU1ZHTWV0YWRhdGFFbGVtZW50OlAu +aGksU1ZHUGF0aEVsZW1lbnQ6UC5oaSxTVkdQYXR0ZXJuRWxlbWVudDpQLmhpLFNWR1BvbHlnb25FbGVt +ZW50OlAuaGksU1ZHUG9seWxpbmVFbGVtZW50OlAuaGksU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OlAu +aGksU1ZHUmVjdEVsZW1lbnQ6UC5oaSxTVkdTZXRFbGVtZW50OlAuaGksU1ZHU3RvcEVsZW1lbnQ6UC5o +aSxTVkdTdHlsZUVsZW1lbnQ6UC5oaSxTVkdTVkdFbGVtZW50OlAuaGksU1ZHU3dpdGNoRWxlbWVudDpQ +LmhpLFNWR1N5bWJvbEVsZW1lbnQ6UC5oaSxTVkdUU3BhbkVsZW1lbnQ6UC5oaSxTVkdUZXh0Q29udGVu +dEVsZW1lbnQ6UC5oaSxTVkdUZXh0RWxlbWVudDpQLmhpLFNWR1RleHRQYXRoRWxlbWVudDpQLmhpLFNW +R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6UC5oaSxTVkdUaXRsZUVsZW1lbnQ6UC5oaSxTVkdVc2VFbGVt +ZW50OlAuaGksU1ZHVmlld0VsZW1lbnQ6UC5oaSxTVkdHcmFkaWVudEVsZW1lbnQ6UC5oaSxTVkdDb21w +b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDpQLmhpLFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6UC5o +aSxTVkdNUGF0aEVsZW1lbnQ6UC5oaSxTVkdFbGVtZW50OlAuaGl9KQpodW5rSGVscGVycy5zZXRPclVw +ZGF0ZUxlYWZUYWdzKHtET01FcnJvcjp0cnVlLE1lZGlhRXJyb3I6dHJ1ZSxOYXZpZ2F0b3I6dHJ1ZSxO +YXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmU6dHJ1ZSxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjp0cnVl +LE92ZXJjb25zdHJhaW5lZEVycm9yOnRydWUsUG9zaXRpb25FcnJvcjp0cnVlLFJhbmdlOnRydWUsU1FM +RXJyb3I6dHJ1ZSxEYXRhVmlldzp0cnVlLEFycmF5QnVmZmVyVmlldzpmYWxzZSxGbG9hdDMyQXJyYXk6 +dHJ1ZSxGbG9hdDY0QXJyYXk6dHJ1ZSxJbnQxNkFycmF5OnRydWUsSW50MzJBcnJheTp0cnVlLEludDhB +cnJheTp0cnVlLFVpbnQxNkFycmF5OnRydWUsVWludDMyQXJyYXk6dHJ1ZSxVaW50OENsYW1wZWRBcnJh +eTp0cnVlLENhbnZhc1BpeGVsQXJyYXk6dHJ1ZSxVaW50OEFycmF5OmZhbHNlLEhUTUxBdWRpb0VsZW1l +bnQ6dHJ1ZSxIVE1MQlJFbGVtZW50OnRydWUsSFRNTEJ1dHRvbkVsZW1lbnQ6dHJ1ZSxIVE1MQ2FudmFz +RWxlbWVudDp0cnVlLEhUTUxDb250ZW50RWxlbWVudDp0cnVlLEhUTUxETGlzdEVsZW1lbnQ6dHJ1ZSxI +VE1MRGF0YUVsZW1lbnQ6dHJ1ZSxIVE1MRGF0YUxpc3RFbGVtZW50OnRydWUsSFRNTERldGFpbHNFbGVt +ZW50OnRydWUsSFRNTERpYWxvZ0VsZW1lbnQ6dHJ1ZSxIVE1MRGl2RWxlbWVudDp0cnVlLEhUTUxFbWJl +ZEVsZW1lbnQ6dHJ1ZSxIVE1MRmllbGRTZXRFbGVtZW50OnRydWUsSFRNTEhSRWxlbWVudDp0cnVlLEhU +TUxIZWFkRWxlbWVudDp0cnVlLEhUTUxIZWFkaW5nRWxlbWVudDp0cnVlLEhUTUxIdG1sRWxlbWVudDp0 +cnVlLEhUTUxJRnJhbWVFbGVtZW50OnRydWUsSFRNTEltYWdlRWxlbWVudDp0cnVlLEhUTUxJbnB1dEVs +ZW1lbnQ6dHJ1ZSxIVE1MTElFbGVtZW50OnRydWUsSFRNTExhYmVsRWxlbWVudDp0cnVlLEhUTUxMZWdl +bmRFbGVtZW50OnRydWUsSFRNTExpbmtFbGVtZW50OnRydWUsSFRNTE1hcEVsZW1lbnQ6dHJ1ZSxIVE1M +TWVkaWFFbGVtZW50OnRydWUsSFRNTE1lbnVFbGVtZW50OnRydWUsSFRNTE1ldGFFbGVtZW50OnRydWUs +SFRNTE1ldGVyRWxlbWVudDp0cnVlLEhUTUxNb2RFbGVtZW50OnRydWUsSFRNTE9MaXN0RWxlbWVudDp0 +cnVlLEhUTUxPYmplY3RFbGVtZW50OnRydWUsSFRNTE9wdEdyb3VwRWxlbWVudDp0cnVlLEhUTUxPcHRp +b25FbGVtZW50OnRydWUsSFRNTE91dHB1dEVsZW1lbnQ6dHJ1ZSxIVE1MUGFyYW1FbGVtZW50OnRydWUs +SFRNTFBpY3R1cmVFbGVtZW50OnRydWUsSFRNTFByZUVsZW1lbnQ6dHJ1ZSxIVE1MUHJvZ3Jlc3NFbGVt +ZW50OnRydWUsSFRNTFF1b3RlRWxlbWVudDp0cnVlLEhUTUxTY3JpcHRFbGVtZW50OnRydWUsSFRNTFNo +YWRvd0VsZW1lbnQ6dHJ1ZSxIVE1MU2xvdEVsZW1lbnQ6dHJ1ZSxIVE1MU291cmNlRWxlbWVudDp0cnVl +LEhUTUxTcGFuRWxlbWVudDp0cnVlLEhUTUxTdHlsZUVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDYXB0aW9u +RWxlbWVudDp0cnVlLEhUTUxUYWJsZUNlbGxFbGVtZW50OnRydWUsSFRNTFRhYmxlRGF0YUNlbGxFbGVt +ZW50OnRydWUsSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDb2xFbGVtZW50 +OnRydWUsSFRNTFRleHRBcmVhRWxlbWVudDp0cnVlLEhUTUxUaW1lRWxlbWVudDp0cnVlLEhUTUxUaXRs +ZUVsZW1lbnQ6dHJ1ZSxIVE1MVHJhY2tFbGVtZW50OnRydWUsSFRNTFVMaXN0RWxlbWVudDp0cnVlLEhU +TUxVbmtub3duRWxlbWVudDp0cnVlLEhUTUxWaWRlb0VsZW1lbnQ6dHJ1ZSxIVE1MRGlyZWN0b3J5RWxl +bWVudDp0cnVlLEhUTUxGb250RWxlbWVudDp0cnVlLEhUTUxGcmFtZUVsZW1lbnQ6dHJ1ZSxIVE1MRnJh +bWVTZXRFbGVtZW50OnRydWUsSFRNTE1hcnF1ZWVFbGVtZW50OnRydWUsSFRNTEVsZW1lbnQ6ZmFsc2Us +SFRNTEFuY2hvckVsZW1lbnQ6dHJ1ZSxIVE1MQXJlYUVsZW1lbnQ6dHJ1ZSxIVE1MQmFzZUVsZW1lbnQ6 +dHJ1ZSxCbG9iOmZhbHNlLEhUTUxCb2R5RWxlbWVudDp0cnVlLENEQVRBU2VjdGlvbjp0cnVlLENoYXJh +Y3RlckRhdGE6dHJ1ZSxDb21tZW50OnRydWUsUHJvY2Vzc2luZ0luc3RydWN0aW9uOnRydWUsVGV4dDp0 +cnVlLENTU1N0eWxlRGVjbGFyYXRpb246dHJ1ZSxNU1N0eWxlQ1NTUHJvcGVydGllczp0cnVlLENTUzJQ +cm9wZXJ0aWVzOnRydWUsWE1MRG9jdW1lbnQ6dHJ1ZSxEb2N1bWVudDpmYWxzZSxET01FeGNlcHRpb246 +dHJ1ZSxET01JbXBsZW1lbnRhdGlvbjp0cnVlLERPTVJlY3RSZWFkT25seTpmYWxzZSxET01Ub2tlbkxp +c3Q6dHJ1ZSxFbGVtZW50OmZhbHNlLEFib3J0UGF5bWVudEV2ZW50OnRydWUsQW5pbWF0aW9uRXZlbnQ6 +dHJ1ZSxBbmltYXRpb25QbGF5YmFja0V2ZW50OnRydWUsQXBwbGljYXRpb25DYWNoZUVycm9yRXZlbnQ6 +dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoRXZlbnQ6dHJ1 +ZSxCYWNrZ3JvdW5kRmV0Y2hGYWlsRXZlbnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hlZEV2ZW50OnRydWUs +QmVmb3JlSW5zdGFsbFByb21wdEV2ZW50OnRydWUsQmVmb3JlVW5sb2FkRXZlbnQ6dHJ1ZSxCbG9iRXZl +bnQ6dHJ1ZSxDYW5NYWtlUGF5bWVudEV2ZW50OnRydWUsQ2xpcGJvYXJkRXZlbnQ6dHJ1ZSxDbG9zZUV2 +ZW50OnRydWUsQ3VzdG9tRXZlbnQ6dHJ1ZSxEZXZpY2VNb3Rpb25FdmVudDp0cnVlLERldmljZU9yaWVu +dGF0aW9uRXZlbnQ6dHJ1ZSxFcnJvckV2ZW50OnRydWUsRXh0ZW5kYWJsZUV2ZW50OnRydWUsRXh0ZW5k +YWJsZU1lc3NhZ2VFdmVudDp0cnVlLEZldGNoRXZlbnQ6dHJ1ZSxGb250RmFjZVNldExvYWRFdmVudDp0 +cnVlLEZvcmVpZ25GZXRjaEV2ZW50OnRydWUsR2FtZXBhZEV2ZW50OnRydWUsSGFzaENoYW5nZUV2ZW50 +OnRydWUsSW5zdGFsbEV2ZW50OnRydWUsTWVkaWFFbmNyeXB0ZWRFdmVudDp0cnVlLE1lZGlhS2V5TWVz +c2FnZUV2ZW50OnRydWUsTWVkaWFRdWVyeUxpc3RFdmVudDp0cnVlLE1lZGlhU3RyZWFtRXZlbnQ6dHJ1 +ZSxNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6dHJ1ZSxNZXNzYWdlRXZlbnQ6dHJ1ZSxNSURJQ29ubmVjdGlv +bkV2ZW50OnRydWUsTUlESU1lc3NhZ2VFdmVudDp0cnVlLE11dGF0aW9uRXZlbnQ6dHJ1ZSxOb3RpZmlj +YXRpb25FdmVudDp0cnVlLFBhZ2VUcmFuc2l0aW9uRXZlbnQ6dHJ1ZSxQYXltZW50UmVxdWVzdEV2ZW50 +OnRydWUsUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDp0cnVlLFBvcFN0YXRlRXZlbnQ6dHJ1ZSxQcmVz +ZW50YXRpb25Db25uZWN0aW9uQXZhaWxhYmxlRXZlbnQ6dHJ1ZSxQcmVzZW50YXRpb25Db25uZWN0aW9u +Q2xvc2VFdmVudDp0cnVlLFByb21pc2VSZWplY3Rpb25FdmVudDp0cnVlLFB1c2hFdmVudDp0cnVlLFJU +Q0RhdGFDaGFubmVsRXZlbnQ6dHJ1ZSxSVENEVE1GVG9uZUNoYW5nZUV2ZW50OnRydWUsUlRDUGVlckNv +bm5lY3Rpb25JY2VFdmVudDp0cnVlLFJUQ1RyYWNrRXZlbnQ6dHJ1ZSxTZWN1cml0eVBvbGljeVZpb2xh +dGlvbkV2ZW50OnRydWUsU2Vuc29yRXJyb3JFdmVudDp0cnVlLFNwZWVjaFJlY29nbml0aW9uRXJyb3I6 +dHJ1ZSxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OnRydWUsU3BlZWNoU3ludGhlc2lzRXZlbnQ6dHJ1ZSxT +dG9yYWdlRXZlbnQ6dHJ1ZSxTeW5jRXZlbnQ6dHJ1ZSxUcmFja0V2ZW50OnRydWUsVHJhbnNpdGlvbkV2 +ZW50OnRydWUsV2ViS2l0VHJhbnNpdGlvbkV2ZW50OnRydWUsVlJEZXZpY2VFdmVudDp0cnVlLFZSRGlz +cGxheUV2ZW50OnRydWUsVlJTZXNzaW9uRXZlbnQ6dHJ1ZSxNb2pvSW50ZXJmYWNlUmVxdWVzdEV2ZW50 +OnRydWUsVVNCQ29ubmVjdGlvbkV2ZW50OnRydWUsSURCVmVyc2lvbkNoYW5nZUV2ZW50OnRydWUsQXVk +aW9Qcm9jZXNzaW5nRXZlbnQ6dHJ1ZSxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6dHJ1ZSxXZWJH +TENvbnRleHRFdmVudDp0cnVlLEV2ZW50OmZhbHNlLElucHV0RXZlbnQ6ZmFsc2UsU3VibWl0RXZlbnQ6 +ZmFsc2UsRXZlbnRUYXJnZXQ6ZmFsc2UsRmlsZTp0cnVlLEhUTUxGb3JtRWxlbWVudDp0cnVlLEhpc3Rv +cnk6dHJ1ZSxIVE1MRG9jdW1lbnQ6dHJ1ZSxYTUxIdHRwUmVxdWVzdDp0cnVlLFhNTEh0dHBSZXF1ZXN0 +RXZlbnRUYXJnZXQ6ZmFsc2UsSW1hZ2VEYXRhOnRydWUsTG9jYXRpb246dHJ1ZSxNb3VzZUV2ZW50OnRy +dWUsRHJhZ0V2ZW50OnRydWUsUG9pbnRlckV2ZW50OnRydWUsV2hlZWxFdmVudDp0cnVlLERvY3VtZW50 +RnJhZ21lbnQ6dHJ1ZSxTaGFkb3dSb290OnRydWUsRG9jdW1lbnRUeXBlOnRydWUsTm9kZTpmYWxzZSxO +b2RlTGlzdDp0cnVlLFJhZGlvTm9kZUxpc3Q6dHJ1ZSxIVE1MUGFyYWdyYXBoRWxlbWVudDp0cnVlLFBy +b2dyZXNzRXZlbnQ6dHJ1ZSxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6dHJ1ZSxIVE1MU2VsZWN0RWxlbWVu +dDp0cnVlLEhUTUxUYWJsZUVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVSb3dFbGVtZW50OnRydWUsSFRNTFRh +YmxlU2VjdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MVGVtcGxhdGVFbGVtZW50OnRydWUsQ29tcG9zaXRpb25F +dmVudDp0cnVlLEZvY3VzRXZlbnQ6dHJ1ZSxLZXlib2FyZEV2ZW50OnRydWUsVGV4dEV2ZW50OnRydWUs +VG91Y2hFdmVudDp0cnVlLFVJRXZlbnQ6ZmFsc2UsV2luZG93OnRydWUsRE9NV2luZG93OnRydWUsRGVk +aWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxT +aGFyZWRXb3JrZXJHbG9iYWxTY29wZTp0cnVlLFdvcmtlckdsb2JhbFNjb3BlOnRydWUsQXR0cjp0cnVl +LENsaWVudFJlY3Q6dHJ1ZSxET01SZWN0OnRydWUsTmFtZWROb2RlTWFwOnRydWUsTW96TmFtZWRBdHRy +TWFwOnRydWUsSURCS2V5UmFuZ2U6dHJ1ZSxTVkdTY3JpcHRFbGVtZW50OnRydWUsU1ZHQUVsZW1lbnQ6 +dHJ1ZSxTVkdBbmltYXRlRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OnRydWUsU1ZH +QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRpb25FbGVtZW50OnRydWUsU1ZHQ2ly +Y2xlRWxlbWVudDp0cnVlLFNWR0NsaXBQYXRoRWxlbWVudDp0cnVlLFNWR0RlZnNFbGVtZW50OnRydWUs +U1ZHRGVzY0VsZW1lbnQ6dHJ1ZSxTVkdEaXNjYXJkRWxlbWVudDp0cnVlLFNWR0VsbGlwc2VFbGVtZW50 +OnRydWUsU1ZHRkVCbGVuZEVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbG9yTWF0cml4RWxlbWVudDp0cnVlLFNW +R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OnRydWUsU1ZHRkVDb21wb3NpdGVFbGVtZW50OnRydWUs +U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6dHJ1ZSxTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6 +dHJ1ZSxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6dHJ1ZSxTVkdGRURpc3RhbnRMaWdodEVsZW1l +bnQ6dHJ1ZSxTVkdGRUZsb29kRWxlbWVudDp0cnVlLFNWR0ZFRnVuY0FFbGVtZW50OnRydWUsU1ZHRkVG +dW5jQkVsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNHRWxlbWVudDp0cnVlLFNWR0ZFRnVuY1JFbGVtZW50OnRy +dWUsU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OnRydWUsU1ZHRkVJbWFnZUVsZW1lbnQ6dHJ1ZSxTVkdG +RU1lcmdlRWxlbWVudDp0cnVlLFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDp0cnVlLFNWR0ZFTW9ycGhvbG9n +eUVsZW1lbnQ6dHJ1ZSxTVkdGRU9mZnNldEVsZW1lbnQ6dHJ1ZSxTVkdGRVBvaW50TGlnaHRFbGVtZW50 +OnRydWUsU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDp0cnVlLFNWR0ZFU3BvdExpZ2h0RWxlbWVu +dDp0cnVlLFNWR0ZFVGlsZUVsZW1lbnQ6dHJ1ZSxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OnRydWUsU1ZH +RmlsdGVyRWxlbWVudDp0cnVlLFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OnRydWUsU1ZHR0VsZW1lbnQ6 +dHJ1ZSxTVkdHZW9tZXRyeUVsZW1lbnQ6dHJ1ZSxTVkdHcmFwaGljc0VsZW1lbnQ6dHJ1ZSxTVkdJbWFn +ZUVsZW1lbnQ6dHJ1ZSxTVkdMaW5lRWxlbWVudDp0cnVlLFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDp0 +cnVlLFNWR01hcmtlckVsZW1lbnQ6dHJ1ZSxTVkdNYXNrRWxlbWVudDp0cnVlLFNWR01ldGFkYXRhRWxl +bWVudDp0cnVlLFNWR1BhdGhFbGVtZW50OnRydWUsU1ZHUGF0dGVybkVsZW1lbnQ6dHJ1ZSxTVkdQb2x5 +Z29uRWxlbWVudDp0cnVlLFNWR1BvbHlsaW5lRWxlbWVudDp0cnVlLFNWR1JhZGlhbEdyYWRpZW50RWxl +bWVudDp0cnVlLFNWR1JlY3RFbGVtZW50OnRydWUsU1ZHU2V0RWxlbWVudDp0cnVlLFNWR1N0b3BFbGVt +ZW50OnRydWUsU1ZHU3R5bGVFbGVtZW50OnRydWUsU1ZHU1ZHRWxlbWVudDp0cnVlLFNWR1N3aXRjaEVs +ZW1lbnQ6dHJ1ZSxTVkdTeW1ib2xFbGVtZW50OnRydWUsU1ZHVFNwYW5FbGVtZW50OnRydWUsU1ZHVGV4 +dENvbnRlbnRFbGVtZW50OnRydWUsU1ZHVGV4dEVsZW1lbnQ6dHJ1ZSxTVkdUZXh0UGF0aEVsZW1lbnQ6 +dHJ1ZSxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OnRydWUsU1ZHVGl0bGVFbGVtZW50OnRydWUsU1ZH +VXNlRWxlbWVudDp0cnVlLFNWR1ZpZXdFbGVtZW50OnRydWUsU1ZHR3JhZGllbnRFbGVtZW50OnRydWUs +U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6dHJ1ZSxTVkdGRURyb3BTaGFkb3dFbGVt +ZW50OnRydWUsU1ZHTVBhdGhFbGVtZW50OnRydWUsU1ZHRWxlbWVudDpmYWxzZX0pCkguTFouJG5hdGl2 +ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5SRy4kbmF0aXZlU3VwZXJjbGFzc1RhZz0i +QXJyYXlCdWZmZXJWaWV3IgpILlZQLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXci +CkguRGcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5XQi4kbmF0aXZlU3Vw +ZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpILlpHLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJh +eUJ1ZmZlclZpZXciCkguUGcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyJ9KSgp +CmNvbnZlcnRBbGxUb0Zhc3RPYmplY3QodykKY29udmVydFRvRmFzdE9iamVjdCgkKTsoZnVuY3Rpb24o +YSl7aWYodHlwZW9mIGRvY3VtZW50PT09InVuZGVmaW5lZCIpe2EobnVsbCkKcmV0dXJufWlmKHR5cGVv +ZiBkb2N1bWVudC5jdXJyZW50U2NyaXB0IT0idW5kZWZpbmVkIil7YShkb2N1bWVudC5jdXJyZW50U2Ny +aXB0KQpyZXR1cm59dmFyIHM9ZG9jdW1lbnQuc2NyaXB0cwpmdW5jdGlvbiBvbkxvYWQoYil7Zm9yKHZh +ciBxPTA7cTxzLmxlbmd0aDsrK3Epc1txXS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixvbkxvYWQs +ZmFsc2UpCmEoYi50YXJnZXQpfWZvcih2YXIgcj0wO3I8cy5sZW5ndGg7KytyKXNbcl0uYWRkRXZlbnRM +aXN0ZW5lcigibG9hZCIsb25Mb2FkLGZhbHNlKX0pKGZ1bmN0aW9uKGEpe3YuY3VycmVudFNjcmlwdD1h +CnZhciBzPUwuSXEKaWYodHlwZW9mIGRhcnRNYWluUnVubmVyPT09ImZ1bmN0aW9uIilkYXJ0TWFpblJ1 +bm5lcihzLFtdKQplbHNlIHMoW10pfSl9KSgpCi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pZ3JhdGlvbi5q +cy5tYXAK '''; diff --git a/pkg/nnbd_migration/lib/src/front_end/web/migration.dart b/pkg/nnbd_migration/lib/src/front_end/web/migration.dart index 790db21401376..1685f11cdb6fd 100644 --- a/pkg/nnbd_migration/lib/src/front_end/web/migration.dart +++ b/pkg/nnbd_migration/lib/src/front_end/web/migration.dart @@ -83,7 +83,7 @@ void main() { migrateUnitStatusIcon.onClick.listen((MouseEvent event) { var unitPath = unitName.innerText; var unitNavItem = document - .querySelector('.nav-panel [data-name*="$unitPath"]') + .querySelector('.nav-panel [data-name*="${Css.escape(unitPath)}"]') .parentNode as Element; var statusIcon = unitNavItem.querySelector('.status-icon'); var entity = navigationTree.find(unitPath); @@ -868,7 +868,8 @@ void updateParentIcons(Element element, NavigationTreeNode entity) { /// Updates subtree icons for the children [entity] with list item [element]. void updateSubtreeIcons(Element element, NavigationTreeDirectoryNode entity) { for (var child in entity.subtree) { - var childNode = element.querySelector('[data-name*="${child.path}"]'); + var childNode = + element.querySelector('[data-name*="${Css.escape(child.path)}"]'); if (child is NavigationTreeDirectoryNode) { updateSubtreeIcons(childNode, child); var childIcon = childNode.querySelector(':scope > .status-icon'); From 9847e7fbe62a1e4104228922885926c7a92cacb1 Mon Sep 17 00:00:00 2001 From: pq Date: Thu, 25 Mar 2021 14:59:04 +0000 Subject: [PATCH 3/4] migrate to lintProducerMap2 Change-Id: I90b41091b354f02e84772e797257bf20db404f30 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192949 Reviewed-by: Brian Wilkerson Commit-Queue: Phil Quitslund --- .../src/services/correction/assist_internal.dart | 8 +++++--- .../services/correction/bulk_fix_processor.dart | 5 +++-- .../src/services/correction/fix_internal.dart | 9 +++++---- .../correction/fix/fix_in_file_test.dart | 16 +++++++++++++++- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart index d3041684008ae..9b819f077dfbb 100644 --- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart +++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart @@ -297,10 +297,12 @@ class AssistProcessor extends BaseProcessor { /// being offered as a fix. static Map> createLintRuleMap() { var map = >{}; - for (var entry in FixProcessor.lintProducerMap.entries) { + for (var entry in FixProcessor.lintProducerMap2.entries) { var lintName = entry.key; - for (var generator in entry.value) { - map.putIfAbsent(generator, () => {}).add(lintName); + for (var fix in entry.value) { + for (var generator in fix.generators) { + map.putIfAbsent(generator, () => {}).add(lintName); + } } } return map; diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart index ac275c3f5098e..d6caedd7683ba 100644 --- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart +++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart @@ -28,6 +28,7 @@ import 'package:analyzer/src/util/file_paths.dart' as file_paths; import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart'; import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart'; import 'package:analyzer_plugin/utilities/fixes/fixes.dart'; +import 'package:collection/collection.dart'; /// A fix producer that produces changes that will fix multiple diagnostics in /// one or more files. @@ -233,7 +234,7 @@ class BulkFixProcessor { if (fix.canBeBulkApplied) { final generators = fix.generators; if (generators != null) { - yield* generators.map((g) => g().fixKind).where((k) => k != null); + yield* generators.map((g) => g().fixKind).whereNotNull(); } } } @@ -245,7 +246,7 @@ class BulkFixProcessor { if (fix.canBeBulkApplied) { final generators = fix.generators; if (generators != null) { - yield* generators.map((g) => g().fixKind).where((k) => k != null); + yield* generators.map((g) => g().fixKind).whereNotNull(); } } } diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart index 9a4b783f2a7c1..e2bde24163910 100644 --- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart +++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart @@ -1080,6 +1080,7 @@ class FixProcessor extends BaseProcessor { /// A map from the names of lint rules to a list of generators used to create /// the correction producers used to build fixes for those diagnostics. The /// generators used for non-lint diagnostics are in the [nonLintProducerMap]. + @Deprecated('To be replaced w/ lintProducerMap2') static const Map> lintProducerMap = { LintNames.always_declare_return_types: [ AddReturnType.newInstance, @@ -1447,7 +1448,7 @@ class FixProcessor extends BaseProcessor { /// A map from error codes to a list of generators used to create the /// correction producers used to build fixes for those diagnostics. The - /// generators used for lint rules are in the [lintProducerMap]. + /// generators used for lint rules are in the [lintProducerMap2]. static const Map> nonLintProducerMap = { CompileTimeErrorCode.ASSIGNMENT_TO_FINAL: [ MakeFieldNotFinal.newInstance, @@ -2006,9 +2007,9 @@ class FixProcessor extends BaseProcessor { var errorCode = error.errorCode; if (errorCode is LintCode) { - var generators = lintProducerMap[errorCode.name]; - if (generators != null) { - for (var generator in generators) { + var fixes = lintProducerMap2[errorCode.name] ?? []; + for (var fix in fixes) { + for (var generator in fix.generators) { await compute(generator()); } } diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart index 482894fe0381d..04b9eab3b87ae 100644 --- a/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart +++ b/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart @@ -121,6 +121,7 @@ class VerificationTests { verify_fixInFileFixesHaveBulkFixTests(); verify_fixInFileFixKindsHaveMultiFixes(); verify_fixInFileFixesHaveUniqueBulkFixes(); + verify_lintProducerMap2_coverage(); } static void verify_fixInFileFixesHaveBulkFixTests() { @@ -129,7 +130,7 @@ class VerificationTests { var errorCode = fixEntry.key; for (var fixInfo in fixEntry.value) { if (fixInfo.canBeAppliedToFile) { - test(errorCode, () { + test('$errorCode |', () { expect(fixInfo.canBeBulkApplied, isTrue); }); } @@ -187,6 +188,19 @@ class VerificationTests { } }); } + + static void verify_lintProducerMap2_coverage() { + // todo (pq): remove when lintProducerMap is deleted. + group('VerificationTests | lintProducerMap2_coverage |', () { + // ignore: deprecated_member_use_from_same_package + for (var entry in FixProcessor.lintProducerMap.entries) { + var errorCode = entry.key; + test('$errorCode |', () { + expect(FixProcessor.lintProducerMap2, contains(errorCode)); + }); + } + }); + } } /// todo (pq): add negative tests From 1453eebebcc8b881ddb18d25573ad245b4c47c94 Mon Sep 17 00:00:00 2001 From: Martin Kustermann Date: Thu, 25 Mar 2021 15:04:43 +0000 Subject: [PATCH 4/4] Reland "[vm/compiler] Always allow CSE of LoadStaticField & loosen assertion in AllowsCSE" Loosening of assertion: There is no guarantee that a static-final field has been initialized by the time a function is compiled (in optimized mode) that uses such a field. We should therefore loosen the ASSERT to not require the field to be initialized and rather allows CSE Enabling of CSE: In the past we had separate InitStaticField and LoadStaticField. The load itself had no side-effects and could therefore be moved arbitrarily. Though we couldn't allow it to be moved before it's InitStaticField. This dependency was not explicitly made and we therefore disabled CSE / LICM if the actual field was not initialized (or field may be reset) - see [0]. Though after merging of InitStaticField and LoadStaticField in [1] there is no longer a need for tracking any dependencies: The side-effects of InitStaticField are now reported by LoadStaticField. => We can therefore always allow CSE of LoadStaticFieldinstr and any code motion would respect side-effects of the instruction. [0] https://codereview.chromium.org/1497783002 [1] https://dart-review.googlesource.com/c/sdk/+/148283 TEST=Fixes flaky test. Closes https://github.com/dart-lang/sdk/issues/45133 Closes https://github.com/dart-lang/sdk/issues/45446 Change-Id: I4a699e9b1dc9dfec9a91208ed78ed0a0c41f5cad Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192924 Reviewed-by: Vyacheslav Egorov Commit-Queue: Martin Kustermann --- runtime/vm/compiler/backend/il.cc | 3 ++- runtime/vm/compiler/backend/il.h | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc index 6e617cd9850a7..5c5db00a65cb5 100644 --- a/runtime/vm/compiler/backend/il.cc +++ b/runtime/vm/compiler/backend/il.cc @@ -1132,7 +1132,8 @@ bool LoadFieldInstr::AttributesEqual(Instruction* other) const { } bool LoadStaticFieldInstr::AttributesEqual(Instruction* other) const { - ASSERT(IsFieldInitialized()); + ASSERT(AllowsCSE()); + ASSERT(!field().is_late() || calls_initializer()); return field().ptr() == other->AsLoadStaticField()->field().ptr(); } diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h index 73159ee54e106..7befee0a41cb9 100644 --- a/runtime/vm/compiler/backend/il.h +++ b/runtime/vm/compiler/backend/il.h @@ -5523,7 +5523,14 @@ class LoadStaticFieldInstr : public TemplateDefinition<0, Throws> { void set_calls_initializer(bool value) { calls_initializer_ = value; } virtual bool AllowsCSE() const { - return field().is_final() && !FLAG_fields_may_be_reset; + // If two loads of a static-final-late field call the initializer and one + // dominates another, we can remove the dominated load with the result of + // the dominating load. + // + // Though if the field is final-late there can be stores into it via + // load/compare-with-sentinel/store. Those loads have `!calls_initializer()` + // and we won't allow CSE for them. + return field().is_final() && (!field().is_late() || calls_initializer()); } virtual bool ComputeCanDeoptimize() const {