diff --git a/DEPS b/DEPS index 7ce70a85..8e98445 100644 --- a/DEPS +++ b/DEPS
@@ -40,7 +40,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '840ff8837bd93ee73c187890839b3f56e7c94fb7', + 'skia_revision': 'bc2cdd154bf5a031ca9d3a530123d9f7a4c0925d', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -60,11 +60,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '2b6ac18d05ac8dd15577408ff9c531e96542958c', + 'swiftshader_revision': '6016a1445277f75270d263b384a34ceaf654367d', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '7e6f3963e5b5c5032aa54c01729a4fe227e475c8', + 'pdfium_revision': 'defe54dbf60459972ff1c295af332ccdbbe15a70', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other. @@ -72,7 +72,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. - 'boringssl_revision': 'cd334a54caf16474a379b5045c912c117ee745bb', + 'boringssl_revision': 'd91e1efd835f84b2b59467ae78ace3b516730344', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling google-toolbox-for-mac # and whatever else without interference from each other.
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn index 49e5093..c686e6b 100644 --- a/android_webview/BUILD.gn +++ b/android_webview/BUILD.gn
@@ -841,7 +841,7 @@ "//components/policy/android:policy_java", "//components/safe_browsing_db/android:safe_browsing_java", "//components/web_contents_delegate_android:web_contents_delegate_android_java", - "//components/web_restrictions:web_restrictions_java", + "//components/web_restrictions:client_java", "//content/public/android:content_java", "//device/gamepad:java", "//device/geolocation:geolocation_java",
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc index 386c42b..4a884cd55 100644 --- a/android_webview/browser/aw_content_browser_client.cc +++ b/android_webview/browser/aw_content_browser_client.cc
@@ -222,7 +222,7 @@ host->GetID(), url::kContentScheme); host->AddFilter(new AwContentsMessageFilter(host->GetID())); - host->AddFilter(new cdm::CdmMessageFilterAndroid()); + host->AddFilter(new cdm::CdmMessageFilterAndroid(false)); host->AddFilter(new AwPrintingMessageFilter(host->GetID())); #if BUILDFLAG(ENABLE_SPELLCHECK)
diff --git a/ash/wm/overview/cleanup_animation_observer.cc b/ash/wm/overview/cleanup_animation_observer.cc index 32f9c98..8136785 100644 --- a/ash/wm/overview/cleanup_animation_observer.cc +++ b/ash/wm/overview/cleanup_animation_observer.cc
@@ -4,14 +4,21 @@ #include "ash/wm/overview/cleanup_animation_observer.h" +#include "ui/aura/window.h" #include "ui/views/widget/widget.h" namespace ash { +// Widget must own NativeWidget. +// |widget_| will delete the NativeWidget and NativeWindow. +// Mark the window as not owned by the parent to ensure that +// OnImplicitAnimationsCompleted() is not called from ~Window() and the window +// is not deleted there. CleanupAnimationObserver::CleanupAnimationObserver( std::unique_ptr<views::Widget> widget) : widget_(std::move(widget)), owner_(nullptr) { DCHECK(widget_); + widget_->GetNativeWindow()->set_owned_by_parent(false); } CleanupAnimationObserver::~CleanupAnimationObserver() {}
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc index e214736..0e62795 100644 --- a/ash/wm/overview/window_selector_unittest.cc +++ b/ash/wm/overview/window_selector_unittest.cc
@@ -1251,6 +1251,41 @@ EXPECT_FALSE(IsSelecting()); } +// Tests removing a display during overview with NON_ZERO_DURATION animation. +TEST_F(WindowSelectorTest, RemoveDisplayWithAnimation) { + // TODO: hits CHECK in stl as order of |ShelfModel::items_| is wrong. + // http://crbug.com/698878. + if (Shell::GetAshConfig() == Config::MASH) + return; + + UpdateDisplay("400x400,400x400"); + gfx::Rect bounds1(0, 0, 100, 100); + gfx::Rect bounds2(450, 0, 100, 100); + std::unique_ptr<aura::Window> window1(CreateWindow(bounds1)); + std::unique_ptr<aura::Window> window2(CreateWindow(bounds2)); + std::unique_ptr<aura::Window> window3(CreatePanelWindow(bounds1)); + std::unique_ptr<aura::Window> window4(CreatePanelWindow(bounds2)); + + aura::Window::Windows root_windows = Shell::GetAllRootWindows(); + EXPECT_EQ(root_windows[0], window1->GetRootWindow()); + EXPECT_EQ(root_windows[1], window2->GetRootWindow()); + EXPECT_EQ(root_windows[0], window3->GetRootWindow()); + EXPECT_EQ(root_windows[1], window4->GetRootWindow()); + + wm::ActivateWindow(window4.get()); + wm::ActivateWindow(window3.get()); + wm::ActivateWindow(window2.get()); + wm::ActivateWindow(window1.get()); + + ToggleOverview(); + EXPECT_TRUE(IsSelecting()); + + ui::ScopedAnimationDurationScaleMode test_duration_mode( + ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION); + UpdateDisplay("400x400"); + EXPECT_FALSE(IsSelecting()); +} + // Tests starting overview during a drag and drop tracking operation. // TODO(flackr): Fix memory corruption crash when running locally (not failing // on bots). See http://crbug.com/342528.
diff --git a/ash/wm/window_state.cc b/ash/wm/window_state.cc index c3f33ef..ad1af91 100644 --- a/ash/wm/window_state.cc +++ b/ash/wm/window_state.cc
@@ -452,7 +452,8 @@ std::max(min_size.height(), actual_new_bounds.height())); } BoundsSetter().SetBounds(window_, actual_new_bounds); - wm::SnapWindowToPixelBoundary(window_); + if (!allow_set_bounds_direct()) + wm::SnapWindowToPixelBoundary(window_); } void WindowState::SetBoundsConstrained(const gfx::Rect& bounds) {
diff --git a/base/BUILD.gn b/base/BUILD.gn index 7735309..131de3d 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -966,6 +966,7 @@ "trace_event/memory_allocator_dump_guid.h", "trace_event/memory_dump_manager.cc", "trace_event/memory_dump_manager.h", + "trace_event/memory_dump_manager_test_utils.h", "trace_event/memory_dump_provider.h", "trace_event/memory_dump_provider_info.cc", "trace_event/memory_dump_provider_info.h",
diff --git a/base/trace_event/memory_dump_manager.cc b/base/trace_event/memory_dump_manager.cc index 59e5629b..1ce86367 100644 --- a/base/trace_event/memory_dump_manager.cc +++ b/base/trace_event/memory_dump_manager.cc
@@ -131,9 +131,6 @@ TRACE_DISABLED_BY_DEFAULT("memory-infra"); // static -const char* const MemoryDumpManager::kLogPrefix = "Memory-infra dump"; - -// static const int MemoryDumpManager::kMaxConsecutiveFailuresCount = 3; // static @@ -159,6 +156,7 @@ // static std::unique_ptr<MemoryDumpManager> MemoryDumpManager::CreateInstanceForTesting() { + DCHECK(!g_instance_for_testing); std::unique_ptr<MemoryDumpManager> instance(new MemoryDumpManager()); g_instance_for_testing = instance.get(); return instance; @@ -428,10 +426,8 @@ MemoryDumpType dump_type, MemoryDumpLevelOfDetail level_of_detail, const GlobalMemoryDumpCallback& callback) { - // If |request_dump_function_| is null MDM hasn't been initialized yet. - if (request_dump_function_.is_null()) { - VLOG(1) << kLogPrefix << " failed because" - << " memory dump manager is not enabled."; + if (!is_initialized()) { + VLOG(1) << "RequestGlobalDump() FAIL: MemoryDumpManager is not initialized"; if (!callback.is_null()) callback.Run(0u /* guid */, false /* success */); return; @@ -468,7 +464,8 @@ void MemoryDumpManager::RequestGlobalDump( MemoryDumpType dump_type, MemoryDumpLevelOfDetail level_of_detail) { - RequestGlobalDump(dump_type, level_of_detail, GlobalMemoryDumpCallback()); + auto noop_callback = [](uint64_t dump_guid, bool success) {}; + RequestGlobalDump(dump_type, level_of_detail, Bind(noop_callback)); } bool MemoryDumpManager::IsDumpProviderRegisteredForTesting( @@ -499,6 +496,15 @@ void MemoryDumpManager::CreateProcessDump( const MemoryDumpRequestArgs& args, const ProcessMemoryDumpCallback& callback) { + if (!is_initialized()) { + VLOG(1) << "CreateProcessDump() FAIL: MemoryDumpManager is not initialized"; + if (!callback.is_null()) { + callback.Run(args.dump_guid, false /* success */, + Optional<MemoryDumpCallbackResult>()); + } + return; + } + char guid_str[20]; sprintf(guid_str, "0x%" PRIx64, args.dump_guid); TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(kTraceCategory, "ProcessMemoryDump", @@ -732,7 +738,7 @@ // The results struct to fill. // TODO(hjd): Transitional until we send the full PMD. See crbug.com/704203 - base::Optional<MemoryDumpCallbackResult> result; + Optional<MemoryDumpCallbackResult> result; bool dump_successful = pmd_async_state->dump_successful; @@ -862,7 +868,7 @@ } } - // Only coordinator process triggers periodic global memory dumps. + // Only coordinator process triggers periodic memory dumps. if (is_coordinator_ && !periodic_config.triggers.empty()) { MemoryDumpScheduler::GetInstance()->Start(periodic_config, GetOrCreateBgTaskRunnerLocked());
diff --git a/base/trace_event/memory_dump_manager.h b/base/trace_event/memory_dump_manager.h index 1018e45..e7726f4 100644 --- a/base/trace_event/memory_dump_manager.h +++ b/base/trace_event/memory_dump_manager.h
@@ -46,7 +46,6 @@ const GlobalMemoryDumpCallback& callback)>; static const char* const kTraceCategory; - static const char* const kLogPrefix; // This value is returned as the tracing id of the child processes by // GetTracingProcessId() when tracing is not enabled. @@ -113,13 +112,12 @@ // to notify about the completion of the global dump (i.e. after all the // processes have dumped) and its success (true iff all the dumps were // successful). - void RequestGlobalDump(MemoryDumpType dump_type, - MemoryDumpLevelOfDetail level_of_detail, - const GlobalMemoryDumpCallback& callback); + void RequestGlobalDump(MemoryDumpType, + MemoryDumpLevelOfDetail, + const GlobalMemoryDumpCallback&); // Same as above (still asynchronous), but without callback. - void RequestGlobalDump(MemoryDumpType dump_type, - MemoryDumpLevelOfDetail level_of_detail); + void RequestGlobalDump(MemoryDumpType, MemoryDumpLevelOfDetail); // Prepare MemoryDumpManager for RequestGlobalMemoryDump calls for tracing // related modes (non-SUMMARY_ONLY). @@ -280,6 +278,9 @@ void GetDumpProvidersForPolling( std::vector<scoped_refptr<MemoryDumpProviderInfo>>*); + // Returns true if Initialize() has been called, false otherwise. + bool is_initialized() const { return !request_dump_function_.is_null(); } + // An ordererd set of registered MemoryDumpProviderInfo(s), sorted by task // runner affinity (MDPs belonging to the same task runners are adjacent). MemoryDumpProviderInfo::OrderedSet dump_providers_;
diff --git a/base/trace_event/memory_dump_manager_test_utils.h b/base/trace_event/memory_dump_manager_test_utils.h new file mode 100644 index 0000000..bb32f5c --- /dev/null +++ b/base/trace_event/memory_dump_manager_test_utils.h
@@ -0,0 +1,46 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_TEST_UTILS_H_ +#define BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_TEST_UTILS_H_ + +#include "base/bind.h" +#include "base/trace_event/memory_dump_manager.h" +#include "base/trace_event/memory_dump_request_args.h" + +namespace base { +namespace trace_event { + +// Short-circuit the RequestGlobalDump() calls to CreateProcessDump(). +// Rationale: only the in-process logic is required for unittests. +void RequestGlobalDumpForInProcessTesting( + const MemoryDumpRequestArgs& args, + const GlobalMemoryDumpCallback& global_callback) { + // Turns a ProcessMemoryDumpCallback into a GlobalMemoryDumpCallback. + auto callback_adapter = [](const GlobalMemoryDumpCallback& global_callback, + uint64_t dump_guid, bool success, + const Optional<MemoryDumpCallbackResult>& result) { + if (!global_callback.is_null()) + global_callback.Run(dump_guid, success); + }; + MemoryDumpManager::GetInstance()->CreateProcessDump( + args, Bind(callback_adapter, global_callback)); +}; + +// Short circuits the RequestGlobalDumpFunction() to CreateProcessDump(), +// effectively allowing to use both in unittests with the same behavior. +// Unittests are in-process only and don't require all the multi-process +// dump handshaking (which would require bits outside of base). +void InitializeMemoryDumpManagerForInProcessTesting(bool is_coordinator) { + MemoryDumpManager* instance = MemoryDumpManager::GetInstance(); + instance->set_dumper_registrations_ignored_for_testing(true); + instance->Initialize(BindRepeating(&RequestGlobalDumpForInProcessTesting), + is_coordinator); + instance->set_dumper_registrations_ignored_for_testing(false); +} + +} // namespace trace_event +} // namespace base + +#endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_TEST_UTILS_H_
diff --git a/base/trace_event/memory_dump_manager_unittest.cc b/base/trace_event/memory_dump_manager_unittest.cc index fe1b2fe..14fb7a1b 100644 --- a/base/trace_event/memory_dump_manager_unittest.cc +++ b/base/trace_event/memory_dump_manager_unittest.cc
@@ -27,7 +27,9 @@ #include "base/threading/sequenced_worker_pool.h" #include "base/threading/thread.h" #include "base/threading/thread_task_runner_handle.h" +#include "base/trace_event/memory_dump_manager_test_utils.h" #include "base/trace_event/memory_dump_provider.h" +#include "base/trace_event/memory_dump_request_args.h" #include "base/trace_event/memory_dump_scheduler.h" #include "base/trace_event/memory_infra_background_whitelist.h" #include "base/trace_event/process_memory_dump.h" @@ -99,15 +101,6 @@ mdm->set_dumper_registrations_ignored_for_testing(true); } -void OnTraceDataCollected(Closure quit_closure, - trace_event::TraceResultBuffer* buffer, - const scoped_refptr<RefCountedString>& json, - bool has_more_events) { - buffer->AddFragment(json->data()); - if (!has_more_events) - quit_closure.Run(); -} - // Posts |task| to |task_runner| and blocks until it is executed. void PostTaskAndWait(const tracked_objects::Location& from_here, SequencedTaskRunner* task_runner, @@ -122,37 +115,6 @@ event.Wait(); } -// Adapts a ProcessMemoryDumpCallback into a GlobalMemoryDumpCallback -// and keeps around the process-local result. -void ProcessDumpCallbackAdapter( - GlobalMemoryDumpCallback callback, - uint64_t dump_guid, - bool success, - const base::Optional<base::trace_event::MemoryDumpCallbackResult>&) { - callback.Run(dump_guid, success); -} - -// This mocks the RequestGlobalDumpFunction which is typically handled by -// process_local_dump_manager_impl.cc, by short-circuiting dump requests locally -// to the MemoryDumpManager without an actual service. -class GlobalMemoryDumpHandler { - public: - MOCK_METHOD2(RequestGlobalMemoryDump, - void(const MemoryDumpRequestArgs& args, - const GlobalMemoryDumpCallback& callback)); - - GlobalMemoryDumpHandler() { - ON_CALL(*this, RequestGlobalMemoryDump(_, _)) - .WillByDefault(Invoke([this](const MemoryDumpRequestArgs& args, - const GlobalMemoryDumpCallback& callback) { - ProcessMemoryDumpCallback process_callback = - Bind(&ProcessDumpCallbackAdapter, callback); - MemoryDumpManager::GetInstance()->CreateProcessDump(args, - process_callback); - })); - } -}; - class MockMemoryDumpProvider : public MemoryDumpProvider { public: MOCK_METHOD0(Destructor, void()); @@ -228,8 +190,16 @@ buffer.SetOutputCallback(trace_output.GetCallback()); RunLoop run_loop; buffer.Start(); - trace_event::TraceLog::GetInstance()->Flush( - Bind(&OnTraceDataCollected, run_loop.QuitClosure(), Unretained(&buffer))); + auto on_trace_data_collected = + [](Closure quit_closure, trace_event::TraceResultBuffer* buffer, + const scoped_refptr<RefCountedString>& json, bool has_more_events) { + buffer->AddFragment(json->data()); + if (!has_more_events) + quit_closure.Run(); + }; + + trace_event::TraceLog::GetInstance()->Flush(Bind( + on_trace_data_collected, run_loop.QuitClosure(), Unretained(&buffer))); run_loop.Run(); buffer.Finish(); @@ -245,11 +215,9 @@ MemoryDumpManagerTest() : testing::Test(), kDefaultOptions() {} void SetUp() override { - last_callback_success_ = false; message_loop_.reset(new MessageLoop()); mdm_ = MemoryDumpManager::CreateInstanceForTesting(); ASSERT_EQ(mdm_.get(), MemoryDumpManager::GetInstance()); - results_.clear(); } void TearDown() override { @@ -258,35 +226,46 @@ TraceLog::DeleteForTesting(); } - // Turns a Closure into a GlobalMemoryDumpCallback, keeping track of the - // callback result and taking care of posting the closure on the correct task - // runner. - void GlobalDumpCallbackAdapter( - scoped_refptr<SingleThreadTaskRunner> task_runner, - Closure closure, - uint64_t dump_guid, - bool success) { - last_callback_success_ = success; - task_runner->PostTask(FROM_HERE, closure); - } - protected: - void InitializeMemoryDumpManager(bool is_coordinator) { - mdm_->set_dumper_registrations_ignored_for_testing(true); - mdm_->Initialize( - BindRepeating(&GlobalMemoryDumpHandler::RequestGlobalMemoryDump, - Unretained(&global_dump_handler_)), - is_coordinator); - } - - void RequestGlobalDumpAndWait(MemoryDumpType dump_type, - MemoryDumpLevelOfDetail level_of_detail) { + // Blocks the current thread (spinning a nested message loop) until the + // memory dump is complete. Returns: + // - return value: the |success| from the CreateProcessDump() callback. + // - (optional) |result|: the summarized metrics for TestSummaryComputation. + bool RequestProcessDumpAndWait( + MemoryDumpType dump_type, + MemoryDumpLevelOfDetail level_of_detail, + Optional<MemoryDumpCallbackResult>* result = nullptr) { RunLoop run_loop; - GlobalMemoryDumpCallback callback = Bind( - &MemoryDumpManagerTest::GlobalDumpCallbackAdapter, Unretained(this), - ThreadTaskRunnerHandle::Get(), run_loop.QuitClosure()); - mdm_->RequestGlobalDump(dump_type, level_of_detail, callback); + bool success = false; + static uint64_t test_guid = 1; + test_guid++; + MemoryDumpRequestArgs request_args{test_guid, dump_type, level_of_detail}; + + // The signature of the callback delivered by MemoryDumpManager is: + // void ProcessMemoryDumpCallback(uint64_t dump_guid, + // bool success, + // const Optional<MemoryDumpCallbackResult>&) + // The extra arguments prepended to the |callback| below (the ones with the + // "curried_" prefix) are just passed from the Bind(). This is just to get + // around the limitation of Bind() in supporting only capture-less lambdas. + ProcessMemoryDumpCallback callback = Bind( + [](bool* curried_success, Closure curried_quit_closure, + uint64_t curried_expected_guid, + Optional<MemoryDumpCallbackResult>* curried_result, + uint64_t dump_guid, bool success, + const Optional<MemoryDumpCallbackResult>& callback_result) { + *curried_success = success; + EXPECT_EQ(curried_expected_guid, dump_guid); + if (curried_result) + *curried_result = callback_result; + ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, + curried_quit_closure); + }, + Unretained(&success), run_loop.QuitClosure(), test_guid, result); + + mdm_->CreateProcessDump(request_args, callback); run_loop.Run(); + return success; } void EnableTracingWithLegacyCategories(const char* category) { @@ -309,51 +288,30 @@ return MemoryDumpManager::kMaxConsecutiveFailuresCount; } - const std::vector<MemoryDumpCallbackResult>* GetResults() const { - return &results_; - } - const MemoryDumpProvider::Options kDefaultOptions; std::unique_ptr<MemoryDumpManager> mdm_; - GlobalMemoryDumpHandler global_dump_handler_; - bool last_callback_success_; - - // Adapts a ProcessMemoryDumpCallback into a GlobalMemoryDumpCallback by - // trimming off the result argument and calling the global callback. - void ProcessDumpRecordingCallbackAdapter( - GlobalMemoryDumpCallback callback, - uint64_t dump_guid, - bool success, - const base::Optional<MemoryDumpCallbackResult>& result) { - if (result.has_value()) { - results_.push_back(result.value()); - } - callback.Run(dump_guid, success); - } private: std::unique_ptr<MessageLoop> message_loop_; - std::vector<MemoryDumpCallbackResult> results_; - // We want our singleton torn down after each test. + // To tear down the singleton instance after each test. ShadowingAtExitManager at_exit_manager_; }; // Basic sanity checks. Registers a memory dump provider and checks that it is // called. TEST_F(MemoryDumpManagerTest, SingleDumper) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp; RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); // Now repeat enabling the memory category and check that the dumper is // invoked this time. EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(3); - EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true)); + EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3); for (int i = 0; i < 3; ++i) { - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } DisableTracing(); @@ -362,12 +320,10 @@ // Finally check the unregister logic: the global dump handler will be invoked // but not the dump provider, as it has been unregistered. EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(3); EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); - for (int i = 0; i < 3; ++i) { - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } DisableTracing(); } @@ -375,15 +331,14 @@ // Checks that requesting dumps with high level of detail actually propagates // the level of the detail properly to OnMemoryDump() call on dump providers. TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp; RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)).WillOnce(Return(true)); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); DisableTracing(); mdm_->UnregisterDumpProvider(&mdp); @@ -391,10 +346,9 @@ // OnMemoryDump() call on dump providers. RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).WillOnce(Return(true)); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::LIGHT); + EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::LIGHT)); DisableTracing(); mdm_->UnregisterDumpProvider(&mdp); } @@ -402,7 +356,7 @@ // Checks that the HeapProfilerSerializationState object is actually // shared over time. TEST_F(MemoryDumpManagerTest, HeapProfilerSerializationState) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp1; MockMemoryDumpProvider mdp2; RegisterDumpProvider(&mdp1, nullptr); @@ -411,7 +365,6 @@ EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); const HeapProfilerSerializationState* heap_profiler_serialization_state = mdm_->heap_profiler_serialization_state_for_testing().get(); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2); EXPECT_CALL(mdp1, OnMemoryDump(_, _)) .Times(2) .WillRepeatedly( @@ -432,8 +385,8 @@ })); for (int i = 0; i < 2; ++i) { - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } DisableTracing(); @@ -441,39 +394,36 @@ // Checks that the (Un)RegisterDumpProvider logic behaves sanely. TEST_F(MemoryDumpManagerTest, MultipleDumpers) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp1; MockMemoryDumpProvider mdp2; // Enable only mdp1. RegisterDumpProvider(&mdp1, ThreadTaskRunnerHandle::Get()); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); + EXPECT_CALL(mdp1, OnMemoryDump(_, _)); EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); DisableTracing(); - // Invert: enable mdp1 and disable mdp2. + // Invert: enable mdp2 and disable mdp1. mdm_->UnregisterDumpProvider(&mdp1); RegisterDumpProvider(&mdp2, nullptr); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0); - EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_CALL(mdp2, OnMemoryDump(_, _)); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); DisableTracing(); // Enable both mdp1 and mdp2. RegisterDumpProvider(&mdp1, nullptr); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - EXPECT_CALL(mdp1, OnMemoryDump(_, _)).WillOnce(Return(true)); - EXPECT_CALL(mdp2, OnMemoryDump(_, _)).WillOnce(Return(true)); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_CALL(mdp1, OnMemoryDump(_, _)); + EXPECT_CALL(mdp2, OnMemoryDump(_, _)); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); DisableTracing(); } @@ -486,28 +436,26 @@ #define MAYBE_RegistrationConsistency RegistrationConsistency #endif TEST_F(MemoryDumpManagerTest, MAYBE_RegistrationConsistency) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp; RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); { - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); + EXPECT_CALL(mdp, OnMemoryDump(_, _)); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); DisableTracing(); } mdm_->UnregisterDumpProvider(&mdp); { - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); DisableTracing(); } @@ -515,11 +463,10 @@ mdm_->UnregisterDumpProvider(&mdp); { - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); DisableTracing(); } @@ -528,11 +475,10 @@ RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); { - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - EXPECT_CALL(mdp, OnMemoryDump(_, _)).WillOnce(Return(true)); + EXPECT_CALL(mdp, OnMemoryDump(_, _)); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); DisableTracing(); } } @@ -542,7 +488,7 @@ // threads and registering a MemoryDumpProvider on each of them. At each // iteration, one thread is removed, to check the live unregistration logic. TEST_F(MemoryDumpManagerTest, RespectTaskRunnerAffinity) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); const uint32_t kNumInitialThreads = 8; std::vector<std::unique_ptr<Thread>> threads; @@ -570,11 +516,8 @@ EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); while (!threads.empty()) { - last_callback_success_ = false; - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); - EXPECT_TRUE(last_callback_success_); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); // Unregister a MDP and destroy one thread at each iteration to check the // live unregistration logic. The unregistration needs to happen on the same @@ -600,7 +543,7 @@ // SequencedTaskRunner case and that the dump provider gets disabled when // PostTask fails, but the dump still succeeds. TEST_F(MemoryDumpManagerTest, PostTaskForSequencedTaskRunner) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); std::vector<MockMemoryDumpProvider> mdps(3); scoped_refptr<TestSequencedTaskRunner> task_runner1( make_scoped_refptr(new TestSequencedTaskRunner())); @@ -616,34 +559,29 @@ EXPECT_CALL(mdps[0], OnMemoryDump(_, _)).Times(0); EXPECT_CALL(mdps[1], OnMemoryDump(_, _)).Times(2); EXPECT_CALL(mdps[2], OnMemoryDump(_, _)).Times(2); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); task_runner1->set_enabled(false); - last_callback_success_ = false; - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); // Tasks should be individually posted even if |mdps[1]| and |mdps[2]| belong // to same task runner. EXPECT_EQ(1u, task_runner1->no_of_post_tasks()); EXPECT_EQ(2u, task_runner2->no_of_post_tasks()); - EXPECT_TRUE(last_callback_success_); task_runner1->set_enabled(true); - last_callback_success_ = false; - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); EXPECT_EQ(2u, task_runner1->no_of_post_tasks()); EXPECT_EQ(4u, task_runner2->no_of_post_tasks()); - EXPECT_TRUE(last_callback_success_); DisableTracing(); } // Checks that providers get disabled after 3 consecutive failures, but not // otherwise (e.g., if interleaved). TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp1; MockMemoryDumpProvider mdp2; @@ -651,10 +589,6 @@ RegisterDumpProvider(&mdp2, nullptr); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount(); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)) - .Times(kNumDumps); - EXPECT_CALL(mdp1, OnMemoryDump(_, _)) .Times(GetMaxConsecutiveFailuresCount()) .WillRepeatedly(Return(false)); @@ -667,9 +601,10 @@ .WillOnce(Return(true)) .WillOnce(Return(false)); + const int kNumDumps = 2 * GetMaxConsecutiveFailuresCount(); for (int i = 0; i < kNumDumps; i++) { - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } DisableTracing(); @@ -678,15 +613,13 @@ // Sneakily registers an extra memory dump provider while an existing one is // dumping and expect it to take part in the already active tracing session. TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp1; MockMemoryDumpProvider mdp2; RegisterDumpProvider(&mdp1, nullptr); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(4); - EXPECT_CALL(mdp1, OnMemoryDump(_, _)) .Times(4) .WillOnce(Return(true)) @@ -694,18 +627,15 @@ Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { RegisterDumpProvider(&mdp2, nullptr); return true; - })) - .WillRepeatedly(Return(true)); + })); // Depending on the insertion order (before or after mdp1), mdp2 might be // called also immediately after it gets registered. - EXPECT_CALL(mdp2, OnMemoryDump(_, _)) - .Times(Between(2, 3)) - .WillRepeatedly(Return(true)); + EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(Between(2, 3)); for (int i = 0; i < 4; i++) { - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } DisableTracing(); @@ -713,7 +643,7 @@ // Like RegisterDumperWhileDumping, but unregister the dump provider instead. TEST_F(MemoryDumpManagerTest, UnregisterDumperWhileDumping) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp1; MockMemoryDumpProvider mdp2; @@ -721,8 +651,6 @@ RegisterDumpProvider(&mdp2, ThreadTaskRunnerHandle::Get(), kDefaultOptions); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(4); - EXPECT_CALL(mdp1, OnMemoryDump(_, _)) .Times(4) .WillOnce(Return(true)) @@ -730,18 +658,15 @@ Invoke([&mdp2](const MemoryDumpArgs&, ProcessMemoryDump*) -> bool { MemoryDumpManager::GetInstance()->UnregisterDumpProvider(&mdp2); return true; - })) - .WillRepeatedly(Return(true)); + })); // Depending on the insertion order (before or after mdp1), mdp2 might have // been already called when UnregisterDumpProvider happens. - EXPECT_CALL(mdp2, OnMemoryDump(_, _)) - .Times(Between(1, 2)) - .WillRepeatedly(Return(true)); + EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(Between(1, 2)); for (int i = 0; i < 4; i++) { - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } DisableTracing(); @@ -750,7 +675,7 @@ // Checks that the dump does not abort when unregistering a provider while // dumping from a different thread than the dumping thread. TEST_F(MemoryDumpManagerTest, UnregisterDumperFromThreadWhileDumping) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); std::vector<std::unique_ptr<TestIOThread>> threads; std::vector<std::unique_ptr<MockMemoryDumpProvider>> mdps; @@ -789,19 +714,16 @@ .WillOnce(Invoke(on_dump)); } - last_callback_success_ = false; EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); ASSERT_EQ(1, on_memory_dump_call_count); - ASSERT_TRUE(last_callback_success_); DisableTracing(); } TEST_F(MemoryDumpManagerTest, TestPollingOnDumpThread) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); std::unique_ptr<MockMemoryDumpProvider> mdp1(new MockMemoryDumpProvider()); std::unique_ptr<MockMemoryDumpProvider> mdp2(new MockMemoryDumpProvider()); mdp1->enable_mock_destructor = true; @@ -853,7 +775,7 @@ // If a thread (with a dump provider living on it) is torn down during a dump // its dump provider should be skipped but the dump itself should succeed. TEST_F(MemoryDumpManagerTest, TearDownThreadWhileDumping) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); std::vector<std::unique_ptr<TestIOThread>> threads; std::vector<std::unique_ptr<MockMemoryDumpProvider>> mdps; @@ -891,28 +813,23 @@ .WillOnce(Invoke(on_dump)); } - last_callback_success_ = false; EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); ASSERT_EQ(1, on_memory_dump_call_count); - ASSERT_TRUE(last_callback_success_); DisableTracing(); } -// Checks that a NACK callback is invoked if RequestGlobalDump() is called when +// Checks that a NACK callback is invoked if CreateProcessDump() is called when // tracing is not enabled. TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) { - InitializeMemoryDumpManager(false /* is_coordinator */); - MockMemoryDumpProvider mdp1; - RegisterDumpProvider(&mdp1, nullptr); - - last_callback_success_ = true; - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); - EXPECT_FALSE(last_callback_success_); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); + MockMemoryDumpProvider mdp; + RegisterDumpProvider(&mdp, nullptr); + EXPECT_CALL(mdp, OnMemoryDump(_, _)); + EXPECT_FALSE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } // Checks that is the MemoryDumpManager is initialized after tracing already @@ -922,24 +839,23 @@ RegisterDumpProvider(&mdp, nullptr); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - // First check that a RequestGlobalDump() issued before the MemoryDumpManager + // First check that a CreateProcessDump() issued before the MemoryDumpManager // initialization gets NACK-ed cleanly. { + testing::InSequence sequence; EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); - EXPECT_FALSE(last_callback_success_); + EXPECT_FALSE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } // Now late-initialize the MemoryDumpManager and check that the - // RequestGlobalDump completes successfully. + // CreateProcessDump() completes successfully. { - InitializeMemoryDumpManager(false /* is_coordinator */); + testing::InSequence sequence; + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(1); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); - EXPECT_TRUE(last_callback_success_); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } DisableTracing(); } @@ -949,15 +865,10 @@ // dumps in memory-infra, handling gracefully the transition between the legacy // and the new-style (JSON-based) TraceConfig. TEST_F(MemoryDumpManagerTest, TraceConfigExpectations) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); - // Don't trigger the default behavior of the global dump handler in this test, - // which would short-circuit the dump request to the actual - // CreateProcessDump(). - // We don't want to create any dump in this test, only check whether the dumps + // We don't need to create any dump in this test, only check whether the dumps // are requested or not. - ON_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)) - .WillByDefault(Return()); // Enabling memory-infra in a non-coordinator process should not trigger any // periodic dumps. @@ -975,9 +886,7 @@ } TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) { - InitializeMemoryDumpManager(true /* is_coordinator */); - ON_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)) - .WillByDefault(Return()); + InitializeMemoryDumpManagerForInProcessTesting(true /* is_coordinator */); // Enabling memory-infra with the legacy TraceConfig (category filter) in // a coordinator process should not enable periodic dumps. @@ -1013,26 +922,25 @@ const int kHeavyDumpRate = 5; const int kLightDumpPeriodMs = 1; const int kHeavyDumpPeriodMs = kHeavyDumpRate * kLightDumpPeriodMs; + // The expected sequence with light=1ms, heavy=5ms is H,L,L,L,L,H,... + MockMemoryDumpProvider mdp; + RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); + testing::InSequence sequence; - EXPECT_CALL(global_dump_handler_, - RequestGlobalMemoryDump(IsDetailedDump(), _)); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(IsLightDump(), _)) - .Times(kHeavyDumpRate - 1); - EXPECT_CALL(global_dump_handler_, - RequestGlobalMemoryDump(IsDetailedDump(), _)); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(IsLightDump(), _)) - .Times(kHeavyDumpRate - 2); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(IsLightDump(), _)) - .WillOnce(Invoke([test_task_runner, quit_closure]( - const MemoryDumpRequestArgs& args, - const GlobalMemoryDumpCallback& callback) { + EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)); + EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).Times(kHeavyDumpRate - 1); + EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)); + EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)).Times(kHeavyDumpRate - 2); + EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)) + .WillOnce(Invoke([test_task_runner, quit_closure](const MemoryDumpArgs&, + ProcessMemoryDump*) { test_task_runner->PostTask(FROM_HERE, quit_closure); + return true; })); // Swallow all the final spurious calls until tracing gets disabled. - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)) - .Times(AnyNumber()); + EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(AnyNumber()); EnableTracingWithTraceConfig( TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers( @@ -1044,7 +952,7 @@ TEST_F(MemoryDumpManagerTest, DumpOnBehalfOfOtherProcess) { using trace_analyzer::Query; - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); // Standard provider with default options (create dump for current process). MemoryDumpProvider::Options options; @@ -1062,12 +970,11 @@ RegisterDumpProvider(&mdp3, nullptr, options); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); - EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true)); - EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true)); - EXPECT_CALL(mdp3, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true)); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(1); + EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(1); + EXPECT_CALL(mdp3, OnMemoryDump(_, _)).Times(1); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); DisableTracing(); std::unique_ptr<trace_analyzer::TraceAnalyzer> analyzer = @@ -1086,7 +993,8 @@ } TEST_F(MemoryDumpManagerTest, SummaryOnlyWhitelisting) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); + // Summary only MDPs are a subset of background MDPs. SetDumpProviderWhitelistForTesting(kTestMDPWhitelist); SetDumpProviderSummaryWhitelistForTesting(kTestMDPWhitelistForSummary); @@ -1100,18 +1008,18 @@ kBackgroundButNotSummaryWhitelistedMDPName); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); + EXPECT_CALL(backgroundMdp, OnMemoryDump(_, _)).Times(0); EXPECT_CALL(summaryMdp, OnMemoryDump(_, _)).Times(1); - RequestGlobalDumpAndWait(MemoryDumpType::SUMMARY_ONLY, - MemoryDumpLevelOfDetail::BACKGROUND); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::SUMMARY_ONLY, + MemoryDumpLevelOfDetail::BACKGROUND)); DisableTracing(); } TEST_F(MemoryDumpManagerTest, SummaryOnlyDumpsArentAddedToTrace) { using trace_analyzer::Query; - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); SetDumpProviderSummaryWhitelistForTesting(kTestMDPWhitelistForSummary); SetDumpProviderWhitelistForTesting(kTestMDPWhitelist); @@ -1120,12 +1028,12 @@ RegisterDumpProvider(&mdp, nullptr, kDefaultOptions, kWhitelistedMDPName); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2); - EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(2).WillRepeatedly(Return(true)); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::BACKGROUND); - RequestGlobalDumpAndWait(MemoryDumpType::SUMMARY_ONLY, - MemoryDumpLevelOfDetail::BACKGROUND); + + EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(2); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::BACKGROUND)); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::SUMMARY_ONLY, + MemoryDumpLevelOfDetail::BACKGROUND)); DisableTracing(); std::unique_ptr<trace_analyzer::TraceAnalyzer> analyzer = @@ -1143,7 +1051,7 @@ // Tests the basics of the UnregisterAndDeleteDumpProviderSoon(): the // unregistration should actually delete the providers and not leak them. TEST_F(MemoryDumpManagerTest, UnregisterAndDeleteDumpProviderSoon) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); static const int kNumProviders = 3; int dtor_count = 0; std::vector<std::unique_ptr<MemoryDumpProvider>> mdps; @@ -1170,7 +1078,7 @@ // from another thread. The OnMemoryDump() and the dtor call are expected to // happen on the same thread (the MemoryDumpManager utility thread). TEST_F(MemoryDumpManagerTest, UnregisterAndDeleteDumpProviderSoonDuringDump) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); std::unique_ptr<MockMemoryDumpProvider> mdp(new MockMemoryDumpProvider); mdp->enable_mock_destructor = true; RegisterDumpProvider(mdp.get(), nullptr, kDefaultOptions); @@ -1199,16 +1107,15 @@ })); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(2); for (int i = 0; i < 2; ++i) { - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); } DisableTracing(); } TEST_F(MemoryDumpManagerTest, TestWhitelistingMDP) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); SetDumpProviderWhitelistForTesting(kTestMDPWhitelist); std::unique_ptr<MockMemoryDumpProvider> mdp1(new MockMemoryDumpProvider); RegisterDumpProvider(mdp1.get(), nullptr); @@ -1217,41 +1124,39 @@ kWhitelistedMDPName); EXPECT_CALL(*mdp1, OnMemoryDump(_, _)).Times(0); - EXPECT_CALL(*mdp2, OnMemoryDump(_, _)).Times(1).WillOnce(Return(true)); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(1); + EXPECT_CALL(*mdp2, OnMemoryDump(_, _)).Times(1); EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); EXPECT_FALSE(IsPeriodicDumpingEnabled()); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::BACKGROUND); + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::BACKGROUND)); DisableTracing(); } +// Configures periodic dumps with MemoryDumpLevelOfDetail::BACKGROUND triggers +// and tests that only BACKGROUND are added to the trace, but not LIGHT or +// DETAILED, even if requested explicitly. TEST_F(MemoryDumpManagerTest, TestBackgroundTracingSetup) { - InitializeMemoryDumpManager(true /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(true /* is_coordinator */); - // We now need an MDP to hit the code path where the dump will be rejected - // since this happens at the point you try to serialize a process dump. + SetDumpProviderWhitelistForTesting(kTestMDPWhitelist); MockMemoryDumpProvider mdp; - RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); + RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get(), kDefaultOptions, + kWhitelistedMDPName); RunLoop run_loop; auto test_task_runner = ThreadTaskRunnerHandle::Get(); auto quit_closure = run_loop.QuitClosure(); testing::InSequence sequence; - EXPECT_CALL(global_dump_handler_, - RequestGlobalMemoryDump(IsBackgroundDump(), _)) - .Times(5); - EXPECT_CALL(global_dump_handler_, - RequestGlobalMemoryDump(IsBackgroundDump(), _)) - .WillOnce(Invoke([test_task_runner, quit_closure]( - const MemoryDumpRequestArgs& args, - const GlobalMemoryDumpCallback& callback) { + EXPECT_CALL(mdp, OnMemoryDump(IsBackgroundDump(), _)).Times(3); + EXPECT_CALL(mdp, OnMemoryDump(IsBackgroundDump(), _)) + .WillOnce(Invoke([test_task_runner, quit_closure](const MemoryDumpArgs&, + ProcessMemoryDump*) { test_task_runner->PostTask(FROM_HERE, quit_closure); + return true; })); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)) - .Times(AnyNumber()); + EXPECT_CALL(mdp, OnMemoryDump(IsBackgroundDump(), _)).Times(AnyNumber()); EnableTracingWithTraceConfig( TraceConfigMemoryTestUtil::GetTraceConfig_BackgroundTrigger( @@ -1259,23 +1164,42 @@ run_loop.Run(); - // Only background mode dumps should be allowed with the trace config. - last_callback_success_ = false; - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::LIGHT); - EXPECT_FALSE(last_callback_success_); - last_callback_success_ = false; - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); - EXPECT_FALSE(last_callback_success_); + // When requesting non-BACKGROUND dumps the MDP will be invoked but the + // data is expected to be dropped on the floor, hence the EXPECT_FALSE. + EXPECT_CALL(mdp, OnMemoryDump(IsLightDump(), _)); + EXPECT_FALSE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::LIGHT)); + + EXPECT_CALL(mdp, OnMemoryDump(IsDetailedDump(), _)); + EXPECT_FALSE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); ASSERT_TRUE(IsPeriodicDumpingEnabled()); DisableTracing(); } -// Tests that we can manually take a dump without enabling tracing. -TEST_F(MemoryDumpManagerTest, DumpWithTracingDisabled) { - InitializeMemoryDumpManager(false /* is_coordinator */); +// Tests that the MemoryDumpProvider(s) are invoked even if tracing has not +// been initialized. +TEST_F(MemoryDumpManagerTest, DumpWithoutInitializingTracing) { + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); + MockMemoryDumpProvider mdp; + RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); + DisableTracing(); + EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3); + for (int i = 0; i < 3; ++i) { + // The callback result will be false for the moment. true result means that + // as well as the dump being successful we also managed to add the dump to + // the trace. But the latter won't happen here. + EXPECT_FALSE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); + } + mdm_->UnregisterDumpProvider(&mdp); +} + +// Similar to DumpWithoutInitializingTracing. Tracing is initialized but not +// enabled. +TEST_F(MemoryDumpManagerTest, DumpWithTracingInitializedButDisabled) { + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp; RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); @@ -1285,71 +1209,27 @@ TraceConfig(TraceConfigMemoryTestUtil::GetTraceConfig_NoTriggers()); const TraceConfig::MemoryDumpConfig& memory_dump_config = trace_config.memory_dump_config(); - mdm_->SetupForTracing(memory_dump_config); - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(3); - EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true)); - last_callback_success_ = true; - for (int i = 0; i < 3; ++i) - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); - // The callback result should actually be false since (for the moment at - // least) a true result means that as well as the dump generally being - // successful we also managed to add the dump to the trace. - EXPECT_FALSE(last_callback_success_); - + EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3); + for (int i = 0; i < 3; ++i) { + // Same as the above. Even if the MDP(s) are invoked, this will return false + // while attempting to add the dump into the trace. + EXPECT_FALSE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::DETAILED)); + } mdm_->TeardownForTracing(); - - mdm_->UnregisterDumpProvider(&mdp); -} - -// Tests that we can do a dump without enabling/disabling. -TEST_F(MemoryDumpManagerTest, DumpWithoutTracing) { - InitializeMemoryDumpManager(false /* is_coordinator */); - MockMemoryDumpProvider mdp; - RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); - - DisableTracing(); - - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)).Times(3); - EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true)); - last_callback_success_ = true; - for (int i = 0; i < 3; ++i) - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::DETAILED); - // The callback result should be false since (for the moment at - // least) a true result means that as well as the dump being - // successful we also managed to add the dump to the trace which shouldn't - // happen when tracing is not enabled. - EXPECT_FALSE(last_callback_success_); - mdm_->UnregisterDumpProvider(&mdp); } TEST_F(MemoryDumpManagerTest, TestSummaryComputation) { - InitializeMemoryDumpManager(false /* is_coordinator */); + InitializeMemoryDumpManagerForInProcessTesting(false /* is_coordinator */); MockMemoryDumpProvider mdp; RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get()); - const HeapProfilerSerializationState* heap_profiler_serialization_state = - mdm_->heap_profiler_serialization_state_for_testing().get(); - - EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _)) - .WillOnce(Invoke([this](const MemoryDumpRequestArgs& args, - const GlobalMemoryDumpCallback& callback) { - ProcessMemoryDumpCallback process_callback = - Bind(&MemoryDumpManagerTest_TestSummaryComputation_Test:: - ProcessDumpRecordingCallbackAdapter, - Unretained(this), callback); - mdm_->CreateProcessDump(args, process_callback); - })); - EXPECT_CALL(mdp, OnMemoryDump(_, _)) - .Times(1) - .WillRepeatedly(Invoke([heap_profiler_serialization_state]( - const MemoryDumpArgs&, - ProcessMemoryDump* pmd) -> bool { + .WillOnce(Invoke([](const MemoryDumpArgs&, + ProcessMemoryDump* pmd) -> bool { auto* size = MemoryAllocatorDump::kNameSize; auto* bytes = MemoryAllocatorDump::kUnitsBytes; const uint32_t kB = 1024; @@ -1366,6 +1246,7 @@ pmd->CreateAllocatorDump("v8/bar")->AddScalar(size, bytes, 2 * kB); pmd->CreateAllocatorDump("v8")->AddScalar(size, bytes, 99 * kB); + // All the 99 KB values here are expected to be ignored. pmd->CreateAllocatorDump("partition_alloc") ->AddScalar(size, bytes, 99 * kB); pmd->CreateAllocatorDump("partition_alloc/allocated_objects") @@ -1374,37 +1255,39 @@ ->AddScalar(size, bytes, 99 * kB); pmd->CreateAllocatorDump("partition_alloc/partitions") ->AddScalar(size, bytes, 99 * kB); - pmd->CreateAllocatorDump("partition_alloc/partitions/foo") + pmd->CreateAllocatorDump("partition_alloc/partitions/not_ignored_1") ->AddScalar(size, bytes, 2 * kB); - pmd->CreateAllocatorDump("partition_alloc/partitions/bar") + pmd->CreateAllocatorDump("partition_alloc/partitions/not_ignored_2") ->AddScalar(size, bytes, 2 * kB); pmd->process_totals()->set_resident_set_bytes(5 * kB); pmd->set_has_process_totals(); return true; })); - last_callback_success_ = false; - EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); - RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, - MemoryDumpLevelOfDetail::LIGHT); + Optional<MemoryDumpCallbackResult> result; + EXPECT_TRUE(RequestProcessDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, + MemoryDumpLevelOfDetail::LIGHT, + &result)); DisableTracing(); - // We shouldn't see any of the 99 values from above. - EXPECT_TRUE(last_callback_success_); - ASSERT_EQ(1u, GetResults()->size()); - MemoryDumpCallbackResult result = GetResults()->front(); + ASSERT_TRUE(result); + // For malloc we only count the root "malloc" not children "malloc/*". - EXPECT_EQ(1u, result.chrome_dump.malloc_total_kb); + EXPECT_EQ(1u, result->chrome_dump.malloc_total_kb); + // For blink_gc we only count the root "blink_gc" not children "blink_gc/*". - EXPECT_EQ(2u, result.chrome_dump.blink_gc_total_kb); + EXPECT_EQ(2u, result->chrome_dump.blink_gc_total_kb); + // For v8 we count the children ("v8/*") as the root total is not given. - EXPECT_EQ(3u, result.chrome_dump.v8_total_kb); + EXPECT_EQ(3u, result->chrome_dump.v8_total_kb); + // partition_alloc has partition_alloc/allocated_objects/* which is a subset // of partition_alloc/partitions/* so we only count the latter. - EXPECT_EQ(4u, result.chrome_dump.partition_alloc_total_kb); + EXPECT_EQ(4u, result->chrome_dump.partition_alloc_total_kb); + // resident_set_kb should read from process_totals. - EXPECT_EQ(5u, result.os_dump.resident_set_kb); + EXPECT_EQ(5u, result->os_dump.resident_set_kb); }; } // namespace trace_event
diff --git a/base/values.cc b/base/values.cc index 2f293c9..8e2bc88 100644 --- a/base/values.cc +++ b/base/values.cc
@@ -636,10 +636,6 @@ std::move(in_value)); } -Value* DictionaryValue::Set(StringPiece path, Value* in_value) { - return Set(path, WrapUnique(in_value)); -} - Value* DictionaryValue::SetBoolean(StringPiece path, bool in_value) { return Set(path, MakeUnique<Value>(in_value)); }
diff --git a/base/values.h b/base/values.h index 27fcc6d..6e75540 100644 --- a/base/values.h +++ b/base/values.h
@@ -249,8 +249,6 @@ // to the path in that location. |in_value| must be non-null. // Returns a pointer to the inserted value. Value* Set(StringPiece path, std::unique_ptr<Value> in_value); - // Deprecated version of the above. TODO(estade): remove. - Value* Set(StringPiece path, Value* in_value); // Convenience forms of Set(). These methods will replace any existing // value at that path, even if it has a different type.
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py index e7e2b789..47aa7f5 100755 --- a/build/fuchsia/test_runner.py +++ b/build/fuchsia/test_runner.py
@@ -89,7 +89,7 @@ def BuildBootfs(output_directory, runtime_deps_path, test_name, gtest_filter, - dry_run): + gtest_repeat, dry_run): with open(runtime_deps_path) as f: lines = f.readlines() @@ -123,10 +123,12 @@ autorun_file.write(' --test-launcher-retry-limit=0') if gtest_filter: autorun_file.write(' --gtest_filter=' + gtest_filter) + if gtest_repeat: + autorun_file.write(' --gtest_repeat=' + gtest_repeat) autorun_file.write('\n') # If shutdown happens too soon after the test completion, log statements from # the end of the run will be lost, so sleep for a bit before shutting down. - autorun_file.write('sleep 3\n') + autorun_file.write('msleep 3000\n') autorun_file.write('dm poweroff\n') autorun_file.flush() os.chmod(autorun_file.name, 0750) @@ -184,10 +186,13 @@ help='Name of the the test') parser.add_argument('--gtest_filter', help='GTest filter to use in place of any default') + parser.add_argument('--gtest_repeat', + help='GTest repeat value to use') args = parser.parse_args() bootfs = BuildBootfs(args.output_directory, args.runtime_deps_path, - args.test_name, args.gtest_filter, args.dry_run) + args.test_name, args.gtest_filter, args.gtest_repeat, + args.dry_run) qemu_path = os.path.join(SDK_ROOT, 'qemu', 'bin', 'qemu-system-x86_64')
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 520bf641..88e42716 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -199,7 +199,7 @@ "//components/url_formatter/android:url_formatter_java", "//components/variations/android:variations_java", "//components/web_contents_delegate_android:web_contents_delegate_android_java", - "//components/web_restrictions:web_restrictions_java", + "//components/web_restrictions:provider_java", "//content/public/android:content_java", "//device/geolocation:geolocation_java", "//media/base/android:media_java", @@ -377,7 +377,7 @@ "//components/sync/android:sync_java", "//components/url_formatter/android:url_formatter_java", "//components/variations/android:variations_java", - "//components/web_restrictions:web_restrictions_java", + "//components/web_restrictions:provider_java", "//content/public/android:content_java", "//device/geolocation:geolocation_java", "//mojo/public/java:bindings_java", @@ -483,7 +483,7 @@ "//components/sync/android:sync_javatests", "//components/url_formatter/android:url_formatter_java", "//components/web_contents_delegate_android:web_contents_delegate_android_java", - "//components/web_restrictions:web_restrictions_java", + "//components/web_restrictions:provider_java", "//content/public/android:content_java", "//content/public/test/android:content_java_test_support", "//device/geolocation:geolocation_java",
diff --git a/chrome/android/java/res/anim/menu_enter_from_bottom.xml b/chrome/android/java/res/anim/menu_enter_from_bottom.xml new file mode 100644 index 0000000..5598efe --- /dev/null +++ b/chrome/android/java/res/anim/menu_enter_from_bottom.xml
@@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2017 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> + <scale android:interpolator="@interpolator/transform_curve_interpolator" + android:fromXScale="0" + android:toXScale="1" + android:fromYScale="0" + android:toYScale="1" + android:pivotX="@fraction/menu_animation_pivot_x" + android:pivotY="100%" + android:duration="200" /> + <alpha android:interpolator="@android:anim/linear_interpolator" + android:fromAlpha="0" android:toAlpha="1" + android:duration="200" /> + <translate android:interpolator="@interpolator/transform_curve_interpolator" + android:fromYDelta="@dimen/menu_negative_software_vertical_offset" + android:toYDelta="0" + android:duration="200" /> +</set>
diff --git a/chrome/android/java/res/anim/menu_exit_from_bottom.xml b/chrome/android/java/res/anim/menu_exit_from_bottom.xml new file mode 100644 index 0000000..37a8fd70 --- /dev/null +++ b/chrome/android/java/res/anim/menu_exit_from_bottom.xml
@@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2017 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> + <scale android:interpolator="@interpolator/fade_out_curve_interpolator" + android:fromXScale="1" + android:toXScale="0.5" + android:fromYScale="1" + android:toYScale="0.5" + android:pivotX="@fraction/menu_animation_pivot_x" + android:pivotY="100%" + android:duration="150" /> + <alpha android:interpolator="@interpolator/fade_out_curve_interpolator" + android:fromAlpha="1" + android:toAlpha="0" + android:duration="150" /> +</set>
diff --git a/chrome/android/java/res/layout/app_menu_layout.xml b/chrome/android/java/res/layout/app_menu_layout.xml new file mode 100644 index 0000000..64be243 --- /dev/null +++ b/chrome/android/java/res/layout/app_menu_layout.xml
@@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2017 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" > + + <ListView + android:id="@+id/app_menu_list" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" /> + + <ViewStub + android:id="@+id/app_menu_footer_stub" + android:inflatedId="@+id/app_menu_footer" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + +</LinearLayout> \ No newline at end of file
diff --git a/chrome/android/java/res/values-v17/styles.xml b/chrome/android/java/res/values-v17/styles.xml index 040de596..8388552 100644 --- a/chrome/android/java/res/values-v17/styles.xml +++ b/chrome/android/java/res/values-v17/styles.xml
@@ -253,6 +253,10 @@ <item name="android:windowEnterAnimation">@anim/menu_enter</item> <item name="android:windowExitAnimation">@anim/menu_exit</item> </style> + <style name="OverflowMenuAnimBottom"> + <item name="android:windowEnterAnimation">@anim/menu_enter_from_bottom</item> + <item name="android:windowExitAnimation">@anim/menu_exit_from_bottom</item> + </style> <style name="DistilledPagePrefThemeButton"> <item name="android:layout_width">0dp</item> <item name="android:layout_height">wrap_content</item>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java index f87f1633..77f08a9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
@@ -13,9 +13,9 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; -import android.os.Build; import android.support.annotation.IdRes; import android.support.annotation.Nullable; +import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; @@ -25,10 +25,10 @@ import android.view.View.MeasureSpec; import android.view.View.OnKeyListener; import android.view.ViewGroup; +import android.view.ViewStub; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ImageButton; -import android.widget.ListPopupWindow; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.PopupWindow.OnDismissListener; @@ -62,10 +62,11 @@ private final int mNegativeSoftwareVerticalOffset; private final int[] mTempLocation; - private ListPopupWindow mPopup; + private PopupWindow mPopup; + private ListView mListView; private AppMenuAdapter mAdapter; private AppMenuHandler mHandler; - private View mPromptView; + private View mFooterView; private int mCurrentScreenRotation = -1; private boolean mIsByPermanentButton; private AnimatorSet mMenuItemEnterAnimator; @@ -108,7 +109,7 @@ */ public void menuItemContentChanged(int menuRowId) { // Make sure we have all the valid state objects we need. - if (mAdapter == null || mMenu == null || mPopup == null || mPopup.getListView() == null) { + if (mAdapter == null || mMenu == null || mPopup == null || mListView == null) { return; } @@ -124,17 +125,16 @@ if (index == -1) return; // Check if the item is visible. - ListView list = mPopup.getListView(); - int startIndex = list.getFirstVisiblePosition(); - int endIndex = list.getLastVisiblePosition(); + int startIndex = mListView.getFirstVisiblePosition(); + int endIndex = mListView.getLastVisiblePosition(); if (index < startIndex || index > endIndex) return; // Grab the correct View. - View view = list.getChildAt(index - startIndex); + View view = mListView.getChildAt(index - startIndex); if (view == null) return; // Cause the Adapter to re-populate the View. - list.getAdapter().getView(index, view, list); + mListView.getAdapter().getView(index, view, mListView); } /** @@ -156,32 +156,20 @@ * external apps. */ @SuppressLint("ResourceType") - void show(Context context, View anchorView, boolean isByPermanentButton, int screenRotation, - Rect visibleDisplayFrame, int screenHeight, @IdRes int footerResourceId, - Integer highlightedItemId) { - mPopup = new ListPopupWindow(context, null, android.R.attr.popupMenuStyle); - mPopup.setModal(true); - mPopup.setAnchorView(anchorView); + void show(Context context, final View anchorView, boolean isByPermanentButton, + int screenRotation, Rect visibleDisplayFrame, int screenHeight, + @IdRes int footerResourceId, Integer highlightedItemId) { + mPopup = new PopupWindow(context, null, android.R.attr.popupMenuStyle); + mPopup.setFocusable(true); mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); + boolean anchorAtBottom = isAnchorAtBottom(anchorView, visibleDisplayFrame); int footerHeight = 0; - if (footerResourceId != 0) { - mPopup.setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW); - // TODO(crbug.com/635567): Fix lint error properly. - mPromptView = LayoutInflater.from(context).inflate(footerResourceId, null); - mPopup.setPromptView(mPromptView); - int measureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); - mPromptView.measure(measureSpec, measureSpec); - footerHeight = mPromptView.getMeasuredHeight(); - highlightViewInFooter(highlightedItemId, mPromptView); - } else { - mPromptView = null; - } mPopup.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { - if (mPopup.getAnchorView() instanceof ImageButton) { - ((ImageButton) mPopup.getAnchorView()).setSelected(false); + if (anchorView instanceof ImageButton) { + ((ImageButton) anchorView).setSelected(false); } if (mMenuItemEnterAnimator != null) mMenuItemEnterAnimator.cancel(); @@ -204,20 +192,18 @@ } else { mPopup.setBackgroundDrawable(ApiCompatibilityUtils.getDrawable( context.getResources(), R.drawable.edge_menu_bg)); - mPopup.setAnimationStyle(R.style.OverflowMenuAnim); + mPopup.setAnimationStyle( + anchorAtBottom ? R.style.OverflowMenuAnimBottom : R.style.OverflowMenuAnim); } - // Turn off window animations for low end devices, and on Android M, which has built-in menu - // animations. - if (SysUtils.isLowEndDevice() || Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - mPopup.setAnimationStyle(0); - } + // Turn off window animations for low end devices. + if (SysUtils.isLowEndDevice()) mPopup.setAnimationStyle(0); Rect bgPadding = new Rect(); mPopup.getBackground().getPadding(bgPadding); - int popupWidth = context.getResources().getDimensionPixelSize(R.dimen.menu_width) - + bgPadding.left + bgPadding.right; + int menuWidth = context.getResources().getDimensionPixelSize(R.dimen.menu_width); + int popupWidth = menuWidth + bgPadding.left + bgPadding.right; mPopup.setWidth(popupWidth); @@ -246,30 +232,53 @@ // list view. mAdapter = new AppMenuAdapter( this, menuItems, LayoutInflater.from(context), highlightedItemId); - mPopup.setAdapter(mAdapter); - setMenuHeight( - menuItems.size(), visibleDisplayFrame, screenHeight, sizingPadding, footerHeight); - setPopupOffset(mPopup, mCurrentScreenRotation, visibleDisplayFrame, sizingPadding); - mPopup.setOnItemClickListener(this); - mPopup.show(); - mPopup.getListView().setItemsCanFocus(true); - mPopup.getListView().setOnKeyListener(this); + ViewGroup contentView = + (ViewGroup) LayoutInflater.from(context).inflate(R.layout.app_menu_layout, null); + mListView = (ListView) contentView.findViewById(R.id.app_menu_list); + mListView.setAdapter(mAdapter); + + if (footerResourceId != 0) { + // TODO(crbug.com/635567): Fix lint error properly. + ViewStub footerStub = (ViewStub) contentView.findViewById(R.id.app_menu_footer_stub); + footerStub.setLayoutResource(footerResourceId); + mFooterView = footerStub.inflate(); + int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + int widthMeasureSpec = MeasureSpec.makeMeasureSpec(menuWidth, MeasureSpec.EXACTLY); + mFooterView.measure(widthMeasureSpec, heightMeasureSpec); + footerHeight = mFooterView.getMeasuredHeight(); + highlightViewInFooter(highlightedItemId, mFooterView); + } else { + mFooterView = null; + } + + int popupHeight = setMenuHeight(menuItems.size(), visibleDisplayFrame, screenHeight, + sizingPadding, footerHeight, anchorView); + int[] popupPosition = getPopupPosition(mCurrentScreenRotation, visibleDisplayFrame, + sizingPadding, anchorView, anchorAtBottom, popupWidth, popupHeight); + + mPopup.setContentView(contentView); + mPopup.showAtLocation( + anchorView.getRootView(), Gravity.NO_GRAVITY, popupPosition[0], popupPosition[1]); + + mListView.setOnItemClickListener(this); + mListView.setItemsCanFocus(true); + mListView.setOnKeyListener(this); mHandler.onMenuVisibilityChanged(true); if (mVerticalFadeDistance > 0) { - mPopup.getListView().setVerticalFadingEdgeEnabled(true); - mPopup.getListView().setFadingEdgeLength(mVerticalFadeDistance); + mListView.setVerticalFadingEdgeEnabled(true); + mListView.setFadingEdgeLength(mVerticalFadeDistance); } // Don't animate the menu items for low end devices. if (!SysUtils.isLowEndDevice()) { - mPopup.getListView().addOnLayoutChangeListener(new View.OnLayoutChangeListener() { + mListView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - mPopup.getListView().removeOnLayoutChangeListener(this); + mListView.removeOnLayoutChangeListener(this); runMenuItemEnterAnimations(); } }); @@ -307,11 +316,11 @@ } /** - * @return The prompt view for the menu or null if one has not been set. + * @return The footer view for the menu or null if one has not been set. */ @Nullable - public View getPromptView() { - return mPromptView; + public View getFooterView() { + return mFooterView; } private boolean isAnchorAtBottom(View anchorView, Rect visibleDisplayFrame) { @@ -319,12 +328,13 @@ return (mTempLocation[1] + anchorView.getHeight()) >= visibleDisplayFrame.bottom; } - private void setPopupOffset( - ListPopupWindow popup, int screenRotation, Rect appRect, Rect padding) { - popup.getAnchorView().getLocationInWindow(mTempLocation); + private int[] getPopupPosition(int screenRotation, Rect appRect, Rect padding, View anchorView, + boolean anchorAtBottom, int popupWidth, int popupHeight) { + anchorView.getLocationInWindow(mTempLocation); int anchorViewX = mTempLocation[0]; - int anchorHeight = popup.getAnchorView().getHeight(); + int anchorViewY = mTempLocation[1]; + int[] offsets = new int[2]; // If we have a hardware menu button, locate the app menu closer to the estimated // hardware menu button location. if (mIsByPermanentButton) { @@ -332,10 +342,10 @@ switch (screenRotation) { case Surface.ROTATION_0: case Surface.ROTATION_180: - horizontalOffset += (appRect.width() - mPopup.getWidth()) / 2; + horizontalOffset += (appRect.width() - popupWidth) / 2; break; case Surface.ROTATION_90: - horizontalOffset += appRect.width() - mPopup.getWidth(); + horizontalOffset += appRect.width() - popupWidth; break; case Surface.ROTATION_270: break; @@ -343,26 +353,27 @@ assert false; break; } - popup.setHorizontalOffset(horizontalOffset); + offsets[0] = horizontalOffset; // The menu is displayed above the anchored view, so shift the menu up by the bottom // padding of the background. - popup.setVerticalOffset(-padding.bottom); + offsets[1] = -padding.bottom; } else { - boolean anchorAtBottom = isAnchorAtBottom(mPopup.getAnchorView(), appRect); - if (anchorAtBottom && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - // When the anchor view is at the bottom of the screen on Android N+, the menu - // must be shifted down by the height of the anchor view in order to be displayed - // over and above it. The framework's PopupWindow positioning changed between - // N and M. Pre-N, setting a positive offset here shifts the menu up rather than - // down. - // See crbug.com/705348. - popup.setVerticalOffset(-mNegativeSoftwareVerticalOffset + anchorHeight); - } else { - // Shift the menu by the height of the anchor view so that it is displayed - // over the anchor view. - popup.setVerticalOffset(-mNegativeSoftwareVerticalOffset - anchorHeight); + offsets[1] = -mNegativeSoftwareVerticalOffset; + + // If the anchor is at the bottom of the screen, align the popup with the bottom of the + // anchor. The anchor may not be fully visible, so (appRect.bottom - anchorViewY) is + // used to determine the visible bottom edge of the anchor view. + if (anchorAtBottom) offsets[1] += appRect.bottom - anchorViewY - popupHeight; + + if (!ApiCompatibilityUtils.isLayoutRtl(anchorView.getRootView())) { + offsets[0] = anchorView.getWidth() - popupWidth; } } + + int xPos = anchorViewX + offsets[0]; + int yPos = anchorViewY + offsets[1]; + int[] position = {xPos, yPos}; + return position; } /** @@ -416,7 +427,7 @@ @Override public boolean onKey(View v, int keyCode, KeyEvent event) { - if (mPopup == null || mPopup.getListView() == null) return false; + if (mListView == null) return false; if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) { if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { @@ -454,33 +465,33 @@ } /** - * @return ListPopupWindow that displays all the menu options. + * @return {@link PopupWindow} that displays all the menu options and optional footer. */ - ListPopupWindow getPopup() { + PopupWindow getPopup() { return mPopup; } /** + * @return {@link ListView} that contains all of the menu options. + */ + ListView getListView() { + return mListView; + } + + /** * @return The menu instance inside of this class. */ public Menu getMenu() { return mMenu; } - private void setMenuHeight(int numMenuItems, Rect appDimensions, - int screenHeight, Rect padding, int footerHeight) { - assert mPopup.getAnchorView() != null; - View anchorView = mPopup.getAnchorView(); - anchorView.getLocationInWindow(mTempLocation); + private int setMenuHeight(int numMenuItems, Rect appDimensions, int screenHeight, Rect padding, + int footerHeight, View anchorView) { + int menuHeight; + anchorView.getLocationOnScreen(mTempLocation); int anchorViewY = mTempLocation[1] - appDimensions.top; - // The framework's PopupWindow positioning changed between N and M. Pre-N, increasing the - // height here causes the menu to be cut-off in landscape mode. See crbug.com/722105. - // TODO(twellington): stop using ListPopupWindow for the app menu. - if (isAnchorAtBottom(anchorView, appDimensions) - && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - anchorViewY += mPopup.getAnchorView().getHeight(); - } + if (isAnchorAtBottom(anchorView, appDimensions)) anchorViewY += anchorView.getHeight(); int anchorViewImpactHeight = mIsByPermanentButton ? anchorView.getHeight() : 0; @@ -504,22 +515,25 @@ int spaceForPartialItem = (int) (LAST_ITEM_SHOW_FRACTION * mItemRowHeight); // Determine which item needs hiding. if (spaceForFullItems + spaceForPartialItem < availableScreenSpace) { - mPopup.setHeight(spaceForFullItems + spaceForPartialItem - + padding.top + padding.bottom); + menuHeight = spaceForFullItems + spaceForPartialItem + padding.top + padding.bottom; } else { - mPopup.setHeight(spaceForFullItems - mItemRowHeight + spaceForPartialItem - + padding.top + padding.bottom); + menuHeight = spaceForFullItems - mItemRowHeight + spaceForPartialItem + padding.top + + padding.bottom; } } else { - mPopup.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + int spaceForFullItems = numMenuItems * (mItemRowHeight + mItemDividerHeight); + spaceForFullItems += footerHeight; + menuHeight = spaceForFullItems + padding.top + padding.bottom; } + mPopup.setHeight(menuHeight); + return menuHeight; } private void runMenuItemEnterAnimations() { mMenuItemEnterAnimator = new AnimatorSet(); AnimatorSet.Builder builder = null; - ViewGroup list = mPopup.getListView(); + ViewGroup list = mListView; for (int i = 0; i < list.getChildCount(); i++) { View view = list.getChildAt(i); Object animatorObject = view.getTag(R.id.menu_item_enter_anim_id);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuDragHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuDragHelper.java index ac64936..1f87c978 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuDragHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuDragHelper.java
@@ -14,7 +14,6 @@ import android.view.ViewConfiguration; import android.widget.ImageButton; import android.widget.LinearLayout; -import android.widget.ListPopupWindow; import android.widget.ListView; import org.chromium.base.metrics.RecordUserAction; @@ -72,8 +71,7 @@ mDragScrolling.setTimeListener(new TimeAnimator.TimeListener() { @Override public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) { - ListPopupWindow popup = mAppMenu.getPopup(); - if (popup == null || popup.getListView() == null) return; + if (mAppMenu.getListView() == null) return; // We keep both mDragScrollOffset and mDragScrollOffsetRounded because // the actual scrolling is by the rounded value but at the same time we also @@ -81,7 +79,7 @@ mDragScrollOffset += (deltaTime * 0.001f) * mDragScrollingVelocity; int diff = Math.round(mDragScrollOffset - mDragScrollOffsetRounded); mDragScrollOffsetRounded += diff; - popup.getListView().smoothScrollBy(diff, 0); + mAppMenu.getListView().smoothScrollBy(diff, 0); // Force touch move event to highlight items correctly for the scrolled position. if (!Float.isNaN(mLastTouchX) && !Float.isNaN(mLastTouchY)) { @@ -153,7 +151,7 @@ final int roundedRawY = Math.round(rawY); final int eventActionMasked = event.getActionMasked(); final long timeSinceDown = event.getEventTime() - event.getDownTime(); - final ListView listView = mAppMenu.getPopup().getListView(); + final ListView listView = mAppMenu.getListView(); mLastTouchX = rawX; mLastTouchY = rawY; @@ -234,7 +232,7 @@ * @return true whether or not a menu item is performed (executed). */ private boolean menuItemAction(int screenX, int screenY, int action) { - ListView listView = mAppMenu.getPopup().getListView(); + ListView listView = mAppMenu.getListView(); // Starting M, we have a popup menu animation that slides down. If we process dragging // events while it's sliding, it will touch many views that are passing by user's finger,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java index 6a008172..52306bc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
@@ -230,13 +230,13 @@ * @param menu The {@link AppMenu} that was shown. */ public void onShow(final AppMenu menu) { - View promptView = menu.getPromptView(); - if (!(promptView instanceof AppMenuIconRowFooter)) { + View footerView = menu.getFooterView(); + if (!(footerView instanceof AppMenuIconRowFooter)) { mAppMenuIconRowFooter = null; return; } - mAppMenuIconRowFooter = (AppMenuIconRowFooter) promptView; + mAppMenuIconRowFooter = (AppMenuIconRowFooter) footerView; mAppMenuIconRowFooter.initialize(mActivity, menu, mBookmarkBridge); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/locale/LocaleManager.java b/chrome/android/java/src/org/chromium/chrome/browser/locale/LocaleManager.java index ecb1282..fed5e2d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/locale/LocaleManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/locale/LocaleManager.java
@@ -446,6 +446,15 @@ } /** + * @return Whether we still have to check for whether search engine dialog is necessary. + */ + public boolean needToCheckForSearchEnginePromo() { + int state = ContextUtils.getAppSharedPreferences().getInt( + KEY_SEARCH_ENGINE_PROMO_SHOW_STATE, SEARCH_ENGINE_PROMO_SHOULD_CHECK); + return state == SEARCH_ENGINE_PROMO_SHOULD_CHECK; + } + + /** * Record any locale based metrics related with search. Recorded per search. * @param isFromSearchWidget Whether the search was performed from the search widget. * @param url Url for the search made.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentInstrument.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentInstrument.java index b10e349..80d6156 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentInstrument.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentInstrument.java
@@ -81,6 +81,16 @@ } @Override + public boolean isAutofillInstrument() { + return true; + } + + @Override + public boolean isServerAutofillInstrument() { + return !mCard.getIsLocal(); + } + + @Override public void invokePaymentApp(String unusedRequestId, String unusedMerchantName, String unusedOrigin, String unusedIFrameOrigin, byte[][] unusedCertificateChain, Map<String, PaymentMethodData> unusedMethodDataMap, PaymentItem unusedTotal,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentInstrument.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentInstrument.java index 2bb0092..de4c93b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentInstrument.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentInstrument.java
@@ -69,6 +69,28 @@ public abstract Set<String> getInstrumentMethodNames(); /** + * @return Whether this is an autofill instrument. All autofill instruments are sorted below all + * non-autofill instruments. + */ + public boolean isAutofillInstrument() { + return false; + } + + /** @return Whether this is a server autofill instrument. */ + public boolean isServerAutofillInstrument() { + return false; + } + + /** + * @return Whether this is a replacement for all server autofill instruments. If at least one of + * the displayed instruments returns true here, then all instruments that return true + * in isServerAutofillInstrument() should be hidden. + */ + public boolean isServerAutofillInstrumentReplacement() { + return false; + } + + /** * Invoke the payment app to retrieve the instrument details. * * The callback will be invoked with the resulting payment details or error.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java index b1605e7..0fa12b3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -318,6 +318,7 @@ private Callback<PaymentInformation> mPaymentInformationCallback; private boolean mPaymentAppRunning; private boolean mMerchantSupportsAutofillPaymentInstruments; + private boolean mHideServerAutofillInstruments; private ContactEditor mContactEditor; private boolean mHasRecordedAbortReason; private Map<String, CurrencyFormatter> mCurrencyFormatterMap; @@ -1487,7 +1488,9 @@ instrument.getInstrumentMethodNames()); instrumentMethodNames.retainAll(mMethodData.keySet()); if (!instrumentMethodNames.isEmpty()) { - if (instrument instanceof AutofillPaymentInstrument) { + mHideServerAutofillInstruments |= + instrument.isServerAutofillInstrumentReplacement(); + if (instrument.isAutofillInstrument()) { mPendingAutofillInstruments.add(instrument); } else { nonAutofillInstruments.add(instrument); @@ -1507,6 +1510,16 @@ if (disconnectIfNoPaymentMethodsSupported()) return; + if (mHideServerAutofillInstruments) { + List<PaymentInstrument> localAutofillInstruments = new ArrayList<>(); + for (int i = 0; i < mPendingAutofillInstruments.size(); i++) { + if (!mPendingAutofillInstruments.get(i).isServerAutofillInstrument()) { + localAutofillInstruments.add(mPendingAutofillInstruments.get(i)); + } + } + mPendingAutofillInstruments = localAutofillInstruments; + } + // Load the validation rules for each unique region code in the credit card billing // addresses and check for validity. Set<String> uniqueCountryCodes = new HashSet<>();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorDialog.java index 0c9eca7..d4d1fff 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorDialog.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorDialog.java
@@ -263,9 +263,12 @@ @Override public void onClick(View view) { + // Disable interaction during animation. + if (mDialogInOutAnimator != null) return; + if (view.getId() == R.id.payments_edit_done_button) { if (validateForm()) { - mEditorModel.done(); + if (mEditorModel != null) mEditorModel.done(); mEditorModel = null; dismissDialog(); return; @@ -323,6 +326,8 @@ * much more human-parsable with inefficient LinearLayouts for half-width controls sharing rows. */ private void prepareEditor() { + assert mEditorModel != null; + // Ensure the layout is empty. removeTextChangedListenersAndInputFilters(); mDataView = (ViewGroup) mLayout.findViewById(R.id.contents); @@ -406,6 +411,9 @@ Runnable prepareEditorRunnable = new Runnable() { @Override public void run() { + // The dialog has been dismissed. + if (mEditorModel == null) return; + // The fields may have changed. prepareEditor(); if (mObserverForTest != null) mObserverForTest.onPaymentRequestReadyToEdit(); @@ -468,7 +476,7 @@ * * @param editorModel The description of the editor user interface to display. */ - public void show(final EditorModel editorModel) { + public void show(EditorModel editorModel) { setOnShowListener(this); setOnDismissListener(this); mEditorModel = editorModel;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java index 218ffe5..427aba5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java
@@ -389,9 +389,12 @@ } static boolean shouldShowFullString() { - Intent freIntent = FirstRunFlowSequencer.checkIfFirstRunIsNecessary( - getDelegate().getContext(), null, false); - return freIntent == null; + boolean freIsNotNecessary = FirstRunFlowSequencer.checkIfFirstRunIsNecessary( + getDelegate().getContext(), null, false) + == null; + boolean noNeedToCheckForSearchDialog = + !LocaleManager.getInstance().needToCheckForSearchEnginePromo(); + return freIsNotNecessary && noNeedToCheckForSearchDialog; } /** Sets an {@link SearchWidgetProviderDelegate} to interact with. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java index 8824e21..2181b4a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
@@ -97,6 +97,8 @@ private Tab mTab; private ContentViewCore mContentViewCore; private NativePage mNativePage; + private Boolean mCanGoBack; + private Boolean mCanGoForward; private WindowAndroid mOriginalWindowAndroid; private VrWindowAndroid mContentVrWindowAndroid; @@ -215,6 +217,28 @@ if (mNativeVrShell == 0) return; nativeOnLoadProgressChanged(mNativeVrShell, progress / 100.0); } + + @Override + public void onCrash(Tab tab, boolean sadTabShown) { + updateHistoryButtonsVisibility(); + } + + @Override + public void onLoadStarted(Tab tab, boolean toDifferentDocument) { + if (!toDifferentDocument) return; + updateHistoryButtonsVisibility(); + } + + @Override + public void onLoadStopped(Tab tab, boolean toDifferentDocument) { + if (!toDifferentDocument) return; + updateHistoryButtonsVisibility(); + } + + @Override + public void onUrlUpdated(Tab tab) { + updateHistoryButtonsVisibility(); + } }; mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() { @@ -297,6 +321,7 @@ createTabList(); mActivity.getTabModelSelector().addObserver(mTabModelSelectorObserver); createTabModelSelectorTabObserver(); + updateHistoryButtonsVisibility(); mPresentationView.setOnTouchListener(mTouchListener); } @@ -614,7 +639,14 @@ boolean shouldAlwaysGoBack = mActivity instanceof ChromeTabbedActivity && (mNativePage == null || !(mNativePage instanceof NewTabPage)); boolean canGoBack = mTab.canGoBack() || shouldAlwaysGoBack; - nativeSetHistoryButtonsEnabled(mNativeVrShell, canGoBack, mTab.canGoForward()); + boolean canGoForward = mTab.canGoForward(); + if ((mCanGoBack != null && canGoBack == mCanGoBack) + && (mCanGoForward != null && canGoForward == mCanGoForward)) { + return; + } + mCanGoBack = canGoBack; + mCanGoForward = canGoForward; + nativeSetHistoryButtonsEnabled(mNativeVrShell, mCanGoBack, mCanGoForward); } @CalledByNative
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java index d8bc7697..fd791d0 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java
@@ -11,7 +11,6 @@ import android.view.KeyEvent; import android.view.MenuItem; import android.view.View; -import android.widget.ListPopupWindow; import android.widget.ListView; import org.junit.Assert; @@ -99,7 +98,7 @@ ThreadUtils.runOnUiThread(new Runnable() { @Override public void run() { - mAppMenu.getPopup().getListView().setSelection(0); + mAppMenu.getListView().setSelection(0); } }); CriteriaHelper.pollInstrumentationThread(Criteria.equals(0, new Callable<Integer>() { @@ -289,7 +288,7 @@ } private void pressKey(final int keycode) { - final View view = mAppMenu.getPopup().getListView(); + final View view = mAppMenu.getListView(); ThreadUtils.runOnUiThread(new Runnable() { @Override public void run() { @@ -301,15 +300,14 @@ } private int getCurrentFocusedRow() { - ListPopupWindow popup = mAppMenu.getPopup(); - if (popup == null || popup.getListView() == null) return ListView.INVALID_POSITION; - ListView listView = popup.getListView(); + ListView listView = mAppMenu.getListView(); + if (listView == null) return ListView.INVALID_POSITION; return listView.getSelectedItemPosition(); } private int getCount() { - ListPopupWindow popup = mAppMenu.getPopup(); - if (popup == null || popup.getListView() == null) return 0; - return popup.getListView().getCount(); + ListView listView = mAppMenu.getListView(); + if (listView == null) return 0; + return listView.getCount(); } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/ChromeHomeAppMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/ChromeHomeAppMenuTest.java index 6357917..013212e 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/ChromeHomeAppMenuTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/ChromeHomeAppMenuTest.java
@@ -55,7 +55,7 @@ showAppMenuAndAssertMenuShown(); AppMenu appMenu = mAppMenuHandler.getAppMenu(); - AppMenuIconRowFooter iconRow = (AppMenuIconRowFooter) appMenu.getPromptView(); + AppMenuIconRowFooter iconRow = (AppMenuIconRowFooter) appMenu.getFooterView(); assertFalse(iconRow.getForwardButtonForTests().isEnabled()); assertTrue(iconRow.getBookmarkButtonForTests().isEnabled()); @@ -74,7 +74,7 @@ }); showAppMenuAndAssertMenuShown(); - iconRow = (AppMenuIconRowFooter) appMenu.getPromptView(); + iconRow = (AppMenuIconRowFooter) appMenu.getFooterView(); assertTrue(iconRow.getForwardButtonForTests().isEnabled()); } @@ -91,7 +91,7 @@ showAppMenuAndAssertMenuShown(); AppMenu appMenu = mAppMenuHandler.getAppMenu(); - assertNull(appMenu.getPromptView()); + assertNull(appMenu.getFooterView()); } private void showAppMenuAndAssertMenuShown() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProviderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProviderTest.java index 5429068d..e3f54288 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProviderTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProviderTest.java
@@ -27,6 +27,7 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.firstrun.FirstRunActivity; +import org.chromium.chrome.browser.locale.LocaleManager; import org.chromium.chrome.browser.searchwidget.SearchActivity.SearchActivityDelegate; import org.chromium.chrome.browser.util.IntentUtils; import org.chromium.chrome.test.util.ApplicationTestUtils; @@ -34,6 +35,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; /** * Tests for the SearchWidgetProvider. @@ -123,24 +126,59 @@ // The microphone icon should disappear if voice queries are unavailable. mDelegate.mViews.clear(); - SearchWidgetProvider.updateCachedVoiceSearchAvailability(false); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + SearchWidgetProvider.updateCachedVoiceSearchAvailability(false); + } + }); checkWidgetStates(TEXT_GENERIC, View.GONE); - // After recording that the default search engine is "X", it should say "Search with X". + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + SearchWidgetProvider.updateCachedEngineName(TEXT_SEARCH_ENGINE); + } + }); + checkWidgetStates(TEXT_GENERIC, View.GONE); + + // After recording that the default search engine is "X" and search engine promo check, + // it should say "Search with X". mDelegate.mViews.clear(); - SearchWidgetProvider.updateCachedEngineName(TEXT_SEARCH_ENGINE); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + LocaleManager.setInstanceForTest(new LocaleManager() { + @Override + public boolean needToCheckForSearchEnginePromo() { + return false; + } + }); + SearchWidgetProvider.updateCachedEngineName(TEXT_SEARCH_ENGINE); + } + }); checkWidgetStates(TEXT_SEARCH_ENGINE_FULL, View.GONE); // The microphone icon should appear if voice queries are available. mDelegate.mViews.clear(); - SearchWidgetProvider.updateCachedVoiceSearchAvailability(true); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + SearchWidgetProvider.updateCachedVoiceSearchAvailability(true); + } + }); checkWidgetStates(TEXT_SEARCH_ENGINE_FULL, View.VISIBLE); } @SmallTest @CommandLineFlags.Remove(ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE) - public void testUpdateCachedEngineNameBeforeFirstRun() { - assertFalse(SearchWidgetProvider.shouldShowFullString()); + public void testUpdateCachedEngineNameBeforeFirstRun() throws ExecutionException { + assertFalse(ThreadUtils.runOnUiThreadBlocking(new Callable<Boolean>() { + @Override + public Boolean call() throws Exception { + return SearchWidgetProvider.shouldShowFullString(); + } + })); SearchWidgetProvider.handleAction( new Intent(SearchWidgetProvider.ACTION_UPDATE_ALL_WIDGETS)); @@ -152,7 +190,18 @@ // already displaying the generic string, and should continue doing so, so they don't get // updated. mDelegate.mViews.clear(); - SearchWidgetProvider.updateCachedEngineName(TEXT_SEARCH_ENGINE); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + LocaleManager.setInstanceForTest(new LocaleManager() { + @Override + public boolean needToCheckForSearchEnginePromo() { + return false; + } + }); + SearchWidgetProvider.updateCachedEngineName(TEXT_SEARCH_ENGINE); + } + }); assertEquals(0, mDelegate.mViews.size()); // Manually set the preference, then update the cached engine name again. The @@ -163,7 +212,12 @@ .edit() .putString(SearchWidgetProvider.PREF_SEARCH_ENGINE_SHORTNAME, TEXT_SEARCH_ENGINE) .apply(); - SearchWidgetProvider.updateCachedEngineName(TEXT_SEARCH_ENGINE); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + SearchWidgetProvider.updateCachedEngineName(TEXT_SEARCH_ENGINE); + } + }); checkWidgetStates(TEXT_GENERIC, View.VISIBLE); }
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index 9c96342..54dd2c3 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -4426,6 +4426,9 @@ <message name="IDS_KEYBOARD_OVERLAY_DOWN_KEY_LABEL" desc="The text in the keyboard overlay to show the label of the 'down' arrow key."> down </message> + <message name="IDS_KEYBOARD_OVERLAY_VOICE_INTERACTION" desc="The text in the keyboard overlay for voice interaction shortcut"> + Start voice interaction + </message> <!-- BEGIN GENERATED KEYBOARD OVERLAY STRINGS --> <message name="IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_SHELF_ITEM" desc="The text in the keyboard overlay to explain the shortcut (Open the last shelf item)."> Last shelf item
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 18d7fbd..0feb321 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -889,8 +889,8 @@ "password_manager/password_manager_util_win.h", "password_manager/password_store_factory.cc", "password_manager/password_store_factory.h", - "password_manager/password_store_proxy_mac.cc", - "password_manager/password_store_proxy_mac.h", + "password_manager/password_store_mac.cc", + "password_manager/password_store_mac.h", "password_manager/password_store_win.cc", "password_manager/password_store_win.h", "payments/ssl_validity_checker.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 7b0853fb..64b0bb2 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1067,26 +1067,30 @@ const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin4px[] = { {OmniboxFieldTrial::kUIVerticalMarginParam, "4"}}; +const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin6px[] = { + {OmniboxFieldTrial::kUIVerticalMarginParam, "6"}}; const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin8px[] = { {OmniboxFieldTrial::kUIVerticalMarginParam, "8"}}; +const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin10px[] = { + {OmniboxFieldTrial::kUIVerticalMarginParam, "10"}}; const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin12px[] = { {OmniboxFieldTrial::kUIVerticalMarginParam, "12"}}; -const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin16px[] = { - {OmniboxFieldTrial::kUIVerticalMarginParam, "16"}}; -const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin20px[] = { - {OmniboxFieldTrial::kUIVerticalMarginParam, "20"}}; +const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin14px[] = { + {OmniboxFieldTrial::kUIVerticalMarginParam, "14"}}; const FeatureEntry::FeatureVariation kOmniboxUIVerticalMarginVariations[] = { {"4px vertical margin", kOmniboxUIVerticalMargin4px, arraysize(kOmniboxUIVerticalMargin4px), nullptr}, + {"6px vertical margin", kOmniboxUIVerticalMargin6px, + arraysize(kOmniboxUIVerticalMargin6px), nullptr}, {"8px vertical margin", kOmniboxUIVerticalMargin8px, arraysize(kOmniboxUIVerticalMargin8px), nullptr}, + {"10px vertical margin", kOmniboxUIVerticalMargin10px, + arraysize(kOmniboxUIVerticalMargin10px), nullptr}, {"12px vertical margin", kOmniboxUIVerticalMargin12px, arraysize(kOmniboxUIVerticalMargin12px), nullptr}, - {"16px vertical margin", kOmniboxUIVerticalMargin16px, - arraysize(kOmniboxUIVerticalMargin16px), nullptr}, - {"20px vertical margin", kOmniboxUIVerticalMargin20px, - arraysize(kOmniboxUIVerticalMargin20px), nullptr}}; + {"14px vertical margin", kOmniboxUIVerticalMargin14px, + arraysize(kOmniboxUIVerticalMargin14px), nullptr}}; // RECORDING USER METRICS FOR FLAGS: // -----------------------------------------------------------------------------
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index a982b9e..6435b992 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1218,7 +1218,7 @@ context)); #endif #if defined(OS_ANDROID) - host->AddFilter(new cdm::CdmMessageFilterAndroid()); + host->AddFilter(new cdm::CdmMessageFilterAndroid(false)); #endif bool is_incognito_process = profile->IsOffTheRecord();
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc index 0ba79b0..67f0a8f 100644 --- a/chrome/browser/devtools/devtools_window.cc +++ b/chrome/browser/devtools/devtools_window.cc
@@ -585,13 +585,6 @@ // static void DevToolsWindow::OpenNodeFrontendWindow(Profile* profile) { - for (DevToolsWindow* window : g_instances.Get()) { - if (window->frontend_type_ == kFrontendNode) { - window->ActivateWindow(); - return; - } - } - DevToolsWindow* window = Create(profile, nullptr, kFrontendNode, std::string(), false, std::string(), std::string()); @@ -813,14 +806,12 @@ DevToolsWindow::OnPageCloseCanceled(window->main_web_contents_); } -DevToolsWindow::DevToolsWindow(FrontendType frontend_type, - Profile* profile, +DevToolsWindow::DevToolsWindow(Profile* profile, WebContents* main_web_contents, DevToolsUIBindings* bindings, WebContents* inspected_web_contents, bool can_dock) - : frontend_type_(frontend_type), - profile_(profile), + : profile_(profile), main_web_contents_(main_web_contents), toolbox_web_contents_(nullptr), bindings_(bindings), @@ -915,8 +906,8 @@ return nullptr; if (!settings.empty()) SetPreferencesFromJson(profile, settings); - return new DevToolsWindow(frontend_type, profile, main_web_contents.release(), - bindings, inspected_web_contents, can_dock); + return new DevToolsWindow(profile, main_web_contents.release(), bindings, + inspected_web_contents, can_dock); } // static
diff --git a/chrome/browser/devtools/devtools_window.h b/chrome/browser/devtools/devtools_window.h index 8058d9c..2a9fb6bd 100644 --- a/chrome/browser/devtools/devtools_window.h +++ b/chrome/browser/devtools/devtools_window.h
@@ -247,8 +247,7 @@ kFrontendNode }; - DevToolsWindow(FrontendType frontend_type, - Profile* profile, + DevToolsWindow(Profile* profile, content::WebContents* main_web_contents, DevToolsUIBindings* bindings, content::WebContents* inspected_web_contents, @@ -352,7 +351,6 @@ std::unique_ptr<ObserverWithAccessor> inspected_contents_observer_; - FrontendType frontend_type_; Profile* profile_; content::WebContents* main_web_contents_; content::WebContents* toolbox_web_contents_;
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc index 689edf09..7993b3a 100644 --- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/extensions/extension_action_runner.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/extension_with_management_policy_apitest.h" #include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/extensions/test_extension_dir.h" #include "chrome/browser/profiles/profile.h" @@ -46,6 +47,7 @@ #include "extensions/test/result_catcher.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h" +#include "net/test/embedded_test_server/http_request.h" #include "net/test/test_data_directory.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "net/url_request/test_url_fetcher_factory.h" @@ -85,7 +87,7 @@ private: content::NotificationRegistrar registrar_; - DISALLOW_COPY_AND_ASSIGN(CancelLoginDialog); + DISALLOW_COPY_AND_ASSIGN(CancelLoginDialog); }; // Sends an XHR request to the provided host, port, and path, and responds when @@ -954,4 +956,198 @@ } } +// Tests that the webRequest events aren't dispatched when the request initiator +// is protected by policy. +IN_PROC_BROWSER_TEST_F(ExtensionApiTestWithManagementPolicy, + InitiatorProtectedByPolicy) { + // We expect that no request will be hidden or modification blocked. This + // means that the request to example.com will be seen by the extension. + { + ExtensionManagementPolicyUpdater pref(&policy_provider_); + pref.AddRuntimeBlockedHost("*", "*://notexample.com"); + } + + ASSERT_TRUE(StartEmbeddedTestServer()); + + // Host navigated to. + const std::string example_com = "example.com"; + + // URL of a page that initiates a cross domain requests when navigated to. + const GURL extension_test_url = embedded_test_server()->GetURL( + example_com, + "/extensions/api_test/webrequest/policy_blocked/ref_remote_js.html"); + + LoadExtension(test_data_dir_.AppendASCII("webrequest/policy_blocked")); + + // Extension communicates back using this listener name. + const std::string listener_message = "protected_origin"; + + // Listen to verify extension sees the web request. + ExtensionTestMessageListener before_request_listener(listener_message, false); + + // Wait until all remote Javascript files have been blocked / pulled down. + ui_test_utils::NavigateToURLWithDisposition( + browser(), extension_test_url, WindowOpenDisposition::CURRENT_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // Domain that hosts javascript file referenced by example_com. + const std::string example2_com = "example2.com"; + + // The server saw a request for the remote Javascript file. + EXPECT_TRUE(BrowsedTo(example2_com)); + + // The request was seen by the extension. + EXPECT_TRUE(before_request_listener.was_satisfied()); + + // Clear the list of domains the server has seen. + ClearRequestLog(); + + // Make sure we've cleared the embedded server history. + EXPECT_FALSE(BrowsedTo(example2_com)); + + // Set the policy to hide requests to example.com or any resource + // it includes. We expect that in this test, the request to example2.com + // will not be seen by the extension. + { + ExtensionManagementPolicyUpdater pref(&policy_provider_); + pref.AddRuntimeBlockedHost("*", "*://" + example_com); + } + + // Listen in case extension sees the requst. + ExtensionTestMessageListener before_request_listener2(listener_message, + false); + + // Wait until all remote Javascript files have been pulled down. + ui_test_utils::NavigateToURLWithDisposition( + browser(), extension_test_url, WindowOpenDisposition::CURRENT_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // The server saw a request for the remote Javascript file. + EXPECT_TRUE(BrowsedTo(example2_com)); + + // The request was hidden from the extension. + EXPECT_FALSE(before_request_listener2.was_satisfied()); +} + +// Tests that the webRequest events aren't dispatched when the URL of the +// request is protected by policy. +IN_PROC_BROWSER_TEST_F(ExtensionApiTestWithManagementPolicy, + UrlProtectedByPolicy) { + // Host protected by policy. + const std::string protected_domain = "example.com"; + + { + ExtensionManagementPolicyUpdater pref(&policy_provider_); + pref.AddRuntimeBlockedHost("*", "*://" + protected_domain); + } + + ASSERT_TRUE(StartEmbeddedTestServer()); + + LoadExtension(test_data_dir_.AppendASCII("webrequest/policy_blocked")); + + // Listen in case extension sees the requst. + ExtensionTestMessageListener before_request_listener("protected_url", false); + + // Path to resolve during test navigations. + const std::string test_path = "/defaultresponse?protected_url"; + + // Navigate to the protected domain and wait until page fully loads. + ui_test_utils::NavigateToURLWithDisposition( + browser(), embedded_test_server()->GetURL(protected_domain, test_path), + WindowOpenDisposition::CURRENT_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // The server saw a request for the protected site. + EXPECT_TRUE(BrowsedTo(protected_domain)); + + // The request was hidden from the extension. + EXPECT_FALSE(before_request_listener.was_satisfied()); + + // Host not protected by policy. + const std::string unprotected_domain = "notblockedexample.com"; + + // Now we'll test browsing to a non-protected website where we expect the + // extension to see the request. + ui_test_utils::NavigateToURLWithDisposition( + browser(), embedded_test_server()->GetURL(unprotected_domain, test_path), + WindowOpenDisposition::CURRENT_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // The server saw a request for the non-protected site. + EXPECT_TRUE(BrowsedTo(unprotected_domain)); + + // The request was visible from the extension. + EXPECT_TRUE(before_request_listener.was_satisfied()); +} + +// Test that no webRequest events are seen for a protected host during normal +// navigation. This replicates most of the tests from +// WebRequestWithWithheldPermissions with a protected host. Granting a tab +// specific permission shouldn't bypass our policy. +IN_PROC_BROWSER_TEST_F(ExtensionApiTestWithManagementPolicy, + WebRequestProtectedByPolicy) { + FeatureSwitch::ScopedOverride enable_scripts_require_action( + FeatureSwitch::scripts_require_action(), true); + + // Host protected by policy. + const std::string protected_domain = "example.com"; + + { + ExtensionManagementPolicyUpdater pref(&policy_provider_); + pref.AddRuntimeBlockedHost("*", "*://" + protected_domain); + } + + ASSERT_TRUE(StartEmbeddedTestServer()); + + ExtensionTestMessageListener listener("ready", false); + const Extension* extension = + LoadExtension(test_data_dir_.AppendASCII("webrequest_activetab")); + ASSERT_TRUE(extension) << message_; + EXPECT_TRUE(listener.WaitUntilSatisfied()); + + // Navigate the browser to a page in a new tab. + GURL url = embedded_test_server()->GetURL(protected_domain, "/empty.html"); + chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); + params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; + ui_test_utils::NavigateToURL(¶ms); + + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + ASSERT_TRUE(web_contents); + ExtensionActionRunner* runner = + ExtensionActionRunner::GetForWebContents(web_contents); + ASSERT_TRUE(runner); + + int port = embedded_test_server()->port(); + const std::string kXhrPath = "simple.html"; + + // The extension shouldn't have currently received any webRequest events, + // since it doesn't have permission (and shouldn't receive any from an XHR). + EXPECT_EQ(0, GetWebRequestCountFromBackgroundPage(extension, profile())); + PerformXhrInFrame(web_contents->GetMainFrame(), protected_domain, port, + kXhrPath); + EXPECT_EQ(0, GetWebRequestCountFromBackgroundPage(extension, profile())); + + // Grant activeTab permission, and perform another XHR. The extension should + // still be blocked due to ExtensionSettings policy on example.com. + // Only records ACCESS_WITHHELD, not ACCESS_DENIED, this is why it matches + // BLOCKED_ACTION_NONE. + EXPECT_EQ(BLOCKED_ACTION_NONE, runner->GetBlockedActions(extension)); + runner->set_default_bubble_close_action_for_testing( + base::WrapUnique(new ToolbarActionsBarBubbleDelegate::CloseAction( + ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE))); + runner->RunAction(extension, true); + base::RunLoop().RunUntilIdle(); + EXPECT_TRUE(content::WaitForLoadStop(web_contents)); + EXPECT_EQ(BLOCKED_ACTION_NONE, runner->GetBlockedActions(extension)); + int xhr_count = GetWebRequestCountFromBackgroundPage(extension, profile()); + // ... which means that we should have a non-zero xhr count if the policy + // didn't block the events. + EXPECT_EQ(0, xhr_count); + // And the extension should also block future events. + PerformXhrInFrame(web_contents->GetMainFrame(), protected_domain, port, + kXhrPath); + EXPECT_EQ(0, GetWebRequestCountFromBackgroundPage(extension, profile())); +} + } // namespace extensions
diff --git a/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc index ed19ffd..0303a49 100644 --- a/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc
@@ -181,32 +181,35 @@ context.CreateRequest(GURL("http://example.com"), net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS)); - EXPECT_EQ(PermissionsData::ACCESS_ALLOWED, - WebRequestPermissions::CanExtensionAccessURL( - extension_info_map_.get(), permissionless_extension_->id(), - request->url(), - -1, // No tab id. - false, // crosses_incognito - WebRequestPermissions::DO_NOT_CHECK_HOST)); + EXPECT_EQ( + PermissionsData::ACCESS_ALLOWED, + WebRequestPermissions::CanExtensionAccessURL( + extension_info_map_.get(), permissionless_extension_->id(), + request->url(), + -1, // No tab id. + false, // crosses_incognito + WebRequestPermissions::DO_NOT_CHECK_HOST, request->initiator())); EXPECT_EQ(PermissionsData::ACCESS_DENIED, WebRequestPermissions::CanExtensionAccessURL( extension_info_map_.get(), permissionless_extension_->id(), request->url(), - -1, // No tab id. - false, // crosses_incognito - WebRequestPermissions::REQUIRE_HOST_PERMISSION)); + -1, // No tab id. + false, // crosses_incognito + WebRequestPermissions::REQUIRE_HOST_PERMISSION, + request->initiator())); EXPECT_EQ(PermissionsData::ACCESS_ALLOWED, WebRequestPermissions::CanExtensionAccessURL( extension_info_map_.get(), com_extension_->id(), request->url(), - -1, // No tab id. - false, // crosses_incognito - WebRequestPermissions::REQUIRE_HOST_PERMISSION)); + -1, // No tab id. + false, // crosses_incognito + WebRequestPermissions::REQUIRE_HOST_PERMISSION, + request->initiator())); EXPECT_EQ(PermissionsData::ACCESS_DENIED, WebRequestPermissions::CanExtensionAccessURL( extension_info_map_.get(), com_extension_->id(), request->url(), - -1, // No tab id. - false, // crosses_incognito - WebRequestPermissions::REQUIRE_ALL_URLS)); + -1, // No tab id. + false, // crosses_incognito + WebRequestPermissions::REQUIRE_ALL_URLS, request->initiator())); // Public Sessions tests. #if defined(OS_CHROMEOS) @@ -218,9 +221,10 @@ WebRequestPermissions::CanExtensionAccessURL( extension_info_map_.get(), com_policy_extension_->id(), org_request->url(), - -1, // No tab id. - false, // crosses_incognito - WebRequestPermissions::REQUIRE_HOST_PERMISSION)); + -1, // No tab id. + false, // crosses_incognito + WebRequestPermissions::REQUIRE_HOST_PERMISSION, + org_request->initiator())); chromeos::ScopedTestPublicSessionLoginState login_state; @@ -230,17 +234,19 @@ WebRequestPermissions::CanExtensionAccessURL( extension_info_map_.get(), com_policy_extension_->id(), org_request->url(), - -1, // No tab id. - false, // crosses_incognito - WebRequestPermissions::REQUIRE_HOST_PERMISSION)); + -1, // No tab id. + false, // crosses_incognito + WebRequestPermissions::REQUIRE_HOST_PERMISSION, + org_request->initiator())); - EXPECT_EQ(PermissionsData::ACCESS_ALLOWED, - WebRequestPermissions::CanExtensionAccessURL( - extension_info_map_.get(), com_policy_extension_->id(), - org_request->url(), - -1, // No tab id. - false, // crosses_incognito - WebRequestPermissions::REQUIRE_ALL_URLS)); + EXPECT_EQ( + PermissionsData::ACCESS_ALLOWED, + WebRequestPermissions::CanExtensionAccessURL( + extension_info_map_.get(), com_policy_extension_->id(), + org_request->url(), + -1, // No tab id. + false, // crosses_incognito + WebRequestPermissions::REQUIRE_ALL_URLS, org_request->initiator())); // Make sure that chrome:// URLs cannot be accessed. std::unique_ptr<net::URLRequest> chrome_request( @@ -251,8 +257,9 @@ WebRequestPermissions::CanExtensionAccessURL( extension_info_map_.get(), com_policy_extension_->id(), chrome_request->url(), - -1, // No tab id. - false, // crosses_incognito - WebRequestPermissions::REQUIRE_HOST_PERMISSION)); + -1, // No tab id. + false, // crosses_incognito + WebRequestPermissions::REQUIRE_HOST_PERMISSION, + chrome_request->initiator())); #endif }
diff --git a/chrome/browser/extensions/extension_with_management_policy_apitest.cc b/chrome/browser/extensions/extension_with_management_policy_apitest.cc index 3cce777..3b77f73d 100644 --- a/chrome/browser/extensions/extension_with_management_policy_apitest.cc +++ b/chrome/browser/extensions/extension_with_management_policy_apitest.cc
@@ -14,6 +14,9 @@ void ExtensionApiTestWithManagementPolicy::SetUpInProcessBrowserTestFixture() { ExtensionApiTest::SetUpInProcessBrowserTestFixture(); + embedded_test_server()->RegisterRequestMonitor( + base::Bind(&ExtensionApiTestWithManagementPolicy::MonitorRequestHandler, + base::Unretained(this))); EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_)) .WillRepeatedly(testing::Return(true)); policy_provider_.SetAutoRefresh(); @@ -25,3 +28,26 @@ ExtensionApiTest::SetUpOnMainThread(); host_resolver()->AddRule("*", "127.0.0.1"); } + +void ExtensionApiTestWithManagementPolicy::MonitorRequestHandler( + const net::test_server::HttpRequest& request) { + auto host = request.headers.find("Host"); + if (host != request.headers.end()) { + ManagementPolicyRequestLog log; + size_t delimiter_pos = host->second.find(":"); + log.host = host->second.substr(0, delimiter_pos); + request_log_.push_back(log); + } +} + +bool ExtensionApiTestWithManagementPolicy::BrowsedTo( + const std::string& test_host) { + return std::find_if(request_log_.begin(), request_log_.end(), + [test_host](const ManagementPolicyRequestLog& log) { + return log.host == test_host; + }) != request_log_.end(); +} + +void ExtensionApiTestWithManagementPolicy::ClearRequestLog() { + request_log_.clear(); +}
diff --git a/chrome/browser/extensions/extension_with_management_policy_apitest.h b/chrome/browser/extensions/extension_with_management_policy_apitest.h index ef11374d..e57aff4 100644 --- a/chrome/browser/extensions/extension_with_management_policy_apitest.h +++ b/chrome/browser/extensions/extension_with_management_policy_apitest.h
@@ -9,8 +9,14 @@ #include <vector> #include "chrome/browser/extensions/extension_apitest.h" +#include "chrome/browser/extensions/extension_management_test_util.h" #include "components/policy/core/common/mock_configuration_policy_provider.h" +struct ManagementPolicyRequestLog { + std::string all_headers; + std::string host; +}; + // The ExtensionSettings policy affects host permissions which impacts several // API integration tests. This class enables easy declaration of // ExtensionSettings policies and functions commonly used during these tests. @@ -23,6 +29,12 @@ protected: policy::MockConfigurationPolicyProvider policy_provider_; + bool BrowsedTo(const std::string& test_host); + void ClearRequestLog(); + void MonitorRequestHandler(const net::test_server::HttpRequest& request); + + private: + std::vector<ManagementPolicyRequestLog> request_log_; DISALLOW_COPY_AND_ASSIGN(ExtensionApiTestWithManagementPolicy); };
diff --git a/chrome/browser/extensions/process_manager_browsertest.cc b/chrome/browser/extensions/process_manager_browsertest.cc index 38332dde..a94de9c 100644 --- a/chrome/browser/extensions/process_manager_browsertest.cc +++ b/chrome/browser/extensions/process_manager_browsertest.cc
@@ -971,6 +971,7 @@ guest_view::TestGuestViewManager::FromBrowserContext( browser()->profile())); content::WebContents* guest = guest_manager->WaitForSingleGuestCreated(); + guest_manager->WaitUntilAttached(guest); // There should be two extension frames in ProcessManager: the app's main // page and the background page.
diff --git a/chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.cc b/chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.cc index bdc276f..22bcd719 100644 --- a/chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.cc +++ b/chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.cc
@@ -40,7 +40,7 @@ void SetObserver(Observer* observer) override; bool IsBlocked(const GURL& url) override; - std::vector<MostVisitedSitesSupervisor::Whitelist> whitelists() override; + std::vector<MostVisitedSitesSupervisor::Whitelist> GetWhitelists() override; bool IsChildProfile() override; // SupervisedUserServiceObserver implementation. @@ -81,7 +81,7 @@ } std::vector<ntp_tiles::MostVisitedSitesSupervisor::Whitelist> -SupervisorBridge::whitelists() { +SupervisorBridge::GetWhitelists() { std::vector<MostVisitedSitesSupervisor::Whitelist> results; SupervisedUserService* supervised_user_service = SupervisedUserServiceFactory::GetForProfile(profile_);
diff --git a/chrome/browser/password_manager/password_generation_interactive_uitest.cc b/chrome/browser/password_manager/password_generation_interactive_uitest.cc index e605a1f31..d2dc421b 100644 --- a/chrome/browser/password_manager/password_generation_interactive_uitest.cc +++ b/chrome/browser/password_manager/password_generation_interactive_uitest.cc
@@ -157,9 +157,8 @@ EXPECT_TRUE(EditingPopupShowing()); } -// Disabled due to flakiness due to resizes, see http://crbug.com/407998. IN_PROC_BROWSER_TEST_F(PasswordGenerationInteractiveTest, - DISABLED_PopupShownAndDismissed) { + PopupShownAndDismissed) { FocusPasswordField(); EXPECT_TRUE(GenerationPopupShowing()); @@ -169,9 +168,8 @@ EXPECT_FALSE(GenerationPopupShowing()); } -// Disabled due to flakiness due to resizes, see http://crbug.com/407998. IN_PROC_BROWSER_TEST_F(PasswordGenerationInteractiveTest, - DISABLED_PopupShownAndDismissedByScrolling) { + PopupShownAndDismissedByScrolling) { FocusPasswordField(); EXPECT_TRUE(GenerationPopupShowing()); @@ -198,9 +196,8 @@ EXPECT_TRUE(GenerationPopupShowing()); } -// Disabled due to flakiness due to resizes, see http://crbug.com/407998. IN_PROC_BROWSER_TEST_F(PasswordGenerationInteractiveTest, - DISABLED_AutoSavingGeneratedPassword) { + AutoSavingGeneratedPassword) { scoped_refptr<password_manager::TestPasswordStore> password_store = static_cast<password_manager::TestPasswordStore*>( PasswordStoreFactory::GetForProfile( @@ -219,10 +216,7 @@ ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), submit_script)); observer.Wait(); - // Spin the message loop to make sure the password store had a chance to save - // the password. - base::RunLoop run_loop; - run_loop.RunUntilIdle(); + WaitForPasswordStore(); EXPECT_FALSE(password_store->IsEmpty()); // Make sure the username is correct.
diff --git a/chrome/browser/password_manager/password_store_factory.cc b/chrome/browser/password_manager/password_store_factory.cc index c042197..5f13a9c 100644 --- a/chrome/browser/password_manager/password_store_factory.cc +++ b/chrome/browser/password_manager/password_store_factory.cc
@@ -39,7 +39,7 @@ #include "chrome/browser/password_manager/password_store_win.h" #include "components/password_manager/core/browser/webdata/password_web_data_service_win.h" #elif defined(OS_MACOSX) -#include "chrome/browser/password_manager/password_store_proxy_mac.h" +#include "chrome/browser/password_manager/password_store_mac.h" #include "crypto/apple_keychain.h" #include "crypto/mock_apple_keychain.h" #elif defined(OS_CHROMEOS) || defined(OS_ANDROID) @@ -174,8 +174,8 @@ os_crypt::switches::kUseMockKeychain) ? new crypto::MockAppleKeychain() : new crypto::AppleKeychain()); - ps = new PasswordStoreProxyMac(main_thread_runner, std::move(login_db), - profile->GetPrefs()); + ps = new PasswordStoreMac(main_thread_runner, std::move(login_db), + profile->GetPrefs()); #elif defined(OS_CHROMEOS) || defined(OS_ANDROID) // For now, we use PasswordStoreDefault. We might want to make a native // backend for PasswordStoreX (see below) in the future though.
diff --git a/chrome/browser/password_manager/password_store_proxy_mac.cc b/chrome/browser/password_manager/password_store_mac.cc similarity index 80% rename from chrome/browser/password_manager/password_store_proxy_mac.cc rename to chrome/browser/password_manager/password_store_mac.cc index a3dfece..9a2ce7ec 100644 --- a/chrome/browser/password_manager/password_store_proxy_mac.cc +++ b/chrome/browser/password_manager/password_store_mac.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/password_manager/password_store_proxy_mac.h" +#include "chrome/browser/password_manager/password_store_mac.h" #include "base/metrics/histogram_macros.h" #include "components/password_manager/core/common/password_manager_pref_names.h" @@ -10,7 +10,7 @@ using password_manager::MigrationStatus; -PasswordStoreProxyMac::PasswordStoreProxyMac( +PasswordStoreMac::PasswordStoreMac( scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, std::unique_ptr<password_manager::LoginDatabase> login_db, PrefService* prefs) @@ -19,7 +19,7 @@ prefs); } -bool PasswordStoreProxyMac::Init( +bool PasswordStoreMac::Init( const syncer::SyncableService::StartSyncFlare& flare, PrefService* prefs) { // Set up a background thread. @@ -33,14 +33,14 @@ if (PasswordStoreDefault::Init(flare, prefs)) { return ScheduleTask( - base::Bind(&PasswordStoreProxyMac::InitOnBackgroundThread, this, + base::Bind(&PasswordStoreMac::InitOnBackgroundThread, this, static_cast<MigrationStatus>(migration_status_.GetValue()))); } return false; } -void PasswordStoreProxyMac::ShutdownOnUIThread() { +void PasswordStoreMac::ShutdownOnUIThread() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); PasswordStoreDefault::ShutdownOnUIThread(); thread_->Stop(); @@ -50,13 +50,13 @@ } scoped_refptr<base::SingleThreadTaskRunner> -PasswordStoreProxyMac::GetBackgroundTaskRunner() { +PasswordStoreMac::GetBackgroundTaskRunner() { return thread_ ? thread_->task_runner() : nullptr; } -PasswordStoreProxyMac::~PasswordStoreProxyMac() = default; +PasswordStoreMac::~PasswordStoreMac() = default; -void PasswordStoreProxyMac::InitOnBackgroundThread(MigrationStatus status) { +void PasswordStoreMac::InitOnBackgroundThread(MigrationStatus status) { DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); if (login_db() && (status == MigrationStatus::NOT_STARTED || @@ -68,7 +68,7 @@ status = MigrationStatus::MIGRATION_STOPPED; main_thread_runner_->PostTask( FROM_HERE, - base::Bind(&PasswordStoreProxyMac::UpdateStatusPref, this, status)); + base::Bind(&PasswordStoreMac::UpdateStatusPref, this, status)); } UMA_HISTOGRAM_ENUMERATION( @@ -76,7 +76,7 @@ static_cast<int>(MigrationStatus::MIGRATION_STATUS_COUNT)); } -void PasswordStoreProxyMac::UpdateStatusPref(MigrationStatus status) { +void PasswordStoreMac::UpdateStatusPref(MigrationStatus status) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); // The method can be called after ShutdownOnUIThread(). if (migration_status_.prefs())
diff --git a/chrome/browser/password_manager/password_store_proxy_mac.h b/chrome/browser/password_manager/password_store_mac.h similarity index 78% rename from chrome/browser/password_manager/password_store_proxy_mac.h rename to chrome/browser/password_manager/password_store_mac.h index 23460eae..fa720d5 100644 --- a/chrome/browser/password_manager/password_store_proxy_mac.h +++ b/chrome/browser/password_manager/password_store_mac.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_ -#define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_ +#ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_H_ +#define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_H_ #include <memory> @@ -18,9 +18,9 @@ } // Password store for Mac. It creates a dedicated background thread -class PasswordStoreProxyMac : public password_manager::PasswordStoreDefault { +class PasswordStoreMac : public password_manager::PasswordStoreDefault { public: - PasswordStoreProxyMac( + PasswordStoreMac( scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, std::unique_ptr<password_manager::LoginDatabase> login_db, PrefService* prefs); @@ -37,7 +37,7 @@ #endif private: - ~PasswordStoreProxyMac() override; + ~PasswordStoreMac() override; void InitOnBackgroundThread(password_manager::MigrationStatus status); @@ -50,7 +50,7 @@ // Current migration status for the profile. IntegerPrefMember migration_status_; - DISALLOW_COPY_AND_ASSIGN(PasswordStoreProxyMac); + DISALLOW_COPY_AND_ASSIGN(PasswordStoreMac); }; -#endif // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_ +#endif // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_H_
diff --git a/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc b/chrome/browser/password_manager/password_store_mac_unittest.cc similarity index 87% rename from chrome/browser/password_manager/password_store_proxy_mac_unittest.cc rename to chrome/browser/password_manager/password_store_mac_unittest.cc index 84047ac9..c01cbd9 100644 --- a/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc +++ b/chrome/browser/password_manager/password_store_mac_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/password_manager/password_store_proxy_mac.h" +#include "chrome/browser/password_manager/password_store_mac.h" #include <utility> @@ -71,7 +71,7 @@ class MockPasswordStoreObserver : public password_manager::PasswordStore::Observer { public: - explicit MockPasswordStoreObserver(PasswordStoreProxyMac* password_store) + explicit MockPasswordStoreObserver(PasswordStoreMac* password_store) : guard_(this) { guard_.Add(password_store); } @@ -79,7 +79,7 @@ void(const password_manager::PasswordStoreChangeList& changes)); private: - ScopedObserver<PasswordStoreProxyMac, MockPasswordStoreObserver> guard_; + ScopedObserver<PasswordStoreMac, MockPasswordStoreObserver> guard_; DISALLOW_COPY_AND_ASSIGN(MockPasswordStoreObserver); }; @@ -97,11 +97,10 @@ DISALLOW_COPY_AND_ASSIGN(BadLoginDatabase); }; -class PasswordStoreProxyMacTest - : public testing::TestWithParam<MigrationStatus> { +class PasswordStoreMacTest : public testing::TestWithParam<MigrationStatus> { public: - PasswordStoreProxyMacTest(); - ~PasswordStoreProxyMacTest() override; + PasswordStoreMacTest(); + ~PasswordStoreMacTest() override; void CreateAndInitPasswordStore( std::unique_ptr<password_manager::LoginDatabase> login_db); @@ -126,17 +125,17 @@ return store_->login_metadata_db(); } - PasswordStoreProxyMac* store() { return store_.get(); } + PasswordStoreMac* store() { return store_.get(); } protected: content::TestBrowserThreadBundle ui_thread_; base::ScopedTempDir db_dir_; - scoped_refptr<PasswordStoreProxyMac> store_; + scoped_refptr<PasswordStoreMac> store_; sync_preferences::TestingPrefServiceSyncable testing_prefs_; }; -PasswordStoreProxyMacTest::PasswordStoreProxyMacTest() { +PasswordStoreMacTest::PasswordStoreMacTest() { EXPECT_TRUE(db_dir_.CreateUniqueTempDir()); chrome::RegisterUserProfilePrefs(testing_prefs_.registry()); testing_prefs_.SetInteger(password_manager::prefs::kKeychainMigrationStatus, @@ -146,20 +145,20 @@ OSCryptMocker::SetUpWithSingleton(); } -PasswordStoreProxyMacTest::~PasswordStoreProxyMacTest() { +PasswordStoreMacTest::~PasswordStoreMacTest() { ClosePasswordStore(); OSCryptMocker::TearDown(); } -void PasswordStoreProxyMacTest::CreateAndInitPasswordStore( +void PasswordStoreMacTest::CreateAndInitPasswordStore( std::unique_ptr<password_manager::LoginDatabase> login_db) { - store_ = new PasswordStoreProxyMac( + store_ = new PasswordStoreMac( BrowserThread::GetTaskRunnerForThread(BrowserThread::UI), std::move(login_db), &testing_prefs_); ASSERT_TRUE(store_->Init(syncer::SyncableService::StartSyncFlare(), nullptr)); } -void PasswordStoreProxyMacTest::ClosePasswordStore() { +void PasswordStoreMacTest::ClosePasswordStore() { if (!store_) return; store_->ShutdownOnUIThread(); @@ -167,7 +166,7 @@ store_ = nullptr; } -void PasswordStoreProxyMacTest::FinishAsyncProcessing() { +void PasswordStoreMacTest::FinishAsyncProcessing() { // Do a store-level query to wait for all the previously enqueued operations // to finish. MockPasswordStoreConsumer consumer; @@ -176,11 +175,11 @@ consumer.WaitForResult(); } -base::FilePath PasswordStoreProxyMacTest::test_login_db_file_path() const { +base::FilePath PasswordStoreMacTest::test_login_db_file_path() const { return db_dir_.GetPath().Append(FILE_PATH_LITERAL("login.db")); } -MigrationStatus PasswordStoreProxyMacTest::GetTargetStatus() const { +MigrationStatus PasswordStoreMacTest::GetTargetStatus() const { if (GetParam() == MigrationStatus::NOT_STARTED || GetParam() == MigrationStatus::FAILED_ONCE || GetParam() == MigrationStatus::FAILED_TWICE) { @@ -189,7 +188,7 @@ return GetParam(); } -void PasswordStoreProxyMacTest::AddForm(const PasswordForm& form) { +void PasswordStoreMacTest::AddForm(const PasswordForm& form) { MockPasswordStoreObserver mock_observer(store()); password_manager::PasswordStoreChangeList list; @@ -200,7 +199,7 @@ FinishAsyncProcessing(); } -void PasswordStoreProxyMacTest::UpdateForm(const PasswordForm& form) { +void PasswordStoreMacTest::UpdateForm(const PasswordForm& form) { MockPasswordStoreObserver mock_observer(store()); password_manager::PasswordStoreChangeList list; @@ -211,7 +210,7 @@ FinishAsyncProcessing(); } -void PasswordStoreProxyMacTest::RemoveForm(const PasswordForm& form) { +void PasswordStoreMacTest::RemoveForm(const PasswordForm& form) { MockPasswordStoreObserver mock_observer(store()); password_manager::PasswordStoreChangeList list; @@ -224,7 +223,7 @@ // ----------- Tests ------------- -TEST_P(PasswordStoreProxyMacTest, Sanity) { +TEST_P(PasswordStoreMacTest, Sanity) { base::HistogramTester histogram_tester; CreateAndInitPasswordStore(base::MakeUnique<password_manager::LoginDatabase>( @@ -239,7 +238,7 @@ "PasswordManager.KeychainMigration.Status", status, 1); } -TEST_P(PasswordStoreProxyMacTest, StartAndStop) { +TEST_P(PasswordStoreMacTest, StartAndStop) { base::HistogramTester histogram_tester; // PasswordStore::ShutdownOnUIThread() immediately follows // PasswordStore::Init(). The message loop isn't running in between. Anyway, @@ -253,7 +252,7 @@ static_cast<int>(GetTargetStatus()), 1); } -TEST_P(PasswordStoreProxyMacTest, OperationsOnABadDatabaseSilentlyFail) { +TEST_P(PasswordStoreMacTest, OperationsOnABadDatabaseSilentlyFail) { // Verify that operations on a PasswordStore with a bad database cause no // explosions, but fail without side effect, return no data and trigger no // notifications. @@ -262,7 +261,7 @@ EXPECT_FALSE(login_db()); // The store should outlive the observer. - scoped_refptr<PasswordStoreProxyMac> store_refptr = store(); + scoped_refptr<PasswordStoreMac> store_refptr = store(); MockPasswordStoreObserver mock_observer(store()); EXPECT_CALL(mock_observer, OnLoginsChanged(_)).Times(0); @@ -325,7 +324,7 @@ } INSTANTIATE_TEST_CASE_P(, - PasswordStoreProxyMacTest, + PasswordStoreMacTest, testing::Values(MigrationStatus::NOT_STARTED, MigrationStatus::MIGRATED, MigrationStatus::FAILED_ONCE,
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 3ae29ff..e4196af 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -79,6 +79,7 @@ #include "components/gcm_driver/gcm_channel_status_syncer.h" #include "components/metrics/metrics_service.h" #include "components/network_time/network_time_tracker.h" +#include "components/ntp_snippets/breaking_news/subscription_manager.h" #include "components/ntp_snippets/content_suggestions_service.h" #include "components/ntp_snippets/remote/remote_suggestions_provider_impl.h" #include "components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h" @@ -502,6 +503,7 @@ ntp_snippets::RemoteSuggestionsProviderImpl::RegisterProfilePrefs(registry); ntp_snippets::RemoteSuggestionsSchedulerImpl::RegisterProfilePrefs(registry); ntp_snippets::RequestThrottler::RegisterProfilePrefs(registry); + ntp_snippets::SubscriptionManager::RegisterProfilePrefs(registry); ntp_snippets::UserClassifier::RegisterProfilePrefs(registry); ntp_tiles::MostVisitedSites::RegisterProfilePrefs(registry); password_bubble_experiment::RegisterPrefs(registry);
diff --git a/chrome/browser/resources/chromeos/keyboard_overlay.js b/chrome/browser/resources/chromeos/keyboard_overlay.js index 38cdf54e..e420718 100644 --- a/chrome/browser/resources/chromeos/keyboard_overlay.js +++ b/chrome/browser/resources/chromeos/keyboard_overlay.js
@@ -255,6 +255,14 @@ } /** + * Tests if voice interaction is enabled. + * @return {boolean} True if voice interaction feature is enabled. + */ +function isVoiceInteractionEnabled() { + return loadTimeData.getBoolean('voiceInteractionEnabled'); +} + +/** * Converts a single hex number to a character. * @param {string} hex Hexadecimal string. * @return {string} Unicode values of hexadecimal string. @@ -570,6 +578,11 @@ classes.push('keyboard-overlay-key-background'); + if (shortcutId == 'keyboardOverlayVoiceInteraction' && + !isVoiceInteractionEnabled()) { + continue; + } + if (shortcutId) { classes.push('is-shortcut'); classes.push('keyboard-overlay-shortcut-key-background');
diff --git a/chrome/browser/resources/chromeos/keyboard_overlay_data.js b/chrome/browser/resources/chromeos/keyboard_overlay_data.js index 40095ad3..98a36c7 100644 --- a/chrome/browser/resources/chromeos/keyboard_overlay_data.js +++ b/chrome/browser/resources/chromeos/keyboard_overlay_data.js
@@ -15938,6 +15938,8 @@ 'w<>CTRL<>SHIFT': 'keyboardOverlayCloseWindow', 'x<>CTRL': 'keyboardOverlayCut', 'z<>ALT<>CTRL': 'keyboardOverlayToggleChromevoxSpokenFeedback', - 'z<>CTRL': 'keyboardOverlayUndo' + 'z<>CTRL': 'keyboardOverlayUndo', + 'a<>SEARCH': 'keyboardOverlayVoiceInteraction', + 'space<>SEARCH': 'keyboardOverlayVoiceInteraction' } };
diff --git a/chrome/browser/resources/chromeos/login/arc_terms_of_service.css b/chrome/browser/resources/chromeos/login/arc_terms_of_service.css index 9ea7407..58ec03ea 100644 --- a/chrome/browser/resources/chromeos/login/arc_terms_of_service.css +++ b/chrome/browser/resources/chromeos/login/arc_terms_of_service.css
@@ -32,6 +32,12 @@ display: none; } +.arc-tos-loading #arc-tos-accept-button-md, +.arc-tos-loading #arc-tos-skip-button-md, +.arc-tos-loading #arc-tos-retry-button-md { + pointer-events: none; +} + .arc-tos-loading p, .error p { color: rgba(0, 0, 0, 0.87);
diff --git a/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js b/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js index 4421e1fb..a684cf7a 100644 --- a/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js +++ b/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js
@@ -369,7 +369,8 @@ this.removeClass_('arc-tos-loaded'); this.addClass_('error'); - $('arc-tos-retry-button').focus(); + this.enableButtons_(true); + this.getElement_('arc-tos-retry-button').focus(); }, /**
diff --git a/chrome/browser/sessions/restore_on_startup_policy_handler.cc b/chrome/browser/sessions/restore_on_startup_policy_handler.cc index ff6946b6..56a2fe3 100644 --- a/chrome/browser/sessions/restore_on_startup_policy_handler.cc +++ b/chrome/browser/sessions/restore_on_startup_policy_handler.cc
@@ -64,16 +64,6 @@ IDS_POLICY_OVERRIDDEN, key::kRestoreOnStartup); } - - const base::Value* exit_policy = - policies.GetValue(key::kClearSiteDataOnExit); - bool exit_value; - if (exit_policy && exit_policy->GetAsBoolean(&exit_value) && - exit_value) { - errors->AddError(key::kClearSiteDataOnExit, - IDS_POLICY_OVERRIDDEN, - key::kRestoreOnStartup); - } break; } case SessionStartupPref::kPrefValueURLs:
diff --git a/chrome/browser/sessions/restore_on_startup_policy_handler_unittest.cc b/chrome/browser/sessions/restore_on_startup_policy_handler_unittest.cc index fb3da59..eeee558 100644 --- a/chrome/browser/sessions/restore_on_startup_policy_handler_unittest.cc +++ b/chrome/browser/sessions/restore_on_startup_policy_handler_unittest.cc
@@ -130,24 +130,6 @@ } TEST_F(RestoreOnStartupPolicyHandlerTest, - CheckPolicySettings_RestoreLastSession_ClearDataOnExit) { - // Specify the Last value and the Clear-Data-On-Exit value. - SetPolicyValue( - key::kRestoreOnStartup, - base::WrapUnique(new base::Value(SessionStartupPref::kPrefValueLast))); - SetPolicyValue(key::kClearSiteDataOnExit, - base::MakeUnique<base::Value>(true)); - // Checking should succeed but add an error to the error map. - EXPECT_TRUE(CheckPolicySettings()); - ASSERT_EQ(1U, errors().size()); - EXPECT_EQ(key::kClearSiteDataOnExit, errors().begin()->first); - EXPECT_EQ(l10n_util::GetStringFUTF16( - IDS_POLICY_OVERRIDDEN, - base::ASCIIToUTF16(key::kRestoreOnStartup)), - errors().begin()->second); -} - -TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_RestoreLastSession) { // Specify the Last value without the conflicts. SetPolicyValue(
diff --git a/chrome/browser/supervised_user/supervised_user_service_unittest.cc b/chrome/browser/supervised_user/supervised_user_service_unittest.cc index 3f9c49b1..31bbd9a 100644 --- a/chrome/browser/supervised_user/supervised_user_service_unittest.cc +++ b/chrome/browser/supervised_user/supervised_user_service_unittest.cc
@@ -15,6 +15,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_feature_list.h" #include "base/threading/thread_task_runner_handle.h" +#include "base/values.h" #include "build/build_config.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/profiles/profile.h" @@ -404,7 +405,8 @@ scoped_refptr<extensions::Extension> MakeThemeExtension() { std::unique_ptr<base::DictionaryValue> source(new base::DictionaryValue()); source->SetString(extensions::manifest_keys::kName, "Theme"); - source->Set(extensions::manifest_keys::kTheme, new base::DictionaryValue()); + source->Set(extensions::manifest_keys::kTheme, + base::MakeUnique<base::DictionaryValue>()); source->SetString(extensions::manifest_keys::kVersion, "1.0"); extensions::ExtensionBuilder builder; scoped_refptr<extensions::Extension> extension =
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc index fd4de8c..8507115 100644 --- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc +++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
@@ -1612,7 +1612,7 @@ FileKindToString(tracker.synced_details().file_kind())); } - base::DictionaryValue* details = new base::DictionaryValue; + auto details = base::MakeUnique<base::DictionaryValue>(); details->SetString("file_id", tracker.file_id()); if (tracker.has_synced_details() && tracker.synced_details().file_kind() == FILE_KIND_FILE) @@ -1620,7 +1620,7 @@ details->SetString("active", tracker.active() ? "true" : "false"); details->SetString("dirty", tracker.dirty() ? "true" : "false"); - file->Set("details", details); + file->Set("details", std::move(details)); files->Append(std::move(file)); } @@ -1656,10 +1656,10 @@ }; std::vector<std::string> key_strings( trackerKeys, trackerKeys + arraysize(trackerKeys)); - base::ListValue* keys = new base::ListValue; + auto keys = base::MakeUnique<base::ListValue>(); keys->AppendStrings(key_strings); metadata->SetString("title", "Trackers"); - metadata->Set("keys", keys); + metadata->Set("keys", std::move(keys)); trackers->Append(std::move(metadata)); // Append tracker data. @@ -1718,10 +1718,10 @@ }; std::vector<std::string> key_strings( fileKeys, fileKeys + arraysize(fileKeys)); - base::ListValue* keys = new base::ListValue; + auto keys = base::MakeUnique<base::ListValue>(); keys->AppendStrings(key_strings); metadata->SetString("title", "Metadata"); - metadata->Set("keys", keys); + metadata->Set("keys", std::move(keys)); files->Append(std::move(metadata)); // Append metadata data.
diff --git a/chrome/browser/ui/views/payments/error_message_view_controller.cc b/chrome/browser/ui/views/payments/error_message_view_controller.cc index b6b532f..ff91628 100644 --- a/chrome/browser/ui/views/payments/error_message_view_controller.cc +++ b/chrome/browser/ui/views/payments/error_message_view_controller.cc
@@ -12,6 +12,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/geometry/insets.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/controls/button/md_text_button.h" #include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" @@ -25,14 +26,24 @@ ErrorMessageViewController::~ErrorMessageViewController() {} -base::string16 ErrorMessageViewController::GetSecondaryButtonLabel() { - return l10n_util::GetStringUTF16(IDS_CLOSE); +std::unique_ptr<views::Button> +ErrorMessageViewController::CreatePrimaryButton() { + std::unique_ptr<views::Button> button( + views::MdTextButton::CreateSecondaryUiBlueButton( + this, l10n_util::GetStringUTF16(IDS_CLOSE))); + button->set_tag(static_cast<int>(PaymentRequestCommonTags::CLOSE_BUTTON_TAG)); + button->set_id(static_cast<int>(DialogViewID::CANCEL_BUTTON)); + return button; } bool ErrorMessageViewController::ShouldShowHeaderBackArrow() { return false; } +bool ErrorMessageViewController::ShouldShowSecondaryButton() { + return false; +} + base::string16 ErrorMessageViewController::GetSheetTitle() { return l10n_util::GetStringUTF16(IDS_PAYMENTS_ERROR_MESSAGE_DIALOG_TITLE); }
diff --git a/chrome/browser/ui/views/payments/error_message_view_controller.h b/chrome/browser/ui/views/payments/error_message_view_controller.h index 32b8ff6..1715bfc 100644 --- a/chrome/browser/ui/views/payments/error_message_view_controller.h +++ b/chrome/browser/ui/views/payments/error_message_view_controller.h
@@ -32,8 +32,9 @@ private: // PaymentRequestSheetController: - base::string16 GetSecondaryButtonLabel() override; + std::unique_ptr<views::Button> CreatePrimaryButton() override; bool ShouldShowHeaderBackArrow() override; + bool ShouldShowSecondaryButton() override; base::string16 GetSheetTitle() override; void FillContentView(views::View* content_view) override;
diff --git a/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc new file mode 100644 index 0000000..a72b89e --- /dev/null +++ b/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc
@@ -0,0 +1,202 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <vector> + +#include "base/macros.h" +#include "base/strings/utf_string_conversions.h" +#include "base/test/histogram_tester.h" +#include "chrome/browser/ui/browser_commands.h" +#include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h" +#include "components/autofill/core/browser/autofill_profile.h" +#include "components/autofill/core/browser/autofill_test_utils.h" +#include "components/autofill/core/browser/credit_card.h" +#include "components/payments/core/journey_logger.h" +#include "content/public/test/browser_test_utils.h" +#include "url/gurl.h" + +namespace payments { + +class PaymentRequestCompletionStatusMetricsTest + : public PaymentRequestBrowserTestBase { + protected: + PaymentRequestCompletionStatusMetricsTest() + : PaymentRequestBrowserTestBase( + "/payment_request_can_make_payment_metrics_test.html") {} + + private: + DISALLOW_COPY_AND_ASSIGN(PaymentRequestCompletionStatusMetricsTest); +}; + +IN_PROC_BROWSER_TEST_F(PaymentRequestCompletionStatusMetricsTest, Completed) { + base::HistogramTester histogram_tester; + + // Setup a credit card with an associated billing address so CanMakePayment + // returns true. + autofill::AutofillProfile billing_address = autofill::test::GetFullProfile(); + AddAutofillProfile(billing_address); + autofill::CreditCard card = autofill::test::GetCreditCard(); + card.set_billing_address_id(billing_address.guid()); + AddCreditCard(card); + + // Start the Payment Request and expect CanMakePayment to be called before the + // Payment Request is shown. + ResetEventObserverForSequence( + {DialogEvent::CAN_MAKE_PAYMENT_CALLED, DialogEvent::DIALOG_OPENED}); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryShow();")); + WaitForObservedEvent(); + + // Complete the Payment Request. + PayWithCreditCardAndWait(base::ASCIIToUTF16("123")); + + // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Completed", + 1, 1); +} + +IN_PROC_BROWSER_TEST_F(PaymentRequestCompletionStatusMetricsTest, + MerchantAborted_Reload) { + base::HistogramTester histogram_tester; + + // Start the Payment Request. + ResetEventObserver(DialogEvent::DIALOG_OPENED); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); + WaitForObservedEvent(); + + // The merchant reloads the page. + ResetEventObserver(DialogEvent::DIALOG_CLOSED); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), + "(function() { location.reload(); })();")); + WaitForObservedEvent(); + + // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.Aborted", + JourneyLogger::ABORT_REASON_MERCHANT_NAVIGATION, 1); +} + +IN_PROC_BROWSER_TEST_F(PaymentRequestCompletionStatusMetricsTest, + MerchantAborted_Navigation) { + base::HistogramTester histogram_tester; + + // Start the Payment Request. + ResetEventObserver(DialogEvent::DIALOG_OPENED); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); + WaitForObservedEvent(); + + // The merchant navigates away. + ResetEventObserver(DialogEvent::DIALOG_CLOSED); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), + "(function() { window.location.href = " + "'/payment_request_email_test.html'; " + "})();")); + WaitForObservedEvent(); + + // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.Aborted", + JourneyLogger::ABORT_REASON_MERCHANT_NAVIGATION, 1); +} + +IN_PROC_BROWSER_TEST_F(PaymentRequestCompletionStatusMetricsTest, + MerchantAborted_Abort) { + base::HistogramTester histogram_tester; + + // Start the Payment Request. + ResetEventObserver(DialogEvent::DIALOG_OPENED); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); + WaitForObservedEvent(); + + // The merchant aborts the Payment Request. + ResetEventObserverForSequence( + {DialogEvent::ABORT_CALLED, DialogEvent::DIALOG_CLOSED}); + const std::string click_buy_button_js = + "(function() { document.getElementById('abort').click(); })();"; + ASSERT_TRUE( + content::ExecuteScript(GetActiveWebContents(), click_buy_button_js)); + WaitForObservedEvent(); + + // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.Aborted", + JourneyLogger::ABORT_REASON_ABORTED_BY_MERCHANT, 1); +} + +IN_PROC_BROWSER_TEST_F(PaymentRequestCompletionStatusMetricsTest, + UserAborted_Navigation) { + base::HistogramTester histogram_tester; + + // Start the Payment Request. + ResetEventObserver(DialogEvent::DIALOG_OPENED); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); + WaitForObservedEvent(); + + // Navigate away. + NavigateTo("/payment_request_email_test.html"); + + // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.Aborted", + JourneyLogger::ABORT_REASON_USER_NAVIGATION, 1); +} + +IN_PROC_BROWSER_TEST_F(PaymentRequestCompletionStatusMetricsTest, + UserAborted_CancelButton) { + base::HistogramTester histogram_tester; + + // Start the Payment Request. + ResetEventObserver(DialogEvent::DIALOG_OPENED); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); + WaitForObservedEvent(); + + // Click on the cancel button. + ClickOnCancel(); + + // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.Aborted", + JourneyLogger::ABORT_REASON_ABORTED_BY_USER, 1); +} + +IN_PROC_BROWSER_TEST_F(PaymentRequestCompletionStatusMetricsTest, + UserAborted_TabClosed) { + base::HistogramTester histogram_tester; + + // Start the Payment Request. + ResetEventObserver(DialogEvent::DIALOG_OPENED); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); + WaitForObservedEvent(); + + // Close the tab containing the Payment Request. + ResetEventObserverForSequence({DialogEvent::DIALOG_CLOSED}); + chrome::CloseTab(browser()); + WaitForObservedEvent(); + + // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.Aborted", + JourneyLogger::ABORT_REASON_ABORTED_BY_USER, 1); +} + +IN_PROC_BROWSER_TEST_F(PaymentRequestCompletionStatusMetricsTest, + UserAborted_Reload) { + base::HistogramTester histogram_tester; + + // Start the Payment Request. + ResetEventObserver(DialogEvent::DIALOG_OPENED); + ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); + WaitForObservedEvent(); + + // Reload the page containing the Payment Request. + ResetEventObserverForSequence({DialogEvent::DIALOG_CLOSED}); + chrome::Reload(browser(), WindowOpenDisposition::CURRENT_TAB); + WaitForObservedEvent(); + + // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.Aborted", + JourneyLogger::ABORT_REASON_USER_NAVIGATION, 1); +} + +} // namespace payments
diff --git a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc index ee1f84f..5e03b47 100644 --- a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc +++ b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
@@ -291,6 +291,10 @@ return l10n_util::GetStringUTF16(IDS_PAYMENTS_CANCEL_PAYMENT); } +bool PaymentRequestSheetController::ShouldShowSecondaryButton() { + return true; +} + bool PaymentRequestSheetController::ShouldShowHeaderBackArrow() { return true; } @@ -392,15 +396,17 @@ } void PaymentRequestSheetController::AddSecondaryButton(views::View* container) { - secondary_button_ = std::unique_ptr<views::Button>( - views::MdTextButton::CreateSecondaryUiButton(this, - GetSecondaryButtonLabel())); - secondary_button_->set_owned_by_client(); - secondary_button_->set_tag( - static_cast<int>(PaymentRequestCommonTags::CLOSE_BUTTON_TAG)); - secondary_button_->set_id(static_cast<int>(DialogViewID::CANCEL_BUTTON)); - secondary_button_->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); - container->AddChildView(secondary_button_.get()); + if (ShouldShowSecondaryButton()) { + secondary_button_ = std::unique_ptr<views::Button>( + views::MdTextButton::CreateSecondaryUiButton( + this, GetSecondaryButtonLabel())); + secondary_button_->set_owned_by_client(); + secondary_button_->set_tag( + static_cast<int>(PaymentRequestCommonTags::CLOSE_BUTTON_TAG)); + secondary_button_->set_id(static_cast<int>(DialogViewID::CANCEL_BUTTON)); + secondary_button_->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); + container->AddChildView(secondary_button_.get()); + } } } // namespace payments
diff --git a/chrome/browser/ui/views/payments/payment_request_sheet_controller.h b/chrome/browser/ui/views/payments/payment_request_sheet_controller.h index 930cc95..b8aab2c 100644 --- a/chrome/browser/ui/views/payments/payment_request_sheet_controller.h +++ b/chrome/browser/ui/views/payments/payment_request_sheet_controller.h
@@ -83,6 +83,9 @@ // "Cancel". virtual base::string16 GetSecondaryButtonLabel(); + // Returns true if the secondary button should be shown, false otherwise. + virtual bool ShouldShowSecondaryButton(); + // Returns whether this sheet should display a back arrow in the header next // to the title. virtual bool ShouldShowHeaderBackArrow();
diff --git a/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.cc b/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.cc index 59a7300..9f48c79 100644 --- a/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.cc +++ b/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.cc
@@ -275,7 +275,8 @@ {"keyboardOverlayZoomOut", IDS_KEYBOARD_OVERLAY_ZOOM_OUT}, {"keyboardOverlayZoomScreenIn", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_IN}, {"keyboardOverlayZoomScreenOut", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_OUT}, -}; + {"keyboardOverlayVoiceInteraction", + IDS_KEYBOARD_OVERLAY_VOICE_INTERACTION}}; bool TopRowKeysAreFunctionKeys(Profile* profile) { if (!profile) @@ -310,6 +311,8 @@ chromeos::switches::kHasChromeOSDiamondKey)); source->AddBoolean("keyboardOverlayTopRowKeysAreFunctionKeys", TopRowKeysAreFunctionKeys(profile)); + source->AddBoolean("voiceInteractionEnabled", + chromeos::switches::IsVoiceInteractionEnabled()); ash::Shell* shell = ash::Shell::Get(); display::DisplayManager* display_manager = shell->display_manager(); source->AddBoolean("keyboardOverlayIsDisplayUIScalingEnabled",
diff --git a/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui_browsertest.cc b/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui_browsertest.cc index bbf48ed..9e1161f0 100644 --- a/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui_browsertest.cc +++ b/chrome/browser/ui/webui/chromeos/keyboard_overlay_ui_browsertest.cc
@@ -59,15 +59,12 @@ // keyboardOverlayData['shortcut'], so it can not be tested by this test. // 2. If it has debug modifiers: ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | // ui::EF_SHIFT_DOWN -// 3. If the shortcut action is device specific so it should not be shown -// on the keyboard overlay, i.e. START_VOICE_INTERACTION. bool ShouldSkip(const ash::AcceleratorData& accelerator) { return accelerator.keycode == ui::VKEY_MENU || accelerator.keycode == ui::VKEY_LWIN || accelerator.modifiers == ui::EF_NONE || accelerator.modifiers == - (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN) || - accelerator.action == ash::START_VOICE_INTERACTION; + (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN); } std::string KeyboardCodeToLabel(const ash::AcceleratorData& accelerator,
diff --git a/chrome/browser/ui/webui/conflicts_handler.cc b/chrome/browser/ui/webui/conflicts_handler.cc index 75c06bd..b6bb36ec 100644 --- a/chrome/browser/ui/webui/conflicts_handler.cc +++ b/chrome/browser/ui/webui/conflicts_handler.cc
@@ -41,9 +41,7 @@ void ConflictsHandler::SendModuleList() { auto* loaded_modules = EnumerateModulesModel::GetInstance(); - base::ListValue* list = loaded_modules->GetModuleList(); - base::DictionaryValue results; - results.Set("moduleList", list); + std::unique_ptr<base::ListValue> list = loaded_modules->GetModuleList(); // Add the section title and the total count for bad modules found. int confirmed_bad = loaded_modules->confirmed_bad_modules_detected(); @@ -59,6 +57,8 @@ base::IntToString16(list->GetSize()), base::IntToString16(confirmed_bad), base::IntToString16(suspected_bad)); } + base::DictionaryValue results; + results.Set("moduleList", std::move(list)); results.SetString("modulesTableTitle", table_title); web_ui()->CallJavascriptFunctionUnsafe("returnModuleList", results);
diff --git a/chrome/browser/win/enumerate_modules_model.cc b/chrome/browser/win/enumerate_modules_model.cc index f47f779..d466e28 100644 --- a/chrome/browser/win/enumerate_modules_model.cc +++ b/chrome/browser/win/enumerate_modules_model.cc
@@ -589,7 +589,7 @@ module_enumerator_->ScanNow(&enumerated_modules_); } -base::ListValue* EnumerateModulesModel::GetModuleList() { +std::unique_ptr<base::ListValue> EnumerateModulesModel::GetModuleList() { DCHECK_CURRENTLY_ON(BrowserThread::UI); // If a |module_enumerator_| is still around then scanning has not yet @@ -600,7 +600,7 @@ if (enumerated_modules_.empty()) return nullptr; - base::ListValue* list = new base::ListValue(); + auto list = base::MakeUnique<base::ListValue>(); for (ModuleEnumerator::ModulesVector::const_iterator module = enumerated_modules_.begin();
diff --git a/chrome/browser/win/enumerate_modules_model.h b/chrome/browser/win/enumerate_modules_model.h index 9a212bd4..7be732e 100644 --- a/chrome/browser/win/enumerate_modules_model.h +++ b/chrome/browser/win/enumerate_modules_model.h
@@ -302,7 +302,7 @@ void ScanNow(bool background_mode); // Gets the whole module list as a ListValue. - base::ListValue* GetModuleList(); + std::unique_ptr<base::ListValue> GetModuleList(); // Returns the site to which the user should be taken when the conflict bubble // or app menu item is clicked. For now this is simply chrome://conflicts,
diff --git a/chrome/installer/linux/debian/build.sh b/chrome/installer/linux/debian/build.sh index f0c5a181..8be2d649 100755 --- a/chrome/installer/linux/debian/build.sh +++ b/chrome/installer/linux/debian/build.sh
@@ -325,7 +325,7 @@ # xdg-utils: For OS integration. # wget: For uploading crash reports with Breakpad. ADDITIONAL_DEPS="ca-certificates, fonts-liberation, libappindicator1, \ - libnss3 (>= 3.17.2), lsb-release, xdg-utils (>= 1.0.2), wget" + libnss3 (>= 3.26), lsb-release, xdg-utils (>= 1.0.2), wget" # Fix-up libnspr dependency due to renaming in Ubuntu (the old package still # exists, but it was moved to "universe" repository, which isn't installed by
diff --git a/chrome/installer/linux/rpm/build.sh b/chrome/installer/linux/rpm/build.sh index 8f7e6ead..4d2609a 100755 --- a/chrome/installer/linux/rpm/build.sh +++ b/chrome/installer/linux/rpm/build.sh
@@ -131,7 +131,9 @@ # lsb implies many dependencies. # # nss (bundled) is optional in LSB 4.0. Also specify a more recent version - # for security and stability updates. + # for security and stability updates. While we depend on libnss3.so and not + # libssl3.so, force the dependency on libssl3 to ensure the NSS version is + # 3.28 or later, since libssl3 should always be packaged with libnss3. # # libstdc++.so.6 is for C++11 support. # @@ -153,7 +155,8 @@ # TODO(thestig): Use the liberation-fonts package once its available on all # supported distros. DEPENDS="lsb >= 4.0, \ - libnss3.so(NSS_3.19.1)${PKG_ARCH}, \ + libnss3.so(NSS_3.22)${PKG_ARCH}, \ + libssl3.so(NSS_3.28)${PKG_ARCH}, \ libstdc++.so.6(GLIBCXX_3.4.18)${PKG_ARCH}, \ wget, \ xdg-utils, \
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index b11a3f2..f364978 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -2050,6 +2050,7 @@ "../browser/ui/views/payments/payment_request_browsertest_base.h", "../browser/ui/views/payments/payment_request_can_make_payment_browsertest.cc", "../browser/ui/views/payments/payment_request_can_make_payment_metrics_browsertest.cc", + "../browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc", "../browser/ui/views/payments/payment_request_data_url_browsertest.cc", "../browser/ui/views/payments/payment_request_journey_logger_browsertest.cc", "../browser/ui/views/payments/payment_request_payment_app_browsertest.cc", @@ -3150,7 +3151,7 @@ "../browser/page_load_metrics/user_input_tracker_unittest.cc", "../browser/password_manager/chrome_password_manager_client_unittest.cc", "../browser/password_manager/password_manager_internals_service_unittest.cc", - "../browser/password_manager/password_store_proxy_mac_unittest.cc", + "../browser/password_manager/password_store_mac_unittest.cc", "../browser/password_manager/password_store_win_unittest.cc", "../browser/password_manager/password_store_x_unittest.cc", "../browser/permissions/chooser_context_base_unittest.cc",
diff --git a/chrome/test/chromedriver/performance_logger.cc b/chrome/test/chromedriver/performance_logger.cc index 23d94e9..8afa658b 100644 --- a/chrome/test/chromedriver/performance_logger.cc +++ b/chrome/test/chromedriver/performance_logger.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/json/json_writer.h" +#include "base/memory/ptr_util.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/values.h" @@ -126,7 +127,7 @@ base::DictionaryValue log_message_dict; log_message_dict.SetString("webview", webview); log_message_dict.SetString("message.method", method); - log_message_dict.Set("message.params", params.DeepCopy()); + log_message_dict.Set("message.params", base::MakeUnique<base::Value>(params)); std::string log_message_json; base::JSONWriter::Write(log_message_dict, &log_message_json);
diff --git a/chrome/test/chromedriver/server/http_handler.cc b/chrome/test/chromedriver/server/http_handler.cc index 6555063..a4d9d5b 100644 --- a/chrome/test/chromedriver/server/http_handler.cc +++ b/chrome/test/chromedriver/server/http_handler.cc
@@ -771,7 +771,7 @@ base::DictionaryValue body_params; body_params.SetInteger("status", status.code()); - body_params.Set("value", value.release()); + body_params.Set("value", std::move(value)); body_params.SetString("sessionId", session_id); std::string body; base::JSONWriter::WriteWithOptions( @@ -848,7 +848,7 @@ } else { body_params.SetString("sessionId", session_id); body_params.SetString("status", status.message()); - body_params.Set("value", value.release()); + body_params.Set("value", std::move(value)); } std::string body;
diff --git a/chrome/test/data/extensions/api_test/webrequest/policy_blocked/background.js b/chrome/test/data/extensions/api_test/webrequest/policy_blocked/background.js new file mode 100644 index 0000000..546ba78 --- /dev/null +++ b/chrome/test/data/extensions/api_test/webrequest/policy_blocked/background.js
@@ -0,0 +1,13 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Return messages to tell which URL requests are visible to the extension. +chrome.webRequest.onBeforeRequest.addListener(function(details) { + if (details.url.indexOf('example2') != -1) { + chrome.test.sendMessage('protected_origin'); + } + if (details.url.indexOf('protected_url') != -1) { + chrome.test.sendMessage('protected_url'); + } +}, {urls: ['<all_urls>']}, []);
diff --git a/chrome/test/data/extensions/api_test/webrequest/policy_blocked/manifest.json b/chrome/test/data/extensions/api_test/webrequest/policy_blocked/manifest.json new file mode 100644 index 0000000..c414d5e --- /dev/null +++ b/chrome/test/data/extensions/api_test/webrequest/policy_blocked/manifest.json
@@ -0,0 +1,9 @@ +{ + "name": "Web Request Policy Tests", + "version": "1", + "manifest_version": 2, + "permissions": ["webRequest", "<all_urls>"], + "background" : { + "scripts": ["background.js"] + } +}
diff --git a/chrome/test/data/extensions/api_test/webrequest/policy_blocked/ref_remote_js.html b/chrome/test/data/extensions/api_test/webrequest/policy_blocked/ref_remote_js.html new file mode 100644 index 0000000..8271dc01 --- /dev/null +++ b/chrome/test/data/extensions/api_test/webrequest/policy_blocked/ref_remote_js.html
@@ -0,0 +1,9 @@ +<!-- + * Copyright 2017 The Chromium Authors. All rights reserved. Use of this + * source code is governed by a BSD-style license that can be found in the + * LICENSE file. +--> +<html> + <body></body> + <script src="ref_remote_js.js"></script> +</html>
diff --git a/chrome/test/data/extensions/api_test/webrequest/policy_blocked/ref_remote_js.js b/chrome/test/data/extensions/api_test/webrequest/policy_blocked/ref_remote_js.js new file mode 100644 index 0000000..600d094 --- /dev/null +++ b/chrome/test/data/extensions/api_test/webrequest/policy_blocked/ref_remote_js.js
@@ -0,0 +1,11 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Injects a script tag with a source based on the current URL. The script +// however will be served from a different domain (example2.com) and target a +// different file which is blank. This lets us make a request with an initiator +// of example.com and a URL of example2.com. +var script = document.createElement('script'); +script.src = 'http://example2.com:' + location.port + '/empty.html'; +document.body.appendChild(script);
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc index e8824c4..b9f9acf 100644 --- a/chromecast/browser/cast_content_browser_client.cc +++ b/chromecast/browser/cast_content_browser_client.cc
@@ -257,7 +257,9 @@ base::Unretained(this), host->GetID())); #if defined(OS_ANDROID) - host->AddFilter(new cdm::CdmMessageFilterAndroid()); + // Cast on Android build always uses kForceVideoOverlays command line switch + // such that secure decoders can be used. + host->AddFilter(new cdm::CdmMessageFilterAndroid(true)); #endif // defined(OS_ANDROID) }
diff --git a/chromecast/browser/cast_net_log.cc b/chromecast/browser/cast_net_log.cc index 927986f..bd065822 100644 --- a/chromecast/browser/cast_net_log.cc +++ b/chromecast/browser/cast_net_log.cc
@@ -5,11 +5,13 @@ #include "chromecast/browser/cast_net_log.h" #include <stdio.h> + #include <utility> #include "base/command_line.h" #include "base/files/file_path.h" #include "base/files/scoped_file.h" +#include "base/memory/ptr_util.h" #include "base/values.h" #include "content/public/common/content_switches.h" #include "net/log/net_log_util.h" @@ -19,21 +21,21 @@ namespace { -base::DictionaryValue* GetShellConstants() { +std::unique_ptr<base::DictionaryValue> GetShellConstants() { std::unique_ptr<base::DictionaryValue> constants_dict = net::GetNetConstants(); // Add a dictionary with client information - base::DictionaryValue* dict = new base::DictionaryValue(); + auto dict = base::MakeUnique<base::DictionaryValue>(); dict->SetString("name", "cast_shell"); dict->SetString( "command_line", base::CommandLine::ForCurrentProcess()->GetCommandLineString()); - constants_dict->Set("clientInfo", dict); + constants_dict->Set("clientInfo", std::move(dict)); - return constants_dict.release(); + return constants_dict; } } // namespace
diff --git a/chromecast/browser/cast_web_view.cc b/chromecast/browser/cast_web_view.cc index 9960f4f..ffdd297e 100644 --- a/chromecast/browser/cast_web_view.cc +++ b/chromecast/browser/cast_web_view.cc
@@ -14,7 +14,6 @@ #include "content/public/browser/render_view_host.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" -#include "content/public/common/renderer_preferences.h" #include "ipc/ipc_message.h" #include "net/base/net_errors.h" #include "ui/display/display.h" @@ -50,12 +49,6 @@ content::WebContents* web_contents = content::WebContents::Create(create_params); -#if defined(OS_ANDROID) - content::RendererPreferences* prefs = web_contents->GetMutableRendererPrefs(); - prefs->use_video_overlay_for_embedded_encrypted_video = true; - web_contents->GetRenderViewHost()->SyncRendererPrefs(); -#endif - return base::WrapUnique(web_contents); }
diff --git a/chromeos/dbus/fake_shill_service_client.cc b/chromeos/dbus/fake_shill_service_client.cc index 7075c38..363b1c7a 100644 --- a/chromeos/dbus/fake_shill_service_client.cc +++ b/chromeos/dbus/fake_shill_service_client.cc
@@ -534,8 +534,8 @@ if (!stub_services_.GetDictionaryWithoutPathExpansion(service_path, &properties) && create_if_missing) { - properties = new base::DictionaryValue; - stub_services_.Set(service_path, properties); + properties = stub_services_.SetDictionary( + service_path, base::MakeUnique<base::DictionaryValue>()); } return properties; }
diff --git a/chromeos/network/network_configuration_handler_unittest.cc b/chromeos/network/network_configuration_handler_unittest.cc index 976da8ee..2549a20 100644 --- a/chromeos/network/network_configuration_handler_unittest.cc +++ b/chromeos/network/network_configuration_handler_unittest.cc
@@ -340,7 +340,7 @@ std::unique_ptr<base::Value> networkNameValue(new base::Value(networkName)); base::DictionaryValue value; - value.Set(key, new base::Value(networkName)); + value.SetString(key, networkName); dictionary_value_result_ = &value; EXPECT_CALL(*mock_service_client_, SetProperty(dbus::ObjectPath(service_path), key, @@ -404,7 +404,7 @@ std::unique_ptr<base::Value> networkNameValue(new base::Value(networkName)); base::DictionaryValue value; - value.Set(key, new base::Value(networkName)); + value.SetString(key, networkName); dictionary_value_result_ = &value; EXPECT_CALL(*mock_service_client_, SetProperties(_, _, _, _)) .WillOnce( @@ -423,7 +423,7 @@ // First set up a value to clear. base::DictionaryValue value; - value.Set(key, new base::Value(networkName)); + value.SetString(key, networkName); dictionary_value_result_ = &value; EXPECT_CALL(*mock_service_client_, SetProperties(_, _, _, _)) .WillOnce( @@ -453,7 +453,7 @@ // First set up a value to clear. base::DictionaryValue value; - value.Set(key, new base::Value(networkName)); + value.SetString(key, networkName); dictionary_value_result_ = &value; EXPECT_CALL(*mock_service_client_, SetProperties(_, _, _, _)) .WillOnce(
diff --git a/chromeos/network/onc/onc_validator.cc b/chromeos/network/onc/onc_validator.cc index 3bb988a5..f0dde18 100644 --- a/chromeos/network/onc/onc_validator.cc +++ b/chromeos/network/onc/onc_validator.cc
@@ -8,6 +8,7 @@ #include <stdint.h> #include <algorithm> +#include <utility> #include "base/json/json_writer.h" #include "base/logging.h" @@ -284,7 +285,7 @@ repaired_recommended->AppendString(field_name); } - result->Set(::onc::kRecommended, repaired_recommended.release()); + result->Set(::onc::kRecommended, std::move(repaired_recommended)); return true; }
diff --git a/components/cdm/browser/cdm_message_filter_android.cc b/components/cdm/browser/cdm_message_filter_android.cc index 8adab71..872111a 100644 --- a/components/cdm/browser/cdm_message_filter_android.cc +++ b/components/cdm/browser/cdm_message_filter_android.cc
@@ -64,14 +64,11 @@ static SupportedCodecs GetSupportedCodecs( const SupportedKeySystemRequest& request, - bool video_must_be_compositable) { + bool is_secure) { const std::string& key_system = request.key_system; SupportedCodecs supported_codecs = media::EME_CODEC_NONE; for (const auto& info : kVideoCodecsToQuery) { - // TODO(qinmin): Remove the composition logic when secure contents can be - // composited. - bool is_secure = !video_must_be_compositable; if ((request.codecs & info.eme_codec) && MediaDrmBridge::IsKeySystemSupportedWithType( key_system, info.container_mime_type) && @@ -92,8 +89,9 @@ return supported_codecs; } -CdmMessageFilterAndroid::CdmMessageFilterAndroid() - : BrowserMessageFilter(EncryptedMediaMsgStart) {} +CdmMessageFilterAndroid::CdmMessageFilterAndroid(bool can_use_secure_codecs) + : BrowserMessageFilter(EncryptedMediaMsgStart), + can_use_secure_codecs_(can_use_secure_codecs) {} CdmMessageFilterAndroid::~CdmMessageFilterAndroid() {} @@ -134,9 +132,9 @@ DCHECK(request.codecs & media::EME_CODEC_ALL) << "unrecognized codec"; response->key_system = request.key_system; - // TODO(qinmin): check composition is supported or not. - response->compositing_codecs = GetSupportedCodecs(request, true); - response->non_compositing_codecs = GetSupportedCodecs(request, false); + response->non_secure_codecs = GetSupportedCodecs(request, false); + if (can_use_secure_codecs_) + response->secure_codecs = GetSupportedCodecs(request, true); response->is_persistent_license_supported = MediaDrmBridge::IsPersistentLicenseTypeSupported(request.key_system);
diff --git a/components/cdm/browser/cdm_message_filter_android.h b/components/cdm/browser/cdm_message_filter_android.h index a7b7f801..9e22357e 100644 --- a/components/cdm/browser/cdm_message_filter_android.h +++ b/components/cdm/browser/cdm_message_filter_android.h
@@ -13,12 +13,14 @@ namespace cdm { -// Message filter for EME on android. It is responsible for getting the +// Message filter for EME on Android. It is responsible for getting the // SupportedKeySystems information and passing it back to renderer. +// TODO(xhwang): Convert this to a mojo interface or merge this with +// desktop Chromium's IsPepperCdmAvailable() path. class CdmMessageFilterAndroid : public content::BrowserMessageFilter { public: - CdmMessageFilterAndroid(); + explicit CdmMessageFilterAndroid(bool can_use_secure_codecs); private: ~CdmMessageFilterAndroid() override; @@ -34,6 +36,12 @@ void OnGetPlatformKeySystemNames(std::vector<std::string>* key_systems); + // Whether rendering of secure codecs are supported, e.g. the decoded output + // can be rendered correctly. + // TODO(xhwang): Instead of a hard-coded value, check whether AndroidOverlay + // is supported. See http://crbug.com/459414 + const bool can_use_secure_codecs_; + DISALLOW_COPY_AND_ASSIGN(CdmMessageFilterAndroid); };
diff --git a/components/cdm/common/cdm_messages_android.h b/components/cdm/common/cdm_messages_android.h index 06104da..b1223ef 100644 --- a/components/cdm/common/cdm_messages_android.h +++ b/components/cdm/common/cdm_messages_android.h
@@ -19,11 +19,9 @@ IPC_STRUCT_BEGIN(SupportedKeySystemResponse) IPC_STRUCT_MEMBER(std::string, key_system) - IPC_STRUCT_MEMBER(media::SupportedCodecs, - compositing_codecs, + IPC_STRUCT_MEMBER(media::SupportedCodecs, non_secure_codecs, media::EME_CODEC_NONE) - IPC_STRUCT_MEMBER(media::SupportedCodecs, - non_compositing_codecs, + IPC_STRUCT_MEMBER(media::SupportedCodecs, secure_codecs, media::EME_CODEC_NONE) IPC_STRUCT_MEMBER(bool, is_persistent_license_supported) IPC_STRUCT_END()
diff --git a/components/cdm/renderer/android_key_systems.cc b/components/cdm/renderer/android_key_systems.cc index bd12b93..c7b3e96 100644 --- a/components/cdm/renderer/android_key_systems.cc +++ b/components/cdm/renderer/android_key_systems.cc
@@ -101,9 +101,10 @@ request.codecs = media::EME_CODEC_ALL; content::RenderThread::Get()->Send( new ChromeViewHostMsg_QueryKeySystemSupport(request, &response)); - DCHECK(!(response.compositing_codecs & ~media::EME_CODEC_ALL)) + + DCHECK(!(response.non_secure_codecs & ~media::EME_CODEC_ALL)) << "unrecognized codec"; - DCHECK(!(response.non_compositing_codecs & ~media::EME_CODEC_ALL)) + DCHECK(!(response.secure_codecs & ~media::EME_CODEC_ALL)) << "unrecognized codec"; return response; } @@ -124,11 +125,11 @@ ? EmeSessionTypeSupport::SUPPORTED_WITH_IDENTIFIER : EmeSessionTypeSupport::NOT_SUPPORTED; - if (response.compositing_codecs != media::EME_CODEC_NONE) { + if (response.non_secure_codecs != media::EME_CODEC_NONE) { DVLOG(3) << __func__ << " Widevine supported."; concrete_key_systems->emplace_back(new WidevineKeySystemProperties( - response.compositing_codecs, // Regular codecs. - response.non_compositing_codecs, // Hardware-secure codecs. + response.non_secure_codecs, // Regular codecs. + response.secure_codecs, // Hardware-secure codecs. Robustness::HW_SECURE_CRYPTO, // Max audio robustness. Robustness::HW_SECURE_ALL, // Max video robustness. persistent_license_support, // persistent-license. @@ -138,7 +139,7 @@ } else { // It doesn't make sense to support secure codecs but not regular codecs. DVLOG(3) << __func__ << " Widevine NOT supported."; - DCHECK(response.non_compositing_codecs == media::EME_CODEC_NONE); + DCHECK(response.secure_codecs == media::EME_CODEC_NONE); } } @@ -151,9 +152,9 @@ for (std::vector<std::string>::const_iterator it = key_system_names.begin(); it != key_system_names.end(); ++it) { SupportedKeySystemResponse response = QueryKeySystemSupport(*it); - if (response.compositing_codecs != media::EME_CODEC_NONE) { + if (response.non_secure_codecs != media::EME_CODEC_NONE) { concrete_key_systems->emplace_back(new AndroidPlatformKeySystemProperties( - *it, response.compositing_codecs)); + *it, response.non_secure_codecs)); } } }
diff --git a/components/cloud_devices/common/description_items_inl.h b/components/cloud_devices/common/description_items_inl.h index 3c30310..02fc023 100644 --- a/components/cloud_devices/common/description_items_inl.h +++ b/components/cloud_devices/common/description_items_inl.h
@@ -11,7 +11,9 @@ #include <utility> #include <vector> +#include "base/memory/ptr_util.h" #include "base/numerics/safe_conversions.h" +#include "base/values.h" #include "components/cloud_devices/common/description_items.h" // Implementation of templates defined in header file. @@ -126,17 +128,16 @@ void SelectionCapability<Option, Traits>::SaveTo( CloudDeviceDescription* description) const { DCHECK(IsValid()); - base::ListValue* options_list = new base::ListValue; - description->CreateItem(Traits::GetCapabilityPath()) - ->Set(json::kKeyOption, options_list); + auto options_list = base::MakeUnique<base::ListValue>(); for (size_t i = 0; i < options_.size(); ++i) { - std::unique_ptr<base::DictionaryValue> option_value( - new base::DictionaryValue); + auto option_value = base::MakeUnique<base::DictionaryValue>(); if (base::checked_cast<int>(i) == default_idx_) option_value->SetBoolean(json::kKeyIsDefault, true); Traits::Save(options_[i], option_value.get()); options_list->Append(std::move(option_value)); } + description->CreateItem(Traits::GetCapabilityPath()) + ->Set(json::kKeyOption, std::move(options_list)); } template <class Traits>
diff --git a/components/guest_view/browser/guest_view_manager.h b/components/guest_view/browser/guest_view_manager.h index 4c1ad70..9045a21 100644 --- a/components/guest_view/browser/guest_view_manager.h +++ b/components/guest_view/browser/guest_view_manager.h
@@ -66,10 +66,10 @@ // Associates the Browser Plugin with |element_instance_id| to a // guest that has ID of |guest_instance_id| and sets initialization // parameters, |params| for it. - void AttachGuest(int embedder_process_id, - int element_instance_id, - int guest_instance_id, - const base::DictionaryValue& attach_params); + virtual void AttachGuest(int embedder_process_id, + int element_instance_id, + int guest_instance_id, + const base::DictionaryValue& attach_params); // Removes the association between |element_instance_id| and a guest instance // ID if one exists.
diff --git a/components/guest_view/browser/test_guest_view_manager.cc b/components/guest_view/browser/test_guest_view_manager.cc index efaacbc..41dc908 100644 --- a/components/guest_view/browser/test_guest_view_manager.cc +++ b/components/guest_view/browser/test_guest_view_manager.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/memory/ptr_util.h" +#include "components/guest_view/browser/guest_view_base.h" #include "components/guest_view/browser/guest_view_manager_delegate.h" namespace guest_view { @@ -19,7 +20,8 @@ num_guests_created_(0), expected_num_guests_created_(0), num_views_garbage_collected_(0), - waiting_for_guests_created_(false) {} + waiting_for_guests_created_(false), + waiting_for_attach_(nullptr) {} TestGuestViewManager::~TestGuestViewManager() { } @@ -82,6 +84,19 @@ num_created_message_loop_runner_->Run(); } +void TestGuestViewManager::WaitUntilAttached( + content::WebContents* guest_web_contents) { + GuestViewBase* guest = GuestViewBase::FromWebContents(guest_web_contents); + + if (guest->attached()) + return; + + waiting_for_attach_ = guest; + + attached_message_loop_runner_ = new content::MessageLoopRunner; + attached_message_loop_runner_->Run(); +} + void TestGuestViewManager::WaitForViewGarbageCollected() { gc_message_loop_runner_ = new content::MessageLoopRunner; gc_message_loop_runner_->Run(); @@ -113,6 +128,22 @@ num_created_message_loop_runner_->Quit(); } +void TestGuestViewManager::AttachGuest( + int embedder_process_id, + int element_instance_id, + int guest_instance_id, + const base::DictionaryValue& attach_params) { + GuestViewManager::AttachGuest(embedder_process_id, element_instance_id, + guest_instance_id, attach_params); + + if (waiting_for_attach_ && + (waiting_for_attach_ == + GuestViewBase::From(embedder_process_id, guest_instance_id))) { + attached_message_loop_runner_->Quit(); + waiting_for_attach_ = nullptr; + } +} + void TestGuestViewManager::GetGuestWebContentsList( std::vector<content::WebContents*>* guest_web_contents_list) { for (auto& watcher : guest_web_contents_watchers_)
diff --git a/components/guest_view/browser/test_guest_view_manager.h b/components/guest_view/browser/test_guest_view_manager.h index 05c5bb6..a287d0b 100644 --- a/components/guest_view/browser/test_guest_view_manager.h +++ b/components/guest_view/browser/test_guest_view_manager.h
@@ -35,6 +35,8 @@ content::WebContents* GetLastGuestCreated(); + void WaitUntilAttached(content::WebContents* web_contents); + // Returns the number of guests currently still alive at the time of calling // this method. size_t GetNumGuestsActive() const; @@ -87,6 +89,10 @@ void EmbedderProcessDestroyed(int embedder_process_id) override; void ViewGarbageCollected(int embedder_process_id, int view_instance_id) override; + void AttachGuest(int embedder_process_id, + int element_instance_id, + int guest_instance_id, + const base::DictionaryValue& attach_params) override; void WaitForViewGarbageCollected(); @@ -103,6 +109,8 @@ guest_web_contents_watchers_; scoped_refptr<content::MessageLoopRunner> created_message_loop_runner_; scoped_refptr<content::MessageLoopRunner> num_created_message_loop_runner_; + GuestViewBase* waiting_for_attach_; + scoped_refptr<content::MessageLoopRunner> attached_message_loop_runner_; scoped_refptr<content::MessageLoopRunner> gc_message_loop_runner_; DISALLOW_COPY_AND_ASSIGN(TestGuestViewManager);
diff --git a/components/network_time/network_time_test_utils.cc b/components/network_time/network_time_test_utils.cc index 441ecba..2f28d5a4 100644 --- a/components/network_time/network_time_test_utils.cc +++ b/components/network_time/network_time_test_utils.cc
@@ -95,7 +95,14 @@ // ScopedFeatureList helper class. If this comment was useful to you // please send me a postcard. - field_trial_list_.reset(); // Averts a CHECK fail in constructor below. + // SetNetworkQueriesWithVariationsService() is usually called during test + // fixture setup (to establish a default state) and then again in certain + // tests that want to set special params. FieldTrialList is meant to be a + // singleton with only one instance existing at once, and the constructor + // fails a CHECK if this is violated. To allow these duplicate calls to this + // method, any existing FieldTrialList must be destroyed before creating a new + // one. (See https://crbug.com/684216#c5 for more discussion.) + field_trial_list_.reset(); field_trial_list_.reset( new base::FieldTrialList(base::MakeUnique<base::MockEntropyProvider>()));
diff --git a/components/ntp_snippets/BUILD.gn b/components/ntp_snippets/BUILD.gn index 5c13f1b..3ec1da73 100644 --- a/components/ntp_snippets/BUILD.gn +++ b/components/ntp_snippets/BUILD.gn
@@ -17,6 +17,8 @@ "bookmarks/bookmark_suggestions_provider.h", "breaking_news/subscription_json_request.cc", "breaking_news/subscription_json_request.h", + "breaking_news/subscription_manager.cc", + "breaking_news/subscription_manager.h", "callbacks.h", "category.cc", "category.h", @@ -144,6 +146,7 @@ "bookmarks/bookmark_last_visit_utils_unittest.cc", "bookmarks/bookmark_suggestions_provider_unittest.cc", "breaking_news/subscription_json_request_unittest.cc", + "breaking_news/subscription_manager_unittest.cc", "category_rankers/click_based_category_ranker_unittest.cc", "category_rankers/constant_category_ranker_unittest.cc", "category_unittest.cc",
diff --git a/components/ntp_snippets/breaking_news/subscription_manager.cc b/components/ntp_snippets/breaking_news/subscription_manager.cc new file mode 100644 index 0000000..8f7dbc9 --- /dev/null +++ b/components/ntp_snippets/breaking_news/subscription_manager.cc
@@ -0,0 +1,65 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/ntp_snippets/breaking_news/subscription_manager.h" +#include "base/bind.h" +#include "components/ntp_snippets/breaking_news/subscription_json_request.h" +#include "components/ntp_snippets/pref_names.h" +#include "components/prefs/pref_service.h" + +namespace ntp_snippets { + +using internal::SubscriptionJsonRequest; + +SubscriptionManager::SubscriptionManager( + scoped_refptr<net::URLRequestContextGetter> url_request_context_getter, + PrefService* pref_service, + const GURL& subscribe_url) + : url_request_context_getter_(std::move(url_request_context_getter)), + pref_service_(pref_service), + subscribe_url_(subscribe_url) {} + +SubscriptionManager::~SubscriptionManager() = default; + +void SubscriptionManager::Subscribe(const std::string& token) { + DCHECK(!subscription_request_); + subscription_token_ = token; + SubscriptionJsonRequest::Builder builder; + builder.SetToken(token) + .SetUrlRequestContextGetter(url_request_context_getter_) + .SetUrl(subscribe_url_); + + subscription_request_ = builder.Build(); + subscription_request_->Start(base::BindOnce( + &SubscriptionManager::DidSubscribe, base::Unretained(this))); +} + +void SubscriptionManager::DidSubscribe(const ntp_snippets::Status& status) { + subscription_request_.reset(); + + switch (status.code) { + case ntp_snippets::StatusCode::SUCCESS: + // In case of successful subscription, store the same data used for + // subscription in order to be able to re-subscribe in case of data + // change. + // TODO(mamir): store region and language. + pref_service_->SetString( + ntp_snippets::prefs::kContentSuggestionsSubscriptionDataToken, + subscription_token_); + break; + default: + // TODO(mamir): handle failure. + break; + } +} + +void SubscriptionManager::Unsubscribe(const std::string& token) { + // TODO(mamir): Implement. +} + +void SubscriptionManager::RegisterProfilePrefs(PrefRegistrySimple* registry) { + registry->RegisterStringPref(prefs::kContentSuggestionsSubscriptionDataToken, + std::string()); +} +} // namespace ntp_snippets
diff --git a/components/ntp_snippets/breaking_news/subscription_manager.h b/components/ntp_snippets/breaking_news/subscription_manager.h new file mode 100644 index 0000000..e30447d --- /dev/null +++ b/components/ntp_snippets/breaking_news/subscription_manager.h
@@ -0,0 +1,49 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_NTP_SNIPPETS_BREAKING_NEWS_SUBSCRIPTION_MANAGER_H_ +#define COMPONENTS_NTP_SNIPPETS_BREAKING_NEWS_SUBSCRIPTION_MANAGER_H_ + +#include "components/ntp_snippets/breaking_news/subscription_json_request.h" +#include "components/prefs/pref_registry_simple.h" +#include "net/url_request/url_request_context_getter.h" +#include "url/gurl.h" + +class PrefRegistrySimple; + +namespace ntp_snippets { + +class SubscriptionManager { + public: + SubscriptionManager( + scoped_refptr<net::URLRequestContextGetter> url_request_context_getter, + PrefService* pref_service, + const GURL& subscribe_url); + + ~SubscriptionManager(); + + void Subscribe(const std::string& token); + void Unsubscribe(const std::string& token); + + static void RegisterProfilePrefs(PrefRegistrySimple* registry); + + private: + std::string subscription_token_; + + // Holds the URL request context. + scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; + + std::unique_ptr<internal::SubscriptionJsonRequest> subscription_request_; + + PrefService* pref_service_; + + // API endpoint for subscribing. + const GURL subscribe_url_; + + void DidSubscribe(const ntp_snippets::Status& status); + + DISALLOW_COPY_AND_ASSIGN(SubscriptionManager); +}; +} +#endif // COMPONENTS_NTP_SNIPPETS_BREAKING_NEWS_SUBSCRIPTION_MANAGER_H_
diff --git a/components/ntp_snippets/breaking_news/subscription_manager_unittest.cc b/components/ntp_snippets/breaking_news/subscription_manager_unittest.cc new file mode 100644 index 0000000..1cddf00a --- /dev/null +++ b/components/ntp_snippets/breaking_news/subscription_manager_unittest.cc
@@ -0,0 +1,85 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/ntp_snippets/breaking_news/subscription_manager.h" + +#include "base/message_loop/message_loop.h" +#include "components/ntp_snippets/pref_names.h" +#include "components/prefs/testing_pref_service.h" +#include "net/url_request/test_url_fetcher_factory.h" +#include "net/url_request/url_request_test_util.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace ntp_snippets { + +class SubscriptionManagerTest : public testing::Test { + public: + SubscriptionManagerTest() + : request_context_getter_( + new net::TestURLRequestContextGetter(message_loop_.task_runner())), + pref_service_(base::MakeUnique<TestingPrefServiceSimple>()) {} + + void SetUp() override { + SubscriptionManager::RegisterProfilePrefs(pref_service_->registry()); + } + + scoped_refptr<net::URLRequestContextGetter> GetRequestContext() { + return request_context_getter_.get(); + } + + PrefService* GetPrefService() { return pref_service_.get(); } + + net::TestURLFetcher* GetRunningFetcher() { + // All created TestURLFetchers have ID 0 by default. + net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(0); + DCHECK(url_fetcher); + return url_fetcher; + } + + void RespondWithData(const std::string& data) { + net::TestURLFetcher* url_fetcher = GetRunningFetcher(); + url_fetcher->set_status(net::URLRequestStatus()); + url_fetcher->set_response_code(net::HTTP_OK); + url_fetcher->SetResponseString(data); + // Call the URLFetcher delegate to continue the test. + url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); + } + + void RespondWithError(int error_code) { + net::TestURLFetcher* url_fetcher = GetRunningFetcher(); + url_fetcher->set_status(net::URLRequestStatus::FromError(error_code)); + url_fetcher->SetResponseString(std::string()); + // Call the URLFetcher delegate to continue the test. + url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); + } + + private: + base::MessageLoop message_loop_; + scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; + net::TestURLFetcherFactory url_fetcher_factory_; + std::unique_ptr<TestingPrefServiceSimple> pref_service_; +}; + +TEST_F(SubscriptionManagerTest, SubscribeSuccessfully) { + std::string token = "1234567890"; + SubscriptionManager manager(GetRequestContext(), GetPrefService(), + GURL("http://valid-url.test")); + manager.Subscribe(token); + RespondWithData(""); + EXPECT_EQ(GetPrefService()->GetString( + ntp_snippets::prefs::kContentSuggestionsSubscriptionDataToken), + token); +} + +TEST_F(SubscriptionManagerTest, SubscribeWithErrors) { + std::string token = "1234567890"; + SubscriptionManager manager(GetRequestContext(), GetPrefService(), + GURL("http://valid-url.test")); + manager.Subscribe(token); + RespondWithError(net::ERR_TIMED_OUT); + EXPECT_FALSE(GetPrefService()->HasPrefPath( + ntp_snippets::prefs::kContentSuggestionsSubscriptionDataToken)); +} + +} // namespace ntp_snippets
diff --git a/components/ntp_snippets/pref_names.cc b/components/ntp_snippets/pref_names.cc index bea67c3..9414276 100644 --- a/components/ntp_snippets/pref_names.cc +++ b/components/ntp_snippets/pref_names.cc
@@ -81,5 +81,8 @@ const char kClickBasedCategoryRankerLastDecayTime[] = "ntp_suggestions.click_based_category_ranker.last_decay_time"; +const char kContentSuggestionsSubscriptionDataToken[] = + "ntp_suggestions.content_suggestions_subscription_data.token"; + } // namespace prefs } // namespace ntp_snippets
diff --git a/components/ntp_snippets/pref_names.h b/components/ntp_snippets/pref_names.h index fe3e198..c640965 100644 --- a/components/ntp_snippets/pref_names.h +++ b/components/ntp_snippets/pref_names.h
@@ -90,6 +90,10 @@ // The pref name for the time when last click decay has happened. extern const char kClickBasedCategoryRankerLastDecayTime[]; +// The pref name for the subscription token used when subscription for breaking +// news push updates, +extern const char kContentSuggestionsSubscriptionDataToken[]; + } // namespace prefs } // namespace ntp_snippets
diff --git a/components/ntp_tiles/most_visited_sites.cc b/components/ntp_tiles/most_visited_sites.cc index f0307c60..aa52d584 100644 --- a/components/ntp_tiles/most_visited_sites.cc +++ b/components/ntp_tiles/most_visited_sites.cc
@@ -200,7 +200,7 @@ base::FilePath MostVisitedSites::GetWhitelistLargeIconPath(const GURL& url) { if (supervisor_) { - for (const auto& whitelist : supervisor_->whitelists()) { + for (const auto& whitelist : supervisor_->GetWhitelists()) { if (AreURLsEquivalent(whitelist.entry_point, url)) return whitelist.large_icon_path; } @@ -302,7 +302,7 @@ } NTPTilesVector whitelist_tiles; - for (const auto& whitelist : supervisor_->whitelists()) { + for (const auto& whitelist : supervisor_->GetWhitelists()) { if (whitelist_tiles.size() + num_actual_tiles >= num_sites_) break;
diff --git a/components/ntp_tiles/most_visited_sites.h b/components/ntp_tiles/most_visited_sites.h index 1da5e182..dbd1dfb1 100644 --- a/components/ntp_tiles/most_visited_sites.h +++ b/components/ntp_tiles/most_visited_sites.h
@@ -71,7 +71,7 @@ virtual bool IsBlocked(const GURL& url) = 0; // Explicitly-specified sites to show on NTP. - virtual std::vector<Whitelist> whitelists() = 0; + virtual std::vector<Whitelist> GetWhitelists() = 0; // If true, be conservative about suggesting sites from outside sources. virtual bool IsChildProfile() = 0;
diff --git a/components/payments/content/payment_request.cc b/components/payments/content/payment_request.cc index 41ac5409..5374ca58 100644 --- a/components/payments/content/payment_request.cc +++ b/components/payments/content/payment_request.cc
@@ -156,9 +156,8 @@ // TODO(crbug.com/716546): Add a merchant abort metric bool accepting_abort = !state_->IsPaymentAppInvoked(); - if (accepting_abort) { - RecordFirstCompletionStatus(JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED); - } + if (accepting_abort) + RecordFirstAbortReason(JourneyLogger::ABORT_REASON_ABORTED_BY_MERCHANT); if (client_.is_bound()) client_->OnAbort(accepting_abort); @@ -174,7 +173,10 @@ if (result != mojom::PaymentComplete::SUCCESS) { delegate_->ShowErrorMessage(); } else { + DCHECK(!has_recorded_completion_); journey_logger_.SetCompleted(); + has_recorded_completion_ = true; + delegate_->GetPrefService()->SetBoolean(kPaymentsFirstTransactionCompleted, true); // When the renderer closes the connection, @@ -234,7 +236,7 @@ if (!client_.is_bound()) return; - RecordFirstCompletionStatus(JourneyLogger::COMPLETION_STATUS_USER_ABORTED); + RecordFirstAbortReason(JourneyLogger::ABORT_REASON_ABORTED_BY_USER); // This sends an error to the renderer, which informs the API user. client_->OnError(mojom::PaymentErrorReason::USER_CANCEL); @@ -248,9 +250,9 @@ } void PaymentRequest::DidStartNavigation(bool is_user_initiated) { - RecordFirstCompletionStatus( - is_user_initiated ? JourneyLogger::COMPLETION_STATUS_USER_ABORTED - : JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED); + RecordFirstAbortReason(is_user_initiated + ? JourneyLogger::ABORT_REASON_USER_NAVIGATION + : JourneyLogger::ABORT_REASON_MERCHANT_NAVIGATION); } void PaymentRequest::OnConnectionTerminated() { @@ -264,6 +266,8 @@ delegate_->CloseDialog(); if (observer_for_testing_) observer_for_testing_->OnConnectionTerminated(); + + RecordFirstAbortReason(JourneyLogger::ABORT_REASON_MOJO_CONNECTION_ERROR); manager_->DestroyRequest(this); } @@ -273,16 +277,11 @@ state_->GeneratePaymentResponse(); } -void PaymentRequest::RecordFirstCompletionStatus( - JourneyLogger::CompletionStatus completion_status) { - if (!has_recorded_abort_reason_) { - has_recorded_abort_reason_ = true; - // TODO(crbug.com/716546): Record more abort reasons. - if (completion_status == JourneyLogger::COMPLETION_STATUS_USER_ABORTED) { - journey_logger_.SetAborted(JourneyLogger::ABORT_REASON_ABORTED_BY_USER); - } else { - journey_logger_.SetAborted(JourneyLogger::ABORT_REASON_OTHER); - } +void PaymentRequest::RecordFirstAbortReason( + JourneyLogger::AbortReason abort_reason) { + if (!has_recorded_completion_) { + has_recorded_completion_ = true; + journey_logger_.SetAborted(abort_reason); } }
diff --git a/components/payments/content/payment_request.h b/components/payments/content/payment_request.h index 09c31b1a..e0ab3fa 100644 --- a/components/payments/content/payment_request.h +++ b/components/payments/content/payment_request.h
@@ -99,8 +99,10 @@ PaymentRequestState* state() { return state_.get(); } private: - void RecordFirstCompletionStatus( - JourneyLogger::CompletionStatus completion_status); + // Only records the abort reason if it's the first completion for this Payment + // Request. This is necessary since the aborts cascade into one another with + // the first one being the most precise. + void RecordFirstAbortReason(JourneyLogger::AbortReason completion_status); content::WebContents* web_contents_; std::unique_ptr<PaymentRequestDelegate> delegate_; @@ -121,7 +123,8 @@ JourneyLogger journey_logger_; - bool has_recorded_abort_reason_ = false; + // Whether a completion was already recorded for this Payment Request. + bool has_recorded_completion_ = false; DISALLOW_COPY_AND_ASSIGN(PaymentRequest); };
diff --git a/components/payments/core/journey_logger.cc b/components/payments/core/journey_logger.cc index 0ec4e3d..7eee988 100644 --- a/components/payments/core/journey_logger.cc +++ b/components/payments/core/journey_logger.cc
@@ -116,7 +116,8 @@ base::UmaHistogramEnumeration("PaymentRequest.CheckoutFunnel.Aborted", reason, ABORT_REASON_MAX); - if (reason == ABORT_REASON_ABORTED_BY_USER) + if (reason == ABORT_REASON_ABORTED_BY_USER || + reason == ABORT_REASON_USER_NAVIGATION) RecordJourneyStatsHistograms(COMPLETION_STATUS_USER_ABORTED); else RecordJourneyStatsHistograms(COMPLETION_STATUS_OTHER_ABORTED);
diff --git a/components/payments/core/journey_logger.h b/components/payments/core/journey_logger.h index dd6cebd1..b37f7ae4 100644 --- a/components/payments/core/journey_logger.h +++ b/components/payments/core/journey_logger.h
@@ -122,6 +122,8 @@ ABORT_REASON_NO_MATCHING_PAYMENT_METHOD = 6, // Deprecated. ABORT_REASON_NO_SUPPORTED_PAYMENT_METHOD = 7, // Deprecated. ABORT_REASON_OTHER = 8, + ABORT_REASON_USER_NAVIGATION = 9, + ABORT_REASON_MERCHANT_NAVIGATION = 10, ABORT_REASON_MAX, };
diff --git a/components/payments/core/payments_profile_comparator.h b/components/payments/core/payments_profile_comparator.h index e186e05..dfb3005 100644 --- a/components/payments/core/payments_profile_comparator.h +++ b/components/payments/core/payments_profile_comparator.h
@@ -97,7 +97,7 @@ // Clears the cached evaluation result for |profile|. Must be called when a // profile is modified and saved during the course of a PaymentRequest. - void Invalidate(const autofill::AutofillProfile& profile); + virtual void Invalidate(const autofill::AutofillProfile& profile); private: ProfileFields ComputeMissingFields( @@ -121,4 +121,4 @@ } // namespace payments -#endif // COMPONENTS_PAYMENTS_CORE_PAYMENTS_PROFILE_COMPARATOR_H_ \ No newline at end of file +#endif // COMPONENTS_PAYMENTS_CORE_PAYMENTS_PROFILE_COMPARATOR_H_
diff --git a/components/policy/core/common/mac_util.cc b/components/policy/core/common/mac_util.cc index 7faecd2..e213d08 100644 --- a/components/policy/core/common/mac_util.cc +++ b/components/policy/core/common/mac_util.cc
@@ -27,8 +27,8 @@ PropertyToValue(static_cast<CFPropertyListRef>(value)); if (converted) { const std::string string = base::SysCFStringRefToUTF8(cf_key); - static_cast<base::DictionaryValue*>(context)->Set( - string, converted.release()); + static_cast<base::DictionaryValue*>(context)->Set(string, + std::move(converted)); } } }
diff --git a/components/policy/core/common/policy_loader_win_unittest.cc b/components/policy/core/common/policy_loader_win_unittest.cc index 3efc8c71..e973049 100644 --- a/components/policy/core/common/policy_loader_win_unittest.cc +++ b/components/policy/core/common/policy_loader_win_unittest.cc
@@ -809,10 +809,10 @@ expected_policy.SetBoolean(test_keys::kKeyBoolean, true); expected_policy.SetString(test_keys::kKeyString, "GPO"); expected_policy.SetInteger(test_keys::kKeyInteger, 42); - std::unique_ptr<base::ListValue> list(new base::ListValue()); + auto list = base::MakeUnique<base::ListValue>(); list->AppendString("GPO 1"); list->AppendString("GPO 2"); - expected_policy.Set(test_keys::kKeyStringList, list.release()); + expected_policy.Set(test_keys::kKeyStringList, std::move(list)); PolicyBundle expected; expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) .LoadFrom(&expected_policy, POLICY_LEVEL_MANDATORY,
diff --git a/components/policy/core/common/registry_dict_unittest.cc b/components/policy/core/common/registry_dict_unittest.cc index e415d55..ca27f32 100644 --- a/components/policy/core/common/registry_dict_unittest.cc +++ b/components/policy/core/common/registry_dict_unittest.cc
@@ -230,22 +230,21 @@ std::unique_ptr<base::Value> actual(test_dict.ConvertToJSON(schema)); base::DictionaryValue expected; - expected.Set("one", int_value.CreateDeepCopy()); - std::unique_ptr<base::DictionaryValue> expected_subdict( - new base::DictionaryValue()); - expected_subdict->Set("two", string_value.CreateDeepCopy()); + expected.Set("one", base::MakeUnique<base::Value>(int_value)); + auto expected_subdict = base::MakeUnique<base::DictionaryValue>(); + expected_subdict->Set("two", base::MakeUnique<base::Value>(string_value)); expected.Set("three", std::move(expected_subdict)); - std::unique_ptr<base::ListValue> expected_list(new base::ListValue()); - expected_list->Append(string_value.CreateDeepCopy()); + auto expected_list = base::MakeUnique<base::ListValue>(); + expected_list->Append(base::MakeUnique<base::Value>(string_value)); expected.Set("dict-to-list", std::move(expected_list)); - expected.Set("int-to-bool", new base::Value(true)); - expected.Set("int-to-double", new base::Value(42.0)); - expected.Set("string-to-bool", new base::Value(false)); - expected.Set("string-to-double", new base::Value(0.0)); - expected.Set("string-to-int", new base::Value(static_cast<int>(0))); - expected_list.reset(new base::ListValue()); + expected.SetBoolean("int-to-bool", true); + expected.SetDouble("int-to-double", 42.0); + expected.SetBoolean("string-to-bool", false); + expected.SetDouble("string-to-double", 0.0); + expected.SetInteger("string-to-int", static_cast<int>(0)); + expected_list = base::MakeUnique<base::ListValue>(); expected_list->Append(base::MakeUnique<base::Value>("value")); - expected_subdict.reset(new base::DictionaryValue()); + expected_subdict = base::MakeUnique<base::DictionaryValue>(); expected_subdict->Set("key", std::move(expected_list)); expected.Set("string-to-dict", std::move(expected_subdict));
diff --git a/components/translate/core/browser/translate_ranker_impl.cc b/components/translate/core/browser/translate_ranker_impl.cc index d31d471..f8ee2067 100644 --- a/components/translate/core/browser/translate_ranker_impl.cc +++ b/components/translate/core/browser/translate_ranker_impl.cc
@@ -140,8 +140,7 @@ is_decision_override_enabled_(base::FeatureList::IsEnabled( translate::kTranslateRankerDecisionOverride)), weak_ptr_factory_(this) { - if (is_query_enabled_ || is_enforcement_enabled_ || - is_decision_override_enabled_) { + if (is_query_enabled_ || is_enforcement_enabled_) { model_loader_ = base::MakeUnique<RankerModelLoader>( base::Bind(&ValidateModel), base::Bind(&TranslateRankerImpl::OnModelAvailable, @@ -203,8 +202,7 @@ (base::TimeTicks::Now() - base::TimeTicks()).InSeconds()); translate_event->set_ranker_version(GetModelVersion()); - if (!is_query_enabled_ && !is_enforcement_enabled_ && - !is_decision_override_enabled_) { + if (!is_query_enabled_ && !is_enforcement_enabled_) { translate_event->set_ranker_response( metrics::TranslateEventProto::NOT_QUERIED); return kDefaultResponse; @@ -234,7 +232,7 @@ result ? metrics::TranslateEventProto::SHOW : metrics::TranslateEventProto::DONT_SHOW); - if (!is_enforcement_enabled_ && !is_decision_override_enabled_) { + if (!is_enforcement_enabled_) { return kDefaultResponse; }
diff --git a/components/translate/core/browser/translate_ranker_impl.h b/components/translate/core/browser/translate_ranker_impl.h index abbed4d5..61f30ea9 100644 --- a/components/translate/core/browser/translate_ranker_impl.h +++ b/components/translate/core/browser/translate_ranker_impl.h
@@ -150,9 +150,7 @@ bool is_enforcement_enabled_ = true; // Tracks whether or not translate ranker decision override is enabled. This - // will override suppression heuristics and follow ranker's decision. Note - // that that also enables the code paths for translate ranker querying and - // enforcement. + // will override suppression heuristics. bool is_decision_override_enabled_ = true; // Saved cache of translate event protos.
diff --git a/components/translate/core/browser/translate_ranker_impl_unittest.cc b/components/translate/core/browser/translate_ranker_impl_unittest.cc index b61b4b7..1854366 100644 --- a/components/translate/core/browser/translate_ranker_impl_unittest.cc +++ b/components/translate/core/browser/translate_ranker_impl_unittest.cc
@@ -236,7 +236,7 @@ translate_event.ranker_response()); } -TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_QueryOnly) { +TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_QueryOnlyDontShow) { InitFeatures({kTranslateRankerQuery}, {kTranslateRankerEnforcement, kTranslateRankerDecisionOverride}); metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); @@ -250,12 +250,24 @@ translate_event.ranker_response()); } -TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_EnforcementOnly) { +TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_QueryOnlyShow) { + InitFeatures({kTranslateRankerQuery}, + {kTranslateRankerEnforcement, kTranslateRankerDecisionOverride}); + metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); + EXPECT_TRUE( + GetRankerForTest(0.01f)->ShouldOfferTranslation(&translate_event)); + EXPECT_NE(0U, translate_event.ranker_request_timestamp_sec()); + EXPECT_EQ(kModelVersion, translate_event.ranker_version()); + EXPECT_EQ(metrics::TranslateEventProto::SHOW, + translate_event.ranker_response()); +} + +TEST_F(TranslateRankerImplTest, + ShouldOfferTranslation_EnforcementOnlyDontShow) { InitFeatures({kTranslateRankerEnforcement}, {kTranslateRankerQuery, kTranslateRankerDecisionOverride}); metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); - // If either enforcement or decision override are turned on, returns the - // ranker decision. + // If enforcement is turned on, returns the ranker decision. EXPECT_FALSE( GetRankerForTest(0.99f)->ShouldOfferTranslation(&translate_event)); EXPECT_NE(0U, translate_event.ranker_request_timestamp_sec()); @@ -264,12 +276,24 @@ translate_event.ranker_response()); } -TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_OverrideOnly) { - InitFeatures({kTranslateRankerDecisionOverride}, - {kTranslateRankerQuery, kTranslateRankerEnforcement}); +TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_EnforcementOnlyShow) { + InitFeatures({kTranslateRankerEnforcement}, + {kTranslateRankerQuery, kTranslateRankerDecisionOverride}); metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); - // If either enforcement or decision override are turned on, returns the - // ranker decision. + // If enforcement is turned on, returns the ranker decision. + EXPECT_TRUE( + GetRankerForTest(0.01f)->ShouldOfferTranslation(&translate_event)); + EXPECT_NE(0U, translate_event.ranker_request_timestamp_sec()); + EXPECT_EQ(kModelVersion, translate_event.ranker_version()); + EXPECT_EQ(metrics::TranslateEventProto::SHOW, + translate_event.ranker_response()); +} + +TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_OverrideAndEnforcement) { + InitFeatures({kTranslateRankerEnforcement, kTranslateRankerDecisionOverride}, + {kTranslateRankerQuery}); + metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); + // DecisionOverride will not interact with Query or Enforcement. EXPECT_FALSE( GetRankerForTest(0.99f)->ShouldOfferTranslation(&translate_event)); EXPECT_NE(0U, translate_event.ranker_request_timestamp_sec()); @@ -381,11 +405,16 @@ } TEST_F(TranslateRankerImplTest, ShouldOverrideDecision_OverrideEnabled) { - InitFeatures({kTranslateRankerDecisionOverride}, {}); + InitFeatures({kTranslateRankerDecisionOverride}, + {kTranslateRankerQuery, kTranslateRankerEnforcement}); std::unique_ptr<translate::TranslateRankerImpl> ranker = GetRankerForTest(0.0f); metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); - + // DecisionOverride is decoupled from querying and enforcement. Enabling + // only DecisionOverride will not query the Ranker. Ranker returns its default + // response. + EXPECT_TRUE( + GetRankerForTest(0.99f)->ShouldOfferTranslation(&translate_event)); EXPECT_TRUE(ranker->ShouldOverrideDecision(1, GURL(), &translate_event)); EXPECT_TRUE(ranker->ShouldOverrideDecision(2, GURL(), &translate_event)); @@ -396,4 +425,37 @@ ASSERT_EQ(1, translate_event.decision_overrides(0)); ASSERT_EQ(2, translate_event.decision_overrides(1)); ASSERT_EQ(0, translate_event.event_type()); + EXPECT_EQ(metrics::TranslateEventProto::NOT_QUERIED, + translate_event.ranker_response()); +} + +TEST_F(TranslateRankerImplTest, + ShouldOverrideDecision_OverrideAndQueryEnabled) { + InitFeatures({kTranslateRankerDecisionOverride, kTranslateRankerQuery}, + {kTranslateRankerEnforcement}); + // This test checks that translate events are properly logged when ranker is + // queried and a decision is overridden. + std::unique_ptr<translate::TranslateRankerImpl> ranker = + GetRankerForTest(0.0f); + metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); + // Ranker's decision is DONT_SHOW, but we are in query mode only, so Ranker + // does not suppress the UI. + EXPECT_TRUE( + GetRankerForTest(0.99f)->ShouldOfferTranslation(&translate_event)); + + int kOverrideType = 1; + EXPECT_TRUE( + ranker->ShouldOverrideDecision(kOverrideType, GURL(), &translate_event)); + + int kEventType = 5; + ranker->RecordTranslateEvent(kEventType, GURL(), &translate_event); + std::vector<metrics::TranslateEventProto> flushed_events; + ranker->FlushTranslateEvents(&flushed_events); + + EXPECT_EQ(1U, flushed_events.size()); + ASSERT_EQ(1, flushed_events[0].decision_overrides_size()); + ASSERT_EQ(kOverrideType, flushed_events[0].decision_overrides(0)); + ASSERT_EQ(kEventType, flushed_events[0].event_type()); + EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, + flushed_events[0].ranker_response()); }
diff --git a/components/web_restrictions/BUILD.gn b/components/web_restrictions/BUILD.gn index 89c8b33..80ef8d18 100644 --- a/components/web_restrictions/BUILD.gn +++ b/components/web_restrictions/BUILD.gn
@@ -7,9 +7,12 @@ import("//testing/test.gni") if (is_android) { - android_library("web_restrictions_java") { + android_library("provider_java") { + java_files = [ "browser/java/src/org/chromium/components/webrestrictions/browser/WebRestrictionsContentProvider.java" ] + } + + android_library("client_java") { java_files = [ - "browser/java/src/org/chromium/components/webrestrictions/browser/WebRestrictionsContentProvider.java", "browser/java/src/org/chromium/components/webrestrictions/browser/WebRestrictionsClient.java", "browser/java/src/org/chromium/components/webrestrictions/browser/WebRestrictionsClientResult.java", ] @@ -24,7 +27,8 @@ "browser/junit/src/org/chromium/components/webrestrictions/browser/WebRestrictionsClientTest.java", ] deps = [ - ":web_restrictions_java", + ":client_java", + ":provider_java", "//base:base_java", "//third_party/hamcrest:hamcrest_java", ] @@ -71,14 +75,14 @@ ] jni_package = "web_restrictions" deps = [ - ":web_restrictions_java", + ":client_java", ] } android_library("test_support_java") { java_files = [ "browser/javatest/src/org/chromium/components/webrestrictions/browser/MockWebRestrictionsClient.java" ] deps = [ - ":web_restrictions_java", + ":client_java", "//base:base_java", ] }
diff --git a/components/wifi/network_properties.cc b/components/wifi/network_properties.cc index e899125..9d7a2318 100644 --- a/components/wifi/network_properties.cc +++ b/components/wifi/network_properties.cc
@@ -4,6 +4,8 @@ #include "components/wifi/network_properties.h" +#include <utility> + #include "base/message_loop/message_loop.h" #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" @@ -52,14 +54,14 @@ frequency_list->AppendInteger(*it); } if (!frequency_list->empty()) - wifi->Set(onc::wifi::kFrequencyList, frequency_list.release()); + wifi->Set(onc::wifi::kFrequencyList, std::move(frequency_list)); if (!bssid.empty()) wifi->SetString(onc::wifi::kBSSID, bssid); wifi->SetString(onc::wifi::kSSID, ssid); wifi->SetString(onc::wifi::kHexSSID, base::HexEncode(ssid.c_str(), ssid.size())); } - value->Set(onc::network_type::kWiFi, wifi.release()); + value->Set(onc::network_type::kWiFi, std::move(wifi)); return value; }
diff --git a/content/browser/accessibility/accessibility_tree_formatter_win.cc b/content/browser/accessibility/accessibility_tree_formatter_win.cc index 2eeb2b06..7b1c36f 100644 --- a/content/browser/accessibility/accessibility_tree_formatter_win.cc +++ b/content/browser/accessibility/accessibility_tree_formatter_win.cc
@@ -12,11 +12,13 @@ #include <utility> #include "base/files/file_path.h" +#include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "base/values.h" #include "base/win/scoped_bstr.h" #include "base/win/scoped_comptr.h" #include "content/browser/accessibility/accessibility_tree_formatter_utils_win.h" @@ -273,15 +275,15 @@ variant_self)) && SUCCEEDED(ToBrowserAccessibilityWin(root)->GetCOM()->accLocation( &root_left, &root_top, &root_width, &root_height, variant_self))) { - base::DictionaryValue* location = new base::DictionaryValue; + auto location = base::MakeUnique<base::DictionaryValue>(); location->SetInteger("x", left - root_left); location->SetInteger("y", top - root_top); - dict->Set("location", location); + dict->Set("location", std::move(location)); - base::DictionaryValue* size = new base::DictionaryValue; + auto size = base::MakeUnique<base::DictionaryValue>(); size->SetInteger("width", width); size->SetInteger("height", height); - dict->Set("size", size); + dict->Set("size", std::move(size)); } LONG index_in_parent;
diff --git a/content/browser/devtools/protocol/target_handler.cc b/content/browser/devtools/protocol/target_handler.cc index 8b982c8..6ce1066 100644 --- a/content/browser/devtools/protocol/target_handler.cc +++ b/content/browser/devtools/protocol/target_handler.cc
@@ -223,11 +223,9 @@ bool TargetHandler::AttachToTargetInternal( DevToolsAgentHost* host, bool waiting_for_debugger) { - attached_hosts_[host->GetId()] = host; - if (!host->AttachClient(this)) { - attached_hosts_.erase(host->GetId()); + if (!host->AttachClient(this)) return false; - } + attached_hosts_[host->GetId()] = host; frontend_->AttachedToTarget(CreateInfo(host), waiting_for_debugger); return true; } @@ -417,8 +415,6 @@ } void TargetHandler::DevToolsAgentHostCreated(DevToolsAgentHost* agent_host) { - if (agent_host->GetType() == "node" && agent_host->IsAttached()) - return; // If we start discovering late, all existing agent hosts will be reported, // but we could have already attached to some. TargetCreatedInternal(agent_host); @@ -429,22 +425,6 @@ TargetDestroyedInternal(agent_host); } -void TargetHandler::DevToolsAgentHostAttached(DevToolsAgentHost* host) { - if (host->GetType() == "node" && - reported_hosts_.find(host->GetId()) != reported_hosts_.end() && - attached_hosts_.find(host->GetId()) == attached_hosts_.end()) { - TargetDestroyedInternal(host); - } -} - -void TargetHandler::DevToolsAgentHostDetached(DevToolsAgentHost* host) { - if (host->GetType() == "node" && - reported_hosts_.find(host->GetId()) == reported_hosts_.end() && - attached_hosts_.find(host->GetId()) == attached_hosts_.end()) { - TargetCreatedInternal(host); - } -} - // -------- ServiceWorkerDevToolsManager::Observer ---------- void TargetHandler::WorkerCreated(
diff --git a/content/browser/devtools/protocol/target_handler.h b/content/browser/devtools/protocol/target_handler.h index 6a0b02c6..f239667 100644 --- a/content/browser/devtools/protocol/target_handler.h +++ b/content/browser/devtools/protocol/target_handler.h
@@ -94,8 +94,6 @@ bool ShouldForceDevToolsAgentHostCreation() override; void DevToolsAgentHostCreated(DevToolsAgentHost* agent_host) override; void DevToolsAgentHostDestroyed(DevToolsAgentHost* agent_host) override; - void DevToolsAgentHostAttached(DevToolsAgentHost* agent_host) override; - void DevToolsAgentHostDetached(DevToolsAgentHost* agent_host) override; // DevToolsAgentHostClient implementation. void DispatchProtocolMessage(DevToolsAgentHost* agent_host,
diff --git a/content/browser/tracing/etw_tracing_agent_win.cc b/content/browser/tracing/etw_tracing_agent_win.cc index c126212..b3b56bd9 100644 --- a/content/browser/tracing/etw_tracing_agent_win.cc +++ b/content/browser/tracing/etw_tracing_agent_win.cc
@@ -168,43 +168,41 @@ now_in_us.QuadPart = now.ToInternalValue(); // Add fields to the event. - std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); - value->Set("guid", new base::Value("ClockSync")); - value->Set("walltime", - new base::Value(base::StringPrintf( - "%08X%08X", walltime_in_us.HighPart, walltime_in_us.LowPart))); - value->Set("tick", new base::Value(base::StringPrintf( - "%08X%08X", now_in_us.HighPart, now_in_us.LowPart))); + auto value = base::MakeUnique<base::DictionaryValue>(); + value->SetString("guid", "ClockSync"); + value->SetString("walltime", + base::StringPrintf("%08X%08X", walltime_in_us.HighPart, + walltime_in_us.LowPart)); + value->SetString("tick", base::StringPrintf("%08X%08X", now_in_us.HighPart, + now_in_us.LowPart)); // Append it to the events buffer. events_->Append(std::move(value)); } void EtwTracingAgent::AppendEventToBuffer(EVENT_TRACE* event) { - using base::Value; - - std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); + auto value = base::MakeUnique<base::DictionaryValue>(); // Add header fields to the event. LARGE_INTEGER ts_us; ts_us.QuadPart = event->Header.TimeStamp.QuadPart / 10; - value->Set("ts", new base::Value(base::StringPrintf( - "%08X%08X", ts_us.HighPart, ts_us.LowPart))); + value->SetString( + "ts", base::StringPrintf("%08X%08X", ts_us.HighPart, ts_us.LowPart)); - value->Set("guid", new base::Value(GuidToString(event->Header.Guid))); + value->SetString("guid", GuidToString(event->Header.Guid)); - value->Set("op", new Value(event->Header.Class.Type)); - value->Set("ver", new Value(event->Header.Class.Version)); - value->Set("pid", new Value(static_cast<int>(event->Header.ProcessId))); - value->Set("tid", new Value(static_cast<int>(event->Header.ThreadId))); - value->Set("cpu", new Value(event->BufferContext.ProcessorNumber)); + value->SetInteger("op", event->Header.Class.Type); + value->SetInteger("ver", event->Header.Class.Version); + value->SetInteger("pid", static_cast<int>(event->Header.ProcessId)); + value->SetInteger("tid", static_cast<int>(event->Header.ThreadId)); + value->SetInteger("cpu", event->BufferContext.ProcessorNumber); // Base64 encode the payload bytes. base::StringPiece buffer(static_cast<const char*>(event->MofData), event->MofLength); std::string payload; base::Base64Encode(buffer, &payload); - value->Set("payload", new base::Value(payload)); + value->SetString("payload", payload); // Append it to the events buffer. events_->Append(std::move(value)); @@ -227,8 +225,8 @@ void EtwTracingAgent::FlushOnThread( const StopAgentTracingCallback& callback) { // Add the header information to the stream. - std::unique_ptr<base::DictionaryValue> header(new base::DictionaryValue()); - header->Set("name", new base::Value("ETW")); + auto header = base::MakeUnique<base::DictionaryValue>(); + header->SetString("name", "ETW"); // Release and pass the events buffer. header->Set("content", std::move(events_));
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index 5282a4a..c5613269 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -345,6 +345,8 @@ if (!base::FeatureList::IsEnabled(features::kCompositeOpaqueScrollers)) WebRuntimeFeatures::EnableFeatureFromString("CompositeOpaqueScrollers", false); + if (base::FeatureList::IsEnabled(features::kCompositorTouchAction)) + WebRuntimeFeatures::EnableCompositorTouchAction(true); if (base::FeatureList::IsEnabled(features::kSkipCompositingSmallScrollers)) WebRuntimeFeatures::EnableSkipCompositingSmallScrollers(true);
diff --git a/content/common/view_messages.h b/content/common/view_messages.h index 95746c6..0a67b02 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h
@@ -235,7 +235,6 @@ IPC_STRUCT_TRAITS_MEMBER(tap_multiple_targets_strategy) IPC_STRUCT_TRAITS_MEMBER(disable_client_blocked_error_page) IPC_STRUCT_TRAITS_MEMBER(plugin_fullscreen_allowed) - IPC_STRUCT_TRAITS_MEMBER(use_video_overlay_for_embedded_encrypted_video) IPC_STRUCT_TRAITS_MEMBER(network_contry_iso) #if defined(OS_LINUX) IPC_STRUCT_TRAITS_MEMBER(system_font_family_name)
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index c4bab20..43983508 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -55,6 +55,11 @@ const base::Feature kCompositeOpaqueScrollers{"CompositeOpaqueScrollers", base::FEATURE_ENABLED_BY_DEFAULT}; +// Enables handling touch events in compositor using impl side touch action +// knowledge. +const base::Feature kCompositorTouchAction{"CompositorTouchAction", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Speculatively pre-evaluate Javascript which will likely use document.write to // load an external script. The feature extracts the written markup and sends it // to the preload scanner.
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index 41809b30..5f54532 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -26,6 +26,7 @@ CONTENT_EXPORT extern const base::Feature kCheckerImaging; CONTENT_EXPORT extern const base::Feature kCompositeOpaqueFixedPosition; CONTENT_EXPORT extern const base::Feature kCompositeOpaqueScrollers; +CONTENT_EXPORT extern const base::Feature kCompositorTouchAction; CONTENT_EXPORT extern const base::Feature kDocumentWriteEvaluator; CONTENT_EXPORT extern const base::Feature kExpensiveBackgroundTimerThrottling; CONTENT_EXPORT extern const base::Feature kFeaturePolicy;
diff --git a/content/public/common/renderer_preferences.cc b/content/public/common/renderer_preferences.cc index 46341c4..dc4edac 100644 --- a/content/public/common/renderer_preferences.cc +++ b/content/public/common/renderer_preferences.cc
@@ -36,9 +36,8 @@ tap_multiple_targets_strategy(TAP_MULTIPLE_TARGETS_STRATEGY_POPUP), disable_client_blocked_error_page(false), plugin_fullscreen_allowed(true), - use_video_overlay_for_embedded_encrypted_video(false) #if defined(OS_WIN) - , caption_font_height(0), + caption_font_height(0), small_caption_font_height(0), menu_font_height(0), status_font_height(0), @@ -46,10 +45,10 @@ vertical_scroll_bar_width_in_dips(0), horizontal_scroll_bar_height_in_dips(0), arrow_bitmap_height_vertical_scroll_bar_in_dips(0), - arrow_bitmap_width_horizontal_scroll_bar_in_dips(0) + arrow_bitmap_width_horizontal_scroll_bar_in_dips(0), #endif - , default_font_size(0) -{} + default_font_size(0) { +} RendererPreferences::RendererPreferences(const RendererPreferences& other) = default;
diff --git a/content/public/common/renderer_preferences.h b/content/public/common/renderer_preferences.h index 15d589ab..4fcdea5 100644 --- a/content/public/common/renderer_preferences.h +++ b/content/public/common/renderer_preferences.h
@@ -124,10 +124,6 @@ // Determines whether plugins are allowed to enter fullscreen mode. bool plugin_fullscreen_allowed; - // Whether video-overlay (hole-punching) should be used for the embedded - // encrypted video. Currently only used by Android. - bool use_video_overlay_for_embedded_encrypted_video; - // Country iso of the mobile network for content detection purpose. std::string network_contry_iso;
diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc index c6839ce..8173b4f 100644 --- a/content/renderer/media/media_factory.cc +++ b/content/renderer/media/media_factory.cc
@@ -258,11 +258,6 @@ blink::WebEncryptedMediaClient* MediaFactory::EncryptedMediaClient() { if (!web_encrypted_media_client_) { web_encrypted_media_client_.reset(new media::WebEncryptedMediaClientImpl( - // base::Unretained(this) is safe because WebEncryptedMediaClientImpl - // is destructed before |this|, and does not give away ownership of the - // callback. - base::Bind(&MediaFactory::AreSecureCodecsSupported, - base::Unretained(this)), GetCdmFactory(), render_frame_->GetMediaPermission(), new RenderMediaLog( url::Origin(render_frame_->GetWebFrame()->GetSecurityOrigin()) @@ -450,16 +445,6 @@ } #endif -bool MediaFactory::AreSecureCodecsSupported() { -#if defined(OS_ANDROID) - // Hardware-secure codecs are only supported if secure surfaces are enabled. - return render_frame_->GetRendererPreferences() - .use_video_overlay_for_embedded_encrypted_video; -#else - return false; -#endif // defined(OS_ANDROID) -} - media::CdmFactory* MediaFactory::GetCdmFactory() { blink::WebLocalFrame* web_frame = render_frame_->GetWebFrame(); DCHECK(web_frame); @@ -502,4 +487,4 @@ } #endif // BUILDFLAG(ENABLE_MOJO_MEDIA) -} // namespace content \ No newline at end of file +} // namespace content
diff --git a/content/renderer/media/media_factory.h b/content/renderer/media/media_factory.h index eeb6854..9ec11ce 100644 --- a/content/renderer/media/media_factory.h +++ b/content/renderer/media/media_factory.h
@@ -131,8 +131,6 @@ media::mojom::RemoterFactory* GetRemoterFactory(); #endif - bool AreSecureCodecsSupported(); - media::CdmFactory* GetCdmFactory(); #if BUILDFLAG(ENABLE_MOJO_MEDIA) @@ -200,4 +198,4 @@ } // namespace content -#endif // CONTENT_RENDERER_MEDIA_MEDIA_FACTORY_H_ \ No newline at end of file +#endif // CONTENT_RENDERER_MEDIA_MEDIA_FACTORY_H_
diff --git a/content/renderer/media/mock_peer_connection_impl.cc b/content/renderer/media/mock_peer_connection_impl.cc index b102d81..12c4ff4 100644 --- a/content/renderer/media/mock_peer_connection_impl.cc +++ b/content/renderer/media/mock_peer_connection_impl.cc
@@ -342,4 +342,10 @@ NOTIMPLEMENTED(); } +webrtc::RTCError MockPeerConnectionImpl::SetBitrate( + const BitrateParameters& bitrate) { + NOTIMPLEMENTED(); + return webrtc::RTCError::OK(); +} + } // namespace content
diff --git a/content/renderer/media/mock_peer_connection_impl.h b/content/renderer/media/mock_peer_connection_impl.h index 0c77c972..914e043 100644 --- a/content/renderer/media/mock_peer_connection_impl.h +++ b/content/renderer/media/mock_peer_connection_impl.h
@@ -109,6 +109,10 @@ bool AddIceCandidate(const webrtc::IceCandidateInterface* candidate) override; void RegisterUMAObserver(webrtc::UMAObserver* observer) override; + webrtc::RTCError SetBitrate( + const webrtc::PeerConnectionInterface::BitrateParameters& bitrate) + override; + void AddRemoteStream(webrtc::MediaStreamInterface* stream); const std::string& stream_label() const { return stream_label_; }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 2e488e0..a0cbc78 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -1078,8 +1078,6 @@ bool was_within_same_page, bool content_initiated); - bool AreSecureCodecsSupported(); - #if BUILDFLAG(ENABLE_PLUGINS) void HandlePepperImeCommit(const base::string16& text); #endif // ENABLE_PLUGINS
diff --git a/crypto/nss_util.cc b/crypto/nss_util.cc index 5ed2fa06..29bef61 100644 --- a/crypto/nss_util.cc +++ b/crypto/nss_util.cc
@@ -670,16 +670,13 @@ EnsureNSPRInit(); - // We *must* have NSS >= 3.14.3. - static_assert( - (NSS_VMAJOR == 3 && NSS_VMINOR == 14 && NSS_VPATCH >= 3) || - (NSS_VMAJOR == 3 && NSS_VMINOR > 14) || - (NSS_VMAJOR > 3), - "nss version check failed"); + // We *must* have NSS >= 3.26 at compile time. + static_assert((NSS_VMAJOR == 3 && NSS_VMINOR >= 26) || (NSS_VMAJOR > 3), + "nss version check failed"); // Also check the run-time NSS version. // NSS_VersionCheck is a >= check, not strict equality. - if (!NSS_VersionCheck("3.14.3")) { - LOG(FATAL) << "NSS_VersionCheck(\"3.14.3\") failed. NSS >= 3.14.3 is " + if (!NSS_VersionCheck("3.26")) { + LOG(FATAL) << "NSS_VersionCheck(\"3.26\") failed. NSS >= 3.26 is " "required. Please upgrade to the latest NSS, and if you " "still get this error, contact your distribution " "maintainer.";
diff --git a/crypto/scoped_test_nss_db.cc b/crypto/scoped_test_nss_db.cc index b334109..03470c1 100644 --- a/crypto/scoped_test_nss_db.cc +++ b/crypto/scoped_test_nss_db.cc
@@ -44,15 +44,6 @@ CERT_DestroyCertList(cert_list); } - // Don't close when NSS is < 3.15.1, because it would require an additional - // sleep for 1 second after closing the database, due to - // http://bugzil.la/875601. - if (!NSS_VersionCheck("3.15.1")) { - LOG(ERROR) << "NSS version is < 3.15.1, test DB will not be closed."; - temp_dir_.Take(); - return; - } - // NSS is allowed to do IO on the current thread since dispatching // to a dedicated thread would still have the affect of blocking // the current thread, due to NSS's internal locking requirements
diff --git a/dbus/values_util_unittest.cc b/dbus/values_util_unittest.cc index 0cc7d91..a4854dc 100644 --- a/dbus/values_util_unittest.cc +++ b/dbus/values_util_unittest.cc
@@ -14,6 +14,7 @@ #include "base/json/json_writer.h" #include "base/macros.h" +#include "base/memory/ptr_util.h" #include "base/values.h" #include "dbus/message.h" #include "testing/gtest/include/gtest/gtest.h" @@ -516,11 +517,11 @@ const double kDoubleValue = 4.9; const std::string kStringValue = "fifty"; - base::ListValue* list_value = new base::ListValue(); + auto list_value = base::MakeUnique<base::ListValue>(); list_value->AppendBoolean(kBoolValue); list_value->AppendInteger(kInt32Value); - base::DictionaryValue* dictionary_value = new base::DictionaryValue(); + auto dictionary_value = base::MakeUnique<base::DictionaryValue>(); dictionary_value->SetBoolean(kKey1, kBoolValue); dictionary_value->SetInteger(kKey2, kDoubleValue); @@ -529,8 +530,8 @@ test_dictionary.SetInteger(kKey2, kInt32Value); test_dictionary.SetDouble(kKey3, kDoubleValue); test_dictionary.SetString(kKey4, kStringValue); - test_dictionary.Set(kKey5, list_value); // takes ownership - test_dictionary.Set(kKey6, dictionary_value); // takes ownership + test_dictionary.Set(kKey5, std::move(list_value)); + test_dictionary.Set(kKey6, std::move(dictionary_value)); std::unique_ptr<Response> response(Response::CreateEmpty()); MessageWriter writer(response.get()); @@ -563,11 +564,11 @@ const double kDoubleValue = 4.9; const std::string kStringValue = "fifty"; - base::ListValue* list_value = new base::ListValue(); + auto list_value = base::MakeUnique<base::ListValue>(); list_value->AppendBoolean(kBoolValue); list_value->AppendInteger(kInt32Value); - base::DictionaryValue* dictionary_value = new base::DictionaryValue(); + auto dictionary_value = base::MakeUnique<base::DictionaryValue>(); dictionary_value->SetBoolean(kKey1, kBoolValue); dictionary_value->SetInteger(kKey2, kDoubleValue); @@ -576,8 +577,8 @@ test_dictionary.SetInteger(kKey2, kInt32Value); test_dictionary.SetDouble(kKey3, kDoubleValue); test_dictionary.SetString(kKey4, kStringValue); - test_dictionary.Set(kKey5, list_value); // takes ownership - test_dictionary.Set(kKey6, dictionary_value); // takes ownership + test_dictionary.Set(kKey5, std::move(list_value)); + test_dictionary.Set(kKey6, std::move(dictionary_value)); std::unique_ptr<Response> response(Response::CreateEmpty()); MessageWriter writer(response.get());
diff --git a/device/geolocation/network_location_request.cc b/device/geolocation/network_location_request.cc index 0db378a..08c1574 100644 --- a/device/geolocation/network_location_request.cc +++ b/device/geolocation/network_location_request.cc
@@ -9,9 +9,11 @@ #include <limits> #include <set> #include <string> +#include <utility> #include "base/json/json_reader.h" #include "base/json/json_writer.h" +#include "base/memory/ptr_util.h" #include "base/metrics/histogram.h" #include "base/metrics/histogram_macros.h" #include "base/strings/string_number_conversions.h" @@ -274,10 +276,9 @@ for (const auto& ap_data : wifi_data.access_point_data) access_points_by_signal_strength.insert(&ap_data); - base::ListValue* wifi_access_point_list = new base::ListValue(); + auto wifi_access_point_list = base::MakeUnique<base::ListValue>(); for (auto* ap_data : access_points_by_signal_strength) { - std::unique_ptr<base::DictionaryValue> wifi_dict( - new base::DictionaryValue()); + auto wifi_dict = base::MakeUnique<base::DictionaryValue>(); AddString("macAddress", base::UTF16ToUTF8(ap_data->mac_address), wifi_dict.get()); AddInteger("signalStrength", ap_data->radio_signal_strength, @@ -287,7 +288,7 @@ AddInteger("signalToNoiseRatio", ap_data->signal_to_noise, wifi_dict.get()); wifi_access_point_list->Append(std::move(wifi_dict)); } - request->Set("wifiAccessPoints", wifi_access_point_list); + request->Set("wifiAccessPoints", std::move(wifi_access_point_list)); } void FormatPositionError(const GURL& server_url,
diff --git a/docs/memory/README.md b/docs/memory/README.md new file mode 100644 index 0000000..4df26bf --- /dev/null +++ b/docs/memory/README.md
@@ -0,0 +1,90 @@ +# Memory + +Landing page for all things related to memory usage in Chromium. + +The goal is to keep an ever present set of links and references that will +help people what is actively happening in the memory space. Please keep +this landing page short and action oriented. + +That being said, please also send CL with update and changes. This should +reflect current active status, and it's easier to do that if everyone helps +maintain it. :) + +## How is chrome's memory usage doing in the world? + +Look at UMA for the Memory.\* UMAs. Confused at which to use? Start with these: + + +| name | description | Caveats | +|------|-------------|---------| +| Memory.\*.Committed | private, image, and file mapped memory | Windows only. Over penalizes Chrome for mapped images and files | +| Memory.Experimental.\*.<br />PrivateMemoryFootprint | New metric measuring private anonymous memory usage (swap or ram) by Chrome. | See Consistent Memory Metrics | +| --Memory.\*.Large2-- | Measures physical memory usage. | **DO NOT USE THIS METRIC**\* | + +\*Do **NOT** use `Memory.\*.Large2` as the `Large2` metrics only +count the physical ram used. This means the number varies based on the behavior +of applications other than Chrome making it near meaningless. Yes, they are +currently in the default finch trials. We're going to fix that. + + +## How do developers communicate? + +Note, these channels are for developer coordination and NOT user support. If +you are a Chromium user experiencing a memory related problem, file a bug +instead. + +| name | description | +|------|-------------| +| [memory-dev@chromium.org]() | Discussion group for all things memory related. Post docs, discuss bugs, etc., here. | +| chrome-memory@google.com | Google internal version of the above. Use sparingly. | +| https://chromiumdev.slack.com/messages/memory/ | Slack channel for real-time discussion with memory devs. Lots of C++ sadness too. | +| crbug [Performance=Memory](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Performance%3DMemory) label | Bucket with auto-filed and user-filed bugs. | +| crbug [Stability=Memory](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Stability%3DMemory) label | Tracks mostly OOM crashes. | + + +## I have a reproducible memory problem, what do I do? + +Yay! Please file a [memory +bug](https://bugs.chromium.org/p/chromium/issues/entry?template=Memory%20usage). + +If you are willing to do a bit more, please grab a memory infra trace and upload +that. Here are [instructions for MacOS](https://docs.google.com/document/d/15mBOu_uZbgP5bpdHZJXEnF9csSRq7phUWXnZcteVr0o/edit). +(TODO: Add instructions for easily grabbing a trace for all platforms.) + + +## I'm a dev and I want to help. How do I get started? + +Great! First, sign up for the mailing lists above and check out the slack channel. + +Second, familiarize yourself with the following: + +| Topic | Description | +|-------|-------------| +| [Key Concepts in Chrome Memory](/memory/key_concepts.md) | Primer for memory terminology in Chrome. | +| [memory-infra](/memory-infra/README.md) | The primary tool used for inspecting allocations. | + + +## What are people actively working on? +| Project | Description | +|---------|-------------| +| [Memory Coordinator](https://docs.google.com/document/d/1dkUXXmpJk7xBUeQM-olBpTHJ2MXamDgY_kjNrl9JXMs/edit#heading=h.swke19b7apg5) (including [Purge+Throttle/Suspend](https://docs.google.com/document/d/1EgLimgxWK5DGhptnNVbEGSvVn6Q609ZJaBkLjEPRJvI/edit)) | Centralized policy and coordination of all memory components in Chrome | +| [Memory-Infra](/memory-infra/README.md) | Tooling and infrastructure for Memory | +| [System health benchmarks](https://docs.google.com/document/d/1pEeCnkbtrbsK3uuPA-ftbg4kzM4Bk7a2A9rhRYklmF8/edit?usp=sharing) | Automated tests based on telemetry | + + +## Key knowledge areas and contacts +| Knowledge Area | Contact points | +|----------------|----------------| +| Chrome on Android | mariahkomenko, dskiba, ssid | +| Browser Process | mariahkomenko, dskiba, ssid | +| GPU/cc | ericrk | +| Memory metrics | erikchen, primano, ajwong, wez | +| Native Heap Profiling | primiano, dskiba, ajwong | +| Net Stack | mmenke, rsleevi, xunjieli | +| Renderer Process | haraken, tasak, hajimehoshi, keishi, hiroshige | +| V8 | hpayer, ulan, verwaest, mlippautz | + + +## Other docs +* [Memory Charter](https://docs.google.com/document/d/1yATy7MBclHycCUR0Jji4eczHT_ejp5lmVZOhNwNQwmM/edit#) +
diff --git a/docs/memory/key_concepts.md b/docs/memory/key_concepts.md new file mode 100644 index 0000000..4baea37 --- /dev/null +++ b/docs/memory/key_concepts.md
@@ -0,0 +1,6 @@ +# Key Concepts in Chrome Memory + +TODO(awong): Write overview of our platform diversity, windows vs \*nix memory models (eg, +"committed" memory), what "discardable" memory is, GPU memory, zram, overcommit, +the various Chrome heaps (pageheap, partitionalloc, oilpan, v8, malloc...per +platform), etc.
diff --git a/extensions/browser/api/declarative_webrequest/webrequest_action.cc b/extensions/browser/api/declarative_webrequest/webrequest_action.cc index 39f945b..6c7589db 100644 --- a/extensions/browser/api/declarative_webrequest/webrequest_action.cc +++ b/extensions/browser/api/declarative_webrequest/webrequest_action.cc
@@ -516,8 +516,8 @@ // TODO(devlin): Pass in the real tab id here. return WebRequestPermissions::CanExtensionAccessURL( extension_info_map, extension_id, request->url(), -1, - apply_info->crosses_incognito, - permission_check) == PermissionsData::ACCESS_ALLOWED; + apply_info->crosses_incognito, permission_check, + request->initiator()) == PermissionsData::ACCESS_ALLOWED; } // static
diff --git a/extensions/browser/api/socket/socket_api.cc b/extensions/browser/api/socket/socket_api.cc index cd52dff..372a24b 100644 --- a/extensions/browser/api/socket/socket_api.cc +++ b/extensions/browser/api/socket/socket_api.cc
@@ -600,7 +600,8 @@ result->Set(kDataKey, base::Value::CreateWithCopiedBuffer(io_buffer->data(), bytes_read)); } else { - result->Set(kDataKey, new base::Value(base::Value::Type::BINARY)); + result->Set(kDataKey, + base::MakeUnique<base::Value>(base::Value::Type::BINARY)); } result->SetString(kAddressKey, address); result->SetInteger(kPortKey, port);
diff --git a/extensions/browser/api/storage/settings_test_util.cc b/extensions/browser/api/storage/settings_test_util.cc index 1b619ef6..de30f6a 100644 --- a/extensions/browser/api/storage/settings_test_util.cc +++ b/extensions/browser/api/storage/settings_test_util.cc
@@ -4,8 +4,12 @@ #include "extensions/browser/api/storage/settings_test_util.h" +#include <utility> + #include "base/files/file_path.h" +#include "base/memory/ptr_util.h" #include "base/run_loop.h" +#include "base/values.h" #include "extensions/browser/api/storage/storage_frontend.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system_provider.h" @@ -77,18 +81,18 @@ it != permissions_set.end(); ++it) { permissions->AppendString(*it); } - manifest.Set("permissions", permissions.release()); + manifest.Set("permissions", std::move(permissions)); switch (type) { case Manifest::TYPE_EXTENSION: break; case Manifest::TYPE_LEGACY_PACKAGED_APP: { - base::DictionaryValue* app = new base::DictionaryValue(); - base::DictionaryValue* app_launch = new base::DictionaryValue(); + auto app = base::MakeUnique<base::DictionaryValue>(); + auto app_launch = base::MakeUnique<base::DictionaryValue>(); app_launch->SetString("local_path", "fake.html"); - app->Set("launch", app_launch); - manifest.Set("app", app); + app->Set("launch", std::move(app_launch)); + manifest.Set("app", std::move(app)); break; }
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc index ee2cf73c..a1b739f 100644 --- a/extensions/browser/api/web_request/web_request_api.cc +++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -1498,7 +1498,9 @@ WebRequestPermissions::CanExtensionAccessURL( extension_info_map, listener->id.extension_id, url, frame_data.tab_id, crosses_incognito, - WebRequestPermissions::REQUIRE_HOST_PERMISSION); + WebRequestPermissions::REQUIRE_HOST_PERMISSION, + request->initiator()); + if (access != PermissionsData::ACCESS_ALLOWED) { if (access == PermissionsData::ACCESS_WITHHELD && web_request_event_router_delegate_) {
diff --git a/extensions/browser/api/web_request/web_request_permissions.cc b/extensions/browser/api/web_request/web_request_permissions.cc index a683ec3..ccfe22b 100644 --- a/extensions/browser/api/web_request/web_request_permissions.cc +++ b/extensions/browser/api/web_request/web_request_permissions.cc
@@ -19,7 +19,6 @@ #include "extensions/common/permissions/permissions_data.h" #include "net/url_request/url_request.h" #include "url/gurl.h" -#include "url/origin.h" #if defined(OS_CHROMEOS) #include "chromeos/login/login_state.h" @@ -151,7 +150,8 @@ const GURL& url, int tab_id, bool crosses_incognito, - HostPermissionsCheck host_permissions_check) { + HostPermissionsCheck host_permissions_check, + const base::Optional<url::Origin>& initiator) { // extension_info_map can be NULL in testing. if (!extension_info_map) return PermissionsData::ACCESS_ALLOWED; @@ -161,6 +161,12 @@ if (!extension) return PermissionsData::ACCESS_DENIED; + // Prevent viewing / modifying requests initiated by a host protected by + // policy. + if (initiator && extension->permissions_data()->IsRuntimeBlockedHost( + initiator->GetPhysicalOrigin().GetURL())) + return PermissionsData::ACCESS_DENIED; + // When we are in a Public Session, allow all URLs for webRequests initiated // by a regular extension (but don't allow chrome:// URLs). #if defined(OS_CHROMEOS)
diff --git a/extensions/browser/api/web_request/web_request_permissions.h b/extensions/browser/api/web_request/web_request_permissions.h index ee6ba29..74d9475 100644 --- a/extensions/browser/api/web_request/web_request_permissions.h +++ b/extensions/browser/api/web_request/web_request_permissions.h
@@ -9,7 +9,9 @@ #include <string> #include "base/macros.h" +#include "base/optional.h" #include "extensions/common/permissions/permissions_data.h" +#include "url/origin.h" class GURL; @@ -47,14 +49,15 @@ static void AllowAllExtensionLocationsInPublicSessionForTesting(bool value); // |host_permission_check| controls how permissions are checked with regard to - // |url|. + // |url| and |initiator| if an initiator exists. static extensions::PermissionsData::AccessType CanExtensionAccessURL( const extensions::InfoMap* extension_info_map, const std::string& extension_id, const GURL& url, int tab_id, bool crosses_incognito, - HostPermissionsCheck host_permissions_check); + HostPermissionsCheck host_permissions_check, + const base::Optional<url::Origin>& initiator); private: DISALLOW_IMPLICIT_CONSTRUCTORS(WebRequestPermissions);
diff --git a/extensions/common/permissions/permissions_data.cc b/extensions/common/permissions/permissions_data.cc index 245040e..96e8269 100644 --- a/extensions/common/permissions/permissions_data.cc +++ b/extensions/common/permissions/permissions_data.cc
@@ -280,7 +280,7 @@ bool PermissionsData::HasHostPermission(const GURL& url) const { base::AutoLock auto_lock(runtime_lock_); return active_permissions_unsafe_->HasExplicitAccessToOrigin(url) && - !IsRuntimeBlockedHost(url); + !IsRuntimeBlockedHostUnsafe(url); } bool PermissionsData::HasEffectiveAccessToAllHosts() const { @@ -412,7 +412,7 @@ return false; } -bool PermissionsData::IsRuntimeBlockedHost(const GURL& url) const { +bool PermissionsData::IsRuntimeBlockedHostUnsafe(const GURL& url) const { runtime_lock_.AssertAcquired(); return PolicyBlockedHostsUnsafe().MatchesURL(url) && !PolicyAllowedHostsUnsafe().MatchesURL(url); @@ -431,7 +431,7 @@ return ACCESS_DENIED; if (extension->location() != Manifest::COMPONENT && - extension->permissions_data()->IsRuntimeBlockedHost(document_url)) { + extension->permissions_data()->IsRuntimeBlockedHostUnsafe(document_url)) { if (error) *error = extension_misc::kPolicyBlockedScripting; return ACCESS_DENIED;
diff --git a/extensions/common/permissions/permissions_data.h b/extensions/common/permissions/permissions_data.h index a619590a..c1c5de2 100644 --- a/extensions/common/permissions/permissions_data.h +++ b/extensions/common/permissions/permissions_data.h
@@ -258,16 +258,17 @@ // methods instead (e.g. CanAccessPage()). const URLPatternSet policy_allowed_hosts() const; + // Check if a specific URL is blocked by policy from extension use at runtime. + bool IsRuntimeBlockedHost(const GURL& url) const { + base::AutoLock auto_lock(runtime_lock_); + return IsRuntimeBlockedHostUnsafe(url); + } + #if defined(UNIT_TEST) const PermissionSet* GetTabSpecificPermissionsForTesting(int tab_id) const { base::AutoLock auto_lock(runtime_lock_); return GetTabSpecificPermissions(tab_id); } - - bool IsRuntimeBlockedHostForTesting(const GURL& url) const { - base::AutoLock auto_lock(runtime_lock_); - return IsRuntimeBlockedHost(url); - } #endif private: @@ -296,7 +297,8 @@ std::string* error) const; // Check if a specific URL is blocked by policy from extension use at runtime. - bool IsRuntimeBlockedHost(const GURL& url) const; + // You must acquire the runtime_lock_ before calling. + bool IsRuntimeBlockedHostUnsafe(const GURL& url) const; // Same as policy_blocked_hosts but instead returns a reference. // You must acquire runtime_lock_ before calling this.
diff --git a/google_apis/drive/drive_api_requests.cc b/google_apis/drive/drive_api_requests.cc index e9799c6..632d1c6 100644 --- a/google_apis/drive/drive_api_requests.cc +++ b/google_apis/drive/drive_api_requests.cc
@@ -6,6 +6,8 @@ #include <stddef.h> +#include <utility> + #include "base/bind.h" #include "base/callback.h" #include "base/json/json_writer.h" @@ -91,10 +93,9 @@ if (properties.empty()) return; - base::ListValue* const properties_value = new base::ListValue; + auto properties_value = base::MakeUnique<base::ListValue>(); for (const auto& property : properties) { - std::unique_ptr<base::DictionaryValue> property_value( - new base::DictionaryValue); + auto property_value = base::MakeUnique<base::DictionaryValue>(); std::string visibility_as_string; switch (property.visibility()) { case Property::VISIBILITY_PRIVATE: @@ -109,7 +110,7 @@ property_value->SetString("value", property.value()); properties_value->Append(std::move(property_value)); } - request_body->Set("properties", properties_value); + request_body->Set("properties", std::move(properties_value)); } // Creates metadata JSON string for multipart uploading. @@ -127,9 +128,9 @@ // Fill parent link. if (!parent_resource_id.empty()) { - std::unique_ptr<base::ListValue> parents(new base::ListValue); + auto parents = base::MakeUnique<base::ListValue>(); parents->Append(google_apis::util::CreateParentValue(parent_resource_id)); - root.Set("parents", parents.release()); + root.Set("parents", std::move(parents)); } if (!modified_date.is_null()) { @@ -387,13 +388,13 @@ root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_)); if (!parents_.empty()) { - base::ListValue* parents_value = new base::ListValue; + auto parents_value = base::MakeUnique<base::ListValue>(); for (size_t i = 0; i < parents_.size(); ++i) { - std::unique_ptr<base::DictionaryValue> parent(new base::DictionaryValue); + auto parent = base::MakeUnique<base::DictionaryValue>(); parent->SetString("id", parents_[i]); parents_value->Append(std::move(parent)); } - root.Set("parents", parents_value); + root.Set("parents", std::move(parents_value)); } if (!title_.empty()) @@ -465,13 +466,13 @@ } if (!parents_.empty()) { - base::ListValue* parents_value = new base::ListValue; + auto parents_value = base::MakeUnique<base::ListValue>(); for (size_t i = 0; i < parents_.size(); ++i) { - std::unique_ptr<base::DictionaryValue> parent(new base::DictionaryValue); + auto parent = base::MakeUnique<base::DictionaryValue>(); parent->SetString("id", parents_[i]); parents_value->Append(std::move(parent)); } - root.Set("parents", parents_value); + root.Set("parents", std::move(parents_value)); } AttachProperties(properties_, &root); @@ -519,13 +520,13 @@ root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_)); if (!parents_.empty()) { - base::ListValue* parents_value = new base::ListValue; + auto parents_value = base::MakeUnique<base::ListValue>(); for (size_t i = 0; i < parents_.size(); ++i) { - std::unique_ptr<base::DictionaryValue> parent(new base::DictionaryValue); + auto parent = base::MakeUnique<base::DictionaryValue>(); parent->SetString("id", parents_[i]); parents_value->Append(std::move(parent)); } - root.Set("parents", parents_value); + root.Set("parents", std::move(parents_value)); } if (!title_.empty()) @@ -823,9 +824,9 @@ root.SetString("title", title_); // Fill parent link. - std::unique_ptr<base::ListValue> parents(new base::ListValue); + auto parents = base::MakeUnique<base::ListValue>(); parents->Append(util::CreateParentValue(parent_resource_id_)); - root.Set("parents", parents.release()); + root.Set("parents", std::move(parents)); if (!modified_date_.is_null()) root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_)); @@ -883,9 +884,9 @@ std::string* upload_content) { base::DictionaryValue root; if (!parent_resource_id_.empty()) { - std::unique_ptr<base::ListValue> parents(new base::ListValue); + auto parents = base::MakeUnique<base::ListValue>(); parents->Append(util::CreateParentValue(parent_resource_id_)); - root.Set("parents", parents.release()); + root.Set("parents", std::move(parents)); } if (!title_.empty()) @@ -1147,9 +1148,9 @@ case PERMISSION_ROLE_COMMENTER: root.SetString("role", "reader"); { - base::ListValue* list = new base::ListValue; + auto list = base::MakeUnique<base::ListValue>(); list->AppendString("commenter"); - root.Set("additionalRoles", list); + root.Set("additionalRoles", std::move(list)); } break; }
diff --git a/google_apis/gaia/google_service_auth_error.cc b/google_apis/gaia/google_service_auth_error.cc index a357005..8c657f0 100644 --- a/google_apis/gaia/google_service_auth_error.cc +++ b/google_apis/gaia/google_service_auth_error.cc
@@ -5,9 +5,11 @@ #include "google_apis/gaia/google_service_auth_error.h" #include <string> +#include <utility> #include "base/json/json_reader.h" #include "base/logging.h" +#include "base/memory/ptr_util.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/values.h" @@ -197,23 +199,23 @@ value->SetString("errorMessage", error_message_); } if (state_ == CAPTCHA_REQUIRED) { - base::DictionaryValue* captcha_value = new base::DictionaryValue(); - value->Set("captcha", captcha_value); + auto captcha_value = base::MakeUnique<base::DictionaryValue>(); captcha_value->SetString("token", captcha_.token); captcha_value->SetString("audioUrl", captcha_.audio_url.spec()); captcha_value->SetString("imageUrl", captcha_.image_url.spec()); captcha_value->SetString("unlockUrl", captcha_.unlock_url.spec()); captcha_value->SetInteger("imageWidth", captcha_.image_width); captcha_value->SetInteger("imageHeight", captcha_.image_height); + value->Set("captcha", std::move(captcha_value)); } else if (state_ == CONNECTION_FAILED) { value->SetString("networkError", net::ErrorToString(network_error_)); } else if (state_ == TWO_FACTOR) { - base::DictionaryValue* two_factor_value = new base::DictionaryValue(); - value->Set("two_factor", two_factor_value); + auto two_factor_value = base::MakeUnique<base::DictionaryValue>(); two_factor_value->SetString("token", second_factor_.token); two_factor_value->SetString("promptText", second_factor_.prompt_text); two_factor_value->SetString("alternateText", second_factor_.alternate_text); two_factor_value->SetInteger("fieldLength", second_factor_.field_length); + value->Set("two_factor", std::move(two_factor_value)); } return value; }
diff --git a/gpu/config/gpu_control_list.cc b/gpu/config/gpu_control_list.cc index 334ea2a..339eaa0 100644 --- a/gpu/config/gpu_control_list.cc +++ b/gpu/config/gpu_control_list.cc
@@ -4,12 +4,16 @@ #include "gpu/config/gpu_control_list.h" +#include <utility> + #include "base/logging.h" +#include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/sys_info.h" +#include "base/values.h" #include "gpu/config/gpu_info.h" #include "third_party/re2/src/re2/re2.h" @@ -581,18 +585,18 @@ DCHECK(problem_list); for (auto index : active_entries_) { const Entry& entry = entries_[index]; - std::unique_ptr<base::DictionaryValue> problem(new base::DictionaryValue()); + auto problem = base::MakeUnique<base::DictionaryValue>(); problem->SetString("description", entry.description); - base::ListValue* cr_bugs = new base::ListValue(); + auto cr_bugs = base::MakeUnique<base::ListValue>(); for (size_t jj = 0; jj < entry.cr_bug_size; ++jj) cr_bugs->AppendInteger(entry.cr_bugs[jj]); - problem->Set("crBugs", cr_bugs); + problem->Set("crBugs", std::move(cr_bugs)); - base::ListValue* features = new base::ListValue(); - entry.GetFeatureNames(features, feature_map_); - problem->Set("affectedGpuSettings", features); + auto features = base::MakeUnique<base::ListValue>(); + entry.GetFeatureNames(features.get(), feature_map_); + problem->Set("affectedGpuSettings", std::move(features)); DCHECK(tag == "workarounds" || tag == "disabledFeatures"); problem->SetString("tag", tag);
diff --git a/headless/lib/browser/headless_net_log.cc b/headless/lib/browser/headless_net_log.cc index a64f37ea..ef733c2 100644 --- a/headless/lib/browser/headless_net_log.cc +++ b/headless/lib/browser/headless_net_log.cc
@@ -5,11 +5,13 @@ #include "headless/lib/browser/headless_net_log.h" #include <stdio.h> + #include <utility> #include "base/command_line.h" #include "base/files/file_path.h" #include "base/files/scoped_file.h" +#include "base/memory/ptr_util.h" #include "base/values.h" #include "build/build_config.h" #include "content/public/common/content_switches.h" @@ -24,14 +26,14 @@ net::GetNetConstants(); // Add a dictionary with client information - base::DictionaryValue* dict = new base::DictionaryValue(); + auto dict = base::MakeUnique<base::DictionaryValue>(); dict->SetString("name", "headless"); dict->SetString( "command_line", base::CommandLine::ForCurrentProcess()->GetCommandLineString()); - constants_dict->Set("clientInfo", dict); + constants_dict->Set("clientInfo", std::move(dict)); return std::move(constants_dict); }
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm index 011fa94..833e747 100644 --- a/ios/chrome/app/main_controller.mm +++ b/ios/chrome/app/main_controller.mm
@@ -93,6 +93,7 @@ #include "ios/chrome/browser/signin/authentication_service_factory.h" #include "ios/chrome/browser/signin/signin_manager_factory.h" #import "ios/chrome/browser/snapshots/snapshot_cache.h" +#import "ios/chrome/browser/snapshots/snapshot_cache_factory.h" #import "ios/chrome/browser/tabs/tab.h" #import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_model_observer.h" @@ -2431,10 +2432,13 @@ - (void)purgeSnapshots { NSMutableSet* liveSessions = [self liveSessionsForTabModel:self.mainTabModel]; [liveSessions unionSet:[self liveSessionsForTabModel:self.otrTabModel]]; + // Keep snapshots that are less than one minute old, to prevent a concurrency // issue if they are created while the purge is running. - [[SnapshotCache sharedInstance] - purgeCacheOlderThan:(base::Time::Now() - base::TimeDelta::FromMinutes(1)) + const base::Time oneMinuteAgo = + base::Time::Now() - base::TimeDelta::FromMinutes(1); + [SnapshotCacheFactory::GetForBrowserState([self currentBrowserState]) + purgeCacheOlderThan:oneMinuteAgo keeping:liveSessions]; }
diff --git a/ios/chrome/browser/autofill/autofill_agent.mm b/ios/chrome/browser/autofill/autofill_agent.mm index 9f2e38ce..3943572 100644 --- a/ios/chrome/browser/autofill/autofill_agent.mm +++ b/ios/chrome/browser/autofill/autofill_agent.mm
@@ -810,14 +810,14 @@ formData->SetString("formName", base::UTF16ToUTF8(form.name)); // Note: Destruction of all child base::Value types is handled by the root // formData object on its own destruction. - base::DictionaryValue* fieldsData = new base::DictionaryValue; + auto fieldsData = base::MakeUnique<base::DictionaryValue>(); const std::vector<autofill::FormFieldData>& fields = form.fields; for (const auto& fieldData : fields) { fieldsData->SetStringWithoutPathExpansion(base::UTF16ToUTF8(fieldData.name), fieldData.value); } - formData->Set("fields", fieldsData); + formData->Set("fields", std::move(fieldsData)); // Stringify the JSON data and send it to the UIWebView-side fillForm method. std::string dataString;
diff --git a/ios/chrome/browser/browser_state/BUILD.gn b/ios/chrome/browser/browser_state/BUILD.gn index cfee3e0..13ee4c3c 100644 --- a/ios/chrome/browser/browser_state/BUILD.gn +++ b/ios/chrome/browser/browser_state/BUILD.gn
@@ -99,6 +99,7 @@ "//ios/chrome/browser/services/gcm", "//ios/chrome/browser/sessions", "//ios/chrome/browser/signin", + "//ios/chrome/browser/snapshots", "//ios/chrome/browser/suggestions", "//ios/chrome/browser/sync", "//ios/chrome/browser/sync/glue",
diff --git a/ios/chrome/browser/browser_state/browser_state_keyed_service_factories.mm b/ios/chrome/browser/browser_state/browser_state_keyed_service_factories.mm index 012002a..b52853c4 100644 --- a/ios/chrome/browser/browser_state/browser_state_keyed_service_factories.mm +++ b/ios/chrome/browser/browser_state/browser_state_keyed_service_factories.mm
@@ -41,6 +41,7 @@ #include "ios/chrome/browser/signin/signin_client_factory.h" #include "ios/chrome/browser/signin/signin_error_controller_factory.h" #include "ios/chrome/browser/signin/signin_manager_factory.h" +#import "ios/chrome/browser/snapshots/snapshot_cache_factory.h" #include "ios/chrome/browser/suggestions/suggestions_service_factory.h" #include "ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h" #include "ios/chrome/browser/sync/ios_user_event_service_factory.h" @@ -106,6 +107,7 @@ ReadingListModelFactory::GetInstance(); SigninClientFactory::GetInstance(); suggestions::SuggestionsServiceFactory::GetInstance(); + SnapshotCacheFactory::GetInstance(); SyncSetupServiceFactory::GetInstance(); TabRestoreServiceDelegateImplIOSFactory::GetInstance(); TranslateAcceptLanguagesFactory::GetInstance();
diff --git a/ios/chrome/browser/notification_promo.cc b/ios/chrome/browser/notification_promo.cc index 65c132d3..fd81c3c 100644 --- a/ios/chrome/browser/notification_promo.cc +++ b/ios/chrome/browser/notification_promo.cc
@@ -6,6 +6,9 @@ #include <stddef.h> +#include <utility> + +#include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/time/time.h" @@ -76,7 +79,7 @@ json_or_payload.SetString(iter->first, iter->second); } } - json.Set("payload", payload.DeepCopy()); + json.Set("payload", base::MakeUnique<base::Value>(payload)); InitFromJson(json); } @@ -139,14 +142,14 @@ double first_view_time, int views, bool closed) { - base::DictionaryValue* ntp_promo = new base::DictionaryValue; + auto ntp_promo = base::MakeUnique<base::DictionaryValue>(); ntp_promo->SetDouble(kPrefPromoFirstViewTime, first_view_time); ntp_promo->SetInteger(kPrefPromoViews, views); ntp_promo->SetBoolean(kPrefPromoClosed, closed); base::DictionaryValue promo_dict; promo_dict.MergeDictionary(local_state_->GetDictionary(kPrefPromoObject)); - promo_dict.Set(base::IntToString(promo_id), ntp_promo); + promo_dict.Set(base::IntToString(promo_id), std::move(ntp_promo)); local_state_->Set(kPrefPromoObject, promo_dict); DVLOG(1) << "WritePrefs " << promo_dict; }
diff --git a/ios/chrome/browser/notification_promo_unittest.cc b/ios/chrome/browser/notification_promo_unittest.cc index 2b3718e..25b68ab 100644 --- a/ios/chrome/browser/notification_promo_unittest.cc +++ b/ios/chrome/browser/notification_promo_unittest.cc
@@ -5,6 +5,7 @@ #include <stddef.h> #include <memory> +#include <utility> #include <vector> #include "base/json/json_reader.h" @@ -303,14 +304,14 @@ ntp_promo->SetInteger("views", views); ntp_promo->SetBoolean("closed", true); - base::ListValue* promo_list = new base::ListValue; + auto promo_list = base::MakeUnique<base::ListValue>(); promo_list->Append(std::move(ntp_promo)); std::string promo_list_key = "mobile_ntp_whats_new_promo"; std::string promo_dict_key = "ios.ntppromo"; base::DictionaryValue promo_dict; - promo_dict.Set(promo_list_key, promo_list); + promo_dict.Set(promo_list_key, std::move(promo_list)); local_state_.Set(promo_dict_key, promo_dict); // Initialize promo and verify that its instance variables match the data
diff --git a/ios/chrome/browser/payments/payment_request.h b/ios/chrome/browser/payments/payment_request.h index 8bc25f60..bbbd8bb8 100644 --- a/ios/chrome/browser/payments/payment_request.h +++ b/ios/chrome/browser/payments/payment_request.h
@@ -31,7 +31,7 @@ // |personal_data_manager| and manages shared resources and user selections for // the current PaymentRequest flow. It must be initialized with a non-null // instance of |personal_data_manager| that outlives this class. -class PaymentRequest : payments::PaymentOptionsProvider { +class PaymentRequest : public payments::PaymentOptionsProvider { public: // |personal_data_manager| should not be null and should outlive this object. PaymentRequest(const web::PaymentRequest& web_payment_request, @@ -160,6 +160,8 @@ return selected_shipping_option_; } + virtual payments::PaymentsProfileComparator* profile_comparator(); + // Returns whether the current PaymentRequest can be used to make a payment. bool CanMakePayment() const;
diff --git a/ios/chrome/browser/payments/payment_request.mm b/ios/chrome/browser/payments/payment_request.mm index 758d93c..2f6bc477 100644 --- a/ios/chrome/browser/payments/payment_request.mm +++ b/ios/chrome/browser/payments/payment_request.mm
@@ -14,7 +14,6 @@ #include "components/autofill/core/browser/region_data_loader_impl.h" #include "components/payments/core/currency_formatter.h" #include "components/payments/core/payment_request_data_util.h" -#include "components/payments/core/payments_profile_comparator.h" #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/autofill/validation_rules_storage_factory.h" #include "ios/web/public/payments/payment_request.h" @@ -182,6 +181,10 @@ return credit_card_cache_.back().get(); } +payments::PaymentsProfileComparator* PaymentRequest::profile_comparator() { + return &profile_comparator_; +} + bool PaymentRequest::CanMakePayment() const { return !credit_cards_.empty(); }
diff --git a/ios/chrome/browser/payments/test_payment_request.h b/ios/chrome/browser/payments/test_payment_request.h index 1d6eda9..421c317 100644 --- a/ios/chrome/browser/payments/test_payment_request.h +++ b/ios/chrome/browser/payments/test_payment_request.h
@@ -13,6 +13,10 @@ class RegionDataLoader; } // namespace autofill +namespace payments { +class PaymentsProfileComparator; +} // namespace payments + namespace web { class PaymentRequest; class PaymentShippingOption; @@ -32,6 +36,11 @@ region_data_loader_ = region_data_loader; } + void SetProfileComparator( + payments::PaymentsProfileComparator* profile_comparator) { + profile_comparator_ = profile_comparator; + } + // Returns the web::PaymentRequest instance that was used to build this // object. web::PaymentRequest& web_payment_request() { return web_payment_request_; } @@ -52,11 +61,15 @@ // PaymentRequest autofill::RegionDataLoader* GetRegionDataLoader() override; + payments::PaymentsProfileComparator* profile_comparator() override; private: // Not owned and must outlive this object. autofill::RegionDataLoader* region_data_loader_; + // Not owned and must outlive this object. + payments::PaymentsProfileComparator* profile_comparator_; + DISALLOW_COPY_AND_ASSIGN(TestPaymentRequest); };
diff --git a/ios/chrome/browser/payments/test_payment_request.mm b/ios/chrome/browser/payments/test_payment_request.mm index a2e1e49..336d45f 100644 --- a/ios/chrome/browser/payments/test_payment_request.mm +++ b/ios/chrome/browser/payments/test_payment_request.mm
@@ -6,6 +6,7 @@ #include "components/autofill/core/browser/personal_data_manager.h" #include "components/autofill/core/browser/region_data_loader.h" +#include "components/payments/core/payments_profile_comparator.h" #include "ios/web/public/payments/payment_request.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -27,3 +28,7 @@ autofill::RegionDataLoader* TestPaymentRequest::GetRegionDataLoader() { return region_data_loader_; } + +payments::PaymentsProfileComparator* TestPaymentRequest::profile_comparator() { + return profile_comparator_; +}
diff --git a/ios/chrome/browser/snapshots/BUILD.gn b/ios/chrome/browser/snapshots/BUILD.gn index 95b3d33..181d317 100644 --- a/ios/chrome/browser/snapshots/BUILD.gn +++ b/ios/chrome/browser/snapshots/BUILD.gn
@@ -8,6 +8,8 @@ "lru_cache.mm", "snapshot_cache.h", "snapshot_cache.mm", + "snapshot_cache_factory.h", + "snapshot_cache_factory.mm", "snapshot_cache_internal.h", "snapshot_cache_web_state_list_observer.h", "snapshot_cache_web_state_list_observer.mm", @@ -20,7 +22,10 @@ ] deps = [ "//base", + "//components/keyed_service/core", + "//components/keyed_service/ios", "//ios/chrome/browser", + "//ios/chrome/browser/browser_state", "//ios/chrome/browser/tabs", "//ios/chrome/browser/ui", "//ios/chrome/browser/web_state_list",
diff --git a/ios/chrome/browser/snapshots/snapshot_cache.h b/ios/chrome/browser/snapshots/snapshot_cache.h index 1d2e63f..480b2e7 100644 --- a/ios/chrome/browser/snapshots/snapshot_cache.h +++ b/ios/chrome/browser/snapshots/snapshot_cache.h
@@ -20,8 +20,6 @@ // |UIApplicationDidBecomeActiveNotification|. @property(nonatomic, strong) NSSet* pinnedIDs; -+ (SnapshotCache*)sharedInstance; - // The scale that should be used for snapshots. - (CGFloat)snapshotScaleForDevice; @@ -62,6 +60,10 @@ // Write a grey copy of the snapshot for |sessionID| to disk, but if and only if // a color version of the snapshot already exists in memory or on disk. - (void)saveGreyInBackgroundForSessionID:(NSString*)sessionID; + +// Invoked before the instance is deallocated. Needs to release all reference +// to C++ objects. Object will soon be deallocated. +- (void)shutdown; @end // Additionnal methods that should only be used for tests.
diff --git a/ios/chrome/browser/snapshots/snapshot_cache.mm b/ios/chrome/browser/snapshots/snapshot_cache.mm index 3f401842..405d327 100644 --- a/ios/chrome/browser/snapshots/snapshot_cache.mm +++ b/ios/chrome/browser/snapshots/snapshot_cache.mm
@@ -16,15 +16,17 @@ #include "base/mac/bind_objc_block.h" #include "base/mac/scoped_nsobject.h" #include "base/path_service.h" +#include "base/sequence_checker.h" +#include "base/sequenced_task_runner.h" #include "base/strings/sys_string_conversions.h" #include "base/task_runner_util.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/thread_restrictions.h" #include "ios/chrome/browser/experimental_flags.h" #import "ios/chrome/browser/snapshots/lru_cache.h" #import "ios/chrome/browser/snapshots/snapshot_cache_internal.h" #include "ios/chrome/browser/ui/ui_util.h" #import "ios/chrome/browser/ui/uikit_ui_util.h" -#include "ios/web/public/web_thread.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -64,8 +66,7 @@ const NSUInteger kGreyInitialCapacity = 8; const CGFloat kJPEGImageQuality = 1.0; // Highest quality. No compression. -// Sequence token to make sure creation/deletion of snapshots don't overlap. -const char kSequenceToken[] = "SnapshotCacheSequenceToken"; + // Maximum size in number of elements that the LRU cache can hold before // starting to evict elements. const NSUInteger kLRUCacheMaxCapacity = 6; @@ -231,15 +232,18 @@ // Directory where the thumbnails are saved. base::FilePath cacheDirectory_; + + // Task runner used to run tasks in the background. Will be invalidated when + // -shutdown is invoked. Code should support this value to be null (generally + // by not posting the task). + scoped_refptr<base::SequencedTaskRunner> taskRunner_; + + // Check that public API is called from the correct sequence. + SEQUENCE_CHECKER(sequenceChecker_); } @synthesize pinnedIDs = pinnedIDs_; -+ (SnapshotCache*)sharedInstance { - static SnapshotCache* instance = [[SnapshotCache alloc] init]; - return instance; -} - - (instancetype)init { base::FilePath cacheDirectory; if (!GetSnapshotsCacheDirectory(&cacheDirectory)) @@ -251,13 +255,15 @@ - (instancetype)initWithCacheDirectory:(const base::FilePath&)cacheDirectory snapshotsScale:(ImageScale)snapshotsScale { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); if ((self = [super init])) { - DCHECK_CURRENTLY_ON(web::WebThread::UI); - lruCache_ = [[LRUCache alloc] initWithCacheSize:kLRUCacheMaxCapacity]; cacheDirectory_ = cacheDirectory; snapshotsScale_ = snapshotsScale; + taskRunner_ = base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), base::TaskPriority::USER_VISIBLE}); + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleLowMemory) @@ -278,6 +284,8 @@ } - (void)dealloc { + DCHECK(!taskRunner_) << "-shutdown must be called before -dealloc"; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification @@ -298,7 +306,7 @@ - (void)retrieveImageForSessionID:(NSString*)sessionID callback:(void (^)(UIImage*))callback { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); DCHECK(sessionID); UIImage* image = [lruCache_ objectForKey:sessionID]; @@ -308,15 +316,19 @@ return; } + if (!taskRunner_) { + callback(nil); + return; + } + // Copy ivars used by the block so that it does not reference |self|. const base::FilePath cacheDirectory = cacheDirectory_; const ImageScale snapshotsScale = snapshotsScale_; __weak SnapshotCache* weakSelf = self; base::PostTaskAndReplyWithResult( - web::WebThread::GetTaskRunnerForThread(web::WebThread::FILE_USER_BLOCKING) - .get(), - FROM_HERE, base::BindBlockArc(^base::scoped_nsobject<UIImage>() { + taskRunner_.get(), FROM_HERE, + base::BindBlockArc(^base::scoped_nsobject<UIImage>() { // Retrieve the image on a high priority thread. return base::scoped_nsobject<UIImage>(ReadImageForSessionFromDisk( sessionID, IMAGE_TYPE_COLOR, snapshotsScale, cacheDirectory)); @@ -331,8 +343,8 @@ } - (void)setImage:(UIImage*)image withSessionID:(NSString*)sessionID { - DCHECK_CURRENTLY_ON(web::WebThread::UI); - if (!image || !sessionID) + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); + if (!image || !sessionID || !taskRunner_) return; [lruCache_ setObject:image forKey:sessionID]; @@ -342,23 +354,26 @@ const ImageScale snapshotsScale = snapshotsScale_; // Save the image to disk. - web::WebThread::PostBlockingPoolSequencedTask( - kSequenceToken, FROM_HERE, base::BindBlockArc(^{ + taskRunner_->PostTask( + FROM_HERE, base::BindBlockArc(^{ WriteImageToDisk(image, ImagePath(sessionID, IMAGE_TYPE_COLOR, snapshotsScale, cacheDirectory)); })); } - (void)removeImageWithSessionID:(NSString*)sessionID { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); [lruCache_ removeObjectForKey:sessionID]; + if (!taskRunner_) + return; + // Copy ivars used by the block so that it does not reference |self|. const base::FilePath cacheDirectory = cacheDirectory_; const ImageScale snapshotsScale = snapshotsScale_; - web::WebThread::PostBlockingPoolSequencedTask( - kSequenceToken, FROM_HERE, base::BindBlockArc(^{ + taskRunner_->PostTask( + FROM_HERE, base::BindBlockArc(^{ for (size_t index = 0; index < arraysize(kImageTypes); ++index) { base::DeleteFile(ImagePath(sessionID, kImageTypes[index], snapshotsScale, cacheDirectory), @@ -379,7 +394,10 @@ - (void)purgeCacheOlderThan:(const base::Time&)date keeping:(NSSet*)liveSessionIds { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); + + if (!taskRunner_) + return; // Copying the date, as the block must copy the value, not the reference. const base::Time dateCopy = date; @@ -388,8 +406,8 @@ const base::FilePath cacheDirectory = cacheDirectory_; const ImageScale snapshotsScale = snapshotsScale_; - web::WebThread::PostBlockingPoolSequencedTask( - kSequenceToken, FROM_HERE, base::BindBlockArc(^{ + taskRunner_->PostTask( + FROM_HERE, base::BindBlockArc(^{ if (!base::DirectoryExists(cacheDirectory)) return; @@ -417,7 +435,7 @@ } - (void)willBeSavedGreyWhenBackgrounding:(NSString*)sessionID { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); if (!sessionID) return; backgroundingImageSessionId_ = [sessionID copy]; @@ -425,7 +443,7 @@ } - (void)handleLowMemory { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); NSMutableDictionary<NSString*, UIImage*>* dictionary = [NSMutableDictionary dictionaryWithCapacity:2]; for (NSString* sessionID in pinnedIDs_) { @@ -439,18 +457,18 @@ } - (void)handleEnterBackground { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); [lruCache_ removeAllObjects]; } - (void)handleBecomeActive { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); for (NSString* sessionID in pinnedIDs_) [self retrieveImageForSessionID:sessionID callback:nil]; } - (void)saveGreyImage:(UIImage*)greyImage forKey:(NSString*)sessionID { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); if (greyImage) [greyImageDictionary_ setObject:greyImage forKey:sessionID]; if ([sessionID isEqualToString:mostRecentGreySessionId_]) { @@ -460,21 +478,23 @@ } - (void)loadGreyImageAsync:(NSString*)sessionID { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); // Don't call -retrieveImageForSessionID here because it caches the colored // image, which we don't need for the grey image cache. But if the image is // already in the cache, use it. UIImage* image = [lruCache_ objectForKey:sessionID]; + if (!taskRunner_) + return; + // Copy ivars used by the block so that it does not reference |self|. const base::FilePath cacheDirectory = cacheDirectory_; const ImageScale snapshotsScale = snapshotsScale_; __weak SnapshotCache* weakSelf = self; base::PostTaskAndReplyWithResult( - web::WebThread::GetTaskRunnerForThread(web::WebThread::FILE_USER_BLOCKING) - .get(), - FROM_HERE, base::BindBlockArc(^base::scoped_nsobject<UIImage>() { + taskRunner_.get(), FROM_HERE, + base::BindBlockArc(^base::scoped_nsobject<UIImage>() { base::scoped_nsobject<UIImage> result(image); // If the image is not in the cache, load it from disk. if (!result) { @@ -491,7 +511,7 @@ } - (void)createGreyCache:(NSArray*)sessionIDs { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); greyImageDictionary_ = [NSMutableDictionary dictionaryWithCapacity:kGreyInitialCapacity]; for (NSString* sessionID in sessionIDs) @@ -499,20 +519,20 @@ } - (void)removeGreyCache { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); greyImageDictionary_ = nil; [self clearGreySessionInfo]; } - (void)clearGreySessionInfo { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); mostRecentGreySessionId_ = nil; mostRecentGreyBlock_ = nil; } - (void)greyImageForSessionID:(NSString*)sessionID callback:(void (^)(UIImage*))callback { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); DCHECK(greyImageDictionary_); UIImage* image = [greyImageDictionary_ objectForKey:sessionID]; if (image) { @@ -526,7 +546,7 @@ - (void)retrieveGreyImageForSessionID:(NSString*)sessionID callback:(void (^)(UIImage*))callback { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); if (greyImageDictionary_) { UIImage* image = [greyImageDictionary_ objectForKey:sessionID]; if (image) { @@ -535,15 +555,19 @@ } } + if (!taskRunner_) { + callback(nil); + return; + } + // Copy ivars used by the block so that it does not reference |self|. const base::FilePath cacheDirectory = cacheDirectory_; const ImageScale snapshotsScale = snapshotsScale_; __weak SnapshotCache* weakSelf = self; base::PostTaskAndReplyWithResult( - web::WebThread::GetTaskRunnerForThread(web::WebThread::FILE_USER_BLOCKING) - .get(), - FROM_HERE, base::BindBlockArc(^base::scoped_nsobject<UIImage>() { + taskRunner_.get(), FROM_HERE, + base::BindBlockArc(^base::scoped_nsobject<UIImage>() { // Retrieve the image on a high priority thread. return base::scoped_nsobject<UIImage>(ReadImageForSessionFromDisk( sessionID, IMAGE_TYPE_GREYSCALE, snapshotsScale, cacheDirectory)); @@ -563,7 +587,7 @@ } - (void)saveGreyInBackgroundForSessionID:(NSString*)sessionID { - DCHECK_CURRENTLY_ON(web::WebThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequenceChecker_); if (!sessionID) return; @@ -575,18 +599,25 @@ } } + if (!taskRunner_) + return; + // Copy ivars used by the block so that it does not reference |self|. UIImage* backgroundingColorImage = backgroundingColorImage_; const base::FilePath cacheDirectory = cacheDirectory_; const ImageScale snapshotsScale = snapshotsScale_; - web::WebThread::PostBlockingPoolTask( + taskRunner_->PostTask( FROM_HERE, base::BindBlockArc(^{ ConvertAndSaveGreyImage(sessionID, snapshotsScale, backgroundingColorImage, cacheDirectory); })); } +- (void)shutdown { + taskRunner_ = nullptr; +} + @end @implementation SnapshotCache (TestingAdditions)
diff --git a/ios/chrome/browser/snapshots/snapshot_cache_factory.h b/ios/chrome/browser/snapshots/snapshot_cache_factory.h new file mode 100644 index 0000000..b3bc571 --- /dev/null +++ b/ios/chrome/browser/snapshots/snapshot_cache_factory.h
@@ -0,0 +1,49 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_SNAPSHOTS_SNAPSHOT_CACHE_FACTORY_H_ +#define IOS_CHROME_BROWSER_SNAPSHOTS_SNAPSHOT_CACHE_FACTORY_H_ + +#include <memory> + +#include "base/macros.h" +#include "components/keyed_service/ios/browser_state_keyed_service_factory.h" + +@class SnapshotCache; + +namespace base { +template <typename T> +struct DefaultSingletonTraits; +} + +namespace ios { +class ChromeBrowserState; +} + +// Singleton that owns all SnapshotCaches and associates them with +// ios::ChromeBrowserState. +class SnapshotCacheFactory : public BrowserStateKeyedServiceFactory { + public: + static SnapshotCache* GetForBrowserState( + ios::ChromeBrowserState* browser_state); + + static SnapshotCacheFactory* GetInstance(); + + private: + friend struct base::DefaultSingletonTraits<SnapshotCacheFactory>; + + SnapshotCacheFactory(); + ~SnapshotCacheFactory() override; + + // BrowserStateKeyedServiceFactory implementation. + std::unique_ptr<KeyedService> BuildServiceInstanceFor( + web::BrowserState* context) const override; + web::BrowserState* GetBrowserStateToUse( + web::BrowserState* context) const override; + bool ServiceIsNULLWhileTesting() const override; + + DISALLOW_COPY_AND_ASSIGN(SnapshotCacheFactory); +}; + +#endif // IOS_CHROME_BROWSER_SNAPSHOTS_SNAPSHOT_CACHE_FACTORY_H_
diff --git a/ios/chrome/browser/snapshots/snapshot_cache_factory.mm b/ios/chrome/browser/snapshots/snapshot_cache_factory.mm new file mode 100644 index 0000000..b18a0a2 --- /dev/null +++ b/ios/chrome/browser/snapshots/snapshot_cache_factory.mm
@@ -0,0 +1,86 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/snapshots/snapshot_cache_factory.h" + +#include "base/logging.h" +#include "base/memory/ptr_util.h" +#include "base/memory/singleton.h" +#include "components/keyed_service/core/keyed_service.h" +#include "components/keyed_service/ios/browser_state_dependency_manager.h" +#include "ios/chrome/browser/browser_state/browser_state_otr_helper.h" +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" +#import "ios/chrome/browser/snapshots/snapshot_cache.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace { +// C++ wrapper around SnapshotCache, owning the SnapshotCache and allowing it +// bind it to an ios::ChromeBrowserState as a KeyedService. +class SnapshotCacheWrapper : public KeyedService { + public: + explicit SnapshotCacheWrapper(SnapshotCache* snapshot_cache); + ~SnapshotCacheWrapper() override; + + SnapshotCache* snapshot_cache() { return snapshot_cache_; } + + // KeyedService implementation. + void Shutdown() override; + + private: + __strong SnapshotCache* snapshot_cache_; + + DISALLOW_COPY_AND_ASSIGN(SnapshotCacheWrapper); +}; + +SnapshotCacheWrapper::SnapshotCacheWrapper(SnapshotCache* snapshot_cache) + : snapshot_cache_(snapshot_cache) { + DCHECK(snapshot_cache); +} + +SnapshotCacheWrapper::~SnapshotCacheWrapper() { + DCHECK(!snapshot_cache_); +} + +void SnapshotCacheWrapper::Shutdown() { + [snapshot_cache_ shutdown]; + snapshot_cache_ = nil; +} +} + +// static +SnapshotCache* SnapshotCacheFactory::GetForBrowserState( + ios::ChromeBrowserState* browser_state) { + SnapshotCacheWrapper* wrapper = static_cast<SnapshotCacheWrapper*>( + GetInstance()->GetServiceForBrowserState(browser_state, true)); + return wrapper ? wrapper->snapshot_cache() : nil; +} + +// static +SnapshotCacheFactory* SnapshotCacheFactory::GetInstance() { + return base::Singleton<SnapshotCacheFactory>::get(); +} + +SnapshotCacheFactory::SnapshotCacheFactory() + : BrowserStateKeyedServiceFactory( + "SnapshotCache", + BrowserStateDependencyManager::GetInstance()) {} + +SnapshotCacheFactory::~SnapshotCacheFactory() = default; + +std::unique_ptr<KeyedService> SnapshotCacheFactory::BuildServiceInstanceFor( + web::BrowserState* context) const { + return base::MakeUnique<SnapshotCacheWrapper>([[SnapshotCache alloc] init]); +} + +web::BrowserState* SnapshotCacheFactory::GetBrowserStateToUse( + web::BrowserState* context) const { + return GetBrowserStateRedirectedInIncognito(context); +} + +bool SnapshotCacheFactory::ServiceIsNULLWhileTesting() const { + return true; +}
diff --git a/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm b/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm index b0754899..11a39f4 100644 --- a/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm +++ b/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm
@@ -16,6 +16,7 @@ #include "base/mac/scoped_nsobject.h" #include "base/run_loop.h" #include "base/strings/sys_string_conversions.h" +#include "base/task_scheduler/task_scheduler.h" #include "base/threading/sequenced_worker_pool.h" #include "base/time/time.h" #import "ios/chrome/browser/snapshots/snapshot_cache_internal.h" @@ -61,6 +62,7 @@ void TearDown() override { ClearDumpedImages(); + [snapshotCache_ shutdown]; snapshotCache_.reset(); PlatformTest::TearDown(); } @@ -83,8 +85,7 @@ // Flushes all the runloops internally used by the snapshot cache. void FlushRunLoops() { - base::RunLoop().RunUntilIdle(); - web::WebThread::GetBlockingPool()->FlushForTesting(); + base::TaskScheduler::GetInstance()->FlushForTesting(); base::RunLoop().RunUntilIdle(); } @@ -266,6 +267,8 @@ UIImage* image = [UIImage imageWithContentsOfFile:base::SysUTF8ToNSString(path.value())]; CGImageRef cgImage = [image CGImage]; + ASSERT_TRUE(cgImage != nullptr); + base::ScopedCFTypeRef<CFDataRef> pixelData( CGDataProviderCopyData(CGImageGetDataProvider(cgImage))); const char* pixels =
diff --git a/ios/chrome/browser/snapshots/snapshot_manager.h b/ios/chrome/browser/snapshots/snapshot_manager.h index 50cf315..123bcf6 100644 --- a/ios/chrome/browser/snapshots/snapshot_manager.h +++ b/ios/chrome/browser/snapshots/snapshot_manager.h
@@ -7,6 +7,10 @@ #import <UIKit/UIKit.h> +namespace web { +class WebState; +} + // Snapshot manager for contents of a tab. A snapshot is a full-screen image // of the contents of the page at the current scroll offset and zoom level, // used to stand in for the web view if it has been purged from memory or when @@ -17,6 +21,12 @@ // allows quick identification and replacement as a tab changes pages. @interface SnapshotManager : NSObject +// Designated initializer. The |webState| must not be null. +- (instancetype)initWithWebState:(web::WebState*)webState + NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; + // Takes a snapshot for the supplied view (which should correspond to the given // type of web view). Returns an autoreleased image cropped and scaled // appropriately.
diff --git a/ios/chrome/browser/snapshots/snapshot_manager.mm b/ios/chrome/browser/snapshots/snapshot_manager.mm index 3e8f535..1367dfb 100644 --- a/ios/chrome/browser/snapshots/snapshot_manager.mm +++ b/ios/chrome/browser/snapshots/snapshot_manager.mm
@@ -8,8 +8,11 @@ #import <WebKit/WebKit.h> #include "base/logging.h" +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/snapshots/snapshot_cache.h" +#import "ios/chrome/browser/snapshots/snapshot_cache_factory.h" #import "ios/chrome/browser/snapshots/snapshot_overlay.h" +#import "ios/web/public/web_state/web_state.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -28,7 +31,17 @@ } } // namespace -@implementation SnapshotManager +@implementation SnapshotManager { + web::WebState* _webState; +} + +- (instancetype)initWithWebState:(web::WebState*)webState { + if ((self = [super init])) { + DCHECK(webState); + _webState = webState; + } + return self; +} - (UIImage*)generateSnapshotForView:(UIView*)view withRect:(CGRect)rect @@ -39,8 +52,7 @@ << ": size.width=" << size.width; DCHECK(std::isnormal(size.height) && (size.height > 0)) << ": size.height=" << size.height; - const CGFloat kScale = - [[SnapshotCache sharedInstance] snapshotScaleForDevice]; + const CGFloat kScale = [[self snapshotCache] snapshotScaleForDevice]; UIGraphicsBeginImageContextWithOptions(size, YES, kScale); CGContext* context = UIGraphicsGetCurrentContext(); if (!context) { @@ -91,28 +103,33 @@ - (void)retrieveImageForSessionID:(NSString*)sessionID callback:(void (^)(UIImage*))callback { - [[SnapshotCache sharedInstance] retrieveImageForSessionID:sessionID - callback:callback]; + [[self snapshotCache] retrieveImageForSessionID:sessionID callback:callback]; } - (void)retrieveGreyImageForSessionID:(NSString*)sessionID callback:(void (^)(UIImage*))callback { - [[SnapshotCache sharedInstance] retrieveGreyImageForSessionID:sessionID - callback:callback]; + [[self snapshotCache] retrieveGreyImageForSessionID:sessionID + callback:callback]; } - (void)setImage:(UIImage*)image withSessionID:(NSString*)sessionID { - [[SnapshotCache sharedInstance] setImage:image withSessionID:sessionID]; + [[self snapshotCache] setImage:image withSessionID:sessionID]; } - (void)removeImageWithSessionID:(NSString*)sessionID { - [[SnapshotCache sharedInstance] removeImageWithSessionID:sessionID]; + [[self snapshotCache] removeImageWithSessionID:sessionID]; } - (void)greyImageForSessionID:(NSString*)sessionID callback:(void (^)(UIImage*))callback { - [[SnapshotCache sharedInstance] greyImageForSessionID:sessionID - callback:callback]; + [[self snapshotCache] greyImageForSessionID:sessionID callback:callback]; +} + +#pragma mark - Private methods. + +- (SnapshotCache*)snapshotCache { + return SnapshotCacheFactory::GetForBrowserState( + ios::ChromeBrowserState::FromBrowserState(_webState->GetBrowserState())); } @end
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm index 504933b2..49ab25d1 100644 --- a/ios/chrome/browser/tabs/tab.mm +++ b/ios/chrome/browser/tabs/tab.mm
@@ -472,7 +472,7 @@ [[self webController] addObserver:self]; [[self webController] setDelegate:self]; - _snapshotManager = [[SnapshotManager alloc] init]; + _snapshotManager = [[SnapshotManager alloc] initWithWebState:webState]; _webControllerSnapshotHelper = [[WebControllerSnapshotHelper alloc] initWithSnapshotManager:_snapshotManager tab:self];
diff --git a/ios/chrome/browser/tabs/tab_model.mm b/ios/chrome/browser/tabs/tab_model.mm index 217053e..e2a66ea 100644 --- a/ios/chrome/browser/tabs/tab_model.mm +++ b/ios/chrome/browser/tabs/tab_model.mm
@@ -29,6 +29,7 @@ #import "ios/chrome/browser/sessions/session_service_ios.h" #import "ios/chrome/browser/sessions/session_window_ios.h" #import "ios/chrome/browser/snapshots/snapshot_cache.h" +#import "ios/chrome/browser/snapshots/snapshot_cache_factory.h" #import "ios/chrome/browser/snapshots/snapshot_cache_web_state_list_observer.h" #include "ios/chrome/browser/tab_parenting_global_observer.h" #import "ios/chrome/browser/tabs/legacy_tab_helper.h" @@ -294,9 +295,13 @@ base::MakeUnique<WebStateListObserverBridge>( tabModelClosingWebStateObserver)); - _webStateListObservers.push_back( - base::MakeUnique<SnapshotCacheWebStateListObserver>( - [SnapshotCache sharedInstance])); + SnapshotCache* snapshotCache = + SnapshotCacheFactory::GetForBrowserState(_browserState); + if (snapshotCache) { + _webStateListObservers.push_back( + base::MakeUnique<SnapshotCacheWebStateListObserver>(snapshotCache)); + } + if (_tabUsageRecorder) { _webStateListObservers.push_back( base::MakeUnique<TabUsageRecorderWebStateListObserver>( @@ -777,7 +782,7 @@ // Called when UIApplicationWillResignActiveNotification is received. - (void)willResignActive:(NSNotification*)notify { if (_webUsageEnabled && self.currentTab) { - [[SnapshotCache sharedInstance] + [SnapshotCacheFactory::GetForBrowserState(_browserState) willBeSavedGreyWhenBackgrounding:self.currentTab.tabId]; } } @@ -804,7 +809,7 @@ // Write out a grey version of the current website to disk. if (_webUsageEnabled && self.currentTab) { - [[SnapshotCache sharedInstance] + [SnapshotCacheFactory::GetForBrowserState(_browserState) saveGreyInBackgroundForSessionID:self.currentTab.tabId]; } }
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm index 6dfaffb..abbecf34 100644 --- a/ios/chrome/browser/ui/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -3760,6 +3760,15 @@ return; } + // If this is a reload initiated from the omnibox. + // TODO(crbug.com/730192): Add DCHECK to verify that whenever urlToLood is the + // same as the old url, the transition type is ui::PAGE_TRANSITION_RELOAD. + if (PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD)) { + [[_model currentTab] navigationManager]->Reload( + web::ReloadType::NORMAL, true /* check_for_repost */); + return; + } + web::NavigationManager::WebLoadParams params(urlToLoad); params.referrer = referrer; params.transition_type = transition;
diff --git a/ios/chrome/browser/ui/payments/address_edit_coordinator.mm b/ios/chrome/browser/ui/payments/address_edit_coordinator.mm index 8e06e94..9ac3976 100644 --- a/ios/chrome/browser/ui/payments/address_edit_coordinator.mm +++ b/ios/chrome/browser/ui/payments/address_edit_coordinator.mm
@@ -10,6 +10,7 @@ #include "components/autofill/core/browser/autofill_profile.h" #include "components/autofill/core/browser/personal_data_manager.h" #include "components/autofill/core/common/autofill_constants.h" +#include "components/payments/core/payments_profile_comparator.h" #include "components/strings/grit/components_strings.h" #include "ios/chrome/browser/payments/payment_request.h" #import "ios/chrome/browser/ui/autofill/autofill_ui_type_util.h" @@ -129,6 +130,9 @@ address.set_origin(autofill::kSettingsOrigin); self.paymentRequest->GetPersonalDataManager()->UpdateProfile(address); + // Cached profile must be invalidated once the profile is modified. + _paymentRequest->profile_comparator()->Invalidate(address); + // Update the original profile instance that is being edited. *self.address = address; }
diff --git a/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm index 30fa649..15447748c8 100644 --- a/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm
@@ -13,7 +13,9 @@ #include "components/autofill/core/browser/autofill_test_utils.h" #include "components/autofill/core/browser/test_personal_data_manager.h" #include "components/autofill/core/browser/test_region_data_loader.h" +#include "components/payments/core/payments_profile_comparator.h" #include "components/prefs/pref_service.h" +#include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/payments/payment_request_test_util.h" #include "ios/chrome/browser/payments/test_payment_request.h" #import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h" @@ -36,6 +38,15 @@ MOCK_METHOD1(UpdateProfile, void(const autofill::AutofillProfile&)); }; +class MockPaymentsProfileComparator + : public payments::PaymentsProfileComparator { + public: + MockPaymentsProfileComparator(const std::string& app_locale, + const payments::PaymentOptionsProvider& options) + : PaymentsProfileComparator(app_locale, options) {} + MOCK_METHOD1(Invalidate, void(const autofill::AutofillProfile&)); +}; + class MockTestPaymentRequest : public TestPaymentRequest { public: MockTestPaymentRequest(web::PaymentRequest web_payment_request, @@ -94,6 +105,12 @@ payment_request_ = base::MakeUnique<MockTestPaymentRequest>( payment_request_test_util::CreateTestWebPaymentRequest(), &personal_data_manager_); + + profile_comparator_ = base::MakeUnique<MockPaymentsProfileComparator>( + GetApplicationContext()->GetApplicationLocale(), + *payment_request_.get()); + payment_request_->SetProfileComparator(profile_comparator_.get()); + test_region_data_loader_.set_synchronous_callback(true); payment_request_->SetRegionDataLoader(&test_region_data_loader_); } @@ -102,10 +119,11 @@ personal_data_manager_.SetTestingPrefService(nullptr); } - MockTestPersonalDataManager personal_data_manager_; std::unique_ptr<PrefService> pref_service_; - std::unique_ptr<MockTestPaymentRequest> payment_request_; + MockTestPersonalDataManager personal_data_manager_; autofill::TestRegionDataLoader test_region_data_loader_; + std::unique_ptr<MockPaymentsProfileComparator> profile_comparator_; + std::unique_ptr<MockTestPaymentRequest> payment_request_; }; // Tests that invoking start and stop on the coordinator presents and dismisses @@ -176,6 +194,8 @@ .Times(1); // No autofill profile should get updated in the PersonalDataManager. EXPECT_CALL(personal_data_manager_, UpdateProfile(_)).Times(0); + // No autofill profile should get invalidated in PaymentsProfileComparator. + EXPECT_CALL(*profile_comparator_, Invalidate(_)).Times(0); // Call the controller delegate method. PaymentRequestEditViewController* view_controller = @@ -231,6 +251,11 @@ UpdateProfile(ProfileMatches("John Doe", "CA" /* Canada */, "Quebec", "16502111111"))) .Times(1); + // Expect an autofill profile to be invalidated in PaymentsProfileComparator. + EXPECT_CALL(*profile_comparator_, + Invalidate(ProfileMatches("John Doe", "CA" /* Canada */, "Quebec", + "16502111111"))) + .Times(1); // Call the controller delegate method. PaymentRequestEditViewController* view_controller =
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_egtest.mm b/ios/chrome/browser/ui/reading_list/reading_list_egtest.mm index a5bffdb8..135d8c4 100644 --- a/ios/chrome/browser/ui/reading_list/reading_list_egtest.mm +++ b/ios/chrome/browser/ui/reading_list/reading_list_egtest.mm
@@ -336,10 +336,9 @@ } // Test Omnibox URL + GURL distillableURL = web::test::HttpServer::MakeUrl(kDistillableURL); [[EarlGrey selectElementWithMatcher:chrome_test_util::OmniboxText( - web::test::HttpServer::MakeUrl( - kDistillableURL) - .GetContent())] + distillableURL.GetContent())] assertWithMatcher:grey_notNil()]; // Test presence of online page @@ -382,6 +381,7 @@ - (void)tearDown { web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance(); + server.SetSuspend(NO); if (!server.IsRunning()) { server.StartOrDie(); base::test::ios::SpinRunLoopWithMinDelay( @@ -450,8 +450,7 @@ // Tests that sharing a web page to the Reading List results in a snackbar // appearing, and that the Reading List entry is present in the Reading List. // Loads online version by tapping on entry. -// TODO(crbug.com/724555): Re-enable the test. -- (void)DISABLED_testSavingToReadingListAndLoadNormal { +- (void)testSavingToReadingListAndLoadNormal { auto network_change_disabler = base::MakeUnique<net::NetworkChangeNotifier::DisableForTest>(); auto wifi_network = base::MakeUnique<WifiNetworkChangeNotifier>(); @@ -478,7 +477,7 @@ AssertIsShowingDistillablePage(true); // Stop server to reload offline. - server.Stop(); + server.SetSuspend(YES); base::test::ios::SpinRunLoopWithMinDelay( base::TimeDelta::FromSecondsD(kServerOperationDelay)); @@ -490,8 +489,7 @@ // Tests that sharing a web page to the Reading List results in a snackbar // appearing, and that the Reading List entry is present in the Reading List. // Loads offline version by tapping on entry without web server. -// TODO(crbug.com/724555): Re-enable the test. -- (void)DISABLED_testSavingToReadingListAndLoadNoNetwork { +- (void)testSavingToReadingListAndLoadNoNetwork { auto network_change_disabler = base::MakeUnique<net::NetworkChangeNotifier::DisableForTest>(); auto wifi_network = base::MakeUnique<WifiNetworkChangeNotifier>(); @@ -514,7 +512,7 @@ WaitForDistillation(); // Stop server to generate error. - server.Stop(); + server.SetSuspend(YES); base::test::ios::SpinRunLoopWithMinDelay( base::TimeDelta::FromSecondsD(kServerOperationDelay)); // Long press the entry, and open it offline. @@ -522,7 +520,7 @@ AssertIsShowingDistillablePage(false); // Start server to reload online error. - server.StartOrDie(); + server.SetSuspend(NO); base::test::ios::SpinRunLoopWithMinDelay( base::TimeDelta::FromSecondsD(kServerOperationDelay)); web::test::SetUpSimpleHttpServer(ResponsesForDistillationServer());
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm index fd0ad6f..397b5d2 100644 --- a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm +++ b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm
@@ -11,6 +11,7 @@ #import "ios/chrome/browser/infobars/infobar_container_view.h" #import "ios/chrome/browser/reading_list/reading_list_model_factory.h" #import "ios/chrome/browser/snapshots/snapshot_cache.h" +#import "ios/chrome/browser/snapshots/snapshot_cache_factory.h" #import "ios/chrome/browser/tabs/tab.h" #import "ios/chrome/browser/tabs/tab_model_observer.h" #import "ios/chrome/browser/ui/reading_list/reading_list_side_swipe_provider.h" @@ -88,6 +89,9 @@ ReadingListSideSwipeProvider* readingListSideSwipeProvider_; __weak id<SideSwipeContentProvider> currentContentProvider_; + + // Browser state passed to the initialiser. + ios::ChromeBrowserState* browserState_; } // Load grey snapshots for the next |kIpadGreySwipeTabCount| tabs in @@ -127,6 +131,8 @@ readingListSideSwipeProvider_ = [[ReadingListSideSwipeProvider alloc] initWithReadingList:ReadingListModelFactory::GetForBrowserState( browserState)]; + + browserState_ = browserState; } return self; } @@ -252,14 +258,15 @@ } index = index + dx; } - [[SnapshotCache sharedInstance] createGreyCache:sessionIDs]; + [SnapshotCacheFactory::GetForBrowserState(browserState_) + createGreyCache:sessionIDs]; for (Tab* tab in model_) { tab.useGreyImageCache = YES; } } - (void)deleteGreyCache { - [[SnapshotCache sharedInstance] removeGreyCache]; + [SnapshotCacheFactory::GetForBrowserState(browserState_) removeGreyCache]; for (Tab* tab in model_) { tab.useGreyImageCache = NO; }
diff --git a/ios/chrome/browser/ui/webui/flags_ui.cc b/ios/chrome/browser/ui/webui/flags_ui.cc index f9246df..67968c2 100644 --- a/ios/chrome/browser/ui/webui/flags_ui.cc +++ b/ios/chrome/browser/ui/webui/flags_ui.cc
@@ -5,6 +5,7 @@ #include "ios/chrome/browser/ui/webui/flags_ui.h" #include <string> +#include <utility> #include "base/bind.h" #include "base/bind_helpers.h" @@ -155,12 +156,12 @@ base::DictionaryValue results; - std::unique_ptr<base::ListValue> supported_features(new base::ListValue); - std::unique_ptr<base::ListValue> unsupported_features(new base::ListValue); + auto supported_features = base::MakeUnique<base::ListValue>(); + auto unsupported_features = base::MakeUnique<base::ListValue>(); GetFlagFeatureEntries(flags_storage_.get(), access_, supported_features.get(), unsupported_features.get()); - results.Set(flags_ui::kSupportedFeatures, supported_features.release()); - results.Set(flags_ui::kUnsupportedFeatures, unsupported_features.release()); + results.Set(flags_ui::kSupportedFeatures, std::move(supported_features)); + results.Set(flags_ui::kUnsupportedFeatures, std::move(unsupported_features)); // Cannot restart the browser on iOS. results.SetBoolean(flags_ui::kNeedsRestart, false); results.SetBoolean(flags_ui::kShowOwnerWarning,
diff --git a/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc b/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc index 164e4c11..b4d5214 100644 --- a/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc +++ b/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc
@@ -4,6 +4,7 @@ #include "ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.h" +#include <utility> #include <vector> #include "base/logging.h" @@ -125,7 +126,7 @@ it.Inc()) { type_list->AppendString(ModelTypeToString(it.Get())); } - event_details.Set(syncer::sync_ui_util::kTypes, type_list.release()); + event_details.Set(syncer::sync_ui_util::kTypes, std::move(type_list)); web_ui()->CallJavascriptFunction( syncer::sync_ui_util::kDispatchEvent, base::Value(syncer::sync_ui_util::kOnReceivedListOfTypes), event_details); @@ -192,7 +193,7 @@ std::unique_ptr<base::DictionaryValue> details(new base::DictionaryValue()); details->SetString(syncer::sync_ui_util::kModelType, ModelTypeToString(type)); details->SetString(syncer::sync_ui_util::kCounterType, counter_type); - details->Set(syncer::sync_ui_util::kCounters, value.release()); + details->Set(syncer::sync_ui_util::kCounters, std::move(value)); web_ui()->CallJavascriptFunction( syncer::sync_ui_util::kDispatchEvent, base::Value(syncer::sync_ui_util::kOnCountersUpdated), *details);
diff --git a/ios/clean/chrome/browser/ui/tab/tab_container_view_controller.mm b/ios/clean/chrome/browser/ui/tab/tab_container_view_controller.mm index 16a4e506..082079e 100644 --- a/ios/clean/chrome/browser/ui/tab/tab_container_view_controller.mm +++ b/ios/clean/chrome/browser/ui/tab/tab_container_view_controller.mm
@@ -90,6 +90,7 @@ [self.tabStripView.heightAnchor constraintEqualToConstant:0.0f]; self.toolbarHeightConstraint = [self.toolbarView.heightAnchor constraintEqualToConstant:0.0f]; + self.toolbarHeightConstraint.priority = UILayoutPriorityDefaultHigh; if (self.toolbarViewController) { self.toolbarHeightConstraint.constant = kToolbarHeight; }
diff --git a/ios/web/public/test/http_server/http_server.h b/ios/web/public/test/http_server/http_server.h index c565eb6..e843e3ff 100644 --- a/ios/web/public/test/http_server/http_server.h +++ b/ios/web/public/test/http_server/http_server.h
@@ -77,6 +77,8 @@ // Stops the server and prevents it from accepting new requests. // Must be called from the main thread. void Stop(); + // Sets the server to hang and return no response. + void SetSuspend(bool suspended); // Returns true if the server is running. // Must be called from the main thread. bool IsRunning() const; @@ -136,6 +138,8 @@ // ResponseProvider response back to EmbeddedTestServer response. std::unique_ptr<net::test_server::HttpResponse> GetResponse( const net::test_server::HttpRequest& request); + // Status tracking if the server is hung. + bool isSuspended; DISALLOW_COPY_AND_ASSIGN(HttpServer); };
diff --git a/ios/web/public/test/http_server/http_server.mm b/ios/web/public/test/http_server/http_server.mm index 6c6219f..8e30abc 100644 --- a/ios/web/public/test/http_server/http_server.mm +++ b/ios/web/public/test/http_server/http_server.mm
@@ -70,6 +70,9 @@ std::unique_ptr<net::test_server::HttpResponse> HttpServer::GetResponse( const net::test_server::HttpRequest& request) { + if (isSuspended) { + return base::MakeUnique<net::test_server::HungResponse>(); + } ResponseProvider::Request provider_request = ResponseProviderRequestFromEmbeddedTestServerRequest(request); ResponseProvider* response_provider = @@ -109,6 +112,7 @@ if (embedded_test_server_->Start()) { SetPort((NSUInteger)embedded_test_server_->port()); } + isSuspended = NO; CHECK(IsRunning()); } @@ -122,6 +126,10 @@ SetPort(0); } +void HttpServer::SetSuspend(bool suspended) { + isSuspended = suspended; +} + bool HttpServer::IsRunning() const { DCHECK([NSThread isMainThread]); if (embedded_test_server_ == nullptr) {
diff --git a/ipc/ipc_message_unittest.cc b/ipc/ipc_message_unittest.cc index 8e59e00..4e5bf07 100644 --- a/ipc/ipc_message_unittest.cc +++ b/ipc/ipc_message_unittest.cc
@@ -10,6 +10,7 @@ #include <limits> #include <memory> +#include <utility> #include "base/memory/ptr_util.h" #include "base/strings/utf_string_conversions.h" @@ -89,21 +90,21 @@ TEST(IPCMessageTest, DictionaryValue) { base::DictionaryValue input; input.Set("null", base::MakeUnique<base::Value>()); - input.Set("bool", new base::Value(true)); - input.Set("int", new base::Value(42)); + input.SetBoolean("bool", true); + input.SetInteger("int", 42); input.SetIntegerWithoutPathExpansion("int.with.dot", 43); - std::unique_ptr<base::DictionaryValue> subdict(new base::DictionaryValue()); - subdict->Set("str", new base::Value("forty two")); - subdict->Set("bool", new base::Value(false)); + auto subdict = base::MakeUnique<base::DictionaryValue>(); + subdict->SetString("str", "forty two"); + subdict->SetBoolean("bool", false); - std::unique_ptr<base::ListValue> sublist(new base::ListValue()); + auto sublist = base::MakeUnique<base::ListValue>(); sublist->AppendDouble(42.42); sublist->AppendString("forty"); sublist->AppendString("two"); - subdict->Set("list", sublist.release()); + subdict->Set("list", std::move(sublist)); - input.Set("dict", subdict.release()); + input.Set("dict", std::move(subdict)); IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL); IPC::WriteParam(&msg, input);
diff --git a/media/base/android/media_drm_bridge.cc b/media/base/android/media_drm_bridge.cc index 066ec2c..fded96a 100644 --- a/media/base/android/media_drm_bridge.cc +++ b/media/base/android/media_drm_bridge.cc
@@ -554,10 +554,15 @@ player_tracker_.UnregisterPlayer(registration_id); } -bool MediaDrmBridge::IsProtectedSurfaceRequired() { +bool MediaDrmBridge::IsSecureCodecRequired() { + DCHECK(IsAvailable()); + // For Widevine, this depends on the security level. + // TODO(xhwang): This is specific to Widevine. See http://crbug.com/459400. + // To fix it, we could call MediaCrypto.requiresSecureDecoderComponent(). + // See http://crbug.com/727918. if (std::equal(scheme_uuid_.begin(), scheme_uuid_.end(), kWidevineUuid)) - return IsSecureDecoderRequired(GetSecurityLevel()); + return SECURITY_LEVEL_1 == GetSecurityLevel(); // For other key systems, assume true. return true; @@ -616,7 +621,7 @@ base::ResetAndReturn(&media_crypto_ready_cb_) .Run(CreateJavaObjectPtr(j_media_crypto_->obj()), - IsProtectedSurfaceRequired()); + IsSecureCodecRequired()); } //------------------------------------------------------------------------------ @@ -866,20 +871,13 @@ if (!media_crypto_ready_cb_.is_null()) { base::ResetAndReturn(&media_crypto_ready_cb_) - .Run(CreateJavaObjectPtr(nullptr), IsProtectedSurfaceRequired()); + .Run(CreateJavaObjectPtr(nullptr), IsSecureCodecRequired()); } // Rejects all pending promises. cdm_promise_adapter_.Clear(); } -// TODO(ddorwin): This is specific to Widevine. http://crbug.com/459400 -// static -bool MediaDrmBridge::IsSecureDecoderRequired(SecurityLevel security_level) { - DCHECK(IsAvailable()); - return SECURITY_LEVEL_1 == security_level; -} - MediaDrmBridge::SecurityLevel MediaDrmBridge::GetSecurityLevel() { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef<jstring> j_security_level = @@ -904,7 +902,7 @@ // the callback. base::ResetAndReturn(&media_crypto_ready_cb_) .Run(CreateJavaObjectPtr(j_media_crypto_->obj()), - IsProtectedSurfaceRequired()); + IsSecureCodecRequired()); } void MediaDrmBridge::SendProvisioningRequest(const std::string& default_url,
diff --git a/media/base/android/media_drm_bridge.h b/media/base/android/media_drm_bridge.h index 6dc26a45..782183b 100644 --- a/media/base/android/media_drm_bridge.h +++ b/media/base/android/media_drm_bridge.h
@@ -63,9 +63,10 @@ // Notification called when MediaCrypto object is ready. // Parameters: // |media_crypto| - global reference to MediaCrypto object - // |needs_protected_surface| - true if protected surface is required. - using MediaCryptoReadyCB = base::Callback<void(JavaObjectPtr media_crypto, - bool needs_protected_surface)>; + // |requires_secure_video_codec| - true if secure video decoder is required + using MediaCryptoReadyCB = + base::Callback<void(JavaObjectPtr media_crypto, + bool requires_secure_video_codec)>; // Checks whether MediaDRM is available and usable, including for decoding. // All other static methods check IsAvailable() or equivalent internally. @@ -145,9 +146,9 @@ const base::Closure& cdm_unset_cb) override; void UnregisterPlayer(int registration_id) override; - // Helper function to determine whether a protected surface is needed for the + // Helper function to determine whether a secure decoder is required for the // video playback. - bool IsProtectedSurfaceRequired(); + bool IsSecureCodecRequired(); // Reset the device credentials. void ResetDeviceCredentials(const ResetCredentialsCB& callback); @@ -272,8 +273,6 @@ ~MediaDrmBridge() override; - static bool IsSecureDecoderRequired(SecurityLevel security_level); - // Get the security level of the media. SecurityLevel GetSecurityLevel();
diff --git a/media/base/android/media_drm_bridge_cdm_context.h b/media/base/android/media_drm_bridge_cdm_context.h index c11cc413..ac81b09 100644 --- a/media/base/android/media_drm_bridge_cdm_context.h +++ b/media/base/android/media_drm_bridge_cdm_context.h
@@ -39,9 +39,10 @@ // Notification called when MediaCrypto object is ready. // Parameters: // |media_crypto| - reference to MediaCrypto object - // |needs_protected_surface| - true if protected surface is required - using MediaCryptoReadyCB = base::Callback<void(JavaObjectPtr media_crypto, - bool needs_protected_surface)>; + // |requires_secure_video_codec| - true if secure video decoder is required + using MediaCryptoReadyCB = + base::Callback<void(JavaObjectPtr media_crypto, + bool requires_secure_video_codec)>; // The |media_drm_bridge| owns |this| and is guaranteed to outlive |this|. explicit MediaDrmBridgeCdmContext(MediaDrmBridge* media_drm_bridge);
diff --git a/media/blink/key_system_config_selector.cc b/media/blink/key_system_config_selector.cc index 9acbb149..0730df547 100644 --- a/media/blink/key_system_config_selector.cc +++ b/media/blink/key_system_config_selector.cc
@@ -159,7 +159,6 @@ base::Callback<void(const blink::WebString&)> not_supported_cb; bool was_permission_requested = false; bool is_permission_granted = false; - bool are_secure_codecs_supported = false; }; // Accumulates configuration rules to determine if a feature (additional @@ -850,7 +849,6 @@ const blink::WebVector<blink::WebMediaKeySystemConfiguration>& candidate_configurations, const blink::WebSecurityOrigin& security_origin, - bool are_secure_codecs_supported, base::Callback<void(const blink::WebMediaKeySystemConfiguration&, const CdmConfig&)> succeeded_cb, base::Callback<void(const blink::WebString&)> not_supported_cb) { @@ -877,7 +875,6 @@ request->key_system = key_system_ascii; request->candidate_configurations = candidate_configurations; request->security_origin = security_origin; - request->are_secure_codecs_supported = are_secure_codecs_supported; request->succeeded_cb = succeeded_cb; request->not_supported_cb = not_supported_cb; SelectConfigInternal(std::move(request)); @@ -902,10 +899,6 @@ // and return a new MediaKeySystemAccess object.] ConfigState config_state(request->was_permission_requested, request->is_permission_granted); - DCHECK(config_state.IsRuleSupported( - EmeConfigRule::HW_SECURE_CODECS_NOT_ALLOWED)); - if (!request->are_secure_codecs_supported) - config_state.AddRule(EmeConfigRule::HW_SECURE_CODECS_NOT_ALLOWED); blink::WebMediaKeySystemConfiguration accumulated_configuration; CdmConfig cdm_config; ConfigurationSupport support = GetSupportedConfiguration(
diff --git a/media/blink/key_system_config_selector.h b/media/blink/key_system_config_selector.h index 548e719..00a8b254 100644 --- a/media/blink/key_system_config_selector.h +++ b/media/blink/key_system_config_selector.h
@@ -45,7 +45,6 @@ const blink::WebVector<blink::WebMediaKeySystemConfiguration>& candidate_configurations, const blink::WebSecurityOrigin& security_origin, - bool are_secure_codecs_supported, base::Callback<void(const blink::WebMediaKeySystemConfiguration&, const CdmConfig&)> succeeded_cb, base::Callback<void(const blink::WebString&)> not_supported_cb);
diff --git a/media/blink/key_system_config_selector_unittest.cc b/media/blink/key_system_config_selector_unittest.cc index 7c3c08d86..a16ae82 100644 --- a/media/blink/key_system_config_selector_unittest.cc +++ b/media/blink/key_system_config_selector_unittest.cc
@@ -224,7 +224,7 @@ succeeded_count_ = 0; not_supported_count_ = 0; KeySystemConfigSelector(key_systems_.get(), media_permission_.get()) - .SelectConfig(key_system_, configs_, security_origin_, false, + .SelectConfig(key_system_, configs_, security_origin_, base::Bind(&KeySystemConfigSelectorTest::OnSucceeded, base::Unretained(this)), base::Bind(&KeySystemConfigSelectorTest::OnNotSupported,
diff --git a/media/blink/webencryptedmediaclient_impl.cc b/media/blink/webencryptedmediaclient_impl.cc index 75eb03e..645270c 100644 --- a/media/blink/webencryptedmediaclient_impl.cc +++ b/media/blink/webencryptedmediaclient_impl.cc
@@ -86,12 +86,10 @@ }; WebEncryptedMediaClientImpl::WebEncryptedMediaClientImpl( - base::Callback<bool(void)> are_secure_codecs_supported_cb, CdmFactory* cdm_factory, MediaPermission* media_permission, MediaLog* media_log) - : are_secure_codecs_supported_cb_(are_secure_codecs_supported_cb), - cdm_factory_(cdm_factory), + : cdm_factory_(cdm_factory), key_system_config_selector_(KeySystems::GetInstance(), media_permission), media_log_(media_log), weak_factory_(this) { @@ -112,7 +110,7 @@ key_system_config_selector_.SelectConfig( request.KeySystem(), request.SupportedConfigurations(), - request.GetSecurityOrigin(), are_secure_codecs_supported_cb_.Run(), + request.GetSecurityOrigin(), base::Bind(&WebEncryptedMediaClientImpl::OnRequestSucceeded, weak_factory_.GetWeakPtr(), request), base::Bind(&WebEncryptedMediaClientImpl::OnRequestNotSupported,
diff --git a/media/blink/webencryptedmediaclient_impl.h b/media/blink/webencryptedmediaclient_impl.h index 68dbb32..35e48ecf 100644 --- a/media/blink/webencryptedmediaclient_impl.h +++ b/media/blink/webencryptedmediaclient_impl.h
@@ -35,7 +35,6 @@ : public blink::WebEncryptedMediaClient { public: WebEncryptedMediaClientImpl( - base::Callback<bool(void)> are_secure_codecs_supported_cb, CdmFactory* cdm_factory, MediaPermission* media_permission, MediaLog* media_log); @@ -78,7 +77,6 @@ // Reporter singletons. std::unordered_map<std::string, std::unique_ptr<Reporter>> reporters_; - base::Callback<bool(void)> are_secure_codecs_supported_cb_; CdmFactory* cdm_factory_; KeySystemConfigSelector key_system_config_selector_; MediaLog* media_log_;
diff --git a/media/cast/logging/stats_event_subscriber.cc b/media/cast/logging/stats_event_subscriber.cc index 3742b5e..f3e25f6f 100644 --- a/media/cast/logging/stats_event_subscriber.cc +++ b/media/cast/logging/stats_event_subscriber.cc
@@ -10,6 +10,7 @@ #include "base/format_macros.h" #include "base/logging.h" +#include "base/memory/ptr_util.h" #include "base/strings/stringprintf.h" #include "base/values.h" @@ -227,9 +228,9 @@ std::unique_ptr<base::DictionaryValue> StatsEventSubscriber::GetStats() const { StatsMap stats_map; GetStatsInternal(&stats_map); - std::unique_ptr<base::DictionaryValue> ret(new base::DictionaryValue); + auto ret = base::MakeUnique<base::DictionaryValue>(); - std::unique_ptr<base::DictionaryValue> stats(new base::DictionaryValue); + auto stats = base::MakeUnique<base::DictionaryValue>(); for (StatsMap::const_iterator it = stats_map.begin(); it != stats_map.end(); ++it) { // Round to 3 digits after the decimal point. @@ -241,12 +242,11 @@ for (HistogramMap::const_iterator it = histograms_.begin(); it != histograms_.end(); ++it) { - stats->Set(CastStatToString(it->first), - it->second->GetHistogram().release()); + stats->Set(CastStatToString(it->first), it->second->GetHistogram()); } ret->Set(event_media_type_ == AUDIO_EVENT ? "audio" : "video", - stats.release()); + std::move(stats)); return ret; }
diff --git a/media/cdm/json_web_key.cc b/media/cdm/json_web_key.cc index fb70224..7431b8d4 100644 --- a/media/cdm/json_web_key.cc +++ b/media/cdm/json_web_key.cc
@@ -7,6 +7,7 @@ #include <stddef.h> #include <memory> +#include <utility> #include "base/base64url.h" #include "base/json/json_reader.h" @@ -14,6 +15,7 @@ #include "base/json/string_escape.h" #include "base/logging.h" #include "base/macros.h" +#include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" @@ -61,7 +63,7 @@ base::StringPiece(reinterpret_cast<const char*>(key_id), key_id_length), base::Base64UrlEncodePolicy::OMIT_PADDING, &key_id_string); - std::unique_ptr<base::DictionaryValue> jwk(new base::DictionaryValue()); + auto jwk = base::MakeUnique<base::DictionaryValue>(); jwk->SetString(kKeyTypeTag, kKeyTypeOct); jwk->SetString(kKeyTag, key_string); jwk->SetString(kKeyIdTag, key_id_string); @@ -73,10 +75,10 @@ const uint8_t* key_id, int key_id_length) { // Create the JWK, and wrap it into a JWK Set. - std::unique_ptr<base::ListValue> list(new base::ListValue()); + auto list = base::MakeUnique<base::ListValue>(); list->Append(CreateJSONDictionary(key, key_length, key_id, key_id_length)); base::DictionaryValue jwk_set; - jwk_set.Set(kKeysTag, list.release()); + jwk_set.Set(kKeysTag, std::move(list)); // Finally serialize |jwk_set| into a string and return it. std::string serialized_jwk; @@ -87,7 +89,7 @@ std::string GenerateJWKSet(const KeyIdAndKeyPairs& keys, CdmSessionType session_type) { - std::unique_ptr<base::ListValue> list(new base::ListValue()); + auto list = base::MakeUnique<base::ListValue>(); for (const auto& key_pair : keys) { list->Append(CreateJSONDictionary( reinterpret_cast<const uint8_t*>(key_pair.second.data()), @@ -97,7 +99,7 @@ } base::DictionaryValue jwk_set; - jwk_set.Set(kKeysTag, list.release()); + jwk_set.Set(kKeysTag, std::move(list)); switch (session_type) { case CdmSessionType::TEMPORARY_SESSION: jwk_set.SetString(kTypeTag, kTemporarySession); @@ -302,8 +304,8 @@ CdmSessionType session_type, std::vector<uint8_t>* license) { // Create the license request. - std::unique_ptr<base::DictionaryValue> request(new base::DictionaryValue()); - std::unique_ptr<base::ListValue> list(new base::ListValue()); + auto request = base::MakeUnique<base::DictionaryValue>(); + auto list = base::MakeUnique<base::ListValue>(); for (const auto& key_id : key_ids) { std::string key_id_string; base::Base64UrlEncode( @@ -313,7 +315,7 @@ list->AppendString(key_id_string); } - request->Set(kKeyIdsTag, list.release()); + request->Set(kKeyIdsTag, std::move(list)); switch (session_type) { case CdmSessionType::TEMPORARY_SESSION: @@ -340,9 +342,8 @@ void CreateKeyIdsInitData(const KeyIdList& key_ids, std::vector<uint8_t>* init_data) { // Create the init_data. - std::unique_ptr<base::DictionaryValue> dictionary( - new base::DictionaryValue()); - std::unique_ptr<base::ListValue> list(new base::ListValue()); + auto dictionary = base::MakeUnique<base::DictionaryValue>(); + auto list = base::MakeUnique<base::ListValue>(); for (const auto& key_id : key_ids) { std::string key_id_string; base::Base64UrlEncode( @@ -352,7 +353,7 @@ list->AppendString(key_id_string); } - dictionary->Set(kKeyIdsTag, list.release()); + dictionary->Set(kKeyIdsTag, std::move(list)); // Serialize the dictionary as a string. std::string json;
diff --git a/media/filters/android/media_codec_audio_decoder.cc b/media/filters/android/media_codec_audio_decoder.cc index 8a7d48fc4..efdf040f 100644 --- a/media/filters/android/media_codec_audio_decoder.cc +++ b/media/filters/android/media_codec_audio_decoder.cc
@@ -245,7 +245,7 @@ void MediaCodecAudioDecoder::OnMediaCryptoReady( const InitCB& init_cb, MediaDrmBridgeCdmContext::JavaObjectPtr media_crypto, - bool /*needs_protected_surface*/) { + bool /*requires_secure_video_codec*/) { DVLOG(1) << __func__; DCHECK(state_ == STATE_WAITING_FOR_MEDIA_CRYPTO);
diff --git a/media/filters/android/media_codec_audio_decoder.h b/media/filters/android/media_codec_audio_decoder.h index 271ca6e..ac95c57a 100644 --- a/media/filters/android/media_codec_audio_decoder.h +++ b/media/filters/android/media_codec_audio_decoder.h
@@ -130,7 +130,7 @@ void OnMediaCryptoReady( const InitCB& init_cb, media::MediaDrmBridgeCdmContext::JavaObjectPtr media_crypto, - bool needs_protected_surface); + bool requires_secure_video_codec); // Callback called when a new key is available. void OnKeyAdded();
diff --git a/media/gpu/android/media_codec_video_decoder.cc b/media/gpu/android/media_codec_video_decoder.cc index 7dd4a38e..0e926fdf 100644 --- a/media/gpu/android/media_codec_video_decoder.cc +++ b/media/gpu/android/media_codec_video_decoder.cc
@@ -134,7 +134,11 @@ decoder_config_ = config; codec_config_ = new CodecConfig(); codec_config_->codec = config.codec(); - codec_config_->needs_protected_surface = config.is_encrypted(); + + // TODO(watk): Set |requires_secure_codec| correctly using + // MediaDrmBridgeCdmContext::MediaCryptoReadyCB. + codec_config_->requires_secure_codec = config.is_encrypted(); + codec_config_->initial_expected_coded_size = config.coded_size(); // TODO(watk): Parse config.extra_data().
diff --git a/media/gpu/android_video_decode_accelerator.cc b/media/gpu/android_video_decode_accelerator.cc index d09a028d9..dd1061f4 100644 --- a/media/gpu/android_video_decode_accelerator.cc +++ b/media/gpu/android_video_decode_accelerator.cc
@@ -1442,7 +1442,7 @@ void AndroidVideoDecodeAccelerator::OnMediaCryptoReady( MediaDrmBridgeCdmContext::JavaObjectPtr media_crypto, - bool needs_protected_surface) { + bool requires_secure_video_codec) { DVLOG(1) << __func__; if (!media_crypto) { @@ -1461,7 +1461,7 @@ DCHECK(deferred_initialization_pending_); codec_config_->media_crypto = std::move(media_crypto); - codec_config_->needs_protected_surface = needs_protected_surface; + codec_config_->requires_secure_codec = requires_secure_video_codec; // After receiving |media_crypto_| we can start with surface creation. StartSurfaceChooser();
diff --git a/media/gpu/android_video_decode_accelerator.h b/media/gpu/android_video_decode_accelerator.h index 9340999..f1e6c15 100644 --- a/media/gpu/android_video_decode_accelerator.h +++ b/media/gpu/android_video_decode_accelerator.h
@@ -203,7 +203,7 @@ // Called after the CDM obtains a MediaCrypto object. void OnMediaCryptoReady(MediaDrmBridgeCdmContext::JavaObjectPtr media_crypto, - bool needs_protected_surface); + bool requires_secure_video_codec); // Called when a new key is added to the CDM. void OnKeyAdded();
diff --git a/media/gpu/avda_codec_allocator.cc b/media/gpu/avda_codec_allocator.cc index c8cc5a78..46f66e7 100644 --- a/media/gpu/avda_codec_allocator.cc +++ b/media/gpu/avda_codec_allocator.cc
@@ -43,12 +43,16 @@ jobject media_crypto = codec_config->media_crypto ? codec_config->media_crypto->obj() : nullptr; - // |needs_protected_surface| implies that it's an encrypted stream. - DCHECK(!codec_config->needs_protected_surface || media_crypto); + // |requires_secure_codec| implies that it's an encrypted stream. + DCHECK(!codec_config->requires_secure_codec || media_crypto); + // TODO(xhwang): Rename |is_secure| to |requires_secure_codec| in + // MediaCodec classes. Also, |requires_secure_codec| and + // |require_software_codec| contradicts each other. We should clarify and fix + // this. std::unique_ptr<MediaCodecBridge> codec( MediaCodecBridgeImpl::CreateVideoDecoder( - codec_config->codec, codec_config->needs_protected_surface, + codec_config->codec, codec_config->requires_secure_codec, codec_config->initial_expected_coded_size, codec_config->surface_bundle->GetJavaSurface().obj(), media_crypto, codec_config->csd0, codec_config->csd1, true,
diff --git a/media/gpu/avda_codec_allocator.h b/media/gpu/avda_codec_allocator.h index 86c7642..d90d294 100644 --- a/media/gpu/avda_codec_allocator.h +++ b/media/gpu/avda_codec_allocator.h
@@ -58,8 +58,8 @@ // The MediaCrypto that MediaCodec is configured with for an encrypted stream. MediaDrmBridgeCdmContext::JavaObjectPtr media_crypto; - // Whether the encryption scheme requires us to use a protected surface. - bool needs_protected_surface = false; + // Whether MediaCrypto requires a secure codec. + bool requires_secure_codec = false; // The initial coded size. The actual size might change at any time, so this // is only a hint.
diff --git a/mojo/public/cpp/bindings/binding.h b/mojo/public/cpp/bindings/binding.h index 4844920..1616f33 100644 --- a/mojo/public/cpp/bindings/binding.h +++ b/mojo/public/cpp/bindings/binding.h
@@ -199,6 +199,25 @@ // transferred to the caller. MessagePipeHandle handle() const { return internal_state_.handle(); } + // Reports the currently dispatching Message as bad and closes this binding. + // Note that this is only legal to call from directly within the stack frame + // of a message dispatch. If you need to do asynchronous work before you can + // determine the legitimacy of a message, use GetBadMessageCallback() and + // retain its result until you're ready to invoke or discard it. + void ReportBadMessage(const std::string& error) { + GetBadMessageCallback().Run(error); + } + + // Acquires a callback which may be run to report the currently dispatching + // Message as bad and close this binding. Note that this is only legal to call + // from directly within the stack frame of a message dispatch, but the + // returned callback may be called exactly once any time thereafter to report + // the message as bad. This may only be called once per message. The returned + // callback must be called on the Binding's own thread. + ReportBadMessageCallback GetBadMessageCallback() { + return internal_state_.GetBadMessageCallback(); + } + // Sends a no-op message on the underlying message pipe and runs the current // message loop until its response is received. This can be used in tests to // verify that no message was sent on a message pipe in response to some
diff --git a/mojo/public/cpp/bindings/binding_set.h b/mojo/public/cpp/bindings/binding_set.h index 2f7745b4..50fc0ae7 100644 --- a/mojo/public/cpp/bindings/binding_set.h +++ b/mojo/public/cpp/bindings/binding_set.h
@@ -71,7 +71,7 @@ using RequestType = typename Traits::RequestType; using ImplPointerType = typename Traits::ImplPointerType; - BindingSetBase() {} + BindingSetBase() : weak_ptr_factory_(this) {} void set_connection_error_handler(const base::Closure& error_handler) { error_handler_ = error_handler; @@ -138,11 +138,51 @@ return *dispatch_context_; } + // Implementations may call this when processing a dispatched message or + // error. During the extent of message or error dispatch, this will return the + // BindingId of the specific binding which received the message or error. + BindingId dispatch_binding() const { + DCHECK(dispatch_context_); + return dispatch_binding_; + } + + // Reports the currently dispatching Message as bad and closes the binding the + // message was received from. Note that this is only legal to call from + // directly within the stack frame of a message dispatch. If you need to do + // asynchronous work before you can determine the legitimacy of a message, use + // GetBadMessageCallback() and retain its result until you're ready to invoke + // or discard it. + void ReportBadMessage(const std::string& error) { + GetBadMessageCallback().Run(error); + } + + // Acquires a callback which may be run to report the currently dispatching + // Message as bad and close the binding the message was received from. Note + // that this is only legal to call from directly within the stack frame of a + // message dispatch, but the returned callback may be called exactly once any + // time thereafter as long as the binding set itself hasn't been destroyed yet + // to report the message as bad. This may only be called once per message. + // The returned callback must be called on the BindingSet's own thread. + ReportBadMessageCallback GetBadMessageCallback() { + DCHECK(dispatch_context_); + return base::Bind( + [](const ReportBadMessageCallback& error_callback, + base::WeakPtr<BindingSetBase> binding_set, BindingId binding_id, + const std::string& error) { + error_callback.Run(error); + if (binding_set) + binding_set->RemoveBinding(binding_id); + }, + mojo::GetBadMessageCallback(), weak_ptr_factory_.GetWeakPtr(), + dispatch_binding()); + } + void FlushForTesting() { DCHECK(!is_flushing_); is_flushing_ = true; for (auto& binding : bindings_) - binding.second->FlushForTesting(); + if (binding.second) + binding.second->FlushForTesting(); is_flushing_ = false; // Clean up any bindings that were destroyed. for (auto it = bindings_.begin(); it != bindings_.end();) { @@ -167,8 +207,7 @@ binding_set_(binding_set), binding_id_(binding_id), context_(std::move(context)) { - if (ContextTraits::SupportsContext()) - binding_.AddFilter(base::MakeUnique<DispatchFilter>(this)); + binding_.AddFilter(base::MakeUnique<DispatchFilter>(this)); binding_.set_connection_error_with_reason_handler( base::Bind(&Entry::OnConnectionError, base::Unretained(this))); } @@ -194,14 +233,12 @@ }; void WillDispatch() { - DCHECK(ContextTraits::SupportsContext()); - binding_set_->SetDispatchContext(&context_); + binding_set_->SetDispatchContext(&context_, binding_id_); } void OnConnectionError(uint32_t custom_reason, const std::string& description) { - if (ContextTraits::SupportsContext()) - WillDispatch(); + WillDispatch(); binding_set_->OnConnectionError(binding_id_, custom_reason, description); } @@ -213,9 +250,9 @@ DISALLOW_COPY_AND_ASSIGN(Entry); }; - void SetDispatchContext(const Context* context) { - DCHECK(ContextTraits::SupportsContext()); + void SetDispatchContext(const Context* context, BindingId binding_id) { dispatch_context_ = context; + dispatch_binding_ = binding_id; if (!pre_dispatch_handler_.is_null()) pre_dispatch_handler_.Run(*context); } @@ -255,6 +292,8 @@ std::map<BindingId, std::unique_ptr<Entry>> bindings_; bool is_flushing_ = false; const Context* dispatch_context_ = nullptr; + BindingId dispatch_binding_; + base::WeakPtrFactory<BindingSetBase> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(BindingSetBase); };
diff --git a/mojo/public/cpp/bindings/lib/binding_state.cc b/mojo/public/cpp/bindings/lib/binding_state.cc index b34cb47..2b2d3153 100644 --- a/mojo/public/cpp/bindings/lib/binding_state.cc +++ b/mojo/public/cpp/bindings/lib/binding_state.cc
@@ -7,7 +7,7 @@ namespace mojo { namespace internal { -BindingStateBase::BindingStateBase() = default; +BindingStateBase::BindingStateBase() : weak_ptr_factory_(this) {} BindingStateBase::~BindingStateBase() = default; @@ -24,6 +24,7 @@ DCHECK(router_); router_->PauseIncomingMethodCallProcessing(); } + void BindingStateBase::ResumeIncomingMethodCallProcessing() { DCHECK(router_); router_->ResumeIncomingMethodCallProcessing(); @@ -51,6 +52,17 @@ Close(); } +ReportBadMessageCallback BindingStateBase::GetBadMessageCallback() { + return base::Bind( + [](const ReportBadMessageCallback& inner_callback, + base::WeakPtr<BindingStateBase> binding, const std::string& error) { + inner_callback.Run(error); + if (binding) + binding->Close(); + }, + mojo::GetBadMessageCallback(), weak_ptr_factory_.GetWeakPtr()); +} + void BindingStateBase::FlushForTesting() { endpoint_client_->FlushForTesting(); }
diff --git a/mojo/public/cpp/bindings/lib/binding_state.h b/mojo/public/cpp/bindings/lib/binding_state.h index 8389393..a742f2bb 100644 --- a/mojo/public/cpp/bindings/lib/binding_state.h +++ b/mojo/public/cpp/bindings/lib/binding_state.h
@@ -68,6 +68,8 @@ return router_->handle(); } + ReportBadMessageCallback GetBadMessageCallback(); + void FlushForTesting(); void EnableTestingMode(); @@ -84,6 +86,8 @@ scoped_refptr<internal::MultiplexRouter> router_; std::unique_ptr<InterfaceEndpointClient> endpoint_client_; + + base::WeakPtrFactory<BindingStateBase> weak_ptr_factory_; }; template <typename Interface, typename ImplRefTraits>
diff --git a/mojo/public/cpp/bindings/tests/binding_set_unittest.cc b/mojo/public/cpp/bindings/tests/binding_set_unittest.cc index f184878..cfe8258 100644 --- a/mojo/public/cpp/bindings/tests/binding_set_unittest.cc +++ b/mojo/public/cpp/bindings/tests/binding_set_unittest.cc
@@ -7,6 +7,7 @@ #include "base/message_loop/message_loop.h" #include "base/run_loop.h" +#include "mojo/edk/embedder/embedder.h" #include "mojo/public/cpp/bindings/associated_binding_set.h" #include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/strong_binding_set.h" @@ -45,6 +46,45 @@ expected_context); } +template <typename BindingSetType> +void ExpectBindingIdHelper(BindingSetType* binding_set, + BindingId expected_binding_id) { + EXPECT_EQ(expected_binding_id, binding_set->dispatch_binding()); +} + +template <typename BindingSetType> +base::Closure ExpectBindingId(BindingSetType* binding_set, + BindingId expected_binding_id) { + return base::Bind(&ExpectBindingIdHelper<BindingSetType>, binding_set, + expected_binding_id); +} + +template <typename BindingSetType> +void ReportBadMessageHelper(BindingSetType* binding_set, + const std::string& error) { + binding_set->ReportBadMessage(error); +} + +template <typename BindingSetType> +base::Closure ReportBadMessage(BindingSetType* binding_set, + const std::string& error) { + return base::Bind(&ReportBadMessageHelper<BindingSetType>, binding_set, + error); +} + +template <typename BindingSetType> +void SaveBadMessageCallbackHelper(BindingSetType* binding_set, + ReportBadMessageCallback* callback) { + *callback = binding_set->GetBadMessageCallback(); +} + +template <typename BindingSetType> +base::Closure SaveBadMessageCallback(BindingSetType* binding_set, + ReportBadMessageCallback* callback) { + return base::Bind(&SaveBadMessageCallbackHelper<BindingSetType>, binding_set, + callback); +} + base::Closure Sequence(const base::Closure& first, const base::Closure& second) { return base::Bind( @@ -115,6 +155,47 @@ EXPECT_TRUE(bindings.empty()); } +TEST_F(BindingSetTest, BindingSetDispatchBinding) { + PingImpl impl; + + BindingSet<PingService, int> bindings; + PingServicePtr ping_a, ping_b; + BindingId id_a = bindings.AddBinding(&impl, MakeRequest(&ping_a), 1); + BindingId id_b = bindings.AddBinding(&impl, MakeRequest(&ping_b), 2); + + { + impl.set_ping_handler(ExpectBindingId(&bindings, id_a)); + base::RunLoop loop; + ping_a->Ping(loop.QuitClosure()); + loop.Run(); + } + + { + impl.set_ping_handler(ExpectBindingId(&bindings, id_b)); + base::RunLoop loop; + ping_b->Ping(loop.QuitClosure()); + loop.Run(); + } + + { + base::RunLoop loop; + bindings.set_connection_error_handler( + Sequence(ExpectBindingId(&bindings, id_a), loop.QuitClosure())); + ping_a.reset(); + loop.Run(); + } + + { + base::RunLoop loop; + bindings.set_connection_error_handler( + Sequence(ExpectBindingId(&bindings, id_b), loop.QuitClosure())); + ping_b.reset(); + loop.Run(); + } + + EXPECT_TRUE(bindings.empty()); +} + TEST_F(BindingSetTest, BindingSetConnectionErrorWithReason) { PingImpl impl; PingServicePtr ptr; @@ -134,6 +215,121 @@ ptr.ResetWithReason(1024u, "bye"); } +TEST_F(BindingSetTest, BindingSetReportBadMessage) { + PingImpl impl; + + std::string last_received_error; + edk::SetDefaultProcessErrorCallback( + base::Bind([](std::string* out_error, + const std::string& error) { *out_error = error; }, + &last_received_error)); + + BindingSet<PingService, int> bindings; + PingServicePtr ping_a, ping_b; + bindings.AddBinding(&impl, MakeRequest(&ping_a), 1); + bindings.AddBinding(&impl, MakeRequest(&ping_b), 2); + + { + impl.set_ping_handler(ReportBadMessage(&bindings, "message 1")); + base::RunLoop loop; + ping_a.set_connection_error_handler(loop.QuitClosure()); + ping_a->Ping(base::Bind([] {})); + loop.Run(); + EXPECT_EQ("message 1", last_received_error); + } + + { + impl.set_ping_handler(ReportBadMessage(&bindings, "message 2")); + base::RunLoop loop; + ping_b.set_connection_error_handler(loop.QuitClosure()); + ping_b->Ping(base::Bind([] {})); + loop.Run(); + EXPECT_EQ("message 2", last_received_error); + } + + EXPECT_TRUE(bindings.empty()); + + edk::SetDefaultProcessErrorCallback(mojo::edk::ProcessErrorCallback()); +} + +TEST_F(BindingSetTest, BindingSetGetBadMessageCallback) { + PingImpl impl; + + std::string last_received_error; + edk::SetDefaultProcessErrorCallback( + base::Bind([](std::string* out_error, + const std::string& error) { *out_error = error; }, + &last_received_error)); + + BindingSet<PingService, int> bindings; + PingServicePtr ping_a, ping_b; + bindings.AddBinding(&impl, MakeRequest(&ping_a), 1); + bindings.AddBinding(&impl, MakeRequest(&ping_b), 2); + + ReportBadMessageCallback bad_message_callback_a; + ReportBadMessageCallback bad_message_callback_b; + + { + impl.set_ping_handler( + SaveBadMessageCallback(&bindings, &bad_message_callback_a)); + base::RunLoop loop; + ping_a->Ping(loop.QuitClosure()); + loop.Run(); + ping_a.reset(); + } + + { + impl.set_ping_handler( + SaveBadMessageCallback(&bindings, &bad_message_callback_b)); + base::RunLoop loop; + ping_b->Ping(loop.QuitClosure()); + loop.Run(); + } + + bad_message_callback_a.Run("message 1"); + EXPECT_EQ("message 1", last_received_error); + + { + base::RunLoop loop; + ping_b.set_connection_error_handler(loop.QuitClosure()); + bad_message_callback_b.Run("message 2"); + EXPECT_EQ("message 2", last_received_error); + loop.Run(); + } + + EXPECT_TRUE(bindings.empty()); + + edk::SetDefaultProcessErrorCallback(mojo::edk::ProcessErrorCallback()); +} + +TEST_F(BindingSetTest, BindingSetGetBadMessageCallbackOutlivesBindingSet) { + PingImpl impl; + + std::string last_received_error; + edk::SetDefaultProcessErrorCallback( + base::Bind([](std::string* out_error, + const std::string& error) { *out_error = error; }, + &last_received_error)); + + ReportBadMessageCallback bad_message_callback; + { + BindingSet<PingService, int> bindings; + PingServicePtr ping_a; + bindings.AddBinding(&impl, MakeRequest(&ping_a), 1); + + impl.set_ping_handler( + SaveBadMessageCallback(&bindings, &bad_message_callback)); + base::RunLoop loop; + ping_a->Ping(loop.QuitClosure()); + loop.Run(); + } + + bad_message_callback.Run("message 1"); + EXPECT_EQ("message 1", last_received_error); + + edk::SetDefaultProcessErrorCallback(mojo::edk::ProcessErrorCallback()); +} + class PingProviderImpl : public AssociatedPingProvider, public PingService { public: PingProviderImpl() {} @@ -275,6 +471,51 @@ EXPECT_TRUE(bindings.empty()); } +TEST_F(BindingSetTest, MasterInterfaceBindingSetDispatchBinding) { + AssociatedPingProviderPtr provider_a, provider_b; + PingProviderImpl impl; + BindingSet<AssociatedPingProvider, int> bindings; + + BindingId id_a = bindings.AddBinding(&impl, MakeRequest(&provider_a), 1); + BindingId id_b = bindings.AddBinding(&impl, MakeRequest(&provider_b), 2); + + { + PingServiceAssociatedPtr ping; + base::RunLoop loop; + impl.set_new_ping_handler( + Sequence(ExpectBindingId(&bindings, id_a), loop.QuitClosure())); + provider_a->GetPing(MakeRequest(&ping)); + loop.Run(); + } + + { + PingServiceAssociatedPtr ping; + base::RunLoop loop; + impl.set_new_ping_handler( + Sequence(ExpectBindingId(&bindings, id_b), loop.QuitClosure())); + provider_b->GetPing(MakeRequest(&ping)); + loop.Run(); + } + + { + base::RunLoop loop; + bindings.set_connection_error_handler( + Sequence(ExpectBindingId(&bindings, id_a), loop.QuitClosure())); + provider_a.reset(); + loop.Run(); + } + + { + base::RunLoop loop; + bindings.set_connection_error_handler( + Sequence(ExpectBindingId(&bindings, id_b), loop.QuitClosure())); + provider_b.reset(); + loop.Run(); + } + + EXPECT_TRUE(bindings.empty()); +} + TEST_F(BindingSetTest, PreDispatchHandler) { PingImpl impl;
diff --git a/mojo/public/cpp/bindings/tests/binding_unittest.cc b/mojo/public/cpp/bindings/tests/binding_unittest.cc index ce3fd055..e5d53f4 100644 --- a/mojo/public/cpp/bindings/tests/binding_unittest.cc +++ b/mojo/public/cpp/bindings/tests/binding_unittest.cc
@@ -15,6 +15,7 @@ #include "base/memory/weak_ptr.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" +#include "mojo/edk/embedder/embedder.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/public/interfaces/bindings/tests/ping_service.mojom.h" #include "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom.h" @@ -478,6 +479,69 @@ } } +TEST_F(BindingTest, ReportBadMessage) { + bool called = false; + test::PingServicePtr ptr; + auto request = MakeRequest(&ptr); + base::RunLoop run_loop; + ptr.set_connection_error_handler( + SetFlagAndRunClosure(&called, run_loop.QuitClosure())); + PingServiceImpl impl; + Binding<test::PingService> binding(&impl, std::move(request)); + impl.set_ping_handler(base::Bind( + [](Binding<test::PingService>* binding) { + binding->ReportBadMessage("received bad message"); + }, + &binding)); + + std::string received_error; + edk::SetDefaultProcessErrorCallback( + base::Bind([](std::string* out_error, + const std::string& error) { *out_error = error; }, + &received_error)); + + ptr->Ping(base::Bind([] {})); + EXPECT_FALSE(called); + run_loop.Run(); + EXPECT_TRUE(called); + EXPECT_EQ("received bad message", received_error); + + edk::SetDefaultProcessErrorCallback(mojo::edk::ProcessErrorCallback()); +} + +TEST_F(BindingTest, GetBadMessageCallback) { + test::PingServicePtr ptr; + auto request = MakeRequest(&ptr); + base::RunLoop run_loop; + PingServiceImpl impl; + ReportBadMessageCallback bad_message_callback; + + std::string received_error; + edk::SetDefaultProcessErrorCallback( + base::Bind([](std::string* out_error, + const std::string& error) { *out_error = error; }, + &received_error)); + + { + Binding<test::PingService> binding(&impl, std::move(request)); + impl.set_ping_handler(base::Bind( + [](Binding<test::PingService>* binding, + ReportBadMessageCallback* out_callback) { + *out_callback = binding->GetBadMessageCallback(); + }, + &binding, &bad_message_callback)); + ptr->Ping(run_loop.QuitClosure()); + run_loop.Run(); + EXPECT_TRUE(received_error.empty()); + EXPECT_TRUE(bad_message_callback); + } + + bad_message_callback.Run("delayed bad message"); + EXPECT_EQ("delayed bad message", received_error); + + edk::SetDefaultProcessErrorCallback(mojo::edk::ProcessErrorCallback()); +} + // StrongBindingTest ----------------------------------------------------------- using StrongBindingTest = BindingTestBase;
diff --git a/net/http/bidirectional_stream.cc b/net/http/bidirectional_stream.cc index 6bd7933..0cd8705 100644 --- a/net/http/bidirectional_stream.cc +++ b/net/http/bidirectional_stream.cc
@@ -313,18 +313,18 @@ void BidirectionalStream::OnStreamReady(const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - HttpStream* stream) { + std::unique_ptr<HttpStream> stream) { NOTREACHED(); } void BidirectionalStream::OnBidirectionalStreamImplReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - BidirectionalStreamImpl* stream) { + std::unique_ptr<BidirectionalStreamImpl> stream) { DCHECK(!stream_impl_); stream_request_.reset(); - stream_impl_.reset(stream); + stream_impl_ = std::move(stream); stream_impl_->Start(request_info_.get(), net_log_, send_request_headers_automatically_, this, std::move(timer_)); @@ -333,7 +333,7 @@ void BidirectionalStream::OnWebSocketHandshakeStreamReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) { + std::unique_ptr<WebSocketHandshakeStreamBase> stream) { NOTREACHED(); }
diff --git a/net/http/bidirectional_stream.h b/net/http/bidirectional_stream.h index aaab6e4e..e72e7fe4 100644 --- a/net/http/bidirectional_stream.h +++ b/net/http/bidirectional_stream.h
@@ -182,15 +182,15 @@ // HttpStreamRequest::Delegate implementation: void OnStreamReady(const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - HttpStream* stream) override; + std::unique_ptr<HttpStream> stream) override; void OnBidirectionalStreamImplReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - BidirectionalStreamImpl* stream_impl) override; + std::unique_ptr<BidirectionalStreamImpl> stream) override; void OnWebSocketHandshakeStreamReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) override; + std::unique_ptr<WebSocketHandshakeStreamBase> stream) override; void OnStreamFailed(int status, const SSLConfig& used_ssl_config) override; void OnCertificateError(int status, const SSLConfig& used_ssl_config,
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index 1ac9bb2..f06df4d 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc
@@ -32,6 +32,7 @@ #include "net/base/upload_data_stream.h" #include "net/base/url_util.h" #include "net/filter/filter_source_stream.h" +#include "net/http/bidirectional_stream_impl.h" #include "net/http/http_auth.h" #include "net/http/http_auth_handler.h" #include "net/http/http_auth_handler_factory.h" @@ -448,7 +449,7 @@ void HttpNetworkTransaction::OnStreamReady(const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - HttpStream* stream) { + std::unique_ptr<HttpStream> stream) { DCHECK_EQ(STATE_CREATE_STREAM_COMPLETE, next_state_); DCHECK(stream_request_.get()); @@ -456,7 +457,7 @@ total_received_bytes_ += stream_->GetTotalReceivedBytes(); total_sent_bytes_ += stream_->GetTotalSentBytes(); } - stream_.reset(stream); + stream_ = std::move(stream); server_ssl_config_ = used_ssl_config; proxy_info_ = used_proxy_info; response_.was_alpn_negotiated = stream_request_->was_alpn_negotiated(); @@ -476,15 +477,15 @@ void HttpNetworkTransaction::OnBidirectionalStreamImplReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - BidirectionalStreamImpl* stream) { + std::unique_ptr<BidirectionalStreamImpl> stream) { NOTREACHED(); } void HttpNetworkTransaction::OnWebSocketHandshakeStreamReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) { - OnStreamReady(used_ssl_config, used_proxy_info, stream); + std::unique_ptr<WebSocketHandshakeStreamBase> stream) { + OnStreamReady(used_ssl_config, used_proxy_info, std::move(stream)); } void HttpNetworkTransaction::OnStreamFailed(int result,
diff --git a/net/http/http_network_transaction.h b/net/http/http_network_transaction.h index e819963..4cfdef24 100644 --- a/net/http/http_network_transaction.h +++ b/net/http/http_network_transaction.h
@@ -95,14 +95,15 @@ // HttpStreamRequest::Delegate methods: void OnStreamReady(const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - HttpStream* stream) override; - void OnBidirectionalStreamImplReady(const SSLConfig& used_ssl_config, - const ProxyInfo& used_proxy_info, - BidirectionalStreamImpl* stream) override; + std::unique_ptr<HttpStream> stream) override; + void OnBidirectionalStreamImplReady( + const SSLConfig& used_ssl_config, + const ProxyInfo& used_proxy_info, + std::unique_ptr<BidirectionalStreamImpl> stream) override; void OnWebSocketHandshakeStreamReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) override; + std::unique_ptr<WebSocketHandshakeStreamBase> stream) override; void OnStreamFailed(int status, const SSLConfig& used_ssl_config) override; void OnCertificateError(int status, const SSLConfig& used_ssl_config,
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index e267038..b5eff6c9 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc
@@ -15147,11 +15147,11 @@ // Create a new FakeStream and pass it to the request's // delegate. Returns a weak pointer to the FakeStream. base::WeakPtr<FakeStream> FinishStreamRequest() { - FakeStream* fake_stream = new FakeStream(priority_); + auto fake_stream = base::MakeUnique<FakeStream>(priority_); // Do this before calling OnStreamReady() as OnStreamReady() may // immediately delete |fake_stream|. base::WeakPtr<FakeStream> weak_stream = fake_stream->AsWeakPtr(); - delegate_->OnStreamReady(SSLConfig(), ProxyInfo(), fake_stream); + delegate_->OnStreamReady(SSLConfig(), ProxyInfo(), std::move(fake_stream)); return weak_stream; }
diff --git a/net/http/http_proxy_client_socket_pool.cc b/net/http/http_proxy_client_socket_pool.cc index 7375920d..b267302 100644 --- a/net/http/http_proxy_client_socket_pool.cc +++ b/net/http/http_proxy_client_socket_pool.cc
@@ -8,6 +8,7 @@ #include <utility> #include "base/compiler_specific.h" +#include "base/memory/ptr_util.h" #include "base/time/time.h" #include "base/values.h" #include "net/base/load_flags.h" @@ -291,7 +292,7 @@ bool include_nested_pools) const { std::unique_ptr<base::DictionaryValue> dict(base_.GetInfoAsValue(name, type)); if (include_nested_pools) { - base::ListValue* list = new base::ListValue(); + auto list = base::MakeUnique<base::ListValue>(); if (transport_pool_) { list->Append(transport_pool_->GetInfoAsValue("transport_socket_pool", "transport_socket_pool", @@ -302,7 +303,7 @@ "ssl_socket_pool", true)); } - dict->Set("nested_pools", list); + dict->Set("nested_pools", std::move(list)); } return dict; }
diff --git a/net/http/http_stream_factory.h b/net/http/http_stream_factory.h index 2c8826a..61122d1 100644 --- a/net/http/http_stream_factory.h +++ b/net/http/http_stream_factory.h
@@ -72,10 +72,9 @@ // during stream processing. // |used_proxy_info| indicates the actual ProxyInfo used for this stream, // since the HttpStreamRequest performs the proxy resolution. - virtual void OnStreamReady( - const SSLConfig& used_ssl_config, - const ProxyInfo& used_proxy_info, - HttpStream* stream) = 0; + virtual void OnStreamReady(const SSLConfig& used_ssl_config, + const ProxyInfo& used_proxy_info, + std::unique_ptr<HttpStream> stream) = 0; // This is the success case for RequestWebSocketHandshakeStream. // |stream| is now owned by the delegate. @@ -87,12 +86,12 @@ virtual void OnWebSocketHandshakeStreamReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) = 0; + std::unique_ptr<WebSocketHandshakeStreamBase> stream) = 0; virtual void OnBidirectionalStreamImplReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - BidirectionalStreamImpl* stream) = 0; + std::unique_ptr<BidirectionalStreamImpl> stream) = 0; // This is the failure to create a stream case. // |used_ssl_config| indicates the actual SSL configuration used for this
diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc index 9a666490..c97829f 100644 --- a/net/http/http_stream_factory_impl_job.cc +++ b/net/http/http_stream_factory_impl_job.cc
@@ -442,7 +442,7 @@ MaybeCopyConnectionAttemptsFromSocketOrHandle(); delegate_->OnWebSocketHandshakeStreamReady( - this, server_ssl_config_, proxy_info_, websocket_stream_.release()); + this, server_ssl_config_, proxy_info_, std::move(websocket_stream_)); // |this| may be deleted after this call. }
diff --git a/net/http/http_stream_factory_impl_job.h b/net/http/http_stream_factory_impl_job.h index 2b4b0d0..91c3def5 100644 --- a/net/http/http_stream_factory_impl_job.h +++ b/net/http/http_stream_factory_impl_job.h
@@ -64,7 +64,7 @@ Job* job, const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) = 0; + std::unique_ptr<WebSocketHandshakeStreamBase> stream) = 0; // Invoked when |job| fails to create a stream. virtual void OnStreamFailed(Job* job,
diff --git a/net/http/http_stream_factory_impl_job_controller.cc b/net/http/http_stream_factory_impl_job_controller.cc index f108518..a4575e09 100644 --- a/net/http/http_stream_factory_impl_job_controller.cc +++ b/net/http/http_stream_factory_impl_job_controller.cc
@@ -233,7 +233,8 @@ DCHECK(!factory_->for_websockets_); DCHECK_EQ(HttpStreamRequest::HTTP_STREAM, request_->stream_type()); OnJobSucceeded(job); - request_->OnStreamReady(used_ssl_config, job->proxy_info(), stream.release()); + request_->OnStreamReady(used_ssl_config, job->proxy_info(), + std::move(stream)); } void HttpStreamFactoryImpl::JobController::OnBidirectionalStreamImplReady( @@ -261,14 +262,14 @@ OnJobSucceeded(job); request_->OnBidirectionalStreamImplReady(used_ssl_config, used_proxy_info, - stream.release()); + std::move(stream)); } void HttpStreamFactoryImpl::JobController::OnWebSocketHandshakeStreamReady( Job* job, const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) { + std::unique_ptr<WebSocketHandshakeStreamBase> stream) { DCHECK(job); MarkRequestComplete(job->was_alpn_negotiated(), job->negotiated_protocol(), job->using_spdy()); @@ -281,7 +282,7 @@ OnJobSucceeded(job); request_->OnWebSocketHandshakeStreamReady(used_ssl_config, used_proxy_info, - stream); + std::move(stream)); } void HttpStreamFactoryImpl::JobController::OnStreamFailed( @@ -474,12 +475,12 @@ DCHECK(bidirectional_stream_impl); delegate_->OnBidirectionalStreamImplReady( used_ssl_config, used_proxy_info, - bidirectional_stream_impl.release()); + std::move(bidirectional_stream_impl)); } else { std::unique_ptr<HttpStream> stream = job->ReleaseStream(); DCHECK(stream); delegate_->OnStreamReady(used_ssl_config, used_proxy_info, - stream.release()); + std::move(stream)); } }
diff --git a/net/http/http_stream_factory_impl_job_controller.h b/net/http/http_stream_factory_impl_job_controller.h index ce0494c7..a5ccf46 100644 --- a/net/http/http_stream_factory_impl_job_controller.h +++ b/net/http/http_stream_factory_impl_job_controller.h
@@ -85,7 +85,7 @@ Job* job, const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) override; + std::unique_ptr<WebSocketHandshakeStreamBase> stream) override; // Invoked when |job| fails to create a stream. void OnStreamFailed(Job* job,
diff --git a/net/http/http_stream_factory_impl_job_controller_unittest.cc b/net/http/http_stream_factory_impl_job_controller_unittest.cc index 1f7f730..cf7e526a5 100644 --- a/net/http/http_stream_factory_impl_job_controller_unittest.cc +++ b/net/http/http_stream_factory_impl_job_controller_unittest.cc
@@ -68,12 +68,6 @@ ERR_MSG_TOO_BIG, }; -void DeleteHttpStreamPointer(const SSLConfig& used_ssl_config, - const ProxyInfo& used_proxy_info, - HttpStream* stream) { - delete stream; -} - class FailingProxyResolverFactory : public ProxyResolverFactory { public: FailingProxyResolverFactory() : ProxyResolverFactory(false) {} @@ -505,10 +499,9 @@ for (size_t i = 0; i < 2; ++i) { ProxyInfo used_proxy_info; - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)) .Times(1) - .WillOnce(DoAll(::testing::SaveArg<1>(&used_proxy_info), - Invoke(DeleteHttpStreamPointer))); + .WillOnce(::testing::SaveArg<1>(&used_proxy_info)); std::unique_ptr<HttpStreamRequest> request = CreateJobController(request_info); @@ -608,8 +601,7 @@ "PROXY goodfallbackproxy:80"); resolver.pending_jobs()[0]->CompleteNow(OK); - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); base::RunLoop().RunUntilIdle(); request.reset(); EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); @@ -658,8 +650,7 @@ // notify Request. EXPECT_TRUE(job_controller_->main_job()); - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); base::RunLoop().RunUntilIdle(); } @@ -757,8 +748,7 @@ // Main job succeeds, starts serving Request and it should report status // to Request. The alternative job will mark the main job complete and gets // orphaned. - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); // JobController shouldn't report the status of second job as request // is already successfully served. EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); @@ -797,8 +787,7 @@ EXPECT_TRUE(JobControllerPeer::main_job_is_blocked(job_controller_)); // |alternative_job| succeeds and should report status to |request_delegate_|. - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); base::RunLoop().RunUntilIdle(); @@ -885,8 +874,7 @@ // main job should not be blocked because alt job returned ERR_IO_PENDING. EXPECT_FALSE(JobControllerPeer::main_job_is_blocked(job_controller_)); - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); // Complete main job now. base::RunLoop().RunUntilIdle(); @@ -945,8 +933,7 @@ HttpStream* http_stream = new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, http_stream)); job_factory_.alternative_job()->SetStream(http_stream); job_controller_->OnStreamReady(job_factory_.alternative_job(), SSLConfig()); @@ -987,8 +974,7 @@ // |alternative_job| fails but should not report status to Request. EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); // |main_job| succeeds and should report status to Request. - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); base::RunLoop().RunUntilIdle(); @@ -1031,8 +1017,7 @@ // |alternative_job| fails but should not report status to Request. EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); // |main_job| succeeds and should report status to Request. - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); base::RunLoop().RunUntilIdle(); // Verify that the alternate protocol is not marked as broken. @@ -1084,8 +1069,7 @@ new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); job_factory_.alternative_job()->SetStream(http_stream); - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, http_stream)); job_controller_->OnStreamReady(job_factory_.alternative_job(), SSLConfig()); request_.reset(); EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); @@ -1119,8 +1103,7 @@ EXPECT_TRUE(job_controller_->alternative_job()); // Alt job is stalled and main job should complete successfully. - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); base::RunLoop().RunUntilIdle(); } @@ -1473,8 +1456,7 @@ EXPECT_TRUE(job_controller_->main_job()); EXPECT_TRUE(job_controller_->alternative_job()); - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); base::RunLoop().RunUntilIdle(); @@ -1520,8 +1502,7 @@ // Main job succeeds, starts serving Request and it should report status // to Request. The alternative job will mark the main job complete and gets // orphaned. - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); base::RunLoop().RunUntilIdle(); @@ -1651,8 +1632,7 @@ } // |main_job| succeeds and should report status to Request. - EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) - .WillOnce(Invoke(DeleteHttpStreamPointer)); + EXPECT_CALL(request_delegate_, OnStreamReadyImpl(_, _, _)); base::RunLoop().RunUntilIdle(); }
diff --git a/net/http/http_stream_factory_impl_request.cc b/net/http/http_stream_factory_impl_request.cc index 3ec3213..2ce5206 100644 --- a/net/http/http_stream_factory_impl_request.cc +++ b/net/http/http_stream_factory_impl_request.cc
@@ -59,27 +59,27 @@ void HttpStreamFactoryImpl::Request::OnStreamReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - HttpStream* stream) { + std::unique_ptr<HttpStream> stream) { DCHECK(completed_); - delegate_->OnStreamReady(used_ssl_config, used_proxy_info, stream); + delegate_->OnStreamReady(used_ssl_config, used_proxy_info, std::move(stream)); } void HttpStreamFactoryImpl::Request::OnBidirectionalStreamImplReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - BidirectionalStreamImpl* stream_job) { + std::unique_ptr<BidirectionalStreamImpl> stream) { DCHECK(completed_); delegate_->OnBidirectionalStreamImplReady(used_ssl_config, used_proxy_info, - stream_job); + std::move(stream)); } void HttpStreamFactoryImpl::Request::OnWebSocketHandshakeStreamReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) { + std::unique_ptr<WebSocketHandshakeStreamBase> stream) { DCHECK(completed_); - delegate_->OnWebSocketHandshakeStreamReady( - used_ssl_config, used_proxy_info, stream); + delegate_->OnWebSocketHandshakeStreamReady(used_ssl_config, used_proxy_info, + std::move(stream)); } void HttpStreamFactoryImpl::Request::OnStreamFailed(
diff --git a/net/http/http_stream_factory_impl_request.h b/net/http/http_stream_factory_impl_request.h index 82b1a51..ad248e9 100644 --- a/net/http/http_stream_factory_impl_request.h +++ b/net/http/http_stream_factory_impl_request.h
@@ -94,14 +94,16 @@ // actually subclass HttpStreamRequest::Delegate. void OnStreamReady(const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - HttpStream* stream); - void OnBidirectionalStreamImplReady(const SSLConfig& used_ssl_config, - const ProxyInfo& used_proxy_info, - BidirectionalStreamImpl* stream); + std::unique_ptr<HttpStream> stream); + void OnBidirectionalStreamImplReady( + const SSLConfig& used_ssl_config, + const ProxyInfo& used_proxy_info, + std::unique_ptr<BidirectionalStreamImpl> stream); - void OnWebSocketHandshakeStreamReady(const SSLConfig& used_ssl_config, - const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream); + void OnWebSocketHandshakeStreamReady( + const SSLConfig& used_ssl_config, + const ProxyInfo& used_proxy_info, + std::unique_ptr<WebSocketHandshakeStreamBase> stream); void OnStreamFailed(int status, const SSLConfig& used_ssl_config); void OnCertificateError(int status, const SSLConfig& used_ssl_config,
diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc index 947a294a..90186ff 100644 --- a/net/http/http_stream_factory_impl_unittest.cc +++ b/net/http/http_stream_factory_impl_unittest.cc
@@ -191,11 +191,11 @@ void OnStreamReady(const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - HttpStream* stream) override { + std::unique_ptr<HttpStream> stream) override { stream_done_ = true; if (waiting_for_stream_) loop_.Quit(); - stream_.reset(stream); + stream_ = std::move(stream); used_ssl_config_ = used_ssl_config; used_proxy_info_ = used_proxy_info; } @@ -203,11 +203,11 @@ void OnWebSocketHandshakeStreamReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream) override { + std::unique_ptr<WebSocketHandshakeStreamBase> stream) override { stream_done_ = true; if (waiting_for_stream_) loop_.Quit(); - websocket_stream_.reset(stream); + websocket_stream_ = std::move(stream); used_ssl_config_ = used_ssl_config; used_proxy_info_ = used_proxy_info; } @@ -215,11 +215,11 @@ void OnBidirectionalStreamImplReady( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, - BidirectionalStreamImpl* stream) override { + std::unique_ptr<BidirectionalStreamImpl> stream) override { stream_done_ = true; if (waiting_for_stream_) loop_.Quit(); - bidirectional_stream_impl_.reset(stream); + bidirectional_stream_impl_ = std::move(stream); used_ssl_config_ = used_ssl_config; used_proxy_info_ = used_proxy_info; }
diff --git a/net/http/http_stream_factory_test_util.h b/net/http/http_stream_factory_test_util.h index 1ee93e7..461ee2b5 100644 --- a/net/http/http_stream_factory_test_util.h +++ b/net/http/http_stream_factory_test_util.h
@@ -47,20 +47,29 @@ ~MockHttpStreamRequestDelegate() override; - MOCK_METHOD3(OnStreamReady, + // std::unique_ptr is not copyable and therefore cannot be mocked. + MOCK_METHOD3(OnStreamReadyImpl, void(const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, HttpStream* stream)); - MOCK_METHOD3(OnBidirectionalStreamImplReady, - void(const SSLConfig& used_ssl_config, - const ProxyInfo& used_proxy_info, - BidirectionalStreamImpl* stream)); + void OnStreamReady(const SSLConfig& used_ssl_config, + const ProxyInfo& used_proxy_info, + std::unique_ptr<HttpStream> stream) override { + OnStreamReadyImpl(used_ssl_config, used_proxy_info, stream.get()); + } - MOCK_METHOD3(OnWebSocketHandshakeStreamReady, - void(const SSLConfig& used_ssl_config, - const ProxyInfo& used_proxy_info, - WebSocketHandshakeStreamBase* stream)); + // std::unique_ptr is not copyable and therefore cannot be mocked. + void OnBidirectionalStreamImplReady( + const SSLConfig& used_ssl_config, + const ProxyInfo& used_proxy_info, + std::unique_ptr<BidirectionalStreamImpl> stream) override {} + + // std::unique_ptr is not copyable and therefore cannot be mocked. + void OnWebSocketHandshakeStreamReady( + const SSLConfig& used_ssl_config, + const ProxyInfo& used_proxy_info, + std::unique_ptr<WebSocketHandshakeStreamBase> stream) override {} MOCK_METHOD2(OnStreamFailed, void(int status, const SSLConfig& used_ssl_config));
diff --git a/net/reporting/reporting_delivery_agent.cc b/net/reporting/reporting_delivery_agent.cc index 3d42797f..fb12d03 100644 --- a/net/reporting/reporting_delivery_agent.cc +++ b/net/reporting/reporting_delivery_agent.cc
@@ -41,7 +41,7 @@ report_value->SetInteger("age", (now - report->queued).InMilliseconds()); report_value->SetString("type", report->type); report_value->SetString("url", report->url.spec()); - report_value->Set("report", report->body->DeepCopy()); + report_value->Set("report", base::MakeUnique<base::Value>(*report->body)); reports_value.Append(std::move(report_value)); }
diff --git a/net/spdy/chromium/spdy_session_pool.cc b/net/spdy/chromium/spdy_session_pool.cc index d6f1e091..80511f2 100644 --- a/net/spdy/chromium/spdy_session_pool.cc +++ b/net/spdy/chromium/spdy_session_pool.cc
@@ -424,13 +424,15 @@ if (request->stream_type() == HttpStreamRequest::BIDIRECTIONAL_STREAM) { request->OnBidirectionalStreamImplReady( used_ssl_config, used_proxy_info, - new BidirectionalStreamSpdyImpl(spdy_session, source_dependency)); + base::MakeUnique<BidirectionalStreamSpdyImpl>(spdy_session, + source_dependency)); } else { bool use_relative_url = direct || request->url().SchemeIs(url::kHttpsScheme); - request->OnStreamReady(used_ssl_config, used_proxy_info, - new SpdyHttpStream(spdy_session, use_relative_url, - source_dependency)); + request->OnStreamReady( + used_ssl_config, used_proxy_info, + base::MakeUnique<SpdyHttpStream>(spdy_session, use_relative_url, + source_dependency)); } } // TODO(mbelshe): Alert other valid requests.
diff --git a/net/test/spawned_test_server/base_test_server.cc b/net/test/spawned_test_server/base_test_server.cc index ab46afb..5ad64cd 100644 --- a/net/test/spawned_test_server/base_test_server.cc +++ b/net/test/spawned_test_server/base_test_server.cc
@@ -85,18 +85,18 @@ values->AppendString("aes128gcm"); } -base::Value* GetTLSIntoleranceType( +std::unique_ptr<base::Value> GetTLSIntoleranceType( BaseTestServer::SSLOptions::TLSIntoleranceType type) { switch (type) { case BaseTestServer::SSLOptions::TLS_INTOLERANCE_ALERT: - return new base::Value("alert"); + return base::MakeUnique<base::Value>("alert"); case BaseTestServer::SSLOptions::TLS_INTOLERANCE_CLOSE: - return new base::Value("close"); + return base::MakeUnique<base::Value>("close"); case BaseTestServer::SSLOptions::TLS_INTOLERANCE_RESET: - return new base::Value("reset"); + return base::MakeUnique<base::Value>("reset"); default: NOTREACHED(); - return new base::Value(""); + return base::MakeUnique<base::Value>(""); } }
diff --git a/net/url_request/url_request_quic_perftest.cc b/net/url_request/url_request_quic_perftest.cc index ce545d1..7b881ba 100644 --- a/net/url_request/url_request_quic_perftest.cc +++ b/net/url_request/url_request_quic_perftest.cc
@@ -19,6 +19,7 @@ #include "base/test/trace_event_analyzer.h" #include "base/time/time.h" #include "base/trace_event/memory_dump_manager.h" +#include "base/trace_event/memory_dump_manager_test_utils.h" #include "base/trace_event/memory_dump_request_args.h" #include "base/trace_event/process_memory_dump.h" #include "base/trace_event/trace_buffer.h" @@ -87,37 +88,12 @@ static_cast<double>(value), unit, true); } -void RequestGlobalDumpCallback(base::Closure quit_closure, - uint64_t, - bool success) { - base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure); - ASSERT_TRUE(success); -} - -void ProcessDumpCallbackAdapter( - base::trace_event::GlobalMemoryDumpCallback callback, - uint64_t dump_guid, - bool success, - const base::Optional<base::trace_event::MemoryDumpCallbackResult>&) { - callback.Run(dump_guid, success); -} - -void RequestGlobalMemoryDumpCallback( - const base::trace_event::MemoryDumpRequestArgs& args, - const base::trace_event::GlobalMemoryDumpCallback& callback) { - base::trace_event::ProcessMemoryDumpCallback process_callback = - base::Bind(&ProcessDumpCallbackAdapter, callback); - base::trace_event::MemoryDumpManager::GetInstance()->CreateProcessDump( - args, process_callback); -} - class URLRequestQuicPerfTest : public ::testing::Test { protected: URLRequestQuicPerfTest() : message_loop_(new base::MessageLoopForIO()) { memory_dump_manager_ = base::trace_event::MemoryDumpManager::CreateInstanceForTesting(); - memory_dump_manager_->Initialize( - base::BindRepeating(&RequestGlobalMemoryDumpCallback), + base::trace_event::InitializeMemoryDumpManagerForInProcessTesting( /*is_coordinator_process=*/false); memory_dump_manager_->set_dumper_registrations_ignored_for_testing(false); context_ = base::MakeUnique<TestURLRequestContext>(true); @@ -269,11 +245,17 @@ base::trace_event::TraceLog::RECORDING_MODE); base::RunLoop run_loop; - base::trace_event::MemoryDumpManager::GetInstance()->RequestGlobalDump( - base::trace_event::MemoryDumpType::EXPLICITLY_TRIGGERED, - base::trace_event::MemoryDumpLevelOfDetail::LIGHT, - base::Bind(&RequestGlobalDumpCallback, run_loop.QuitClosure())); - + base::trace_event::MemoryDumpRequestArgs args{ + 1 /* dump_guid*/, base::trace_event::MemoryDumpType::EXPLICITLY_TRIGGERED, + base::trace_event::MemoryDumpLevelOfDetail::LIGHT}; + auto on_memory_dump_done = + [](base::Closure quit_closure, uint64_t dump_guid, bool success, + const base::Optional<base::trace_event::MemoryDumpCallbackResult>&) { + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure); + ASSERT_TRUE(success); + }; + base::trace_event::MemoryDumpManager::GetInstance()->CreateProcessDump( + args, base::Bind(on_memory_dump_done, run_loop.QuitClosure())); run_loop.Run(); base::trace_event::TraceLog::GetInstance()->SetDisabled(); std::unique_ptr<trace_analyzer::TraceAnalyzer> analyzer =
diff --git a/printing/print_settings_conversion.cc b/printing/print_settings_conversion.cc index 7e8840cd..8f9bd3f 100644 --- a/printing/print_settings_conversion.cc +++ b/printing/print_settings_conversion.cc
@@ -12,6 +12,7 @@ #include <string> #include <utility> +#include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" @@ -44,32 +45,32 @@ void SetMarginsToJobSettings(const std::string& json_path, const PageMargins& margins, base::DictionaryValue* job_settings) { - base::DictionaryValue* dict = new base::DictionaryValue; - job_settings->Set(json_path, dict); + auto dict = base::MakeUnique<base::DictionaryValue>(); dict->SetInteger(kSettingMarginTop, margins.top); dict->SetInteger(kSettingMarginBottom, margins.bottom); dict->SetInteger(kSettingMarginLeft, margins.left); dict->SetInteger(kSettingMarginRight, margins.right); + job_settings->Set(json_path, std::move(dict)); } void SetSizeToJobSettings(const std::string& json_path, const gfx::Size& size, base::DictionaryValue* job_settings) { - base::DictionaryValue* dict = new base::DictionaryValue; - job_settings->Set(json_path, dict); + auto dict = base::MakeUnique<base::DictionaryValue>(); dict->SetInteger("width", size.width()); dict->SetInteger("height", size.height()); + job_settings->Set(json_path, std::move(dict)); } void SetRectToJobSettings(const std::string& json_path, const gfx::Rect& rect, base::DictionaryValue* job_settings) { - base::DictionaryValue* dict = new base::DictionaryValue; - job_settings->Set(json_path, dict); + auto dict = base::MakeUnique<base::DictionaryValue>(); dict->SetInteger("x", rect.x()); dict->SetInteger("y", rect.y()); dict->SetInteger("width", rect.width()); dict->SetInteger("height", rect.height()); + job_settings->Set(json_path, std::move(dict)); } } // namespace @@ -229,14 +230,14 @@ settings.selection_only()); job_settings->SetInteger(kSettingMarginsType, settings.margin_type()); if (!settings.ranges().empty()) { - base::ListValue* page_range_array = new base::ListValue; - job_settings->Set(kSettingPageRange, page_range_array); + auto page_range_array = base::MakeUnique<base::ListValue>(); for (size_t i = 0; i < settings.ranges().size(); ++i) { - std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue); + auto dict = base::MakeUnique<base::DictionaryValue>(); dict->SetInteger(kSettingPageRangeFrom, settings.ranges()[i].from + 1); dict->SetInteger(kSettingPageRangeTo, settings.ranges()[i].to + 1); page_range_array->Append(std::move(dict)); } + job_settings->Set(kSettingPageRange, std::move(page_range_array)); } job_settings->SetBoolean(kSettingCollate, settings.collate()); @@ -248,24 +249,26 @@ // Following values are not read form JSON by InitSettings, so do not have // common public constants. So just serialize in "debug" section. - base::DictionaryValue* debug = new base::DictionaryValue; - job_settings->Set("debug", debug); + auto debug = base::MakeUnique<base::DictionaryValue>(); debug->SetInteger("dpi", settings.dpi()); debug->SetInteger("deviceUnitsPerInch", settings.device_units_per_inch()); debug->SetBoolean("support_alpha_blend", settings.should_print_backgrounds()); debug->SetString("media_vendor_id", settings.requested_media().vendor_id); - SetSizeToJobSettings( - "media_size", settings.requested_media().size_microns, debug); + SetSizeToJobSettings("media_size", settings.requested_media().size_microns, + debug.get()); SetMarginsToJobSettings("requested_custom_margins_in_points", settings.requested_custom_margins_in_points(), - debug); + debug.get()); const PageSetup& page_setup = settings.page_setup_device_units(); - SetMarginsToJobSettings( - "effective_margins", page_setup.effective_margins(), debug); - SetSizeToJobSettings("physical_size", page_setup.physical_size(), debug); - SetRectToJobSettings("overlay_area", page_setup.overlay_area(), debug); - SetRectToJobSettings("content_area", page_setup.content_area(), debug); - SetRectToJobSettings("printable_area", page_setup.printable_area(), debug); + SetMarginsToJobSettings("effective_margins", page_setup.effective_margins(), + debug.get()); + SetSizeToJobSettings("physical_size", page_setup.physical_size(), + debug.get()); + SetRectToJobSettings("overlay_area", page_setup.overlay_area(), debug.get()); + SetRectToJobSettings("content_area", page_setup.content_area(), debug.get()); + SetRectToJobSettings("printable_area", page_setup.printable_area(), + debug.get()); + job_settings->Set("debug", std::move(debug)); } } // namespace printing
diff --git a/remoting/client/plugin/chromoting_instance.cc b/remoting/client/plugin/chromoting_instance.cc index ecaa19a3..95c0fe4 100644 --- a/remoting/client/plugin/chromoting_instance.cc +++ b/remoting/client/plugin/chromoting_instance.cc
@@ -360,7 +360,7 @@ } std::unique_ptr<base::DictionaryValue> data(new base::DictionaryValue()); - data->Set("rects", rects_value.release()); + data->Set("rects", std::move(rects_value)); PostLegacyJsonMessage("onDebugRegion", std::move(data)); } @@ -1002,7 +1002,7 @@ std::unique_ptr<base::DictionaryValue> data) { base::DictionaryValue message; message.SetString("method", method); - message.Set("data", data.release()); + message.Set("data", std::move(data)); std::string message_json; base::JSONWriter::Write(message, &message_json);
diff --git a/remoting/host/it2me/it2me_native_messaging_host.cc b/remoting/host/it2me/it2me_native_messaging_host.cc index b824c1b..bee792e0 100644 --- a/remoting/host/it2me/it2me_native_messaging_host.cc +++ b/remoting/host/it2me/it2me_native_messaging_host.cc
@@ -13,6 +13,7 @@ #include "base/callback_helpers.h" #include "base/json/json_reader.h" #include "base/json/json_writer.h" +#include "base/memory/ptr_util.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -133,7 +134,7 @@ // might be a string or a number, so cope with both. const base::Value* id; if (message_dict->Get("id", &id)) - response->Set("id", id->CreateDeepCopy()); + response->Set("id", base::MakeUnique<base::Value>(*id)); std::string type; if (!message_dict->GetString("type", &type)) { @@ -183,9 +184,7 @@ response->SetString("version", STRINGIZE(VERSION)); // This list will be populated when new features are added. - std::unique_ptr<base::ListValue> supported_features_list( - new base::ListValue()); - response->Set("supportedFeatures", supported_features_list.release()); + response->Set("supportedFeatures", base::MakeUnique<base::ListValue>()); SendMessageToClient(std::move(response)); }
diff --git a/remoting/host/security_key/security_key_extension_session.cc b/remoting/host/security_key/security_key_extension_session.cc index 966204d..bdaa7b8 100644 --- a/remoting/host/security_key/security_key_extension_session.cc +++ b/remoting/host/security_key/security_key_extension_session.cc
@@ -4,11 +4,14 @@ #include "remoting/host/security_key/security_key_extension_session.h" +#include <utility> + #include "base/bind.h" #include "base/json/json_reader.h" #include "base/json/json_writer.h" #include "base/logging.h" #include "base/macros.h" +#include "base/memory/ptr_util.h" #include "base/single_thread_task_runner.h" #include "base/values.h" #include "remoting/base/logging.h" @@ -187,11 +190,11 @@ request.SetString(kMessageType, kDataMessage); request.SetInteger(kConnectionId, connection_id); - std::unique_ptr<base::ListValue> bytes(new base::ListValue()); + auto bytes = base::MakeUnique<base::ListValue>(); for (std::string::const_iterator i = data.begin(); i != data.end(); ++i) { bytes->AppendInteger(static_cast<unsigned char>(*i)); } - request.Set(kDataPayload, bytes.release()); + request.Set(kDataPayload, std::move(bytes)); std::string request_json; CHECK(base::JSONWriter::Write(request, &request_json));
diff --git a/remoting/host/setup/me2me_native_messaging_host.cc b/remoting/host/setup/me2me_native_messaging_host.cc index 79db06a3..544945f 100644 --- a/remoting/host/setup/me2me_native_messaging_host.cc +++ b/remoting/host/setup/me2me_native_messaging_host.cc
@@ -96,7 +96,7 @@ void Me2MeNativeMessagingHost::OnMessage(const std::string& message) { DCHECK(task_runner()->BelongsToCurrentThread()); - std::unique_ptr<base::DictionaryValue> response(new base::DictionaryValue()); + auto response = base::MakeUnique<base::DictionaryValue>(); std::unique_ptr<base::Value> message_value = base::JSONReader::Read(message); if (!message_value->IsType(base::Value::Type::DICTIONARY)) { OnError("Received a message that's not a dictionary."); @@ -110,7 +110,7 @@ // might be a string or a number, so cope with both. const base::Value* id; if (message_dict->Get("id", &id)) - response->Set("id", id->CreateDeepCopy()); + response->Set("id", base::MakeUnique<base::Value>(*id)); std::string type; if (!message_dict->GetString("type", &type)) { @@ -181,7 +181,7 @@ new base::ListValue()); supported_features_list->AppendStrings(std::vector<std::string>( kSupportedFeatures, kSupportedFeatures + arraysize(kSupportedFeatures))); - response->Set("supportedFeatures", supported_features_list.release()); + response->Set("supportedFeatures", std::move(supported_features_list)); SendMessageToClient(std::move(response)); } @@ -456,7 +456,7 @@ DCHECK(task_runner()->BelongsToCurrentThread()); if (config) { - response->Set("config", config.release()); + response->Set("config", std::move(config)); } else { response->Set("config", base::MakeUnique<base::Value>()); } @@ -468,7 +468,7 @@ std::unique_ptr<base::ListValue> pairings) { DCHECK(task_runner()->BelongsToCurrentThread()); - response->Set("pairedClients", pairings.release()); + response->Set("pairedClients", std::move(pairings)); SendMessageToClient(std::move(response)); }
diff --git a/rlz/chromeos/lib/rlz_value_store_chromeos.cc b/rlz/chromeos/lib/rlz_value_store_chromeos.cc index 65b5634..1de9f693 100644 --- a/rlz/chromeos/lib/rlz_value_store_chromeos.cc +++ b/rlz/chromeos/lib/rlz_value_store_chromeos.cc
@@ -250,8 +250,8 @@ std::unique_ptr<base::Value> value) { base::ListValue* list_value = NULL; if (!rlz_store_->GetList(list_name, &list_value)) { - list_value = new base::ListValue; - rlz_store_->Set(list_name, list_value); + list_value = + rlz_store_->SetList(list_name, base::MakeUnique<base::ListValue>()); } list_value->AppendIfNotPresent(std::move(value)); return true;
diff --git a/services/preferences/tracked/dictionary_hash_store_contents.cc b/services/preferences/tracked/dictionary_hash_store_contents.cc index 3cef69b0..2901657e 100644 --- a/services/preferences/tracked/dictionary_hash_store_contents.cc +++ b/services/preferences/tracked/dictionary_hash_store_contents.cc
@@ -7,6 +7,7 @@ #include "base/callback.h" #include "base/logging.h" #include "base/macros.h" +#include "base/memory/ptr_util.h" #include "base/values.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/persistent_pref_store.h" @@ -94,7 +95,7 @@ void DictionaryHashStoreContents::ImportEntry(const std::string& path, const base::Value* in_value) { base::DictionaryValue* macs_dict = GetMutableContents(true); - macs_dict->Set(path, in_value->DeepCopy()); + macs_dict->Set(path, base::MakeUnique<base::Value>(*in_value)); } bool DictionaryHashStoreContents::RemoveEntry(const std::string& path) { @@ -126,8 +127,8 @@ base::DictionaryValue* macs_dict = NULL; storage_->GetDictionary(kPreferenceMACs, &macs_dict); if (!macs_dict && create_if_null) { - macs_dict = new base::DictionaryValue; - storage_->Set(kPreferenceMACs, macs_dict); + macs_dict = storage_->SetDictionary( + kPreferenceMACs, base::MakeUnique<base::DictionaryValue>()); } return macs_dict; }
diff --git a/services/preferences/tracked/pref_hash_calculator_unittest.cc b/services/preferences/tracked/pref_hash_calculator_unittest.cc index df3746a..0dc97651 100644 --- a/services/preferences/tracked/pref_hash_calculator_unittest.cc +++ b/services/preferences/tracked/pref_hash_calculator_unittest.cc
@@ -6,6 +6,7 @@ #include <memory> #include <string> +#include <utility> #include "base/macros.h" #include "base/memory/ptr_util.h" @@ -18,7 +19,8 @@ base::Value string_value_2("string value 2"); base::DictionaryValue dictionary_value_1; dictionary_value_1.SetInteger("int value", 1); - dictionary_value_1.Set("nested empty map", new base::DictionaryValue); + dictionary_value_1.Set("nested empty map", + base::MakeUnique<base::DictionaryValue>()); base::DictionaryValue dictionary_value_1_equivalent; dictionary_value_1_equivalent.SetInteger("int value", 1); base::DictionaryValue dictionary_value_2; @@ -77,34 +79,33 @@ static const char kDeviceId[] = "test_device_id1"; auto null_value = base::MakeUnique<base::Value>(); - std::unique_ptr<base::Value> bool_value(new base::Value(false)); - std::unique_ptr<base::Value> int_value(new base::Value(1234567890)); - std::unique_ptr<base::Value> double_value(new base::Value(123.0987654321)); - std::unique_ptr<base::Value> string_value( - new base::Value("testing with special chars:\n<>{}:^^@#$\\/")); + auto bool_value = base::MakeUnique<base::Value>(false); + auto int_value = base::MakeUnique<base::Value>(1234567890); + auto double_value = base::MakeUnique<base::Value>(123.0987654321); + auto string_value = base::MakeUnique<base::Value>( + "testing with special chars:\n<>{}:^^@#$\\/"); // For legacy reasons, we have to support pruning of empty lists/dictionaries // and nested empty ists/dicts in the hash generation algorithm. - std::unique_ptr<base::DictionaryValue> nested_empty_dict( - new base::DictionaryValue); - nested_empty_dict->Set("a", new base::DictionaryValue); - nested_empty_dict->Set("b", new base::ListValue); - std::unique_ptr<base::ListValue> nested_empty_list(new base::ListValue); + auto nested_empty_dict = base::MakeUnique<base::DictionaryValue>(); + nested_empty_dict->Set("a", base::MakeUnique<base::DictionaryValue>()); + nested_empty_dict->Set("b", base::MakeUnique<base::ListValue>()); + auto nested_empty_list = base::MakeUnique<base::ListValue>(); nested_empty_list->Append(base::MakeUnique<base::DictionaryValue>()); nested_empty_list->Append(base::MakeUnique<base::ListValue>()); - nested_empty_list->Append(nested_empty_dict->CreateDeepCopy()); + nested_empty_list->Append(base::MakeUnique<base::Value>(*nested_empty_dict)); // A dictionary with an empty dictionary, an empty list, and nested empty // dictionaries/lists in it. - std::unique_ptr<base::DictionaryValue> dict_value(new base::DictionaryValue); - dict_value->Set("a", new base::Value("foo")); - dict_value->Set("d", new base::ListValue); - dict_value->Set("b", new base::DictionaryValue); - dict_value->Set("c", new base::Value("baz")); - dict_value->Set("e", nested_empty_dict.release()); - dict_value->Set("f", nested_empty_list.release()); + auto dict_value = base::MakeUnique<base::DictionaryValue>(); + dict_value->SetString("a", "foo"); + dict_value->Set("d", base::MakeUnique<base::ListValue>()); + dict_value->Set("b", base::MakeUnique<base::DictionaryValue>()); + dict_value->SetString("c", "baz"); + dict_value->Set("e", std::move(nested_empty_dict)); + dict_value->Set("f", std::move(nested_empty_list)); - std::unique_ptr<base::ListValue> list_value(new base::ListValue); + auto list_value = base::MakeUnique<base::ListValue>(); list_value->AppendBoolean(true); list_value->AppendInteger(100); list_value->AppendDouble(1.0); @@ -166,13 +167,13 @@ // Also test every value type together in the same dictionary. base::DictionaryValue everything; - everything.Set("null", null_value.release()); - everything.Set("bool", bool_value.release()); - everything.Set("int", int_value.release()); - everything.Set("double", double_value.release()); - everything.Set("string", string_value.release()); - everything.Set("list", list_value.release()); - everything.Set("dict", dict_value.release()); + everything.Set("null", std::move(null_value)); + everything.Set("bool", std::move(bool_value)); + everything.Set("int", std::move(int_value)); + everything.Set("double", std::move(double_value)); + everything.Set("string", std::move(string_value)); + everything.Set("list", std::move(list_value)); + everything.Set("dict", std::move(dict_value)); static const char kExpectedEverythingValue[] = "B97D09BE7005693574DCBDD03D8D9E44FB51F4008B73FB56A49A9FA671A1999B"; EXPECT_EQ(PrefHashCalculator::VALID,
diff --git a/services/preferences/tracked/pref_hash_filter.cc b/services/preferences/tracked/pref_hash_filter.cc index 29d6b9a..a0b94df 100644 --- a/services/preferences/tracked/pref_hash_filter.cc +++ b/services/preferences/tracked/pref_hash_filter.cc
@@ -243,9 +243,9 @@ } if (did_reset) { - pref_store_contents->Set(user_prefs::kPreferenceResetTime, - new base::Value(base::Int64ToString( - base::Time::Now().ToInternalValue()))); + pref_store_contents->SetString( + user_prefs::kPreferenceResetTime, + base::Int64ToString(base::Time::Now().ToInternalValue())); FilterUpdate(user_prefs::kPreferenceResetTime); if (reset_on_load_observer_)
diff --git a/services/preferences/tracked/pref_hash_filter_unittest.cc b/services/preferences/tracked/pref_hash_filter_unittest.cc index f46d9a6..b1e0258c 100644 --- a/services/preferences/tracked/pref_hash_filter_unittest.cc +++ b/services/preferences/tracked/pref_hash_filter_unittest.cc
@@ -684,9 +684,7 @@ TEST_P(PrefHashFilterTest, FilterTrackedPrefUpdate) { base::DictionaryValue root_dict; - // Ownership of |string_value| is transfered to |root_dict|. - base::Value* string_value = new base::Value("string value"); - root_dict.Set(kAtomicPref, string_value); + base::Value* string_value = root_dict.SetString(kAtomicPref, "string value"); // No path should be stored on FilterUpdate. pref_hash_filter_->FilterUpdate(kAtomicPref); @@ -742,11 +740,10 @@ TEST_P(PrefHashFilterTest, FilterSplitPrefUpdate) { base::DictionaryValue root_dict; - // Ownership of |dict_value| is transfered to |root_dict|. - base::DictionaryValue* dict_value = new base::DictionaryValue; + base::DictionaryValue* dict_value = root_dict.SetDictionary( + kSplitPref, base::MakeUnique<base::DictionaryValue>()); dict_value->SetString("a", "foo"); dict_value->SetInteger("b", 1234); - root_dict.Set(kSplitPref, dict_value); // No path should be stored on FilterUpdate. pref_hash_filter_->FilterUpdate(kSplitPref); @@ -766,7 +763,7 @@ TEST_P(PrefHashFilterTest, FilterUntrackedPrefUpdate) { base::DictionaryValue root_dict; - root_dict.Set("untracked", new base::Value("some value")); + root_dict.SetString("untracked", "some value"); pref_hash_filter_->FilterUpdate("untracked"); // No paths should be stored on FilterUpdate. @@ -783,18 +780,13 @@ TEST_P(PrefHashFilterTest, MultiplePrefsFilterSerializeData) { base::DictionaryValue root_dict; - // Ownership of the following values is transfered to |root_dict|. - base::Value* int_value1 = new base::Value(1); - base::Value* int_value2 = new base::Value(2); - base::Value* int_value3 = new base::Value(3); - base::Value* int_value4 = new base::Value(4); - base::DictionaryValue* dict_value = new base::DictionaryValue; - dict_value->Set("a", new base::Value(true)); - root_dict.Set(kAtomicPref, int_value1); - root_dict.Set(kAtomicPref2, int_value2); - root_dict.Set(kAtomicPref3, int_value3); - root_dict.Set("untracked", int_value4); - root_dict.Set(kSplitPref, dict_value); + base::Value* int_value1 = root_dict.SetInteger(kAtomicPref, 1); + root_dict.SetInteger(kAtomicPref2, 2); + root_dict.SetInteger(kAtomicPref3, 3); + root_dict.SetInteger("untracked", 4); + base::DictionaryValue* dict_value = root_dict.SetDictionary( + kSplitPref, base::MakeUnique<base::DictionaryValue>()); + dict_value->SetBoolean("a", true); // Only update kAtomicPref, kAtomicPref3, and kSplitPref. pref_hash_filter_->FilterUpdate(kAtomicPref); @@ -803,8 +795,7 @@ ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count()); // Update kAtomicPref3 again, nothing should be stored still. - base::Value* int_value5 = new base::Value(5); - root_dict.Set(kAtomicPref3, int_value5); + base::Value* int_value5 = root_dict.SetInteger(kAtomicPref3, 5); ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count()); // On FilterSerializeData, only kAtomicPref, kAtomicPref3, and kSplitPref @@ -872,14 +863,13 @@ } TEST_P(PrefHashFilterTest, InitialValueUnknown) { - // Ownership of these values is transfered to |pref_store_contents_|. - base::Value* string_value = new base::Value("string value"); - pref_store_contents_->Set(kAtomicPref, string_value); + base::Value* string_value = + pref_store_contents_->SetString(kAtomicPref, "string value"); - base::DictionaryValue* dict_value = new base::DictionaryValue; + base::DictionaryValue* dict_value = pref_store_contents_->SetDictionary( + kSplitPref, base::MakeUnique<base::DictionaryValue>()); dict_value->SetString("a", "foo"); dict_value->SetInteger("b", 1234); - pref_store_contents_->Set(kSplitPref, dict_value); ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL)); @@ -938,14 +928,13 @@ } TEST_P(PrefHashFilterTest, InitialValueTrustedUnknown) { - // Ownership of this value is transfered to |pref_store_contents_|. - base::Value* string_value = new base::Value("test"); - pref_store_contents_->Set(kAtomicPref, string_value); + base::Value* string_value = + pref_store_contents_->SetString(kAtomicPref, "test"); - base::DictionaryValue* dict_value = new base::DictionaryValue; + auto* dict_value = pref_store_contents_->SetDictionary( + kSplitPref, base::MakeUnique<base::DictionaryValue>()); dict_value->SetString("a", "foo"); dict_value->SetInteger("b", 1234); - pref_store_contents_->Set(kSplitPref, dict_value); ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL)); @@ -988,16 +977,14 @@ } TEST_P(PrefHashFilterTest, InitialValueChanged) { - // Ownership of this value is transfered to |pref_store_contents_|. - base::Value* int_value = new base::Value(1234); - pref_store_contents_->Set(kAtomicPref, int_value); + base::Value* int_value = pref_store_contents_->SetInteger(kAtomicPref, 1234); - base::DictionaryValue* dict_value = new base::DictionaryValue; + base::DictionaryValue* dict_value = pref_store_contents_->SetDictionary( + kSplitPref, base::MakeUnique<base::DictionaryValue>()); dict_value->SetString("a", "foo"); dict_value->SetInteger("b", 1234); dict_value->SetInteger("c", 56); dict_value->SetBoolean("d", false); - pref_store_contents_->Set(kSplitPref, dict_value); ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL)); @@ -1098,14 +1085,13 @@ } TEST_P(PrefHashFilterTest, InitialValueUnchangedLegacyId) { - // Ownership of these values is transfered to |pref_store_contents_|. - base::Value* string_value = new base::Value("string value"); - pref_store_contents_->Set(kAtomicPref, string_value); + base::Value* string_value = + pref_store_contents_->SetString(kAtomicPref, "string value"); - base::DictionaryValue* dict_value = new base::DictionaryValue; + base::DictionaryValue* dict_value = pref_store_contents_->SetDictionary( + kSplitPref, base::MakeUnique<base::DictionaryValue>()); dict_value->SetString("a", "foo"); dict_value->SetInteger("b", 1234); - pref_store_contents_->Set(kSplitPref, dict_value); ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL)); @@ -1152,16 +1138,14 @@ } TEST_P(PrefHashFilterTest, DontResetReportOnly) { - // Ownership of these values is transfered to |pref_store_contents_|. - base::Value* int_value1 = new base::Value(1); - base::Value* int_value2 = new base::Value(2); - base::Value* report_only_val = new base::Value(3); - base::DictionaryValue* report_only_split_val = new base::DictionaryValue; + base::Value* int_value1 = pref_store_contents_->SetInteger(kAtomicPref, 1); + base::Value* int_value2 = pref_store_contents_->SetInteger(kAtomicPref2, 2); + base::Value* report_only_val = + pref_store_contents_->SetInteger(kReportOnlyPref, 3); + base::DictionaryValue* report_only_split_val = + pref_store_contents_->SetDictionary( + kReportOnlySplitPref, base::MakeUnique<base::DictionaryValue>()); report_only_split_val->SetInteger("a", 1234); - pref_store_contents_->Set(kAtomicPref, int_value1); - pref_store_contents_->Set(kAtomicPref2, int_value2); - pref_store_contents_->Set(kReportOnlyPref, report_only_val); - pref_store_contents_->Set(kReportOnlySplitPref, report_only_split_val); ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref2, NULL)); @@ -1226,14 +1210,11 @@ TEST_P(PrefHashFilterTest, CallFilterSerializeDataCallbacks) { base::DictionaryValue root_dict; - // Ownership of the following values is transfered to |root_dict|. - base::Value* int_value1 = new base::Value(1); - base::Value* int_value2 = new base::Value(2); - base::DictionaryValue* dict_value = new base::DictionaryValue; - dict_value->Set("a", new base::Value(true)); - root_dict.Set(kAtomicPref, int_value1); - root_dict.Set(kAtomicPref2, int_value2); - root_dict.Set(kSplitPref, dict_value); + auto dict_value = base::MakeUnique<base::DictionaryValue>(); + dict_value->SetBoolean("a", true); + root_dict.SetInteger(kAtomicPref, 1); + root_dict.SetInteger(kAtomicPref2, 2); + root_dict.Set(kSplitPref, std::move(dict_value)); // Skip updating kAtomicPref2. pref_hash_filter_->FilterUpdate(kAtomicPref); @@ -1275,9 +1256,7 @@ TEST_P(PrefHashFilterTest, CallFilterSerializeDataCallbacksWithFailure) { base::DictionaryValue root_dict; - // Ownership of the following values is transfered to |root_dict|. - base::Value* int_value1 = new base::Value(1); - root_dict.Set(kAtomicPref, int_value1); + root_dict.SetInteger(kAtomicPref, 1); // Only update kAtomicPref. pref_hash_filter_->FilterUpdate(kAtomicPref); @@ -1303,16 +1282,14 @@ } TEST_P(PrefHashFilterTest, ExternalValidationValueChanged) { - // Ownership of this value is transfered to |pref_store_contents_|. - base::Value* int_value = new base::Value(1234); - pref_store_contents_->Set(kAtomicPref, int_value); + pref_store_contents_->SetInteger(kAtomicPref, 1234); - base::DictionaryValue* dict_value = new base::DictionaryValue; + auto dict_value = base::MakeUnique<base::DictionaryValue>(); dict_value->SetString("a", "foo"); dict_value->SetInteger("b", 1234); dict_value->SetInteger("c", 56); dict_value->SetBoolean("d", false); - pref_store_contents_->Set(kSplitPref, dict_value); + pref_store_contents_->Set(kSplitPref, std::move(dict_value)); mock_external_validation_pref_hash_store_->SetCheckResult( kAtomicPref, ValueState::CHANGED);
diff --git a/services/preferences/tracked/pref_hash_store_impl_unittest.cc b/services/preferences/tracked/pref_hash_store_impl_unittest.cc index 3c6ca13..18014a8 100644 --- a/services/preferences/tracked/pref_hash_store_impl_unittest.cc +++ b/services/preferences/tracked/pref_hash_store_impl_unittest.cc
@@ -51,8 +51,8 @@ TEST_F(PrefHashStoreImplTest, ComputeSplitMacs) { base::DictionaryValue dict; - dict.Set("a", new base::Value("string1")); - dict.Set("b", new base::Value("string2")); + dict.SetString("a", "string1"); + dict.SetString("b", "string2"); PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true); std::unique_ptr<base::DictionaryValue> computed_macs = @@ -96,10 +96,10 @@ EXPECT_EQ(ValueState::CHANGED, transaction->CheckValue("path1", &string_2)); base::DictionaryValue dict; - dict.Set("a", new base::Value("foo")); - dict.Set("d", new base::Value("bad")); - dict.Set("b", new base::Value("bar")); - dict.Set("c", new base::Value("baz")); + dict.SetString("a", "foo"); + dict.SetString("d", "bad"); + dict.SetString("b", "bar"); + dict.SetString("c", "baz"); transaction->StoreHash("path1", &dict); EXPECT_EQ(ValueState::UNCHANGED, transaction->CheckValue("path1", &dict)); @@ -311,14 +311,14 @@ TEST_F(PrefHashStoreImplTest, SplitHashStoreAndCheck) { base::DictionaryValue dict; - dict.Set("a", new base::Value("to be replaced")); - dict.Set("b", new base::Value("same")); - dict.Set("o", new base::Value("old")); + dict.SetString("a", "to be replaced"); + dict.SetString("b", "same"); + dict.SetString("o", "old"); base::DictionaryValue modified_dict; - modified_dict.Set("a", new base::Value("replaced")); - modified_dict.Set("b", new base::Value("same")); - modified_dict.Set("c", new base::Value("new")); + modified_dict.SetString("a", "replaced"); + modified_dict.SetString("b", "same"); + modified_dict.SetString("c", "new"); base::DictionaryValue empty_dict; @@ -428,7 +428,7 @@ // Store hashes for a random dict to be overwritten below. base::DictionaryValue initial_dict; - initial_dict.Set("a", new base::Value("foo")); + initial_dict.SetString("a", "foo"); transaction->StoreSplitHash("path1", &initial_dict); // Verify stored empty dictionary matches NULL and empty dictionary back. @@ -461,8 +461,8 @@ pref_hash_store2.BeginTransaction(GetHashStoreContents())); base::DictionaryValue tested_dict; - tested_dict.Set("a", new base::Value("foo")); - tested_dict.Set("b", new base::Value("bar")); + tested_dict.SetString("a", "foo"); + tested_dict.SetString("b", "bar"); EXPECT_EQ( ValueState::TRUSTED_UNKNOWN_VALUE, transaction->CheckSplitValue("new_path", &tested_dict, &invalid_keys)); @@ -480,10 +480,10 @@ base::Value string("string1"); base::DictionaryValue dict; - dict.Set("a", new base::Value("foo")); - dict.Set("d", new base::Value("bad")); - dict.Set("b", new base::Value("bar")); - dict.Set("c", new base::Value("baz")); + dict.SetString("a", "foo"); + dict.SetString("d", "bad"); + dict.SetString("b", "bar"); + dict.SetString("c", "baz"); { PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
diff --git a/services/preferences/tracked/tracked_preferences_migration.cc b/services/preferences/tracked/tracked_preferences_migration.cc index f2af336..61a0c80 100644 --- a/services/preferences/tracked/tracked_preferences_migration.cc +++ b/services/preferences/tracked/tracked_preferences_migration.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/macros.h" +#include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" #include "base/metrics/histogram.h" #include "base/values.h" @@ -164,7 +165,8 @@ // |new_store| having equivalently been successfully flushed to disk // (e.g., on crash or in cases where |new_store| is read-only following // a read error on startup). - new_store->Set(pref_name, value_in_old_store->DeepCopy()); + new_store->Set(pref_name, + base::MakeUnique<base::Value>(*value_in_old_store)); migrated_value = true; *new_store_altered = true; }
diff --git a/services/resource_coordinator/memory_instrumentation/coordinator_impl.cc b/services/resource_coordinator/memory_instrumentation/coordinator_impl.cc index 2d993c7..3d8dd34 100644 --- a/services/resource_coordinator/memory_instrumentation/coordinator_impl.cc +++ b/services/resource_coordinator/memory_instrumentation/coordinator_impl.cc
@@ -117,7 +117,7 @@ args.dump_type != base::trace_event::MemoryDumpType::SUMMARY_ONLY) { for (const auto& request : queued_memory_dump_requests_) { if (request.args.level_of_detail == args.level_of_detail) { - VLOG(1) << base::trace_event::MemoryDumpManager::kLogPrefix << " (" + VLOG(1) << "RequestGlobalMemoryDump(" << base::trace_event::MemoryDumpTypeToString(args.dump_type) << ") skipped because another dump request with the same " "level of detail (" @@ -219,8 +219,7 @@ if (!success) { ++failed_memory_dump_count_; - VLOG(1) << base::trace_event::MemoryDumpManager::kLogPrefix - << " failed because of NACK from client"; + VLOG(1) << "RequestGlobalMemoryDump() FAIL: NACK from client process"; } FinalizeGlobalMemoryDumpIfAllManagersReplied();
diff --git a/skia/ext/benchmarking_canvas.cc b/skia/ext/benchmarking_canvas.cc index da63a1a..1f46938 100644 --- a/skia/ext/benchmarking_canvas.cc +++ b/skia/ext/benchmarking_canvas.cc
@@ -379,24 +379,23 @@ public: // AutoOp objects are always scoped within draw call frames, // so the paint is guaranteed to be valid for their lifetime. - AutoOp(BenchmarkingCanvas* canvas, const char op_name[], - const SkPaint* paint = nullptr) - : canvas_(canvas) - , op_record_(new base::DictionaryValue()) - , op_params_(new base::ListValue()) { + AutoOp(BenchmarkingCanvas* canvas, + const char op_name[], + const SkPaint* paint = nullptr) + : canvas_(canvas), op_record_(new base::DictionaryValue()) { + DCHECK(canvas); + DCHECK(op_name); - DCHECK(canvas); - DCHECK(op_name); + op_record_->SetString("cmd_string", op_name); + op_params_ = + op_record_->SetList("info", base::MakeUnique<base::ListValue>()); - op_record_->SetString("cmd_string", op_name); - op_record_->Set("info", op_params_); + if (paint) { + this->addParam("paint", AsValue(*paint)); + filtered_paint_ = *paint; + } - if (paint) { - this->addParam("paint", AsValue(*paint)); - filtered_paint_ = *paint; - } - - start_ticks_ = base::TimeTicks::Now(); + start_ticks_ = base::TimeTicks::Now(); } ~AutoOp() {
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 03b9c96..f5c9b19 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -327,6 +327,9 @@ "test": "cc_unittests" }, { + "args": [ + "--gs-results-bucket=chromium-result-details" + ], "merge": { "args": [ "--bucket", @@ -367,6 +370,9 @@ "test": "chrome_public_test_apk" }, { + "args": [ + "--gs-results-bucket=chromium-result-details" + ], "merge": { "args": [ "--bucket", @@ -525,6 +531,9 @@ "test": "content_browsertests" }, { + "args": [ + "--gs-results-bucket=chromium-result-details" + ], "merge": { "args": [ "--bucket", @@ -1460,6 +1469,9 @@ "test": "unit_tests" }, { + "args": [ + "--gs-results-bucket=chromium-result-details" + ], "merge": { "args": [ "--bucket", @@ -1858,6 +1870,9 @@ "test": "cc_unittests" }, { + "args": [ + "--gs-results-bucket=chromium-result-details" + ], "merge": { "args": [ "--bucket", @@ -1898,6 +1913,9 @@ "test": "chrome_public_test_apk" }, { + "args": [ + "--gs-results-bucket=chromium-result-details" + ], "merge": { "args": [ "--bucket", @@ -2056,6 +2074,9 @@ "test": "content_browsertests" }, { + "args": [ + "--gs-results-bucket=chromium-result-details" + ], "merge": { "args": [ "--bucket", @@ -3022,6 +3043,9 @@ "test": "unit_tests" }, { + "args": [ + "--gs-results-bucket=chromium-result-details" + ], "merge": { "args": [ "--bucket",
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json index 228fae0b..1646f82c 100644 --- a/testing/buildbot/chromium.perf.json +++ b/testing/buildbot/chromium.perf.json
@@ -19596,65 +19596,6 @@ }, { "args": [ - "blink_perf.bindings", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "blink_perf.bindings", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device4", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "blink_perf.bindings", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "blink_perf.bindings.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device4", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "blink_perf.css", "-v", "--upload-results", @@ -20265,65 +20206,6 @@ }, { "args": [ - "dromaeo.domcorequery", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "dromaeo.domcorequery", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device4", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "dromaeo.domcorequery", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "dromaeo.domcorequery.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device4", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "dromaeo.domcoretraverse", "-v", "--upload-results", @@ -21907,65 +21789,6 @@ }, { "args": [ - "smoothness.gpu_rasterization.tough_filters_cases", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "smoothness.gpu_rasterization.tough_filters_cases", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device4", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "smoothness.gpu_rasterization.tough_filters_cases", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "smoothness.gpu_rasterization.tough_filters_cases.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device4", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "smoothness.gpu_rasterization.tough_path_rendering_cases", "-v", "--upload-results", @@ -23618,65 +23441,6 @@ }, { "args": [ - "thread_times.key_silk_cases", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=android-chromium" - ], - "isolate_name": "telemetry_perf_tests", - "name": "thread_times.key_silk_cases", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device4", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 3600 - } - }, - { - "args": [ - "thread_times.key_silk_cases", - "-v", - "--upload-results", - "--output-format=chartjson", - "--browser=reference", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "thread_times.key_silk_cases.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device4", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 36000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 3600 - } - }, - { - "args": [ "thread_times.polymer", "-v", "--upload-results",
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG index b3849bf1..150aa909 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -1777,6 +1777,7 @@ crbug.com/591099 css3/blending/mix-blend-mode-simple-text.html [ Failure ] crbug.com/591099 css3/blending/mix-blend-mode-simple.html [ Failure ] crbug.com/591099 css3/blending/mix-blend-mode-with-masking.html [ Failure Pass ] +crbug.com/591099 css3/blending/svg-blend-multiply-alpha.html [ Failure ] crbug.com/591099 css3/calc/border.html [ Failure ] crbug.com/591099 css3/calc/catch-divide-by-0.html [ Failure ] crbug.com/591099 css3/calc/color-hsl.html [ Failure ] @@ -9991,7 +9992,7 @@ crbug.com/591099 fast/events/access-key-self-destruct.html [ Failure ] crbug.com/591099 fast/events/add-event-without-document.html [ Failure ] crbug.com/591099 fast/events/anchor-empty-focus.html [ Failure ] -crbug.com/591099 fast/events/anchor-image-scrolled-x-y.html [ Pass Timeout ] +crbug.com/591099 fast/events/anchor-image-scrolled-x-y.html [ Crash Pass Timeout ] crbug.com/591099 fast/events/arrow-keys-on-body.html [ Failure ] crbug.com/591099 fast/events/arrow-navigation.html [ Crash Pass ] crbug.com/591099 fast/events/attempt-select-all-with-wrong-modifier.html [ Failure ] @@ -11603,42 +11604,42 @@ crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom200.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-appearance.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-key-operations.html [ Crash Timeout ] +crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-key-operations.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-min-max-attribute.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-mouse-operations.html [ Crash Failure ] +crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-mouse-operations.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-reset-value-after-reload.html [ Crash ] crbug.com/591099 fast/forms/suggestion-picker/date-suggestion-picker-step-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-key-operations.html [ Crash Failure ] +crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-key-operations.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-min-max-attribute.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-mouse-operations.html [ Crash Failure ] +crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-mouse-operations.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-reset-value-after-reload.html [ Crash ] crbug.com/591099 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-step-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-appearance.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-key-operations.html [ Crash Timeout ] +crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-key-operations.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-min-max-attribute.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-mouse-operations.html [ Crash Failure ] +crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-mouse-operations.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-reset-value-after-reload.html [ Crash ] crbug.com/591099 fast/forms/suggestion-picker/month-suggestion-picker-step-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-appearance-locale-hebrew.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-appearance.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-key-operations.html [ Crash Failure ] +crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-key-operations.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-min-max-attribute.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-mouse-operations.html [ Crash Failure ] +crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-mouse-operations.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/time-suggestion-picker-step-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar.html [ Crash Failure ] crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-appearance.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-key-operations.html [ Crash Timeout ] +crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-key-operations.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-min-max-attribute.html [ Crash Failure ] -crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-mouse-operations.html [ Crash Failure ] +crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-mouse-operations.html [ Crash Failure Pass ] crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-reset-value-after-reload.html [ Crash ] crbug.com/591099 fast/forms/suggestion-picker/week-suggestion-picker-step-attribute.html [ Crash Failure ] crbug.com/591099 fast/forms/tab-in-input.html [ Crash Pass ] @@ -14189,12 +14190,12 @@ crbug.com/591099 fast/text/atsui-small-caps-punctuation-size.html [ Failure ] crbug.com/591099 fast/text/atsui-spacing-features.html [ Failure ] crbug.com/591099 fast/text/basic/002.html [ Failure ] -crbug.com/591099 fast/text/basic/003.html [ Failure ] +crbug.com/591099 fast/text/basic/003.html [ Failure Pass ] crbug.com/591099 fast/text/basic/004.html [ Failure ] -crbug.com/591099 fast/text/basic/005.html [ Failure ] +crbug.com/591099 fast/text/basic/005.html [ Failure Pass ] crbug.com/591099 fast/text/basic/011.html [ Failure ] crbug.com/591099 fast/text/basic/012.html [ Failure ] -crbug.com/591099 fast/text/basic/013.html [ Failure ] +crbug.com/591099 fast/text/basic/013.html [ Failure Pass ] crbug.com/591099 fast/text/basic/014.html [ Failure ] crbug.com/591099 fast/text/basic/015.html [ Failure ] crbug.com/591099 fast/text/basic/generic-family-reset.html [ Failure ] @@ -14270,7 +14271,7 @@ crbug.com/591099 fast/text/font-ascent-mac.html [ Failure ] crbug.com/591099 fast/text/font-fallback-synthetic-italics.html [ Failure ] crbug.com/591099 fast/text/font-initial.html [ Failure ] -crbug.com/591099 fast/text/font-ligature-letter-spacing.html [ Failure ] +crbug.com/591099 fast/text/font-ligature-letter-spacing.html [ Failure Pass ] crbug.com/591099 fast/text/font-size-zero.html [ Failure ] crbug.com/591099 fast/text/font-smallcaps-layout.html [ Failure ] crbug.com/591099 fast/text/fractional-word-and-letter-spacing-with-kerning.html [ Failure ] @@ -14481,7 +14482,7 @@ crbug.com/591099 fast/text/whitespace/pre-wrap-overflow-selection.html [ Failure ] crbug.com/591099 fast/text/whitespace/pre-wrap-spaces-after-newline.html [ Failure ] crbug.com/591099 fast/text/whitespace/select-new-line-with-line-break-normal.html [ Failure ] -crbug.com/591099 fast/text/whitespace/span-in-word-space-causes-overflow.html [ Failure ] +crbug.com/591099 fast/text/whitespace/span-in-word-space-causes-overflow.html [ Failure Pass ] crbug.com/591099 fast/text/whitespace/tab-character-basics.html [ Crash Failure ] crbug.com/591099 fast/text/whitespace/text-align-justify-and-whitespace-pre.html [ Failure Pass ] crbug.com/591099 fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash.html [ Crash Failure ] @@ -14491,10 +14492,10 @@ crbug.com/591099 fast/text/word-break-soft-hyphen.html [ Failure ] crbug.com/591099 fast/text/word-break.html [ Failure ] crbug.com/591099 fast/text/word-space-between-inlines.html [ Failure ] -crbug.com/591099 fast/text/word-space-monospace.html [ Failure ] -crbug.com/591099 fast/text/word-space-with-kerning-2.html [ Failure ] +crbug.com/591099 fast/text/word-space-monospace.html [ Failure Pass ] +crbug.com/591099 fast/text/word-space-with-kerning-2.html [ Failure Pass ] crbug.com/591099 fast/text/word-space.html [ Failure ] -crbug.com/591099 fast/text/word-spacing-nbsp.html [ Failure ] +crbug.com/591099 fast/text/word-spacing-nbsp.html [ Failure Pass ] crbug.com/591099 fast/text/word-wrap-whitespace-pre.html [ Failure Pass ] crbug.com/591099 fast/text/writing-root-with-overflow-clip-baseline.html [ Crash Failure ] crbug.com/591099 fast/text/zero-font-size.html [ Failure ] @@ -17235,6 +17236,7 @@ crbug.com/591099 inspector/console/console-context-selector.html [ Crash Failure ] crbug.com/591099 inspector/console/console-control-characters.html [ Failure ] crbug.com/591099 inspector/console/console-copy-treeoutline.html [ Failure ] +crbug.com/591099 inspector/console/console-copy-truncated-text.html [ Crash ] crbug.com/591099 inspector/console/console-correct-suggestions.html [ Failure ] crbug.com/591099 inspector/console/console-custom-formatters.html [ Failure ] crbug.com/591099 inspector/console/console-dir-deprecated.html [ Failure ] @@ -17966,7 +17968,7 @@ crbug.com/591099 inspector/tracing/timeline-misc/timeline-event-causes.html [ Crash ] crbug.com/591099 inspector/tracing/timeline-misc/timeline-event-details.html [ Failure ] crbug.com/591099 inspector/tracing/timeline-misc/timeline-event-dispatch.html [ Crash ] -crbug.com/591099 inspector/tracing/timeline-misc/timeline-filtering.html [ Failure ] +crbug.com/591099 inspector/tracing/timeline-misc/timeline-filtering.html [ Crash Failure ] crbug.com/591099 inspector/tracing/timeline-misc/timeline-flame-chart-automatically-size-window.html [ Crash ] crbug.com/591099 inspector/tracing/timeline-misc/timeline-grouped-invalidations.html [ Crash ] crbug.com/591099 inspector/tracing/timeline-misc/timeline-load-event.html [ Crash ] @@ -18258,7 +18260,7 @@ crbug.com/591099 media/network-no-source-const-shadow.html [ Failure ] crbug.com/591099 media/no-autoplay-with-user-gesture-requirement.html [ Crash ] crbug.com/591099 media/remoteplayback/availability-callback-gc.html [ Crash ] -crbug.com/591099 media/remoteplayback/prompt-throws-when-backend-disabled.html [ Crash ] +crbug.com/591099 media/remoteplayback/prompt-throws-when-backend-disabled.html [ Crash Timeout ] crbug.com/591099 media/remoteplayback/prompt-twice-throws.html [ Crash ] crbug.com/591099 media/remoteplayback/watch-availability-throws-low-end-device.html [ Crash ] crbug.com/591099 media/remoteplayback/watch-availability-works-when-backend-disabled.html [ Crash ] @@ -19042,7 +19044,7 @@ crbug.com/591099 paint/invalidation/svg/absolute-sized-content-with-resources.xhtml [ Failure ] crbug.com/591099 paint/invalidation/svg/add-background-property-on-root.html [ Failure Pass ] crbug.com/591099 paint/invalidation/svg/add-outline-property-on-root.html [ Failure Pass ] -crbug.com/591099 paint/invalidation/svg/animated-path-inside-transformed-html.xhtml [ Failure ] +crbug.com/591099 paint/invalidation/svg/animated-path-inside-transformed-html.xhtml [ Failure Pass ] crbug.com/591099 paint/invalidation/svg/animated-svg-as-image-background-offscreen.html [ Failure Pass ] crbug.com/591099 paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size.html [ Failure ] crbug.com/591099 paint/invalidation/svg/animated-svg-as-image-offscreen.html [ Failure Pass ] @@ -19160,7 +19162,7 @@ crbug.com/591099 paint/printing/print-box-shadow.html [ Failure ] crbug.com/591099 paint/roundedrects/circle-with-shadow.html [ Failure Pass ] crbug.com/591099 paint/roundedrects/input-with-rounded-rect-and-shadow.html [ Failure ] -crbug.com/591099 paint/selection/drag-caret.html [ Crash ] +crbug.com/591099 paint/selection/drag-caret.html [ Crash Timeout ] crbug.com/591099 paint/selection/text-selection-editing-crash.html [ Failure ] crbug.com/591099 paint/selection/text-selection-inline-block-rtl.html [ Failure ] crbug.com/591099 paint/selection/text-selection-inline-block.html [ Failure ] @@ -20151,7 +20153,7 @@ crbug.com/591099 svg/dom/getscreenctm-use-with-additional-translation.html [ Crash ] crbug.com/591099 svg/dom/href-baseval-animval.html [ Crash ] crbug.com/591099 svg/dom/id-reflect.html [ Failure ] -crbug.com/591099 svg/dom/length-list-parser.html [ Failure ] +crbug.com/591099 svg/dom/length-list-parser.html [ Failure Timeout ] crbug.com/591099 svg/dom/linear-gradient-default-length.html [ Crash ] crbug.com/591099 svg/dom/method-argument-aritychecks.html [ Failure ] crbug.com/591099 svg/dom/method-argument-typechecks.html [ Failure ] @@ -22166,7 +22168,7 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources.xhtml [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/add-background-property-on-root.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/add-outline-property-on-root.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html.xhtml [ Failure ] +crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html.xhtml [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-background-offscreen.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-offscreen.html [ Failure Pass ] @@ -22511,6 +22513,143 @@ crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-texture-binding-preserved.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-viewport-parameters-preserved.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/zero-size-fill-rect.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/12-55.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/182.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/2-comp.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/2-dht.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/23-55.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/55.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/alt-text-wrapping.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/animated-background-image-crash.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/bad-png.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/busted-oval-does-not-render.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/color-jpeg-with-color-profile.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-clip-text.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-cover.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-cross-fade.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-repeat.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-background-image-space.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-border-image-source.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-border-radius.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-clip.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-drag-image.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-filter.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-iframe.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-canvas-pattern.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-canvas-svg.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-canvas.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-filter-all.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-object-fit.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-profile-match.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-pseudo-content.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image-shape.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-image.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-layer.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-mask-image-svg.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-svg-foreign-object.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/content-url-broken-image-with-alt-text.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/content-url-image-with-alt-text-dynamic-2.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/crash-when-fallback-content-deleted.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/crash-when-zoom-factor-changes.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-background-size.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-blending.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-invalidation.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-overflow-position.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-simple.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-sizing.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-svg-size-diff.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-svg-size.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/cross-fade-tiled.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/destroyed-image-load-event.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/drag-pdf-as-image.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/drag-svg-image.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/embed-does-not-propagate-dimensions-to-object-ancestor.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/exif-orientation-css.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/exif-orientation-height-image-document.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/exif-orientation-image-document.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/exif-orientation.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/extra-image-in-image-document.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/favicon-as-image.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/gif-loop-count.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/gif-short-app-extension-string.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/gray-scale-jpeg-with-color-profile.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/gray-scale-png-with-color-profile.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/icon-0colors.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/icon-decoding.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-change-src.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-change-without-resize-shouldnt-layout.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-click-scale-restore-zoomed-image.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-css3-content-data.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-document-write-assert.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-empty-data.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-hover-display-alt.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-in-map.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-invalid-data.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-load-event-in-fragment.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-map-anchor-children.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-map-multiple-xhtml.xhtml [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-map-multiple.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-map-zoom-alt-content.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-map-zoom.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-page-injected-script-crash.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-use-counters.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-zoom-to-25.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-zoom-to-500.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-circle-focus-ring.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-outline-color.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring-zoom.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-focus-ring.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-polygon-focus-ring.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/imagemap-scroll.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/img-dimensions-styled.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/invalid-image-url-crash.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-image-decoding.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-progressive-image.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/large-size-image-crash.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/link-body-content-imageDimensionChanged-crash.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/load-img-with-empty-src.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/motion-jpeg-single-frame.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/move-image-to-new-document.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/multiple-inflight-error-event-crash.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/pdf-as-background.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/pdf-as-tiled-background.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/percent-height-image.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/pixel-crack-image-background-webkit-transform-scale.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/png-extra-row-crash.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/png-missing-plte-before-trns-crash.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/png-suite/test.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/png_per_row_alpha_decoding.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-0px-images-quirk.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-0px-images.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-10px-images.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-16px-images.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-1px-images.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-block-flow-images.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images-empty-alt.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/script-counter-imageDimensionChanged-crash.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/sprite-no-bleed.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/style-access-during-imageChanged-crash.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/style-access-during-imageChanged-style-freeze.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/text-content-crash-2.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/text-content-crash.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/update-alt-text.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/viewport-in-standalone-image-document.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/webgl-teximage2d.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/webp-flip.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/width-on-broken-data-src.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/zoomed-img-size.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/zoomed-offset-size.html [ Crash ] crbug.com/591099 virtual/gpu-rasterization/images/12-55.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/182.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/2-comp.html [ Failure ] @@ -23015,7 +23154,7 @@ crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/dns-prefetch-control.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/drag-over-iframe-invalid-source-crash.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/embed-image-load-outlives-gc-without-crashing.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/empty-cookie.html [ Failure ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/empty-cookie.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/empty-file-formdata.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/empty-urls.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/error404.pl [ Failure ] @@ -23071,7 +23210,7 @@ crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/unloadable-script.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/video-poster-image-load-outlives-gc-without-crashing.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/webtiming-buffer-full-no-event.html [ Failure ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/webtiming-cross-origin-and-back.html [ Failure ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/webtiming-cross-origin-and-back.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/webtiming-cross-origin-redirect.php [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/webtiming-no-origin.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/webtiming-one-redirect.php [ Failure ] @@ -23869,7 +24008,7 @@ crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-model.html [ Crash Failure ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-node-reference.html [ Crash ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-parse-html.html [ Crash ] -crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-range-stats.html [ Failure ] +crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-range-stats.html [ Crash Failure ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-record-reload.html [ Crash ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-search.html [ Failure ] crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-tree-search.html [ Crash Failure ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index f50d10f..826cbfcc 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -914,6 +914,8 @@ crbug.com/498539 [ Win7 ] inspector/elements/styles-4/styles-update-from-js.html [ Crash Pass ] +crbug.com/731144 inspector/elements/edit/set-outer-html-2.html [ Failure Pass ] + crbug.com/596968 [ Win ] inspector-protocol/input/eventTimestamp.html [ Failure Pass ] crbug.com/487281 [ Mac ] fast/forms/select/menulist-narrow-width.html [ Failure ] @@ -2509,6 +2511,8 @@ crbug.com/713891 virtual/exotic-color-space/images/color-profile-group.html [ Pass Failure ] crbug.com/713891 virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb.html [ Pass Failure ] crbug.com/713891 virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb.html [ Pass Failure ] +crbug.com/731153 [ Mac10.9 ] virtual/exotic-color-space/images/color-profile-reflection.html [ Failure ] + # [selectors-4] crbug.com/706118 external/wpt/css/selectors4/hover-001-manual.html [ Skip ] @@ -2859,3 +2863,9 @@ crbug.com/731018 [ Mac ] sensor/orientation-sensor.html [ Failure Pass ] crbug.com/731035 [ Win ] virtual/new-remote-playback-pipeline/media/controls/video-controls-overflow-menu-hide-on-click-panel.html [ Failure Pass ] + +# More flaky tests on Mac +crbug.com/731111 [ Mac ] http/tests/media/progress-events-generated-correctly.html [ Failure Pass Timeout ] +crbug.com/731111 [ Mac ] http/tests/media/video-load-metadata-decode-error.html [ Failure Pass Timeout ] +crbug.com/731111 [ Mac ] virtual/mojo-loading/http/tests/media/progress-events-generated-correctly.html [ Failure Pass Timeout ] +crbug.com/731111 [ Mac ] virtual/mojo-loading/http/tests/media/video-load-metadata-decode-error.html [ Failure Pass Timeout ]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/redirected-response.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/redirected-response.https.html index 83ef8ed3..b3ee9db 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/redirected-response.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/redirected-response.https.html
@@ -122,7 +122,6 @@ expected_redirected: false})), 'mode: "follow", no mode change, no server redirect'); - // ======================================================= // Tests for requests that are in-scope of the service worker. The service // worker returns a redirected response.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/fetch-access-control-login.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/fetch-access-control-login.html index 0ffab1a..ee29680 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/fetch-access-control-login.html +++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/fetch-access-control-login.html
@@ -13,4 +13,4 @@ evt.data.username, evt.data.password); xhr.send(); }, false); -</script> \ No newline at end of file +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/fetch-cors-xhr-iframe.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/fetch-cors-xhr-iframe.html index 1fd8094..51952a98 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/fetch-cors-xhr-iframe.html +++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/fetch-cors-xhr-iframe.html
@@ -26,7 +26,6 @@ }); } - function create_test_promise(url, with_credentials, expected_result) { return new Promise(function(resolve, reject) { create_test_case_promise(url, with_credentials)
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/invalid-blobtype-iframe.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/invalid-blobtype-iframe.https.html index b1e0444..1e6cacb 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/invalid-blobtype-iframe.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/invalid-blobtype-iframe.https.html
@@ -19,7 +19,6 @@ }); } - window.addEventListener('message', function(evt) { var port = evt.ports[0]; xhr_send('POST', 'test string')
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/invalid-header-iframe.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/invalid-header-iframe.https.html index 0c5ed41..80531b7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/invalid-header-iframe.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/invalid-header-iframe.https.html
@@ -16,7 +16,6 @@ }); } - window.addEventListener('message', function(evt) { var port = evt.ports[0]; xhr_send('POST', 'test string')
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/update-after-oneday.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/update-after-oneday.https.html index 151a59e..08065d2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/update-after-oneday.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/update-after-oneday.https.html
@@ -46,5 +46,3 @@ }, 'Update should be triggered after a functional event when last update time is over 24 hours'); </script> - -
diff --git a/third_party/WebKit/Source/core/css/CSSPrimitiveValue.cpp b/third_party/WebKit/Source/core/css/CSSPrimitiveValue.cpp index af41d01..ab81d394 100644 --- a/third_party/WebKit/Source/core/css/CSSPrimitiveValue.cpp +++ b/third_party/WebKit/Source/core/css/CSSPrimitiveValue.cpp
@@ -508,15 +508,14 @@ return CSSPrimitiveValue::UnitType::kUnknown; } -static String FormatNumber(double number, const StringView& suffix) { +static String FormatNumber(double number, const char* suffix) { #if OS(WIN) && _MSC_VER < 1900 unsigned oldFormat = _set_output_format(_TWO_DIGIT_EXPONENT); #endif - String result = String::Format("%.6g", number); + String result = String::Format("%.6g%s", number, suffix); #if OS(WIN) && _MSC_VER < 1900 _set_output_format(oldFormat); #endif - result.append(suffix); return result; }
diff --git a/third_party/WebKit/Source/core/events/EventTarget.cpp b/third_party/WebKit/Source/core/events/EventTarget.cpp index c7041b86..3fc24eb 100644 --- a/third_party/WebKit/Source/core/events/EventTarget.cpp +++ b/third_party/WebKit/Source/core/events/EventTarget.cpp
@@ -270,7 +270,8 @@ String message_text = String::Format( "Added non-passive event listener to a scroll-blocking '%s' event. " "Consider marking event handler as 'passive' to make the page more " - "responsive.", + "responsive. See " + "https://www.chromestatus.com/feature/5745543795965952", event_type.GetString().Utf8().data()); PerformanceMonitor::ReportGenericViolation(
diff --git a/third_party/WebKit/Source/devtools/BUILD.gn b/third_party/WebKit/Source/devtools/BUILD.gn index 1e25aae..8c189c3 100644 --- a/third_party/WebKit/Source/devtools/BUILD.gn +++ b/third_party/WebKit/Source/devtools/BUILD.gn
@@ -303,7 +303,6 @@ "front_end/main/GCActionDelegate.js", "front_end/main/Main.js", "front_end/main/module.json", - "front_end/main/nodeIcon.css", "front_end/main/remoteDebuggingTerminatedScreen.css", "front_end/main/renderingOptions.css", "front_end/main/RenderingOptions.js", @@ -819,7 +818,6 @@ "front_end/Images/ic_warning_black_18dp.svg", "front_end/Images/navigationControls.png", "front_end/Images/navigationControls_2x.png", - "front_end/Images/nodeIcon.png", "front_end/Images/popoverArrows.png", "front_end/Images/profileGroupIcon.png", "front_end/Images/profileIcon.png",
diff --git a/third_party/WebKit/Source/devtools/front_end/Images/nodeIcon.png b/third_party/WebKit/Source/devtools/front_end/Images/nodeIcon.png deleted file mode 100644 index a7929a9..0000000 --- a/third_party/WebKit/Source/devtools/front_end/Images/nodeIcon.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/Source/devtools/front_end/main/Main.js b/third_party/WebKit/Source/devtools/front_end/main/Main.js index 29add33..4cf1200 100644 --- a/third_party/WebKit/Source/devtools/front_end/main/Main.js +++ b/third_party/WebKit/Source/devtools/front_end/main/Main.js
@@ -728,37 +728,6 @@ } }; -/** - * @implements {UI.ToolbarItem.Provider} - */ -Main.Main.NodeIndicator = class { - constructor() { - var element = createElement('div'); - var shadowRoot = UI.createShadowRootWithCoreStyles(element, 'main/nodeIcon.css'); - this._element = shadowRoot.createChild('div', 'node-icon'); - element.addEventListener('click', () => InspectorFrontendHost.openNodeFrontend(), false); - this._button = new UI.ToolbarItem(element); - this._button.setTitle(Common.UIString('Open dedicated DevTools for Node.js')); - SDK.targetManager.addEventListener(SDK.TargetManager.Events.AvailableNodeTargetsChanged, this._update, this); - this._button.setVisible(false); - this._update(); - } - - _update() { - this._element.classList.toggle('inactive', !SDK.targetManager.availableNodeTargetsCount()); - if (SDK.targetManager.availableNodeTargetsCount()) - this._button.setVisible(true); - } - - /** - * @override - * @return {?UI.ToolbarItem} - */ - item() { - return this._button; - } -}; - Main.NetworkPanelIndicator = class { constructor() { // TODO: we should not access network from other modules.
diff --git a/third_party/WebKit/Source/devtools/front_end/main/module.json b/third_party/WebKit/Source/devtools/front_end/main/module.json index 538e463..591621b 100644 --- a/third_party/WebKit/Source/devtools/front_end/main/module.json +++ b/third_party/WebKit/Source/devtools/front_end/main/module.json
@@ -204,13 +204,6 @@ }, { "type": "@UI.ToolbarItem.Provider", - "className": "Main.Main.NodeIndicator", - "order": 2, - "location": "main-toolbar-left", - "condition": "!nodeFrontend" - }, - { - "type": "@UI.ToolbarItem.Provider", "className": "Main.Main.WarningErrorCounter", "order": 1, "location": "main-toolbar-right" @@ -448,7 +441,6 @@ ], "resources": [ "errorWarningCounter.css", - "nodeIcon.css", "remoteDebuggingTerminatedScreen.css", "renderingOptions.css", "targetCrashedScreen.css"
diff --git a/third_party/WebKit/Source/devtools/front_end/main/nodeIcon.css b/third_party/WebKit/Source/devtools/front_end/main/nodeIcon.css deleted file mode 100644 index 326247d..0000000 --- a/third_party/WebKit/Source/devtools/front_end/main/nodeIcon.css +++ /dev/null
@@ -1,23 +0,0 @@ -/* - * Copyright 2017 The Chromium Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -.node-icon { - width: 28px; - height: 26px; - background-image: url(Images/nodeIcon.png); - background-size: 17px 17px; - background-repeat: no-repeat; - background-position: center; - opacity: 0.8; -} - -.node-icon:hover { - opacity: 1.0; -} - -.node-icon.inactive { - filter: grayscale(100%); -}
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js index eeb0e03..cc8ee55f 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
@@ -328,9 +328,9 @@ _connectAndCreateMainTarget() { if (Runtime.queryParam('nodeFrontend')) { var target = new SDK.Target( - this, 'main', Common.UIString('Node.js'), SDK.Target.Capability.Target, this._createMainConnection.bind(this), + this, 'main', Common.UIString('Node'), SDK.Target.Capability.Target, this._createMainConnection.bind(this), null); - target.setInspectedURL('Node.js'); + target.setInspectedURL('Node'); this._childTargetManagers.set(target, new SDK.ChildTargetManager(this, target)); Host.userMetrics.actionTaken(Host.UserMetrics.Action.ConnectToNodeJSFromFrontend); return; @@ -410,15 +410,13 @@ if (Runtime.experiments.isEnabled('autoAttachToCrossProcessSubframes')) this._targetAgent.setAttachToFrames(true); - if (!parentTarget.parentTarget()) { + if (!parentTarget.parentTarget()) this._targetAgent.setDiscoverTargets(true); - if (Runtime.queryParam('nodeFrontend')) { - InspectorFrontendHost.setDevicesUpdatesEnabled(true); - InspectorFrontendHost.events.addEventListener( - InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged, this._devicesDiscoveryConfigChanged, this); - } else { - this._targetAgent.setRemoteLocations([{host: 'localhost', port: 9229}]); - } + + if (Runtime.queryParam('nodeFrontend') && !this._parentTarget.parentTarget()) { + InspectorFrontendHost.setDevicesUpdatesEnabled(true); + InspectorFrontendHost.events.addEventListener( + InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged, this._devicesDiscoveryConfigChanged, this); } } @@ -431,8 +429,7 @@ for (var address of config.networkDiscoveryConfig) { var parts = address.split(':'); var port = parseInt(parts[1], 10); - if (parts[0] && port) - locations.push({host: parts[0], port: port}); + locations.push({host: parts[0] || 'localhost', port: port || 9229}); } this._targetAgent.setRemoteLocations(locations); } @@ -516,7 +513,7 @@ attachedToTarget(targetInfo, waitingForDebugger) { var targetName = ''; if (targetInfo.type === 'node') { - targetName = Common.UIString('Node.js: %s', targetInfo.url); + targetName = Common.UIString('Node: %s', targetInfo.url); } else if (targetInfo.type !== 'iframe') { var parsedURL = targetInfo.url.asParsedURL(); targetName =
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/ThreadsSidebarPane.js b/third_party/WebKit/Source/devtools/front_end/sources/ThreadsSidebarPane.js index 0abf5a4..7ce72ce 100644 --- a/third_party/WebKit/Source/devtools/front_end/sources/ThreadsSidebarPane.js +++ b/third_party/WebKit/Source/devtools/front_end/sources/ThreadsSidebarPane.js
@@ -16,7 +16,14 @@ this._list = new UI.ListControl(this._items, this, UI.ListMode.NonViewport); this.contentElement.appendChild(this._list.element); + this._availableNodeTargetsElement = this.contentElement.createChild('div', 'hidden available-node-targets'); + UI.context.addFlavorChangeListener(SDK.Target, this._targetFlavorChanged, this); + + SDK.targetManager.addEventListener( + SDK.TargetManager.Events.AvailableNodeTargetsChanged, this._availableNodeTargetsChanged, this); + this._availableNodeTargetsChanged(); + SDK.targetManager.observeModels(SDK.DebuggerModel, this); } @@ -25,7 +32,27 @@ */ static shouldBeShown() { var minJSTargets = Runtime.queryParam('nodeFrontend') ? 1 : 2; - return SDK.targetManager.models(SDK.DebuggerModel).length >= minJSTargets; + if (SDK.targetManager.models(SDK.DebuggerModel).length >= minJSTargets) + return true; + return !!SDK.targetManager.availableNodeTargetsCount(); + } + + _availableNodeTargetsChanged() { + var count = SDK.targetManager.availableNodeTargetsCount(); + if (!count) { + this._availableNodeTargetsElement.classList.add('hidden'); + return; + } + this._availableNodeTargetsElement.removeChildren(); + this._availableNodeTargetsElement.createTextChild( + count === 1 ? Common.UIString('Node instance available.') : + Common.UIString('%d Node instances available.', count)); + var link = this._availableNodeTargetsElement.createChild('span', 'link'); + link.textContent = Common.UIString('Connect'); + link.addEventListener('click', () => { + InspectorFrontendHost.openNodeFrontend(); + }, false); + this._availableNodeTargetsElement.classList.remove('hidden'); } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/threadsSidebarPane.css b/third_party/WebKit/Source/devtools/front_end/sources/threadsSidebarPane.css index 6863de6..f4a8d8f 100644 --- a/third_party/WebKit/Source/devtools/front_end/sources/threadsSidebarPane.css +++ b/third_party/WebKit/Source/devtools/front_end/sources/threadsSidebarPane.css
@@ -4,6 +4,20 @@ * found in the LICENSE file. */ +.available-node-targets { + height: 22px; + display: flex; + align-items: center; + justify-content: flex-start; + padding-left: 20px; + border-top: 1px solid #eee; + font-style: italic; +} + +.available-node-targets > span { + margin-left: 5px; +} + .thread-item { padding: 3px 8px 3px 20px; position: relative;
diff --git a/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js b/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js index dcda605..3d40fd1 100644 --- a/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js +++ b/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js
@@ -89,8 +89,7 @@ */ _uiSourceCodeRemoved(event) { var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data); - this._loadingUISourceCodes.delete(uiSourceCode); - this._markAsUnmodified(uiSourceCode); + this._removeUISourceCode(uiSourceCode); } /** @@ -98,10 +97,19 @@ */ _projectRemoved(event) { var project = /** @type {!Workspace.Project} */ (event.data); - for (var uiSourceCode of project.uiSourceCodes()) { - this._loadingUISourceCodes.delete(uiSourceCode); - this._markAsUnmodified(uiSourceCode); - } + for (var uiSourceCode of project.uiSourceCodes()) + this._removeUISourceCode(uiSourceCode); + } + + /** + * @param {!Workspace.UISourceCode} uiSourceCode + */ + _removeUISourceCode(uiSourceCode) { + this._loadingUISourceCodes.delete(uiSourceCode); + var uiSourceCodeDiff = this._uiSourceCodeDiffs.get(uiSourceCode); + if (uiSourceCodeDiff) + uiSourceCodeDiff._dispose = true; + this._markAsUnmodified(uiSourceCode); } /** @@ -171,6 +179,7 @@ uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted, this._uiSourceCodeChanged, this); this._requestDiffPromise = null; this._pendingChanges = null; + this._dispose = false; } _uiSourceCodeChanged() { @@ -188,6 +197,8 @@ * @this {WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff} */ function emitDiffChanged() { + if (this._dispose) + return; this.dispatchEventToListeners(WorkspaceDiff.Events.DiffChanged); this._pendingChanges = null; } @@ -206,10 +217,21 @@ * @return {!Promise<?Diff.Diff.DiffArray>} */ async _innerRequestDiff() { + if (this._dispose) + return null; + var current = this._uiSourceCode.workingCopy(); if (!current && !this._uiSourceCode.contentLoaded()) current = await this._uiSourceCode.requestContent(); + // ------------ ASYNC ------------ + if (this._dispose) + return null; + var baseline = await this._uiSourceCode.requestOriginalContent(); + // ------------ ASYNC ------------ + if (this._dispose) + return null; + if (current === null || baseline === null) return null; return Diff.Diff.lineDiff(baseline.split('\n'), current.split('\n'));
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 index 3c4e645..31898e96 100644 --- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 +++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -181,6 +181,10 @@ status: "stable", }, { + name: "CompositorTouchAction", + status: "test", + }, + { name: "CompositorWorker", status: "experimental", },
diff --git a/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp b/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp index d5670b6..f618395 100644 --- a/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp +++ b/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp
@@ -88,6 +88,10 @@ return RuntimeEnabledFeatures::CompositedSelectionUpdateEnabled(); } +void WebRuntimeFeatures::EnableCompositorTouchAction(bool enable) { + RuntimeEnabledFeatures::SetCompositorTouchActionEnabled(enable); +} + void WebRuntimeFeatures::EnableDatabase(bool enable) { RuntimeEnabledFeatures::SetDatabaseEnabled(enable); }
diff --git a/third_party/WebKit/public/platform/WebRuntimeFeatures.h b/third_party/WebKit/public/platform/WebRuntimeFeatures.h index 2c9efec..c78c7a1a 100644 --- a/third_party/WebKit/public/platform/WebRuntimeFeatures.h +++ b/third_party/WebKit/public/platform/WebRuntimeFeatures.h
@@ -61,6 +61,8 @@ BLINK_PLATFORM_EXPORT static void EnableCompositedSelectionUpdate(bool); BLINK_PLATFORM_EXPORT static bool IsCompositedSelectionUpdateEnabled(); + BLINK_PLATFORM_EXPORT static void EnableCompositorTouchAction(bool); + BLINK_PLATFORM_EXPORT static void EnableDisplayList2dCanvas(bool); BLINK_PLATFORM_EXPORT static void ForceDisplayList2dCanvas(bool); BLINK_PLATFORM_EXPORT static void ForceDisable2dCanvasCopyOnWrite(bool);
diff --git a/third_party/boringssl/BUILD.generated_tests.gni b/third_party/boringssl/BUILD.generated_tests.gni index 3a7042e..842e12e 100644 --- a/third_party/boringssl/BUILD.generated_tests.gni +++ b/third_party/boringssl/BUILD.generated_tests.gni
@@ -39,18 +39,26 @@ "src/crypto/evp/evp_extra_test.cc", "src/crypto/evp/pbkdf_test.cc", "src/crypto/fipsmodule/aes/aes_test.cc", + "src/crypto/fipsmodule/bn/bn_test.cc", "src/crypto/fipsmodule/ec/ec_test.cc", + "src/crypto/fipsmodule/ecdsa/ecdsa_test.cc", "src/crypto/fipsmodule/modes/gcm_test.cc", "src/crypto/fipsmodule/rand/ctrdrbg_test.cc", "src/crypto/hkdf/hkdf_test.cc", "src/crypto/hmac_extra/hmac_test.cc", "src/crypto/lhash/lhash_test.cc", + "src/crypto/obj/obj_test.cc", + "src/crypto/pkcs7/pkcs7_test.cc", + "src/crypto/pkcs8/pkcs12_test.cc", + "src/crypto/pkcs8/pkcs8_test.cc", "src/crypto/poly1305/poly1305_test.cc", "src/crypto/pool/pool_test.cc", "src/crypto/refcount_test.cc", "src/crypto/rsa_extra/rsa_test.cc", "src/crypto/test/file_test_gtest.cc", "src/crypto/test/gtest_main.cc", + "src/crypto/thread_test.cc", + "src/crypto/x509/x509_test.cc", ] ssl_test_sources = [ @@ -71,18 +79,6 @@ deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] } - executable("boringssl_bn_test") { - sources = [ - "src/crypto/fipsmodule/bn/bn_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - executable("boringssl_example_mul") { sources = [ "src/crypto/fipsmodule/ec/example_mul.c", @@ -107,114 +103,6 @@ deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] } - executable("boringssl_ecdsa_sign_test") { - sources = [ - "src/crypto/fipsmodule/ecdsa/ecdsa_sign_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - - executable("boringssl_ecdsa_test") { - sources = [ - "src/crypto/fipsmodule/ecdsa/ecdsa_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - - executable("boringssl_ecdsa_verify_test") { - sources = [ - "src/crypto/fipsmodule/ecdsa/ecdsa_verify_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - - executable("boringssl_obj_test") { - sources = [ - "src/crypto/obj/obj_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - - executable("boringssl_pkcs7_test") { - sources = [ - "src/crypto/pkcs7/pkcs7_test.c", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - - executable("boringssl_pkcs12_test") { - sources = [ - "src/crypto/pkcs8/pkcs12_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - - executable("boringssl_pkcs8_test") { - sources = [ - "src/crypto/pkcs8/pkcs8_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - - executable("boringssl_thread_test") { - sources = [ - "src/crypto/thread_test.c", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - - executable("boringssl_x509_test") { - sources = [ - "src/crypto/x509/x509_test.cc", - ] - sources += test_support_sources - if (defined(invoker.configs_exclude)) { - configs -= invoker.configs_exclude - } - configs += invoker.configs - deps = invoker.deps + [ "//build/config:exe_and_shlib_deps" ] - } - executable("boringssl_tab_test") { sources = [ "src/crypto/x509v3/tab_test.c", @@ -241,21 +129,11 @@ group(target_name) { deps = [ - ":boringssl_bn_test", - ":boringssl_ecdsa_sign_test", - ":boringssl_ecdsa_test", - ":boringssl_ecdsa_verify_test", ":boringssl_evp_test", ":boringssl_example_mul", - ":boringssl_obj_test", ":boringssl_p256-x86_64_test", - ":boringssl_pkcs12_test", - ":boringssl_pkcs7_test", - ":boringssl_pkcs8_test", ":boringssl_tab_test", - ":boringssl_thread_test", ":boringssl_v3name_test", - ":boringssl_x509_test", ] } }
diff --git a/third_party/boringssl/crypto_test_data.cc b/third_party/boringssl/crypto_test_data.cc index cdb8602..c75551fa 100644 --- a/third_party/boringssl/crypto_test_data.cc +++ b/third_party/boringssl/crypto_test_data.cc
@@ -47,6 +47,9 @@ * crypto/curve25519/ed25519_tests.txt \ * crypto/ecdh/ecdh_tests.txt \ * crypto/fipsmodule/aes/aes_tests.txt \ + * crypto/fipsmodule/bn/bn_tests.txt \ + * crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt \ + * crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt \ * crypto/fipsmodule/modes/gcm_tests.txt \ * crypto/fipsmodule/rand/ctrdrbg_vectors.txt \ * crypto/hmac_extra/hmac_tests.txt \ @@ -2412,12 +2415,164 @@ static const size_t kLen32 = 1834; static const char *kData33[] = { + "# Sum tests.\n#\n# These test vectors satisfy A + B = Sum.\n\nSum = 0\nA = 0\nB = 0\n\nSum = c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d\nA = c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d\nB = 0\n\nSum = -c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d\nA = -c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d\nB = 0\n\nSum = 0\nA = c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d\nB = -c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d\n\nSum = c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 23f85668bf4d0fa273d8c7f63c5fee57811062a674111e295a73a58e08dd0fd58eda1f473960559d5b96d1862164e96efded31f756df3f57c\n\nSum = c590e57ee64fceccd54e0bdc52476a756d32e794922dca0acc780d2c6af8852351102b40dfb97009f95e019a5bf38e5d127aa78bc34425edf96f763084a8b09f\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -4b5b16252ba2355e0b87f01baa721783c403607a4c1b5652c09a68e96926c8e314fa580bf0ad3f8f59bd70f14df86a4676661899b54c79a62\n\nSum = -c590e57ee64fcec882fef3ffd015a3fd9024d8f5f6d53eb537d6abdb0ff5e76a8fb08d5feed113fc9e74745d957adf32704a08339ba42efd5746c5d478e3f57b\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 908007a2f3c551c58958d1059427a0391d4d768f61cb802e4cb062c778354ea3eaa8f0dfbd14ca8203e07ae6d07269b58088a39f7608c5586\n\nSum = -c590e57ee64fceeb242f8a0893eaa0d2ccc3dc57ec40fe917cfde66618fba678ce0c8fffc566d4e8c7944d6443def8014fe8ee410a1b8dfd06cb0b436619e0dd\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1999301bd9877fe07ca711f308b2f1bc4a704fd194ec4dbc297355d6285340d6ad7e90cb0add1770aea19737a06750c3a7a6fa0b778ca995dc\n\nSum = c590e57ee64fcef321395bba088ca0a867e1e85a1ea77478f8783e6a6cf8f3e582bff83cb2d7d9fd549fcbb40dea22ac140351007030059500bdca81413600e9\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 219639ed8afc21e052422fff0ae5583231ebca2999404b099628093e6540b1dbc20b9c495aa7229b5965b19a5fcd653b3fa0eccab567c5b5e8\n\nSum = c590e57ee64fce834a00cc6282cb0eef49eac7a8d5b51988cb49253ed85ae261c76f2327a691fc63eceab02614807048b2816cdb9b89ca66a17b6ed1abdab580\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -4e40fea1cc899fb166dbc721a6639a28be4164ef92545307ed934796afcb9401d75c18d23352471709fbd049c50740ffeebe5590fa2d959581\n\nSum = -c590e57ee64fce1a17609c61ce02f1020c6eb6e241e3fdd01546ce7247725589de32db95f36718d410f9ce9a94fecc8fb205e876fde75ce83f4d01e1bd5d818d\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = b7739ed1cd3e67cf541943326cf76b4476f767465ee53b94c57c83de417ebee5673809b3bed1c8bac2fc4bce29a4e36d6d2083fdea1c12c974\n\nSum = -c590e57ee64fd03e2d08c3d8e5110d08e3d36557d82e0e49b408337a8c9d4298802ae5f0145a9587531a70d2f8af932b8262245428b5c549817d333f2dfaeeec\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -16ca20955a9d8a64cb2be217c089edecc02a75a1ea95fef584925742c18a234974c0a16ee7991e80bd8d4106db385eafaf421ac3373548aa3eb\n\nSum = c590e57ee64fd1bcac71b5b055e5934ba15dd7f56370063369c36e57a6b753269e085d0f4d38bfb711d5579dd1d89d07f266e727b232a497d5b0d9bfbc02d8a5\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 2eb21724781497ad2f57babeea62a20c3ec5d1559867a0968d74351a337db12c17bc8d1d5446b1115b5441530870f67da4275dfd9f3e2928da4\n\nSum = c590e57ee64fc7860b0be6ce861bc2f099db7fb623912b7b0729c019a8183c669c73efe02b195483a4cd2c78244cd59678ac4d62f6887fe686a3eed37ed460ff\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -74b7ff38760864efd658bd6699915be16cc058454b78495ade8be42c9f7470ca9b7a43655e1427ab1bc35a5693dac424a6ed92d10f85a9bea02\n\nSum = -c590e57ee64fc3126776e79d9fca06233bd2ef5570a65e4521183627bdbdbc555e9118508cf63f519bc0caedbffd5b1a913ee8c3603804820a9ce54b1207bdef\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = bbf238886916ca0ba32e9def9f9c8a8e401eb95dea96ef02df9fc25a186e52fbee9ad42b76ba6ca2c381d12cddd4292c5d355341a80c7688d12\n\nSum = -c590e57ee64fe6dfd728dfbe45aee52380b5a00cf1e05e9f09ac582e2714bb589caf2ad038111c5b1b5573a45706ab1f6fd5d5a1ee7ef4a9bf186dca8a9ede12\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -180e4c29718f394424cd5b03b6bdb8911c57fcfe435cfa66d10941f870f8c5eb1e1fd251f14af03f23ccc1841f014bb42a545f476dfeb12e9311\n\nSum = c590e57ee65004b3e18a5820de4a6d25e7c3d310003e0b8716bbfd51d5f0f3e87fdf8e00599d713397255281e66ef419a9d9bb228e8f052764f5f861ccca656f\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 35e2568ae9f1d1dfaccfc211e9c0c6eec9400a0de880a94309992528d428e77772f84e21d0287fa76cc6fb880481ebc43ad20524f895f35a1a6e\n\nSum = c590e57ee64f84896a5f11f575d34b6001f27d4b4d6e7cd9485260629f8f7f1c6ca6f6115b98d776774295dde4d59cdbbceccad097a0a054b501bfb47d81e85c\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -4a4820a05c39969774f623bf6c03ebe0c56dc45bb46e8d1e6b32ee0fc3c6168d26c4d1c0ec7b81f1ea76f164ebd00b2a2a00aacf40175bee62a5\n\nSum = -c590e57ee64edf1b2b57b4cbb92d778ea6b9d9878a0374d4ea81691b09811b105bb6dbf23a57d89264f0e6c83f8d00fe00681644feed56e15fc81103ab9b7dd6\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = efb65fa7b963533d48c77ef80fc7af4bcd72222cabb6232ccf3efeffdde537ce25a8e4129b91273a8654ade9a05ba3dd73740008eec82dd4cd2b\n\nSum = -c590e57ee650e25da7b60146e014f472bfff9809aa8f519db7943f69d9ad09ee75a3427c6127cce7bd27f224b9dec03111fb066956b4903f9f9740cce1aa4ba7\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1138c1cb69317d3aa341c9a4daeba71400f56aae62a98acff1f9f1aec88a4ef01ceac74246fcb531738de63a94fc8b3e9c5ea3fc64101083a00a6\n\nSum = c590e57ee653af8752322840ed720f628f9674c81073b58372e49ef26d4a2a9d46a0391bc170336614b27849de98709a4b321da4ddfb978e9f10df29154edb9f\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 3e0b5c732ba11e1074f0c69e48b78d724733c66368a21409c404debe97f444f4a352acbaef5f077d0e9479ce067043b30cd393f3fdf5d3bde909e\n\nSum = c590e57ee64bc13634cbd149aae35ee47bde6ea3663f74ff300cfdb2d845f902f017586c6d4f83f08c3b4f0c035055d13fc9d340b7b9ed164432aed44e8f4d7c\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -40d9b56339ce561876171a9d37aabd30fcd47dca1171e5467f14c6a9f616b04d67a4abcc8334d637731816e87e35feb10dd3f1b9e50f78ae0fd85\n\nSum = -c590e57ee6477eb692705f8da1357e71591336907a5e0a6e39715088d53b2610882765357563fd101bcf05ca545a0c718f52879fdf4f80cb9a12cf108eca60ed\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0f", + "fcbd9704b01\nB = 8501af88f0ea16b3541e4cc9eb2bebef137d8d33cc4485772c43ed28f54a1fcc2012b2d347c8f126d7ae11eff2f00c37b4989c5be30bb4aa5ea14\n\nSum = -c590e57ee669b662e37f5abf13d00d2f0c1c9a8b99ec546361aad255f375bc2742a3487c351c5ba00efef09c77331577460a47c57125c620b643e9eaf36a146b\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -19e791587fec9007654cd8e66ab13c609d121c54fcbd84c6c7d1d7e7ec8ea4c2f65d64c5fb6e43106b8e2497b89124ce5afbcb5672ea1f19f9c96a\n\nSum = c590e57ee681dcbf1554f22c0b1ffead917dd414299cb37ce6967ffec9c333931e70358729843c8130ac95aba47fa1fa5da74000eff25eecae176f093a4effca\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 320ded8a5583fcfeb53e576bcbeac4f04d7135d9e86b2d9d154943c3b97bafb75e3e45e7a913523db81aa7af5589604d2794974e466f3d60deb4c9\n\nSum = c590e57ee5e505ae4a2e1f25a1ae9b7b4d17dd2cccc09f2416d964e55af6d0d31fe259c160f87646a72e6732d5110256b3b35425225d622b81418435c9dd8cc4\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -6ac92340d14f096abc24dad89a0c226c8ea322f5d4afebd1b7197c3ad46016112d87f4a1d51b2691b684fbfa9e627b806d6829de8f7b960f92be3d\n\nSum = -c590e57ee58c3ef1582bf7a516e36f92b60f5a587e2c8cb071d1d52ff215854e52de1519fd5204fa52292dfdc397d8d76b78005941358b63a3e6ca41b0eb09b7\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = c38fe032d37689f58750c36fa28ef6bb22b5969adc3fa13a98650107d8a4bd74d3f940f6da545ba32fae7b42d9b64761953ef1bbea358a2885414a\n\nSum = -c590e57ee80262967da4038a143f8ff2e78646108f25ff7183444ba507d76f9b05a34c8310e682c05495d0863ceff264964dbfa7c064adf6d26d2dca6e22ab13\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1b293c4f2a4955b07d4cf9cc1d45cc155d6bd2a769636d3db29854baaec92ab9ec084850b924e2cd6286b11e7fc09071d99e3a1729c2dfe94b26012\n\nSum = c590e57ee85427f08e8c89ffebfcc05c73370ad4cb77696c2b2f3878e6f6df341d4d931b5097aba49f14ac0312e7da1c843d6fd08119822e75e6e7a8c7bcb7b0\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 204591f038d1bd0df9200064d852185922827251e8123a7ba48f4e4c296d943de71ad69561129a9ac2052c9d5ebb92fde4eb7d91615e7dcee4c6caf\n\nSum = c590e57ee051ca1a363c47a4cc016c3de7f7e17985009b545528289e9fbc9086f4b42a73826eca0c278b0d1b4ef6d74b9a0bfcb7855d40fdb201fbad1074b927\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -5fe04b754c3268a406954183dba07d5b44ea6f2b785ec328cf159c866028f63efb7342f2178753e17d0b0071445b9e91d6d8957adcf041ec8fb91da\n\nSum = -c590e57edcd6e9ef06fe33f3817ba3d0c50c8122b77615c4b8fa50c5514f113d7ba53ce057d487bcbc373c4384d07b29a527b7ef785ca609474879b42a9a4c3a\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 978e4e284013a3b8aef1c8560a5682c81d92c8253b3c40bdb5ed911df117cf71a51767e8ccc4615e1f70c290929feb12a6e244c18888617aed5fec7\n\nSum = -c590e57f0436bdceb586a093522eb1630e0fc08f8790957aba1875a42b7676f9ca936e8f6f3478d6ef5cd590bf6ded0700440dcd769496822af8015f0a6ba2b6\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1de6eefd2a87326445c3f10ce85dd7404e415333ad6a60d2fec88caa6fdcb4b7fd0e7a9ba659533758a665b451f2572cd3c9cc2ccb27019330fb57b5\n\nSum = c590e57f1df3f004d5e49f49fa28603b26659f1fd35e0d8d7a2753591dbc12c51e6b588427dbe3faba2f0c1f2f0a2aea9ba1fcb2fe71c6ff40555058d23c8661\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 37a421334ae5311aedbd9fe500b3b5d09a0ecb466d793e87f10e2875c3b49eacb5b5e5bf712b89c5c842a397ed5046125ba6fca9e084508cf8cc3b60\n\nSum = c590e57e9a4abf4572fa7c4c9f73e9d3fd1227646fd6d15b51924bd7a5d417b01fe6b4273eaa6ece387422b81c8116f29702d7d66d2f6e8c3454807b3b7d413c\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -4c050f8c1804f1e26cf6d682289fc1eac97870ebbb1bc8f986d9d29f3ad005b0337b8f6d108f5fa14a467060174edeca359b5bc92b7c7f509df309c5\n\nSum = -c590e57e64216c306f17017ac9dd7085113e16c83168664dbb77c7ad3ddfc79b09f9ea0c474a0b497ca15e7fb258eed9666fd009f691a3b2d691c2c6b22ba3b3\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 822e62a11be86cb4428d4fd11473d28707e6dbf951364d23eece22b450bccfcb2adbf2f1cc6223d9b46e987947e1e696ac3926a2893f3d052744a74e\n\nSum = -c590e5806ab4d09773c4f94a4aac09f6ed7609eec1d0bafecb09e30f032f706e9adadc191ff9e6d7dccc821f7a8666a590e521749d24912c5a5ffeff246f7c85\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1846501c5e8c58b1b3e4149a0c7c4209f888178b7be5bce3dd681861f40242241add3e89c93c8ffc613bedf52e2936ad3fa59c6d6fa8eff334aff3184\n\nSum = c590e58248cbf5dd61ec57994fc862ab479dc6cda51cc17356c45cef66bbfdd12f5cc421940a561581c123fb17483beb7a1cce2596fa9ca76e722a6f4621eae9\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 3627c270bd6ece96a435da25521ebdd7e6bcd7f2c4a16481e3a0e1381d4a60a4a21e457da38bda1a1b080b498cbcb1784f42fd2520ea12aa36cb19fe8\n\nSum = c590e5771a85bdb1f26c0386ce837bec4b0af5656496efdf4f134d875f066dd6d477ca8f87ffb275da07da4dd1bed4232849a526836b47f2d69f2d53b6b3e2f1\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -7cbca111f98936aa83de74469daa6f3e9d4b85267bd9ac749cda77c78863eef47ea264bc56efba80b9508b32f8608117a1f5f82628931d27822bc6810\n\nSum = -c590e571c76afad23439f904e8a80fc28dcabb6cb732e361ed3eef471be6fa755e3fe746edbfe448c1f289ffed7dfc01fe9066d780564f57f93abbca9b9a995a\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = d1ee4d3ff56c5752a23c2b09397e72de2821c5ee51f6f258a10c6efd9fc76d290846619f28710f85979498b50afc14fc922747afd669644013dd5b1a7\n\nSum = -c590e598cd5d4a59ff5d6c97c6370fb517f1d492a7776f90063b0ddd6702e37c60fc78bb12857911cea37b7263584d7dc815676de6b8880200acea154b59b08b\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -19e70d7b88745dfe68b9cc4f5ef23feb436e282d48f98cf90c3a54f92d0645bee3a05f7ad6859ff918fc90c62b19c3b0cd43edbdaca0dbea4971e9658a\n\nSum = c590e5b5829e6fceb77830fbe999a98127b50302fd0f6a86ea4aea27b846747a07e6fcf5457676e6446137d6bdd8ff4fb7ca747b650b066d65d7dc1e172488e7\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 369c4ea0fd2c78c2ccdd2ee92b020319b3c3c0283fdd9cd5568b988a2aad30431dd35078aafb5db57d571177fd0978bddac2403c180606dc523db43de6\n\nSum = c590e52a3ab5d5c458634254e2f672a322000750741e969d2f6cd12d172480ad1455300e3a0575b068b85d50b58f9737be13073188d0f03b71494bd0fd2fea16\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -54ab99f90d329c2bda29744db303b1e1fec530aba9dd4143a4158969a2466189c93820888ae04b2508b137f01af03eaf6f19f9da19ee87b3fadc4060eb\n\nSum = -c590e4880579ef7241bde94e8c7847badc705f53828751f9975f0e66371d2ddff8740b143f32e88be8e686e2bf5a3ce03d864d7699a813b1777b9239af242c7d\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = f6e0d5df5f494184e07ff2789b494189fbb6c7f04d754f066af590bc6f6242aec332f315af601cfb76a76d4a7270cb692a0922b6a3e8556d922a4c1e84\n\nSum = -c590e6dbe54098694155509e38c61d503ab7e5237d2cdfc2b87fb57e3a8420fe37fe50a0dad4f0eae3d38fad6198e4ecaeae183a12078f53d09ac8099c715242\nA = -c590e5", + "7ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -15cfef0c997b655e26f2c5b5cfa1505fbd443dd9d7babd1a0ad0dd636aedd4796c968aef2af9ad00d53fad15d9a005c61996f3cc4fe70c9c83dc3010741\n\nSum = c590e906254d013be2021ad591e76e26706a6815b8c484b6528fec65416e1066957002713e1183f1005f565983aad7aa031e549e6fc57094ca3e4383e7fdbc15\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 3873efd326a5702aca6857cadd04ab87ec67f75426f45e1d79414c026173ab94899cbeb85b5b75bd4001ce3505754cc9dfdccfaa63f6a6d43b80e8d7114\n\nSum = c590e0e0079190d7afd80acd6326fe93cc00903318608df31ee4493d11271dac7291bd142cca0e5dd7dda59dabd460a69b7855d9c2acb5f062de76665e07cbd7\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -49edebe3df9db276361a943c1c259b1591c20eeb453edc9cb941b86cca2e824fcc3455befdd7125dcbbbaf326ac12d960c6e01e1464fcf289657b687f2a\n\nSum = -c590d9ae456d66c1b132d844eb223867ba4560b36f53c42a616cf8cc657e6d252f813847fb9fc50127227684e5c0f5cd890eceb341d21e788e42f843e9b64080\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = bd0a0e2680fd9cc95ea214887ee6b6c889bc9fb7e1cab411c04c72f7d2a2b35818f7686393a21e10bd4810691852542e7ed60f8abdcd18e0787efba0a81\n\nSum = -c5910498291472fe1d0047d5bdd9e46deb3f26000e943fce8d83d700d9ae233ab3a28849bbb346803da142db6a471e9f79cd49571f40dbc46f7b727a4bb3016a\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1f1942c4a42c9200d9a6b16f2417c58d3cb0d544fd8780d5c22fad0038eb58ebce72498d4844f49dc082037f974ccb7b92b67c76116f0faa72ae7242b669\n\nSum = c59112d841ea109440e78563d9eefef201c81e86ae967083f8b7db80d1eaf58551d30519ca6dd79164fe69a29cf1ba22446cb2999f73292241005bf17b37528e\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 2d595b9a41c2b5e81734cd843e9bdc16353775472e3cec09c6afa53d0b35f71c4b425847d9561bfae749362a32cf961afbf8fca85ecce12f5c25a1c7078d\n\nSum = c590671f890ca06c74ac6d2c4d75aabeaaa55312e85a5e1ea9cef0e08e154e2b090eaba869e9f6e4a47ae10b9c1eb0f6ae4fb3ef12b3121d96066c6c8e592b6e\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -7e5f5d432e6516530102bef515977b0c963c50f4e42862df23f09e989c2451a80e2f083c0756a488a14dcaa8d65c000202b19017b837c9ca935f4b171f93\n\nSum = -c58ff0ae92ab03072154949a7143d45278ef77a0ba71a785d5a370e0d30a9b4b4f7e96a395d13e6afeebbd717365d471ee56ba11c472a63c0532558104bedfc5\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = f4d053a4cbca69aad9949b26ec03acc271ae7edd9ac1370aa3f059a34f040b382333dc54bfd04a17c4e7f361b2e0bffafc8ede5824195a9eaa4ad4b16b3c\n\nSum = -c5927a5fcc3b31abeca3998ad99c07626112288a6ad95b24929fed581040757fdce73881c48b02daf09986ea436a3f5ceb6833c31fa2e1691567601a26c7a6c9\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -194e0e5eb62da61a42b5bcd31470c3b603f3b318a18dd85f1d886e3928b3082307eaa5265049fa7960490dca2b80a3d167d227cd81713b596604e4d575bc8\n\nSum = c59395e94d495451e3fea153f3e4361a088004a7d5426c1b94aec44108ad6f5cecc3a80dda0cea9f51b882747258137e171bf021b4fc59f4dcf0106d4ba952fa\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 2b06a66f9858058ff3324e77975c3e2ce1b589bf329d48800af6fdbff850d920cee3667e6ec6408b5001b0b908c2b68ca398112318f9f7d1f10a1723907f9\n\nSum = c58bdb26c0fd6766f3affea389cbe7db25c06d5d56356d3d945347775bddf479ffc9e279e7d1ee88eddb239906749815ae4502fbbc6fe978a001ccdafd89cb10\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -50a582552676a974f6f8b829ed87afff17bf1e319d509785acd59d0cff5d55aecd75d8a540fb25b285ec06052ef3d000cb3a4e65ae0dcbfcf32f0dbe67ff1\n\nSum = -c581afe9b7ae86d4b7053f19649beea6cb935799a553f035f9b9a7fba6d5559e4ecdcd1637c73c8052c6cc52ee1c28d1e5aed9db7261b7356afd6e3dbc213684\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = f35952ea147fcd3fa2f15a7ced1af5a1e91b593fb521112f46cd585d894b10be8ecc13a5ec1baf63cb60678ab5e80c8a2dcc53069131ff4d3918e1d4f147d\n\nSum = -c5a19f36a65a6a8d52a53a63f99a1b957d6e376b7010ad14695d78d67b0d7c86881006188bd27bbf205c8c9c200dc8f5c08ab6b97dcd512f6cb93ed9a361ff9f\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -10b9b7c00a9bbbc7a5cc34ed2f5b3f57bc4e1c36c16acd5caf64054e5f92372d594c4119ac7d83d7590a42b94641a312390018db0286da0ce83f0dc9f1b49e\n\nSum = c5cd0e5da24b67a894402b0eee5dd586ab70e5beb0693e263a54995193663a9b770141379c1f097a49d1a889bbf0c348c6f40ed50bd7bdc11a7869c6106c6d80\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 3c28debbfb98d70940bcdfe1f3153085befc6f7719fbdf2da6848066b8504c1c4a876029f90b3f00ce263055293bf618a25834690cf36bbaa769fa36fc227f\n\nSum = c54e2c560a00226701b76cf03d5de27a8c69b38a6b85dad9f7c903d2e87f9a7d247522e72491460f6a529e5ca2aaaf690cb238b873ffb49d9fb0ecacfedd4e90\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -42b928dc4fac6a8948013ecf0cdddb994835c4cdc9676d14e510fe442e4fd2364196f04d94b82bdeb0e3fcc41cd7e9a19f7de82ecb15b7c020131eda92fc71\n\nSum = -c4bfb037f6e6e861efb090ee610c33e7568790259f747dc6e55d442aadd68c0cc93c7617f83980e8813c0fb7dd28c8aaca6ad8fdde5d2bfec9ae096faa9ef54e\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = d13546ef68e66f9b4edd40ab5e8c6ecf2a592999dac4802750d0a67ed75e42917a43bf79ec7d52c7c772a1899ebea7e3e6dda2c46d9e569622f65c2ed155b3\n\nSum = -c6aa2af8c9ae8be4aada83f66b7f31a8bce5e92c67d8938424a1405903e5502bffc4ee1e333da4bcfd0cb383b19a566372f877a8344b66dbceabc9786dd0e4f2\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1194579e35ebd131fdb15c75f1471529733ffdd2e89513d17f32b87d73765dca50e3446c117a681b409312a4ad2cf10c4a6c10791809c866edac9ac946099f1\n\nSum = c8aff66c9bdaa49eafac0f65d3ddff223b7a5471f7400431ca3a54615d600fc4a163f8fb648bddb5fd6915db1991611805040e0f86f152c8fd3333ef70d632e4\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 31f10edb58ad5cd24aca136c7733ecc15c86b22bdf0c1eabd8c3f9030b2257546ad3f23f265df7ab4659381b2c9d9c556b2576ee42688739d6234239765e7e3\n\nSum = be1b6eb768e2cef388eebe31f9b21e51b38b351cc8175eba06d49eef04c2936f32167174dcb82297fd4180d0afb5da2c455d158c7a5bf01bdef8c295a4f20390\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -77576c77d6cffde0210affd12b8a2047226b4327137e38d05d975e227eb56e028a04862956ddba34bc20188b711ad2668f4a114286eda3980d83d36347e4771\n\nSum = -ba32fca1d5cc5f31ecaf5407f376d3aef9f4abc04fd4c6893721d3e50e9141abf356eb2ff6f7a4f9b42983148670d2918e1dff7aa7ae33a6e9dadcb708b4f9dc\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = b5de8dd10836f9f9e501a2718f3eca72bbd3d8ee97a7bbdd58c40ec1e1ca8a3675fcea77b2e594194d9ff44e056b4c12033b725fb1c96ae75f62314d0bb5125\n\nSum = -e388afbf17c495f86aa7298a45f848eb57e5baaee42b1f7de8c2311bfbb8f74549712c05fd3bd11ab8874fb55abb22a37ba3512e733ecd5c472842e8e6f7b179\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1df7ca403174c726dfa7bb5b398d88953233d15faadbdd36dc141c", + "4acf0b0cf5eeba722e8b15d2df6f83cd5bf3f39b50cd519a8dd0740306e757431d0d876678\n\nSum = e891babe65ee02c02e7e876c0df3dc3bb37491008f3642ca7affe2d623fa82a6d5a9e5400944a374ab70fbb8f952dad0c8b27c77475b0dfec7b0694051dcd1f4\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 2300d53f7f9e33eea37f193d01891be58dc2a7b155e700836e51ce04f74c98577af32b68971ea539626d795f928b537e1a60c5d6a49043a967df6974786c86f3\n\nSum = 4dfc2f63d60f83fb1d397d2406b02a3b25c1a57c09c2fe02c76696b7c956e44facdef11470074d8fd8220c7bf8e647ba873fe9c3f9e77d6aae7b5fb64f1cf566\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -7794b61b10404ad66dc5f10b05ba961afff043d32f8c444445477e19635705ffadd7c8c3021eb0ab70e175dd6de13f982711ccdca8e34ceab155a0158a53559b\n\nSum = -3c19bedc60e7d7dc3daaa36795e453d810c952dd5185fcdc857e2be806e520068dbedb91c4a1131b9eb6dcdfd500045209514e3e9f6e6df41d2ec67fba20e10a\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 897726a28567f6f54d54cac776866c7e14e89671e7c9456a872fe8e925c8ca48ccf7de45ad84eb1faa4ca57991c78300a5006862035c5c6142a2394c1f4f69f7\n\nSum = -28c2bddfeffbdbdb1ec6f06aa310d1bb6f0c4b88d0106a1b381ae6fe8f65c18bd9895fcba6931ecf06d9dab6c7a3ac9e00361bf165f16bd16af25230d040cd842\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1c69af880196deee0616f987b24a25b60cb12cf3dc7b75f6c75005b17c9ae2e6e3ddf42e2f70beeb5249a29131373428d55100875bc4bf2c14f5423412a9c8d41\n\nSum = 372ea360832e30b16a3c30a2157c8bddc4408ce0428169deb09bf68113e4b8482d887de1a7cfc80272e597c3f3f104e6825a1fd2a68b41cbc307caaae17d453e6\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 2ad5950894c933c4518c39bf24b5dfd861e56e4b4eec75ba3fd115340119d9a337dd124430ad681ebe555f9e5d848c71577504689c5e95266d0abaae23e6408e5\n\nSum = -5b29f4991cad86845a50949f25ad6cd7c883d71ceec9795cc528f58a4a4aef9dc139e8e87cb82071e112b2d256181eaad0a98fa36b25b67dc673608939b48e08a\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -678302f10b12837173008b82167418dd2adef5b1e25e6d8135f3d6d75d15ce42b6e55485f3da805595a2eaf7ec84971ffb8eab0d755263231c707085f74b92b8b\n\nSum = 98b37ecc0b42a15f52c8fc8bc2aba294031bc2dfa37dcba0fdf1f5f5da00b8b3daece033b47bf254e8b5e201bae24995034673800d53213f6ee0796be1ca93845\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = a50c8d23f9a79e4c6b78f36eb3724e996576e1749712bfc56ebcd742eccb9758d0984bd12b9e52389d461a27514ec20a2e2b8eea177fcde4c4dd89689f6198346\n\nSum = -1c15985f3ee941d7ab6bedad88143cf497681424e7456fe30eafbdedfcdf1e927db124c775b87f36cefff17a35972ac40d498c4be818883bfc206f44c5e5eec23b\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1b500779c002f208d9e0ee3f5907d2344142623b980c20a0c7a30fd92bb270a82e566e0d9e46593893b6edf7dc30633cba9b3a954775bd71a6c09e44fa0c7e773a\n\nSum = 34ab71257e63b234258027e26bd35dfa5e07f67385b6772c5ed445438478bef5a835e87c9de413e23839849a71f5af99a67427098b682bfb6becb66d20eaecb2e7\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 33e5e03fff7d626553f528743cc6f33a07e2448a367d27ea17c7972eb34c110b58db31c2c671ede3fcf08118188ee81253c5d552eac56131168ce56d55117c67e6\n\nSum = -44f9508e3430f93d4e2c8be1b856f46c01d6940e1bfda8515c747a1a95239547322999e500e718ec98ed211ae04ffc76b0e6f2364ce9d913ffb80397f24ee8d64e\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -45bee173b317490c1fb78b4fe7635f2c57fc45f76b36f793a381282f665043318184509ed8593eead436249d39b6c3fe039543eced8ca3de5517d497be2859214f\n\nSum = bea59d2cb0bf556876d4f8a248339af69644a12d3dc1d9a3d83929929b8db5aa26289bd06e2488a96820ea8f59168cc82f19b5dfaab20d245495d6e24bfb260a3a\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = bf6b2e122fa5a537485ff810774005b6ec6a53168cfb28e61f45d7a76cba63947583528a4596aea7a369ee11b27d544f81c807964b54d7eea9f5a7e217d496553b\n\nSum = -166abef6a1682bef78d4c5905a833b81a03c0bf0f3735973bf7f02181a8ce5c7f125f41fcbb10c7f5905e492fc3f6b172f23d041620f8a7ac6f76e0c8a53d3cb5e8\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -165e65e84979c6f28bbc1599779274d59ad9b0d25e7fc47f9b0e3736cd7a1ae94c3048b42e39ea1f7551545ad6a8fe9eb9f8eb25f8055dce21a170fc8d963cc6ae7\n\nSum = 3245e002843eb7116b987b5cf9160e6891a74a6843039f8517fbda68b0e6ad87fd0aa836a2b6aacabcd67d45d327e6cab43ef569f488354e22f4553eed09e83d601\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 323986f42c5052147e7fcb66162547bc8c44ef49ae100a90f38b0f8763d3e2a95814fccb053f886ad921ed0dad917a523f14104e8a7e08a17d9e582ef04c5138b00\n\nSum = -464684d68716498baaa3744d20c112a854e148e6d004e4142c79f4e25a36c0acbff72c047925377f377ad690c63fd21a3f05911d11fb8bb79bec4ea68fef9f1d575\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -4652dde4df04ae8897bc244403b1d9545a43a40564f8790850eabfc3a7498b8b64ecd770169c59df1b2f66c8ebd63e92b43076387c05b86441424bb68cad3622076\n\nSum = bb90e9e393538df233d499955020b8f3c9789b1f18fd5ba31cdcca6afe24842166e6cbf1985f7f9e002335be46de06ce11ffbf6dbfe743642cdeefca1a856219fe4\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = bb9d42f1eb41f2ef20ed498c33117f9fcedaf63dadf0f097414d954c4b374f000bdc775d35d6a1fde3d7c5f66c747346872aa48929f17010d234ecda1742f91eae5\n\nSum = -1804d154182f4b71cab3529447ced41ac310a1d14121847816c74171759998b707db0f1f3a9d6f6e01a2de48ec83a45e5dc7d0ac9133c8e00ec41814e3d2818834f4\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -18040bc332b06521fbe1c794d99fc7b002ba7c1f57d24b28d48034c360c86c091d8bb46880c5fd48036795456a2a3d96d675225ada932615446eb843e406a817e9f3\n\nSum = 3b75f0b892eb00075eb21961cc018a2d297764bf560cede3290cab6682a56931b831380b72a9afc3dff88f042ed5bd5d8468d8a1e267b36e508c09ccac2a565936e0\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 3b752b27ad6c19b78fe08e625dd27dc269213f0d6cbdb493e6c59eb86dd43c83cde1dd54b8d23d9de1bd4600ac7c5695fd162a502bc710a38636a9fbac5e7ce8ebdf\n\nSum = -4b4bf674436c9b1079c2b24cdda19247d0db44061c562ab6f5300eac53556fbe758151824b6bc6bb63a958895fd7c4205cde5484a9fcbbe787fe38c3d36f4549dc23\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -4b4cbc0528eb816048943d4c4bd09eb2913169b805a5640637771b5a68269c6c5fd0ac39054338e161e4a18ce2312ae7e43102d6609d5eb252539894d33b1eba2724\n\nSum = dd8af6a278a84889cab2d444efb282a7259a608117db26583287f051bca1b70c21f8c3d95b2f4e0b7d25b6966771a5c41414c386bf4491ef7b055b07455c12b5d8d5\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = dd8bbc335e272ed999845f445de18f11e5f08633012a5fa774cefcffd172e3ba0c481e901506c0317b60ff99e9cb0c8b9b6771d875e534ba455abad84527ec2623d6\n\nSum = -16cac44109b24fd5d47dfb5994caecbbd534ee11178aaea4a100d9e63bb2c5ecdcafce1e2080eafdda00d26c29e01980166d8db67800e33027f5260d154efe1a98973\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -16cab7e7fb5a6170d790e2a99de7fbf5292f8bb5f8f5bb0facdc691b5a65b321fe0ad872b4e373db7a1d1ddbf1b", + "a83139df862d15c96d9037b4fd0100552408393e72\n\nSum = 22db04aa783edd3e1a55d263262805f2892c013f78ebb86239f2e5981090158f57bdf3bb171c2e0c1c7bf9bc88ab62683581f8b02c5bec8f631bb24ade9be235108bb\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 22daf85169e6eed91d68b9b32f45152bdd269ee45a56c4cd45ce74cd2f4302c47918fe0fab7eb6e9bc98452c5085cbfbbd0ccdcb10f1e262b6765c4dce9f249e0bdba\n\nSum = -4c8c0b74eb7a79a12ecaecf885b9672ac717b1c8db5ad251f1551ce80af89acf3a495066c85a96e6430be8e5888ab1ef3edd5e76645b5914ab55d221c34d07f8d5ce0\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -4c8c17cdf9d268062bb805a87c9c57f1731d1423f9efc5e6e5798db2ec45ad9a18ee461233f80e08a2ef9d75c0b0485bb752895b7fc5634157fb281ed349c58fda7e1\n\nSum = e3718adf0c2546c8cceb0e8c7d909deaa50b50f51d7b80f8040763eafbf581c017e7e12325b258503fe651ffa4c3d3ff9200515d816dfa3ba372dc937480d121ef056\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = e37197381a7d352dc9d8273c74738eb15110b3503c10748cf82bd4b5dd42948af68cd6ce914fcf729fca068fdce96a6c0a757c429cd8046850183290847d8eb8f3b57\n\nSum = -18dd84a4e54a29c1b3106ef2f2d92be21ba64d2e26b3f4c2ea68685557d01a07f9229365c6d109205fa116fee59cf385cdd61b7fa5de8de751f02f1dc0eeb304babb4e\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -18dd83df5464aadb63419d67f36afcd5b0e5f70874caa5899b262148a9bb48db4b38440b101731ae39a2dbb5e21a9a1f064ec8d15427ed448725d9bdefeee72b4a704d\n\nSum = 3ce64e7953aff0e057cdd6c17499461666f5bf8dc3a929ba7ba919486c1631c25c0e142584470d3f759157c045f9f488502a76024b6b7b2bf84c0adcce8dd7c6d6898f\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 3ce64db3c2ca71fa07ff0536752b1709fc35696811bfda812c66d23bbe016095ae23c4cacd8d35cd4f931c7742779b2188a32353f9b4da892d81b57cfd8e0bed663e8e\n\nSum = -6a392e555c2ae89dd73f86e11fd98d1d59ed03072a0dd61add633b317d5638d67984a55e51f01a2db94ad6eb6488fa80cf4f25a32d436886599c33b5287a9525f41a4a\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -6a392f1aed106784270e586c1f47bc29c4ad592cdbf725542ca5823e2b6b0a03276ef4b908a9f19fdf491234680b53e796d678517efa092924668914f97a60ff64654b\n\nSum = 8202089b883a5e77457036254c2a73aaf32f03eb1e61fae428926028b499b7d0a4f4e5256094f34bc2478f0595aa01aa79b5d36d7f30136d3af2be93b70552fc6e988e\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 82020961191fdd5d953f07b04b98a2b75def5a10d04b4a1d77d4a73562ae88fd52df3480174ecabde845ca4e992c5b11413d261bd0e6b41005bd13f388051ed5dee38f\n\nSum = -13a2e13d675e3fa89489c870cda617ae92ccb7d2f6b6405eafcad9c89a682b63364c333476adf0322febffad973f3dbddb7cbaa41a64b1ea24dcb2bc2196a0af42eac3f\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -13a2e1310e4fe7ba2f8cdb581daf34bdcc20b2709b97ab6b1ad6b557cf86de506b6d8e3ecb4252bb0d8c1bf9070718276f044579354947dff8300d662486a3f1abe613e\n\nSum = 2bf9f45c817a8f5c589a208c57c30b52866e75a9b6ee0fb7c3f0c7ec3761f2c114858241a189e331aa9ab440132dc8f5ab7dac0891a69d5573dbe42fda019d30610f07b\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 2bf9f450286c376df39d3373a7cc2861bfc270475bcf7ac42efca37b6c80a5ae49a6dd4bf61e45ba883ad08b82f5a35f3f0536ddac8b334b472f3ed9dcf1a072ca0a57a\n\nSum = -40557025ab86f90705fc86e3ab3d8494255bee490822e27c5551037f36f9ca834fd33c11a1a162357cb21eb83254c4da56b9f8f54aca29b95283ac03732a849258e7c41\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -40557032049550f56af973fc5b346784ec07f3ab6341776fea4527f001db17961ab1e1074d0cffac9f12026cc28cea70c3326e202fe593c37f305159703a814fefec742\n\nSum = d2985750cb9579d3f5dc3db7d2229f06e2a0d57d195819b3646f84c08eafc093def93748aaedf1f430eedb90c1694d894339caa4141ef5f07708e1a3607c5793df599b5\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = d298575d24a3d1c25ad92ad0821981f7a94cdadf7476aea6f963a93159910da6a9d7dc3e56598f6b534ebf4551a1731fafb23fcef93a5ffaa3b586f95d8c5451765e4b6\n\nSum = -13a024fb88eba47aea55fb69680479058efda97b81fb1e6e7cfe520e8dd8ad12deffb69662852f9a94f3b029a37befc620d792a8589660e2ebc7d6e1bc8c0c8f35ac1216\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -13a024fac35abefc04062c97dd050ad68292e9255c49351f43af0fc7812a9841b251cc4707ce75c322cdb1ee5a786d6cba100b55aa44aa4248fd0c8c5cbb0cc35c3bc715\n\nSum = 22701a8dfb82a2ddc8a5485b05362205a549bcdd24bbd660f2041a6672732824bbcac4ff58605ccf1d8ee066204a4a639828c41b722fb4a1e6c9bc3f82a89d85fd042f85\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 22701a8d35f1bd5ee25579897a36b3d698defc86ff09ed11b8b4d81f65c513538f1cdaaffda9a2f7ab68e22ad746c80a31613cc8c3ddfe0143fef1ea22d79dba2393e484\n\nSum = -4f73fdc6540686b350c859bdbe8f22340786ddb04b7ddb8858d33ce8931bcf660269129607f77dbc1db38d8186d8bae7ebb4ec8716c6eb26342ec8290d8d8988b1f5fb0d\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -4f73fdc719976c323718288f498e906313f19e06712fc4d792227f2f9fc9e4372f16fce562ae37938fd98bbccfdc3d41527c73d9c518a1c6d6f9927e6d5e89548b66460e\n\nSum = dcbcb3df6508052fd0d1cfb0a6088fe978227066c58317cc359f508bce9f45987ce3152022e19ef068b0381ce7d781ae3e7c04243541744c9f374a3f28dbd746acd3b9fa\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = dcbcb3e02a98eaaeb7219e823107fe18848d30bceb35011b6eee92d2db4d5a69a990ff6f7d9858c7dad6365830db0407a5438b76e3932aed4202149488acd712864404fb\n\nSum = -163f4ba6595207387ef0956796ac29e3c6862b5344abdce3db4ff7e960b7727fa0a2870dbbe17bd8c446000b3074c1145368d4b84b39029110f915b61916fc29555d7d800\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -163f4ba64cf8f8e0908b987a7dfc3300d5bf7f4de250be4ee7bb03c4efec91328dd7a868c636103b4d23a0277be488eebcfc5c432053e72706cc6910c319ec2c97c678cff\n\nSum = 3588d982604f471ff0ff784942bd43d85cad820864e0b9ee80cc9a9e3807d2739eb58d447830f73fc8cadc88d864f98577e43adf5150b2eb104e75939caa7de02419b6575\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 3588d98253f638c8029a7b5c2a0d4cf56be6d60302859b598d37a679c73cf1268beaae9f82858ba251a87ca523d4c15fe177c26a266b97810621c8ee46ad6de36682b1a74\n\nSum = -4d51ba5f184e5d20b30f8e41d663d14dbe4f692f1a0749789c02290af4c889268c319fad8b9b7c9cc71e8d9878039931447fd6ede967c5c82c1915631f3237aaacf4a1763\nA = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -4d51ba5f24a76b78a1748b2eef13c830af1615347c62680d8f971d2f65936a739efc7e528146e83a3e40ed7c2c93d156daec4f63144ce1323645c208752f47a76a8ba6264\n\nSum = 9d7a5610dcfc50699e6bc065584fed73fddbd58dfbefe377eaacc024e33e6b4fd361fac0844489fdf13efd8dca7fae0747603f4b26bb2a9bab9de5241a3af4a935ac940aa\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = 9d7a5610e9555ec18cd0bd5270ffe456eea281935e4b020cde41b44954094c9ce62cd96579eff59b68615d717f0fe62cddccb7c051a04605b5ca91c9703804a5f34398bab\n\nSum = -1258b397182002c966f064c2cdadb06910e2042d0f51b4af494338c12b6efff052fe564a00e581c5aac0ea79fd8a1ff68ed92b7f74baabb03a51337d4b9b01a2f64ac803cd\nA = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea", + "4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01\nB = -1258b397175a71e3e80a14f3fc22b0fae1d5996cb92c02c5fa09e97ee46251db81d1a85fb18acb0bd34ec47bc2411c74357263f8220c59f999ae68b2f63b30a32a7157b8cc\n\nSum = a1eea50170df6807aef40929a52c097081e1755b575a49548ee5868281973a141920234cd0176d64f84a5874dc417cdc8a5c338cb54bca390538e1014d638b51\nA = a1eea50170df6807aef40929a52c097081e1755b575a49548ee5868281973a141920234cd0176d64f84a5874dc417cdc8a5c338cb54bca390538e1014d638b50\nB = 1\n\nSum = c7c26d68246f16d9d9996fe67616d2fd48809916e8121a5ef95b17bb9b8333d84e2416bf2a5eb3b686c936b9722e0a92a376f357aea7719610e864d9e2a5a677\nA = c7c26d68246f16d9d9996fe67616d2fd48809916e8121a5ef95b17bb9b8333d84e2416bf2a5eb3b686c936b9722e0a92a376f357aea7719610e864d9e2a5a676\nB = 1\n\nSum = 80d5de21acc1eb10fff4e534d23b5cd39e1eebc3d7f03aea438bb6e5237ced9955bf86898e93c74565c9a197e3ed2ff8edd3acc41ecef97c4fcfd52e1cdbb07e\nA = 80d5de21acc1eb10fff4e534d23b5cd39e1eebc3d7f03aea438bb6e5237ced9955bf86898e93c74565c9a197e3ed2ff8edd3acc41ecef97c4fcfd52e1cdbb07c\nB = 2\n\nSum = e020b9bd8d194468f8b563c8f586f6959533be8507bd4d3d7e494ef3733007c062caaa65da5c51b52f18cec4894966352f948517ee92d5f9b5ed00f020b1d1dd\nA = e020b9bd8d194468f8b563c8f586f6959533be8507bd4d3d7e494ef3733007c062caaa65da5c51b52f18cec4894966352f948517ee92d5f9b5ed00f020b1d1d8\nB = 5\n\nSum = dad6af803cf2f40e75cbb564e8229c0d25465930d2ceea73715682c26d582148a943c1c767ac5167c0425975ff75a66eec5ad418ded078569dea2f77359c1cf8\nA = dad6af803cf2f40e75cbb564e8229c0d25465930d2ceea73715682c26d582148a943c1c767ac5167c0425975ff75a66eec5ad418ded078569dea2f77359c1cfc\nB = -4\n\nSum = de90e3172430754f80e116cc8c848bee88c8e31810c6ef0ded5b05bbef6d5b81f9bf6593622ebfcb2b41be2e87d62ab7fd566763b74428275a16d1da482e5f76\nA = de90e3172430754f80e116cc8c848bee88c8e31810c6ef0ded5b05bbef6d5b81f9bf6593622ebfcb2b41be2e87d62ab7fd566763b74428275a16d1da482e5f7b\nB = -5\n\nSum = c153ce69e35411c7f1e52809773ce03ce8d2af10b5c7aa3f4c9354de5ca044b7ef25089f1e96bd14d6c62c88b3c39951df19c73751ba25dc758534adba7faddc\nA = c153ce69e35411c7f1e52809773ce03ce8d2af10b5c7aa3f4c9354de5ca044b7ef25089f1e96bd14d6c62c88b3c39951df19c73751ba25dc758534adba7fade2\nB = -6\n\nSum = f0c843f86e227571d67cfc34ac00d0e6f87f4cbd3273af68562657ae5ca82ddf5fd63476d56d5cccf62dd93f8320c0ba88658493dde282abc22bd09a01f6f2be\nA = f0c843f86e227571d67cfc34ac00d0e6f87f4cbd3273af68562657ae5ca82ddf5fd63476d56d5cccf62dd93f8320c0ba88658493dde282abc22bd09a01f6f2c5\nB = -7\n\nSum = c5ba28844b8947aa0c2933f06aa88f0b34e0e10ca9baf1cc3bd5ff2dc0590e3ac5a2f2d3a1408009e1b35e08426bdda001adf93e872b03f4f6df28d34a3355e5\nA = c5ba28844b8947aa0c2933f06aa88f0b34e0e10ca9baf1cc3bd5ff2dc0590e3ac5a2f2d3a1408009e1b35e08426bdda001adf93e872b03f4f6df28d34a3355ed\nB = -8\n\nSum = 84da246c2485e335d1f3b7e31c2408365f2afe7bff7b596440281c1618bbc8bf7a3896ece480fac4a29070539a95f1d718c151ffbfafbb82629bef9d2afbaaf7\nA = 84da246c2485e335d1f3b7e31c2408365f2afe7bff7b596440281c1618bbc8bf7a3896ece480fac4a29070539a95f1d718c151ffbfafbb82629bef9d2afba900\nB = 1f7\n\nSum = 9673d93165b5be256689ba4e750243537f85bc28daac7f65338074081f114b3a83871683c89fae3c87d44da053557aa16dd074b1bdc16c02a74c5b495f875449\nA = 9673d93165b5be256689ba4e750243537f85bc28daac7f65338074081f114b3a83871683c89fae3c87d44da053557aa16dd074b1bdc16c02a74c5b495f875453\nB = -a\n\nSum = fce022b2dd492a96f8b095712803f318a45a9a8f00a48dec06accaf793e54e59daa14c56c2fce011e30e6394937f7bd6fa6afa1b6dc3b5359ec7bb4f757c5d89\nA = fce022b2dd492a96f8b095712803f318a45a9a8f00a48dec06accaf793e54e59daa14c56c2fce011e30e6394937f7bd6fa6afa1b6dc3b5359ec7bb4f757c5594\nB = 7f5\n\nSum = f04028fafffb1aee499812d12f9fcbb23e6a872b3f69fe7a7a246d8f98ba2aa954f78506b39c023397855ead87854412c881fdd16267c07ee12f085b055c7c71\nA = f04028fafffb1aee499812d12f9fcbb23e6a872b3f69fe7a7a246d8f98ba2aa954f78506b39c023397855ead87854412c881fdd16267c07ee12f085b055c6c7d\nB = ff4\n\nSum = 9c008016815a6580728b3f690eddc7695fed44171557df8a4a6e8c0d5e7c3296832b4ba9ee4a4cd7e6a8ef23cf8c64fcd0518664289c4e72105b404cd6c0ab6d\nA = 9c008016815a6580728b3f690eddc7695fed44171557df8a4a6e8c0d5e7c3296832b4ba9ee4a4cd7e6a8ef23cf8c64fcd0518664289c4e72105b404cd6c0ab7a\nB = -d\n\nSum = c12bf7e503d2c5845c60886ad5ef87d24e002498003b44922e462f36592a52c878123a6d1037896ce9fb7d2c680d008e80009da72c8e1415e957b2fefb52c34b\nA = c12bf7e503d2c5845c60886ad5ef87d24e002498003b44922e462f36592a52c878123a6d1037896ce9fb7d2c680d008e80009da72c8e1415e957b2fefb52c359\nB = -e\n\nSum = febba964e2548ed1474dac7c1eb9b1cd169ac913530b7fb358d67197517266707e5a176a814ec82cf8945214b30c36ca7ac0b1ade1848573e72d408dbede8f53\nA = febba964e2548ed1474dac7c1eb9b1cd169ac913530b7fb358d67197517266707e5a176a814ec82cf8945214b30c36ca7ac0b1ade1848573e72d408dbede8f62\nB = -f\n\nSum = 8a3f9eeb76e96f13446c593fe2cabd4215e0debc54025df7791d924d8afc08dc8f607b82a3d07d75897bfeee0c42b9a32e0e77a098c1cce9c001aabe0481996d\nA = 8a3f9eeb76e96f13446c593fe2cabd4215e0debc54025df7791d924d8afc08dc8f607b82a3d07d75897bfeee0c42b9a32e0e77a098c1cce9c001aabe0481997d\nB = -10\n\nSum = be825a00c3c6b192d04863b0719ee1e687dbbf2cfc0c331c00b8b947c17fecb7700c9e534bbc49bd61978754ffae1e57d80aab34f5fd23a267e10a4b5a13a9d8\nA = be825a00c3c6b192d04863b0719ee1e687dbbf2cfc0c331c00b8b947c17fecb7700c9e534bbc49bd61978754ffae1e57d80aab34f5fd23a267e10a4b5a11a9e9\nB = 1ffef\n\nSum = d1c861822ba0e93be81fc78a2628756480146225c79b4a389588a9c3bff9a7500660e99c28807d9ae7bf8c1e89e81d4f9ff2f72d35ea6b34d09df053d46dd294\nA = d1c861822ba0e93be81fc78a2628756480146225c79b4a389588a9c3bff9a7500660e99c28807d9ae7bf8c1e89e81d4f9ff2f72d35ea6b34d09df053d469d2a6\nB = 3ffee\n\nSum = 98ac65b4c06400baeb40ed137ecdd930a3607423caecbe1f1a936a8210c28fd84b53324e5bb73b7e4b71209b1a4d106796d57a4a23fad2c23abc0c039539080d\nA = 98ac65b4c06400baeb40ed137ecdd930a3607423caecbe1f1a936a8210c28fd84b53324e5bb73b7e4b71209b1a4d106796d57a4a23fad2c23abc0c0395390820\nB = -13\n\nSum = da02949862a4b26a4fb4bff43b21c2cdd048189199612616303d3ab34dc6f201be256f5889e368867a0da200a0b03e904048d6ba5caee1dafa16f4fdb1f00029\nA = da02949862a4b26a4fb4bff43b21c2cdd048189199612616303d3ab34dc6f201be256f5889e368867a0da200a0b03e904048d6ba5caee1dafa16f4fdb1e0003d\nB = fffec\n\nSum = ea9523fdde49d481c9f449969fd8e191e118058e0593f2a27ef0ade666ff478c50acb274a6c77d9ec4ca628ab0d7f3dc18708327423de28616235187acb197f8\nA = ea9523fdde49d481c9f449969fd8e191e118058e0593f2a27ef0ade666ff478c50acb274a6c77d9ec4ca628ab0d7f3dc18708327423de28616235187acb1980d\nB = -15\n\nSum = dab5613ae3756d29f22bc30213363900e3fdced153a3c20852d51c71cbb9af41aba6a16d0b72926192ef48f25e8975881ca7973a69590dc6f0224395e6f3684d\nA = dab5613ae3756d29f22bc30213363900e3fdced153a3c20852d51c71cbb9af41aba6a16d0b72926192ef48f25e8975881ca7973a69590dc6f0224395e6f36863\nB = -16\n\nSum = c442f3e574310f78e0ac187af96550d4999b79da9c9d6ffa9eb9437a2ac01479003d8e795ce68dfc0f87a4fd9b00b6c172c72c7f580a32af015a3a3375b85285\nA = c442f3e574310f78e0ac187af96550d4999b79da9c9d6ffa9eb9437a2ac01479003d8e795ce68dfc0f87a4fd9b00b6c172c72c7f580a32af015a3a3375b8529c\nB = -17\n\nSum = b9ac1e23fbfe179d9d3ff99b2ad8399754ea5531e6fce5dad997e2c961110d49d0e3d9c2ec03289edeb39e5a6b4744dd4b3cdd6c43f4e8f4c8e91617772e7fd0\nA = b9ac1e23fbfe179d9d3ff99b2ad8399754ea5531e6fce5dad997e2c961110d49d0e3d9c2ec03289edeb39e5a6b4744dd4b3cdd6c43f4e8f4c8e91617762e7fe8\nB = ffffe8\n\nSum = e087174c20cba6c4e1e8ffc2ecfeeee770898916454724c24b56d8619c27db123078d406d6b7b836b0dd3092b34b736c472f1afd983971230f1e2b729b00acd4\nA = e087174c20cba6c4e1e8ffc2ecfeeee770898916454724c24b56d8619c27db123078d406d6b7b836b0dd3092b34b736c472f1afd983971230f1e2b729900aced\nB = 1ffffe7\n\nSum = ba66837e8e8bdefa4c3df73ba5ee65d1ab45a68f51072bf2997446b13b6c73b29c26d15ddff186c9621e156bd3b650caa267dffa54abb782734c443bf502b276\nA = ba66837e8e8bdefa4c3df73ba5ee65d1ab45a68f51072bf2997446b13b6c73b29c26d15ddff186c9621e156bd3b650caa267dffa54abb782734c443bf102b290\nB = 3ffffe6\n\nSum = fc461dea452aaf0e2c1df10b7cb4293fbc498d40caa7a917a741c6d3534914fc039bb7a62d14cc3e9ea6cc8d2b41228628ad56687d18858c3867c75ae83a3216\nA = fc461dea452aaf0e2c1df10b7cb4293fbc498d40caa7a917a741c6d3534914fc039bb7a62d14cc3e9ea6cc8d2b41228628ad56687d18858c3867c75ae03a3231\nB = 7ffffe5\n\nSum = d109e7982ffd500ed77702054ccbfa49bb47b5cdb2220988ef58af3cbe0ac90bb3b2ac8a2c558fe744231bf227bf35343e12ecb312242ce50a85fe461e73b601\nA = d109e7982ffd500ed77702054ccbfa49bb47b5cdb2220988ef58af3cbe0ac90bb3b2ac8a2c558fe74", + "4231bf227bf35343e12ecb312242ce50a85fe461e73b61d\nB = -1c\n\nSum = babcba83c01843f6448fc3f91c006a673e514c9626c6399d43c016c31a8fd1a9fc58d1c63ba5b9565dd7320c4a04fe4331fbb79de1e03d68db331bbe2b4b9036\nA = babcba83c01843f6448fc3f91c006a673e514c9626c6399d43c016c31a8fd1a9fc58d1c63ba5b9565dd7320c4a04fe4331fbb79de1e03d68db331bbe0b4b9053\nB = 1fffffe3\n\nSum = c52e7fb27c4f670109b32cb6d3f705e1685e2cb7474a90d3815e486de77dd2584a0b65d22040059ae5279450682a189eb1b0f847e0d3fe022628a73eeb99c54c\nA = c52e7fb27c4f670109b32cb6d3f705e1685e2cb7474a90d3815e486de77dd2584a0b65d22040059ae5279450682a189eb1b0f847e0d3fe022628a73eab99c56a\nB = 3fffffe2\n\nSum = b5f074f655dbe68df022b0093534b609b23c17eefcfdc9b1b150c8cfdafe1d320fff7452c147c7d9f9cbe16be25970a23e6499bc90e689497c8bf2d38219e4f4\nA = b5f074f655dbe68df022b0093534b609b23c17eefcfdc9b1b150c8cfdafe1d320fff7452c147c7d9f9cbe16be25970a23e6499bc90e689497c8bf2d38219e513\nB = -1f\n\nSum = a1a41b6638409305ab9ffa22bb3cb9434f587d4ce6f6da47c0ad6f8f720f397c37cd61254f35fc9f0cda36476ca6d95f233604b9ae5ea2f1a1207caf15682e81\nA = a1a41b6638409305ab9ffa22bb3cb9434f587d4ce6f6da47c0ad6f8f720f397c37cd61254f35fc9f0cda36476ca6d95f233604b9ae5ea2f1a1207cae15682ea1\nB = ffffffe0\n\nSum = f187feee94925d57f65f9b1200193d8e9359340d670bab27c022d6d63a54635e4573593790e6c6b779becb9e5ea81c9b075baa2d3bc95493b0c5a2da1fccebbd\nA = f187feee94925d57f65f9b1200193d8e9359340d670bab27c022d6d63a54635e4573593790e6c6b779becb9e5ea81c9b075baa2d3bc95493b0c5a2d81fccebde\nB = 1ffffffdf\n\nSum = dc9c51e1313cb655969b4a069f2e8edd850d4fbc5bbc36f05df42a526f4e5b3ed18886263d86231193442b3ac3e7a71e5a6377021e71ad07dd9411953dbeedc5\nA = dc9c51e1313cb655969b4a069f2e8edd850d4fbc5bbc36f05df42a526f4e5b3ed18886263d86231193442b3ac3e7a71e5a6377021e71ad07dd9411913dbeede7\nB = 3ffffffde\n\nSum = f2b5e665a6a2e7009bff8b2750b5fb11576bfd49dee5dd7f32b02c46430923b0ec95c3fcee0006b0c2591cbf1fb18dde331d8fb119d92f3196a7dfd8178be33e\nA = f2b5e665a6a2e7009bff8b2750b5fb11576bfd49dee5dd7f32b02c46430923b0ec95c3fcee0006b0c2591cbf1fb18dde331d8fb119d92f3196a7dfd0178be361\nB = 7ffffffdd\n\nSum = fb0f545b752979151bc6004b3db33bad63230c26d060ba00f5b82e7bee7e2c854b09b2a7c6b4186776c6b3cc45afbc50ef35df7abad11fec62523a12be1cb7a1\nA = fb0f545b752979151bc6004b3db33bad63230c26d060ba00f5b82e7bee7e2c854b09b2a7c6b4186776c6b3cc45afbc50ef35df7abad11fec62523a02be1cb7c5\nB = fffffffdc\n\nSum = fc197e83249b069fb34552188cd6d06a7e0b42c6a6a9869ede485328a0fabd0c0ec2f79b81747129ccd70ee5c0f9efea62c36d1a4e1fb2b80393fe636469c25a\nA = fc197e83249b069fb34552188cd6d06a7e0b42c6a6a9869ede485328a0fabd0c0ec2f79b81747129ccd70ee5c0f9efea62c36d1a4e1fb2b80393fe636469c27f\nB = -25\n\nSum = aaf9a8ecbbfee9c3092d9887ec35118a9614a9fa84fc50b79b11d03a4967066c361f67cbf7a8e5beb620c7da55f4bc7dc50ad44b22c9128994781c7816a439af\nA = aaf9a8ecbbfee9c3092d9887ec35118a9614a9fa84fc50b79b11d03a4967066c361f67cbf7a8e5beb620c7da55f4bc7dc50ad44b22c9128994781c7816a439d5\nB = -26\n\nSum = e74e32fc45d099ed147bcf7d798bd3aef9b046291038d98431698e90d22cf944a92bdcd8a5cf378e9a3aa0001150cf6e4dc37fa4e54a25e13c75099c64b9350f\nA = e74e32fc45d099ed147bcf7d798bd3aef9b046291038d98431698e90d22cf944a92bdcd8a5cf378e9a3aa0001150cf6e4dc37fa4e54a25e13c75099c64b93536\nB = -27\n\nSum = a3486d022ef4d0a0c72170f05300cee78df844db19c63754c2d631d3d9ae20a0205cfe0fe947f8f4d2f9fa34e2081f448a938a446e8764ac2141157cab01dfa0\nA = a3486d022ef4d0a0c72170f05300cee78df844db19c63754c2d631d3d9ae20a0205cfe0fe947f8f4d2f9fa34e2081f448a938a446e8764ac2141147cab01dfc8\nB = ffffffffd8\n\nSum = 8952cb3f70b1344facdd7fe79747773f9c101bc2a083fa8fdef0679c24ba93218d14d4d7e848d293ce431119d1542833e9a0624b812f0b31b2b9f7ed9455e8b9\nA = 8952cb3f70b1344facdd7fe79747773f9c101bc2a083fa8fdef0679c24ba93218d14d4d7e848d293ce431119d1542833e9a0624b812f0b31b2b9f5ed9455e8e2\nB = 1ffffffffd7\n\nSum = de9cb4d4cdd1d58572fa1052edf72bb9241555bdb967bd8cefb26cb12c6622d6147385dc3f72e110b17afbdebc5feb959cb6c320a2ba01f36585b53fb1c5f07f\nA = de9cb4d4cdd1d58572fa1052edf72bb9241555bdb967bd8cefb26cb12c6622d6147385dc3f72e110b17afbdebc5feb959cb6c320a2ba01f36585b13fb1c5f0a9\nB = 3ffffffffd6\n\nSum = d37f2e1638c0b3bd624104d244d9770ae05bf37f7a6ec32db552af413c0006fdcfc312cf281190eb6738370f3a8c4655beddb6b39b342f0a67cc9af92a2c7fdc\nA = d37f2e1638c0b3bd624104d244d9770ae05bf37f7a6ec32db552af413c0006fdcfc312cf281190eb6738370f3a8c4655beddb6b39b342f0a67cc92f92a2c8007\nB = 7ffffffffd5\n\nSum = 831aca9ef43bea89f048250aab79b06207458647ce347c68f91013695299c80d610c6e49e2dcd46eb02dd56573d31720efc277469e573f6ecfb71b12886653ac\nA = 831aca9ef43bea89f048250aab79b06207458647ce347c68f91013695299c80d610c6e49e2dcd46eb02dd56573d31720efc277469e573f6ecfb70b12886653d8\nB = fffffffffd4\n\nSum = da95fd2d2438a79843bdf92c1cadd0e9165d002d22dcacbe4118cc3cf7d5de2fd2106aaefc790aa1559b28b641f83e4e5aa0f8446b57fde5c3663c13efbc04fb\nA = da95fd2d2438a79843bdf92c1cadd0e9165d002d22dcacbe4118cc3cf7d5de2fd2106aaefc790aa1559b28b641f83e4e5aa0f8446b57fde5c3661c13efbc0528\nB = 1fffffffffd3\n\nSum = bf9e3169dd4b6d336848e744231d1ca85678aa3d1d62d42eac0b16500ef527e028757da54a456b3d684199f3bb3c866a002ee3885c86d2a79180487f4e8a45f1\nA = bf9e3169dd4b6d336848e744231d1ca85678aa3d1d62d42eac0b16500ef527e028757da54a456b3d684199f3bb3c866a002ee3885c86d2a79180087f4e8a461f\nB = 3fffffffffd2\n\nSum = b5880868d947554eeb536246c312c9765ca8c96888817f3ffdc16cdbafb41fe8f7c151cb316da27562d3b82b2d45abf7c9304f488538386e84c6a23e3dc375fa\nA = b5880868d947554eeb536246c312c9765ca8c96888817f3ffdc16cdbafb41fe8f7c151cb316da27562d3b82b2d45abf7c9304f488538386e84c6223e3dc37629\nB = 7fffffffffd1\n\nSum = 84b1e4079d09df569a1623b990d917871b1197723b30b19fcf3c063b0e84c9cef1c3ffed16f33aa9bede08b4831bb3ecdadae1622c93e1f86b474a4989496fa4\nA = 84b1e4079d09df569a1623b990d917871b1197723b30b19fcf3c063b0e84c9cef1c3ffed16f33aa9bede08b4831bb3ecdadae1622c93e1f86b464a4989496fd4\nB = ffffffffffd0\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30c6365e1eeb044\nB = 1ffffffffffcf\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 80695b879bb74400c107619981f3bcb3c9987c76d545f6485ed128082377799534508a83112fbde2ee5558c246332c656455\nB = f6446ca2883d7e27209eeaa01fdec632d4027113b81bb47dacc8f10eadc3b3ffc26d84135d91e70deb8aec84c7820332e8cf786e2af9b4217a4c1d32b5894bbe\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1b510bc480138145e2a142fce8330ee5f4030dccaf6017a1dd85bc5bbe9b2fee4f9d8fb484661a839dc9613652bcca11a00eb\nB = f6446ca2883d7e27209eeaa01fe0fbacebd20e03107a9f993e30f63358d6bdc91baf4f5acdf81e3ad94ef9af3ffc315c6e9acfff91167f0ce6738f328308b0fe\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 219f59352ebda4cfb785a18834ec1c99145a6647265baf5d8f3b405f29a746785a5e70777d528ff1526688c01b9eee288e6cd\nB = -f6446ca2883d7e27209eeaa01fe16091c2dcf8a54917eddf26e5c1c43408c33ea356bf1449b339931985aa70a89cdd6a7aca5ec6e7f1c8df5f101d54c47796e0\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -7e5a2ec59519143f7bda2829cfee4ae75cc8038f31303ff9bbb1e2cbfe93c46a1367c9d6a2a3d9cb40f1a6930c18c78f85724\nB = -f6446ca2883d7e27209eeaa01fd760f94330bb39b824b7e28bc5741dbc01b11805f14655543e8ac0e6d326bffa760106d5e85f604c28935c69dda1d968f658ef\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 9f580ff614b449cf9c46c91256c20983f5c70200739de72b917344db81c1aa1bf3927c38c22d026d6ce38ac746ada2948e538\nB = f6446ca2883d7e27209eeaa01fd5511b3028c1865f22b1187d3d06e1d23821281edd1f7ae1212eaac5daf3e19f57fe5bafc666cdc205d43e2699f88bb8a5cadb\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -15773d29ba363a15a0cb31ac4a60c0c228967e857d7d11c1ebb0a8db855c0d0797c0e409899a50e1b1c989a7dcea6f26238d27\nB = f6446ca2883d7e27209eeaa01ff4bdd95944430511bd40b6baacd3c32ca01416c46", + "1d66b15c5f687ef186c0948aef8677cdc23eeca8e6c007aeb4dd508123d3a\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 2f90f72f59dd7738f5572e31d41b91599ed500d59537bf5c21a1bedad709303cba0d5bf1b5e4eaac1a85c261ce94c45b64646e\nB = -f6446ca2883d7e27209eeaa0200ed7935ee3ea423511ccb340368e93c416529914799118affbe79dee6a192c7dd144df65086e8894f7283934dcf82a3d531481\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -73978eee2b2a4ac8ef12b3042dd5e1ae8724a0a676d0a52035e801d741a61b92c638a3b0cece6a81bfd2703e3c502ad1fa784c\nB = -f6446ca2883d7e27209eeaa01f6baf0d415ee280332d62d20a349d20bbf058f7986d88b433a45ddd3c5169e0ae50fedfc283bb33671cd00694d2133b0ff437c7\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = a462699ec5214f0d7860974a669d1728b4983a1c3c440213d12b2da58bba9dd1caf1d5ed391a3ebd80aa6e9ef0396e62260a1f\nB = f6446ca2883d7e27209eeaa01f3ae43290c4eb7beea414edc3fbd5eb41c2e55e22a8155740091ab16e07555e6f4c45ad86196f5f2b5bf808341e29f77fc8a5f4\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -130f7a12825a6c5b6b109b91e2506505a261c9f7c1a62fdfbe252275d3f6844dda2aca2d0ff6d8406ac5c679c80ab6d29817b4d\nB = f6446ca2883d7e27209eeaa021103e3d57afb390b2cd7f3e2c877952c49d9a37bafebc574fbc980670d278411eb9e4264451f721ef88fede6f8f0ed30b702b60\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 2863fa82289aff06fb16bd1b866da9ac0ae0f411a8d8c2c084cf78b81d6713a9a4700248ef61d5e52ca7470f1f251380368df10\nB = -f6446ca2883d7e27209eeaa0226586445213bcbb6bcde156c6c94d9d2b258cd95971e5855c273d6a95698136db5e37a80248a6fc3ba716e7c500b49de5578f23\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -6176f648b54dc4e2d11ba7e32d2d9d3f400fbafa489fbe7f126daf1f929ef8f219c78ff1063dd27650d4751c63b6e7ad7d9a588\nB = -f6446ca2883d7e27209eeaa019c7d737a435307ccf0abb06db8f992e767681e89a5a5d7162b36aed1a69206d1f7abe8462eeac7683cf5b250cd2f4eb0a150a8b\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = ccff1ed8726e309c4e0f2e166c497cd718a8eac347674ca57b6f317ea491b743a89d25f87c37f379f6239b13d848eee1ffa9328\nB = f6446ca2883d7e27209eeaa0130f54aea86329c1373b82a3a79ddb34f8eceeec0a6de48efc2352c72949f488068d6523eb8f0a66497a68c59589d477c1f41ceb\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -13d1c041415fbc18179c970fe989ad9e1f10e4ff658c1bc550e93f6ab9f9cc9832fd49cf6f2e75af72a71dbd7b121111ee0d4098\nB = f6446ca2883d7e27209eeaa033b106dd70e9c8e313b90c94f7ec20a089886297a470751ea4c38549cd8cdc9474148152e280ff4d5b83c0344e207477cffbf0ab\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 27ede3a23479dcc5447bc3b64df32c121761de88086204484cea0782b8d63d72b57192f2b20dd3dff395e937c91e21cdbd13b68b\nB = -f6446ca2883d7e27209eeaa047cd2a3e6403e9904098393b5c559f1481d95c2047465da1a0c44d61cc694d6ef688ca7625605d7ddc728bae9c2c85339f02669e\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -4ad10e7f5637cc48b04d4b250e4ca00a0d102c91caaaf6291f1248b7a1cec979f87b7251c50db8e5e49206bebb30b7f3f25c8577\nB = -f6446ca2883d7e27209eea9fd50e381cd95240824bcf2a600015d2f85d6751067439633034c7fd2771c44682489bc531ae44d0b8044a9bb817ddab71ef922a9c\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = c6b77c2c932d9d5ec6175def706d6e9c411216fe12ac52043c617761d3a37804487f158de60a9c18e7a19646c455804a65bd80f2\nB = f6446ca2883d7e27209eea9f5927ca6f9c5c6f6c360517959df504662965669a2c3807551778ce7d3fef97f7f89821f58d47ed85013b0c300eb8e31b7c312f21\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -187976849837d4ad4cfc9764fd0e3f865fa9d1d9f20d98ccd52a6b3652277100bcfff85fb8414c2967dacd26f269502d3c2caff12\nB = f6446ca2883d7e27209eeaa1a776aee5b307579fcbe5ebd4df466b6865149b375fbde626a680f944360a20081116bd7ef7674c34668974e5f9a36639a4b9af25\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 33913efb99088ab80c706ee229e7a6ea6b274097f6ed3734452dabe0865eb86fcf20c9c6ae0e613b72dbfb8b126383e7d10e8bbb4\nB = -f6446ca2883d7e27209eeaa358f33655c012b84bc32363a7acdce1a91ceb8717adb7cc9da6b503e7797e96f93323d3ee54389d55169c5b27f946a1e2f2d76bc7\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -5d84033a924ff84666d3ee1a1342ac118224264c439bc658213b9762586e8dbdef141024d757175f30bec23a960ab145832dee9af\nB = -f6446ca2883d7e27209eea9a479f12f30a8a88648edd93e3da37b1ea483518d40527f3d74020cfb98caa341d4fd63535fde113aadcf07ecd72634f0daf0fc664\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = a2aeba6a0d6142f527358ffd4c9139c390c9dfab07947c902085d1f3c367035db0f22f249295b974b1d9ebe7add3dfac7ec237f72\nB = f6446ca2883d7e27209eea95f4f39ffb5975dd7888c375b0454ed6c95dd982e7c59c90574b7d26a2dd22da2131f4453a49f6f252cb3de3fbf5d0689df5cb30a1\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1e545f433c1bda45a7900793d2cd18ba630fcb11d4a2c88bc7a0fb392d270088a1ad126743b80342bcfcfa9e939c9ccdccb7f4f198\nB = f6446ca2883d7e27209eeabe743e89d84b6452728c240957db7b2d657a428f6ce1ace520f4d57f0c3a93989dee299ec72b55cc5ae5d7410a6fab313299e3a1ab\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 244bf1eb701c53bc7847a644269277f53b58dc23b55a2f996faaceff22666eece40fe14644aaa2ab0197a5a915fefa394a5c357db4\nB = -f6446ca2883d7e27209eeac46bd1320c4bddc94343c2b9aba0da683dc353a14d9913f2c8fea945017a01fce050f87dc81df5349f80824b8cd2089cb03e242dc7\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -7e3419b44f3596c6486e095c3fc9a84b5599868abd292354278a2520f54929d5bc325dc3d095e84431960265dcae84f0815ef5beb9\nB = -f6446ca2883d7e27209eea21ebc5924cf9f346828e13194544ba27acd0f0f2db15c10531c9b524e9ca693a400eb973b2dd6a456c52da3c9a248972e482f8f15a\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 81fae0f8555d46ede9e74a93b8a7c6273c9bee0eef0f51b4575aad5cbdc0e10a3d03d53cf2a42e6a3625074c812cd0ae41d94d34ee\nB = f6446ca2883d7e27209eea1e24fe4e46d2431ee114d1e1cc669c4bc5ce896ea92f92a501f92ce92152b205bf3d41fa90cf241f67c3d555f5a63db52408a17b25\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1558c919b3dcd4cc2eacfee2ae98a3b4286bdb6aa67db97ce35df3ac72f6c6418df10444ce791109a9a71250896f20d4dbf19d559f0\nB = f6446ca2883d7e27209eebf5ac70e1d9fcd6cfb5cc0aa06e989db589282e28001a7c278f33150d0e7ff728db515b846b046324385a01ab0dc51bb124fbc40a03\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 3a9c8b150408b2449466b8328ccb0a5334f2340479203cb790780e71b6609f7999c691ba19f947d8cac4329a4e45377fd6bf226fed2\nB = -f6446ca2883d7e27209eee49e89096dcbaae5611679f9e51bf07a6518db7c52a42afd260d4c161451d8aa998aa32d92307d0164a2c06475b268660d1d415aee5\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -450c41a9cc", + "a23287b6448a0b248d24075ed20bec41c600279fd86869b1a51e1842cb7f4d59144436edc1c052f44428965b3b2d98757\nB = -f6446ca2883d7e27209ee64f5bc4a9d20c619166b37bc33c3c21fd1549b8b97bdee1df5bcd53aac4c1b18bcf892261f22f0f1ac1ccd773329084fdb22f1528bc\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 9d48745690ee5aa8fc448371f9236153c584466583aa30d999461a3defac314356230a763c204c2595794db93fcd3917f25b83d1b85\nB = f6446ca2883d7e27209ee0cb9899dd8d49df7d06b3e555f2d84d36aa2611255d9bd6bfc4f23666e4507eda9a106fd3c16e90304654010e79ff7ce44029b1948e\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1a3f8af71d423da8c007022421f09a53034c6e9d7d23572b8b4b273b091a6f024ea4216ebbca25daa4e9e83fb46a1d9e65fea344bcd4\nB = f6446ca2883d7e27209f04dfaad663de6d32ccd1fe409775a8b5764ed914fabb960fe4a47b154ef982955ea06285f34d992d2e87d11c56e0f0acc96485336ce7\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 3cd13ae384718065169d7e6b600ea1d1a514832649029f92f1d2b5bebbf83454fcde0133f3bb4716cf452a3f930d28f30e7f22f21982\nB = -f6446ca2883d7e27209f27715ac2cb0dafef23687a87d593b0341816ed9dc69ade774b2c099901d747e80cda424b2b3eba6958e3131c3583fc0171e504e0c995\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -5849ade77039ed0b15524c08929a4553a6c0825178f6522915592ffa9638a8143fe8426df9757e8c06aabc97a2ef87b4a58869d1df4d\nB = -f6446ca2883d7e27209e925671f7d662427ef778b013e2eac90ecc41e82604a1ecbb440023dfafa66b7ed013fea93e0df4c682f32c44ff874b59bddd781cd0c6\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 9c4b4b4800fe2f11e1897ee8c8e147b143a252847548145e77d9a9d3e4e3a79283f833e760bdc69d5f75fc1d0356615b0c10b1e34f9f\nB = f6446ca2883d7e27209e4e54d497459e00782b417d33aca3c6b12f6017f308502a85e17faa0660fb6c008c040d2fd6c5acb52a27ecbf9f2071b35755300b6074\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1bbe5a805b857ccd9dae7cba6f3dab95d22f7d2e1621a2ab382898bfb2b4efccb263929f752397da4ad030e6d5c8773dde8fe04c42f97\nB = f6446ca2883d7e2720a0a685c7e4fef3fc63e7b2c7c3695fc7bf95fa3d58dfb26997dbe2dfd5712e105e36356b0e89bcf0f736a0f749fefe46ec4c63e6b2dfaa\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 255c9a10ee08acfe197fecdc7b6cbae27f8dd38887f135cc5adb1b9276c94ccce420887a7476b2d17c2708c84b7e9a8b4160f676f8d1e\nB = -f6446ca2883d7e2720a14069c0ee2726ff6ba4c9c9e42c50bc8a6bdfa2fffcab9baa070b0d01b273e0615204c8be7eeea06a4c0e75615a607bc27975495e3d31\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -4bb5296b4ce3e960ecadc3f15de0a3a0dacf12d34f690cafaa8f2e31b0e9e69d42a3b16bce84361c81b7584be32210daaddefd7184659\nB = -f6446ca2883d7e27209a2f4d892a785d997b41eebd06977ad454c6113d42870773e9b06670bf3740a9bee5c12a5a4f40118a6e28641e7055c56385760ad669ba\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = efb45966d1f6d79c9b4c72c3a584e26e7b7136295fb79a911433a10ef649b47b14b8d76cc42e54852176ef7da7d08b86186cbe6e98b23\nB = f6446ca2883d7e27208fef5a8972272eb5c05803cfe21d36e77abbef07e1821e95d3161f42eae143cbe1c46eca4af49e2b00722ef102256e1aacdc99fb0524f0\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1e30bf701cd589fa3d2adff0217e8f748d1a254b771d77d342fffe3e3138aa3d4a75ca8c1e6636919636d4d96d8b04d583af4dc208b51b\nB = f6446ca2883d7e2720bd1b5f8ffc1c2629c737aaec3df41482ef8d27b5ee9b1012275957920b7e8950dd85c6cd359dba04e8c072c24a2d7ba89212b3a3f7652e\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 320eee30dae44f272fc9606477927bac85b677c3333fa55f4c5b5c7e71bc02266a906d8838a096551a8b5b94980cd819ac721a6ca70a71\nB = -f6446ca2883d7e2720d0f98e50ba2aeb56b9d62b60940800bae8297a2daabd3d9e30b4b5d24c01e139fda069c94fd819c86d14f97d74af4eecbad5804e95ba84\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -5819f4921a515433459006c62df3be1c4e642a52340381b5954df3f9dd0ed5f73f8dc9a17e536b88090ae8d5fbc411f16eeca2449ffb96\nB = -f6446ca2883d7e272046d0ab8dc4f547fc447cc435ee81c6f2140ed818437a16894f0b6559fd37091c5382329f98e417eb497eb512e0de64e19f76c39d4eb47d\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = f238bbcd9701966bc4482fb8df8ca395ad15e2b83c014e59898e33a36623580e9c91faa3873eb26a0e97c4d29ff209e22c4faa0a1295a0\nB = f6446ca2883d7e271facb1e452484505c3c5c49b433ce8e178b55d1fb23b7c49e55acb25b074228704f67e019d8ff8d10943f1d9163cb06cf0e213bbd7dc1a73\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1e00b3b3bab1081231e0f1a2029b146f8391869dad416f6c8443c124ea7c908ee402f6b6fe06d883c2d232713512ed5d8636a07898523f3\nB = f6446ca2883d7e27227ef5db5b8a571d52a81be51c4626cc069b8b6c454b948f0728956ba2820ee801d33f67b0f7a50baf7facc4fc2dd14cab71cd6d6b73d406\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 2030dfab0a9e0af1764f416171c8eee2d0b87bd5b80e6cddee4ee2a7509a301956050b6e3bb067f827d13c33abf31693d4101951d4a0b96\nB = -f6446ca2883d7e2722a1f89ad089274b46ef00e1133904733b6dfabfc5f864661dc94783c8e3e8e0a8f360b324d23e02f5cf9d61239bd3e0104f64faff38bba9\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -7427bfdba61a57b644fdd11b2a3ea1d3507cdf4ea1389436bade3fbaf751724000774127923658c7b090f182d1d7e320aeaeb1e3dc0b30a\nB = -f6446ca2883d7e27195c6ea2657da120cb3a2fb949788b67d95aa50d8063f454d336755da4652ebb138b9be9c7f3d1f6f8497a85bbbf2444c8237847a42dfd09\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = d23891ab621e6ee43b3b250d66ab139cc97db21429da33e01910635969af402b6792f6d741292a0e1bb6bc30b2a7b32fcce9f5e8c2e48bd\nB = f6446ca2883d7e27137b618569bd5fadebd65a7a25b1c44b41ca97e127d9da5a3d535323bd3f51dc5d19e08ecd04a4e291971ddaddb22743d63fc40755c06756\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1d6d78b7e83cedb64f0afa17c56360a58eb5ccc4e647bd3c594feb6695531f9434adb169ce314d4c93b4efc260fc92b268ca22143fb7e994\nB = f6446ca2883d7e273e0c6358081c34527e9506e2c17fd62a9d183fc750bf3ad4983444bfe92d65734840c1660f4884d00707796049d935293bd8857a21a699a7\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 255261901144afcf37c28015f4ec493bfc06cbabf851997d06cdc2fa742a97e234085ce67dcd867451a19d3427acc5ac2fb5b919f1514e06\nB = -f6446ca2883d7e2745f14c303123f66b674c8ce0f108bec10a693eae62c9171545b21c53c804ddc1479b6ce2bee4bdf7c4f426d21089682302c41c7fd33ffe19\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -4c222346b39b4b87631fb26dd9b3a8942374f10ec577d0aced5cada7bb0fb34d9c85bd06b6d52a4229ec662ca5605aff7896f7d74483fe99\nB = -f6446ca2883d7e26d47cc7596c43fb14cc6a5a5d2268ccf0eaed81f3a4ffaceb5187abb198ca9291770d52f58a420d4149662371437c47775a776b8e9d6ab17a\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = b832106ab8bf5c27886927f67c5bb95d81280a5b4a3a044c39c816dfa5c5a4c6e8058d34c3e44bab649194932e42c197b40d16213f6565e4\nB ", + "= f6446ca2883d7e26686cda35671fea74a720e4d47fc0bc278d3a68a7203d794c051c4279ae14a1182b8d82c77d32ebd80ec0f50aba99e0df1f014d44a2894a2f\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1e4bd432a98b6d68d35627f4a46b56f04b378a535b50c7287ec949008e8ace3ed04a128043cbac7a49c6c1cb98dc27b684c4f971d69b51268\nB = f6446ca2883d7e29055c2dcab8961d2964ec8c1542d1e489c1db18381f83f0202b78e9623c8729cc183438007dd1ff280fbea657769f1ddf1f5dfa834ba3c27b\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 2af2a9aa0364d970115f35b6ab676f4baf1f4ed52d07cd808dcc7fc7bcdf2268f917a7e4476e429200a37b246e786e85a2b62d6b52de13135\nB = -f6446ca2883d7e29cfc98540562cdd9d457d6835b2936a40005760553af455a11bac55d521cc6c6ea50d8e40b7fb60a37d8a3be4d0638ad0fe713a1b0fcfe148\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -5dcc7b06c24160a67934f3adf5f5a468f10b0bfe1b82e133c797674c941c9480bb1e71ceddd1151f88244bebc63c2da41557670132848e482\nB = -f6446ca2883d7e2143d73a33fbc93c349c3ad1eb9cc22ef5fdb1b320b2496a5bc56de4901210fdd361abf30e6405e58af10dcae18519c8357d97f352b9a5cb91\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = fe6a6b7e6ee19b5e4e2a4cef85f637a5b0a76007bf1080fcdc86c952a49adce824573dbb3c0d3f94d519698968594e0b840b6c91ec9153aa8\nB = f6446ca2883d7e1739f832b931c590b74ce53dd29cb8fb2a03ec7286796f6dca7677c42f0a2c775cce1f344880433e3621bbf1076347c1be92579a4718d9756b\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1f219dbf1e789d4d74f10ff27fb947bf6cc94bf1e742ba203caf33810589005f8326704b8414819d90698fe08d9b3c16bd261beb922a9af9a5\nB = f6446ca2883d7e46423ca9be987c94112099ff4ab56434f1d7ae64e9ad319dd4ee17da5edcdaa5623a035b805598d513dce26a2b8418b933f92a4ef80c89a9b8\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 25bbd6ed7646662f6dd8481ac4c4a531174bcd05123889d4cf904d12d8d2bcad5425074d9c7fa1ba70ac5c8a3723fe6b20e064fb4a9999e716\nB = -f6446ca2883d7e4cdc75d8166645760a07d2278fc0c1a69c5a2f7814a3015267cf316c322696f333389a5d98c0b8f1f41faf13d50cdb0d97b3735eb07b889729\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -74af822547dd8aa99da2b3b60b1aa5d45c33cbbdca0d2876531b31a25cec244482832671c861b749effc1cf5e150aeb9d8e88583953aacd577\nB = -f6446ca2883d7db2711cc55842549cfe8cd656bfe176a128da96b5385d4f074523b2b6fc67b6015c906c9e33df5fed93773593bc982de89dea88dfd0a741da9c\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = d35d55e21fdf90fb0abaea71ae6d7f44401f615e7dc6761713ec45650b94c02f85e7bca8c2f43ada8975617eb7ae6fa41f4eadedaeb544654f\nB = f6446ca2883d7d53c3490880404e4b91749f9b1c8e9d3144ef011484a4016684529ef44dbf1a16592bd667394cdc5cf9fdf10ae63a6cfe57846075b72caa4ac4\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -14872666f07cb43b47b4b82ef6df5b7696c2ff49a88ec9308e27d27736df05f79d452957297271756ca1afbc47ad011f1b77f32bbff831bb941\nB = f6446ca2883d7f6f930559a7eb22fb177b0cfc38f1d3def13e570d8b570a867abc0bccc74439bfb366288293682e8e4d8e4e4e18b8ee942e52411f65650a6954\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 2d2316a87167a23eff9da00b857c9423e44feb69620852e9e8d87ac70d96367a8947729b57804ab1d54022442f5504d23ea42a6cb0eddad04c3\nB = -f6446ca2883d80f9520971b69a033696098ac522c55eb3ca0d190922efa61c25c690ca32b741ee738abcc57445c254d77576cc933929c66115b52e74bf9bb4d6\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -4a296521345e531b059bd7bedbdee650280008947bb0de4012c11281d92be141b2d29b92812a4843eafc296fa69c55a697b4e9620a79fa8fd6d\nB = -f6446ca2883d79848a4cd75a3aad9642720e1f0d0db773050dd92b475c937c6c2dbc3bc695c62ab1e9d9e7e99c92f8d3b0bb8f34238238fb847842be4245b2a6\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = a29d4661e53bde02d72f6e0e3d19ccbd85d8c0a0392d7153ed330ff11e6f75c9880dd1f77a89be8c4e48b10bc7b43b46fbffb592a9a2f23b932\nB = f6446ca2883d73fd4c38cc4c61ff192938a928f95f509d2782586f6f93623ec50de547725c7dad5e36739853a52e729ee841cd22a52832b6d7b538cbb2caf6e1\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1c7a1c6185b0a2d7c02f3a7884e5a11513785520f1a27e8c29cc30707300edbaaef99509e9c4f578d086b2a8c593d0a04d32682c7c71f6a3d025\nB = f6446ca2883d9aa13d007050c2b706cb6a0291b09d3188fd638364a4e903a7646f54cc5a4194f4d8a89cf9c13690080a25fb4f31b97cefa93b3adfd7d8928038\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 21eaee9881dff114d10dad6acbb6e712c6d1acc6b878ec60253c44ad7e9272bb5ab0e2ceb2023fa9f427a23ebb464b2c8c411bd86032c6873ef9\nB = -f6446ca2883da0120f376c8010f417a9dcf4d881e32f3c56bb292b7b56d7a2d48391d7ebc695a08ff661c1fe80c12bab159144e434092eb7eee6c398a875ef0c\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -46f16fa8b7a3b6ecf476f8cdf5f77ea3a7c9be958ced5db6c6a9e11e6bcf3a156b3fb60bd5ff862c80d7c3e3f23c15df57a8fd7822d4c7d9738a\nB = -f6446ca2883d3735b0f632fc68f2522536bc16d37d78cdbb4fcce6150cc0b6ee5dc5ed8a19c4da9f5d8739fcbaeab6abaf6e9761d2fd4acdd59640911a153c89\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = bdd97dea2fd68c602862b0fdcbbe47d5e2e23ec1a10925cf34e9773d09d90caf70b5beed3ae1509392289be0ee66b649d45b3dc880ce4f48bb4c\nB = f6446ca2883cc04da2b4bac9937f1e397e8c410cb44692a2cfa0d1f944a848aec7a74f80472ad52954a5d51af083a55ad7719b373292ce1b9545e29792a5f4c7\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -145dd43715b37e7df4b56e5afa79caff8668de6fe4c2f725866d0f84522682f38694a26bea588a576900862dee9c9498df909fe788d72db324f6f\nB = f6446ca2883ec404641045d807be91f31539b467ac14dc12f560bf31dccfe46937297bc18312af293a51b584e68dc78bd6317367326a9b80d186f0d8bd20ff82\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 35094bde0256df169828d23a250e3a10f35f1fe30f168d463ccd8389197b8aaeb326ca86fd09b3d8a29769ac3c6ed856c34f10cb0d993e38252d5\nB = -f6446ca28840cebbde7f100e1148c929532c5dae9d2bab770c93646b3edb4a707775f111fec5784bbc02e0977ea160fa0e16508b6e48d767dfbf3cf9c57102e8\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -578294d2b3d43ffd19b79a65778710da245eb96fda50d50a3aa6ae3295dc50d8f7da1f5c8b98f4a9905ee840dcd139a62697eb45678259d7639ff\nB = -f6446ca2883805fdd373ad5c200dab2289329459ee7a2f997764cdf519d3d32d5bbafb94464ac83d1dca566cf67e3194ef44bc8a4e7a38f81eb7eb4044787614\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = ab192cde88b1cb3e6b094409c1e81ff84715d64ddb7413f6fc5dc1182abfcaca481c8035d16e0d698476d7094f2bf7cb3de1b1210ba68701168a3\nB = f6446ca28832cc9452b65f836bf89607eeedee48fc980427a984bbc12b07b7bc2d61ad5ca735c4171035f91b6a7ef01602bd96de6c28c45bc0fda8fd71dd4770\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -19a7abdefad11d1c9b6c4e0c4c1ff1194c490f63086ede1e4c43d964555a2f5e561a9bf5dc3a670b7ddfe8894271197747860c78949e6c", + "9e357460\nB = f6446ca2885725d2ff99bbbd3c7ab2ea3bd62cbc1568be94716ae1e088c3c171a339b388b230607b096f4a634c95176bfc94fab7602428834ba301d280242473\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 275ce169251250a596ac64ac6e23ae05f8785db63b9cb83a9dec067472d059ea3aef07cf9fc20b846b3292899a8d3fe1aed5b92f21a89c1d924bbd\nB = -f6446ca28864db0889c3fcf0c575f300dbf830790214ede2c49e0fbaa515699eb35729b33e1534e6e332d207c5826a15fced16ddca8b783002300c01ff80fbd0\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -61039a571c78308b819da54c1849d8d6169a82e25f61f26e30ab16b545080417f2008ef89116e002660f95863c47ac02bc161bbb7aa8817457eade\nB = -f6446ca287dc7a8cc982726f945da8f6e371c2f22605db022c03110ffc46d281899f51553be845501b01f91c3eb127eded1641f1e6208c5b1793bae46d96c535\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = fca0b32bf9e248320b8c10128ff4368a766dd34fbfbf77e66cb2298fa3833bbf24451f508a50afd0131ad49c9ac8e851d4fb53f2fe33675f5e6b34\nB = f6446ca28740dd73f4a50857edd3ba8c1cfa189471a607b1bea2b38a840acb6eaf40d61d94b600bfc308bf4c71041caed6b7c0b59707a722e0102ffe829044df\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1c6f81990e54d6894188d5b872009c3eb5b2f10137bf7a27999d918790b587594afab3950330296979c354851164f95938d1df77995f6c0a9a3edef\nB = f6446ca28a047640b1843808b3f7d3f7b6aa168ee777a49521de6aa4e41156b0b7efb1cee889f11863c61292d8b36ccbc468d9337c69c06e4ca45a268b929e02\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 310b6086b85bf12c7e391184e070f623c9cfe07a8e495010fc13d584d748098f070ac4b7c31cbd28acd32ab6270e2a98f48d8d31525ada808858785\nB = -f6446ca28b4e342f8c24a9b2e7c2d7b47d911c2d38b9738cb74708037a38baf08c58d9f2444af22a8fc4dbcecbe46a2ed5c36c4778257b49e834110dea743798\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -4a51109cf8c033e683b1bff229f081d71cd5cafde15dc2d5f8ad0457e79b9b2e015659ee564de59f27204c685ef58977e13e19fe36a2d017fe6860b\nB = -f6446ca283986d1d5112e761b7a42a9d0ceb04ad8a4f18d5304c96d50aecad52c06a9fa673c4e0402e2e31a24ea532bced6331066ac8c0d6efa4366462082a08\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = f3e425af6aa16899624f20b49c4e9115034aa4d06ce9db9aa742a6e60d59d6ce0a067f5645b8e7f896c8561315ef1f7151e073d115f8e38df274438\nB = f6446ca278ff3bcc29f4d41689ba5490e5c523b9abe7cb380793d548c0035329de0ebbec7339dde9af37817cb7aab22241f397a6d3be9b39c1aed52d02c76bdb\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -18b2de417fc4bef91b5dd82b0e93315b306bf3a7f7bf0a486a567e9cd1370587b7e47adcb9accba03a8dfda5871b0bb1bdb569a90c079f7a9a4e87d2\nB = f6446ca2a0f05c68a063a9993b3d1ec73e1d3e262c88692d06217d4ad4cdfc35101b5ee10bbec0bbcd3fdb9c7ba53528fa6d954fa6920c1fdf1602e07c3d37e5\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 26b556807e84a9bf7cdf2697050cbd7145a42b8ef6fe10666da7a2e69827ad04880bb97ab3108a27da5fcc29a041bd6aebbaf00ab25a841674ff9f1e\nB = -f6446ca2aef2d4a79f23945f9cbe6d333496ca3c41c0a11405608368d81f207ed70c065ddbe5ff59c6a39a241b7703ad13944708d49792818568e77c56ee4f31\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -40b258c2211cc2cb9e2614ab4b23cb9eadb1ddcae903c93646e9f5e5afcaf912a2fdef26c864d83dcdd6f434ca2b0aa7f8ea7a21e790a9e4601de110\nB = -f6446ca2478b2564ff8227d481b931f0e466412c4e6a97ba255ea9cc238d87b28f196046b0dc56b84b2e37be7340434ea9277ef5eff22854eb7db98181d0cf03\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 97631efbd149bb0fdecce09d14aedf2efe30407c01c68e000be9c7be954999375e1f7720e8e5f1edfc48b92f9a063f6b2b378996459bffeae3d362e3\nB = f6446ca1f0da5f2b4f552f90411265ff1adb2d9bfdec35090c9be5025e8db5d9a99ac021f5bacebe2aad1e0e44ce7e53d94c4a32bda518e08d72637afe1b4d30\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -15f4c3634bbbd1ce04fdf96a69b2b8263290e188ca83956b74c6d190e7b877dbd176657a19ea125dfe9c95d2764002ca5d98e28315cb391779d56fcb2\nB = f6446ca3e789b45bdc5c07806fbedd42cab58f2e252a8e11b69bc9b9b6e496a6ba6bd7166b409d80b23435dc2ae094aad752b643c26acaa82fc1f4dd7f45acc5\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 39ecc3b285eb99a2ac91329da615e581f791eaebd477d87c7739dd961a2c5c6cf86a34c73856efcf3b812909d830186c910f8f053192cac9fca8ab7a3\nB = -f6446ca62709b94f7f5884cae8f2707690e864ea753b244255dffac9de1556f9e1aa2028da7d925299020ceff929c820f6541066f9d592c9ec3b1005ac7967b6\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -707e64f8bee7a679d9b72bd04b231cda716f5dc1b7a404f8c0679770c46fc944470ee2a221d1e3d166619ba6a430d0349e7e75c0ee021ed027dab5d74\nB = -f6446c9b80572e9b32248302846c89977d583f23e52699699422237663fe068bf7e7c514e2ec1bbcf674d2e5dafd7d193045865400f54667f2ec76636443529f\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 9ca2c37f4b1a392c34551f570ff06a74c5f027170815454c5ed3535d5232df54fb1f65f2304e32b4995bb77ccd4ece69db98452f182dbeda98d525a19\nB = f6446c98be1146326efb57dcda8d512b3083657e9d1a04148d0e1e3c7d4247c31bb66409a1e3e6bc0eafe4b2ab5bbfb69e65a3002f584f85503275bc549c55fa\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1190fea35b9a1ba1c280d57888664aa7db5f9d6d4325b35a6276bf61291d67e6e14e3001f5af1753faff61fa53861ab8ed15d15965e0dcb05718bdecc6\nB = f6446cb4193c2182baba8c62a0b4bf2495d4b4a65bb9e2c83415cd64e136dec15c4c403aa20a47d4c2aa63f7407931d6f96d428afeadfbdcb3eb13bcfaac9cd9\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 209797b717f068e5f808dd2b4e12576fa056879da881bfcc1819228e4f9dc6f84347edbdbe273657d533d7c928e51b68a82c59d93dfb038514c104c1bc\nB = -f6446cc31fd5353f1107d09828bc71ea41e17c6b52a4132d90223f1a839a0be7dcab519c9bc8039d3ac967d174ef00ac586df24615367bb4ce11e87aa2f371cf\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -7198b6aa26be42e97cad682aaa63d68d51952dae52d4cfe5f9a6acef93f35b6d7b7be87a1f2a944cf7fa9483cd6c3df7599d44c5b56e5ff38cd43d23c0\nB = -f6446c30ef86d400625c012372771bf1cbb37f7966eec73239928d08c3ca8e044b88ebddd7f1cbbfe8fec3044682b3b6071492444b97dcc164ae6fd90db18c53\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = cb788549eee4fa559118f0bd66b68d94845bdb7d07b2042d53a64921f3e3df76a2b143e9e9ad39dacaf405cec5fed9fd59050c5d27322142e4e11d4ede\nB = f6446bd70fb834383ba4950f06ee893578fc7846a040f87d5c5e45aec42e5ba45b04e2b6a2965bf5665935314d1168bd74788c44e3d0454fa0ed208100d16135\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1122c39c2c252ec96e9274bdf713bfa8200e35ed9f18dd087fedd2005e5898b6f8ed37e1cd7e1f7b0c5be137a71a27b7e4e4669b1f412e154e6ad2ad567\nB = f6446db4b47740e9738b8189472b260d6b848ecbdf7b4f769c32fb014797837dc86fc8e8275862b6f58ac0c1ff2ab1f515ce07ec2f46546ae5efb84c8f19857a\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb01", + "3\nA = 2d57e15c8039f8367d2e0198d9fc27616e53efdc9cb0adc0b0199362d08f5698af1f07499cd2b72005f1c09900c71b677e57cd62094743a9b3ae541e74d\nB = -f6446f780653462ac0225272fff8d43bf20023b03b1a3f50193e7e0403adaaa1344de44b444edfac3f05105b5d20c78fe509018365b2c30b4748fea0c7309760\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -539b4413477ef77c15fd53e202d8e5d183eb1c91fecf5b89959bb8d60d3f7907e95c5dd045d698a6a17f0150861b43bfeb2e5d40bdc970839b0712ee17f\nB = -f6446768d3fc49af312729404aa1266ea12cf48c4a53559818a9d9a8aeea1cc44753dac38dfd4181aa08a5e451022f21bf168aeb0308969a3c0629b570bfce94\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = fe46dc4f55346ee27d6ced0256b0ec64f82d5150c3b49d4cc7d56a60ae5d10bb649a57f4c97acc146388a6a9d25d3c3c7e42372e46bb4f8a72171ea5979\nB = f6445cbe1a7888d3d9b0c2c9510f213120c3bd4827076949c48da68513d172b26dd8a30fae5af94766d1c9c3b6ac9a5d9f8ec1b9c569be0b1e15bc447004569a\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1fbd702bd26d37bb1fa554ad261f1e7161ea438f49b41aab950884c5c87eb1e0b9a3a69807b759a1440ef9e5683c1a13b9d610fd87fb131619cb63997891\nB = f6448c5ff8695094585a0a45748c6cbb4dfb6eb53fabbf39290e080aef3d4616f0c512fcfa724d966d34540b3afc9fbf8d664373f9da2a71e6247d31458828a4\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 260abc8cb124b3c17698ee342bdbe4b1513a085effb4f79aca252c98c8799ad203dccc9c305cdccd2edc16159d0e2c7a125c50f8abff9e12dbe8d93c655d\nB = -f64492ad44ca2f4bd46061390e137278143b5e05047b753a05fd3d2797104611d9b65d362076763bf0603ed8572cd4919fcc9bfa39d54e7671213f4ebb2b1570\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -6f961198d2039a92d24c53bfcafd73251b575d5e06565db36666545d5994e511c4c3905cc0b93586f05916c08b8f51a0e0fe1b6253fcfa41bfec25196482\nB = -f643fd0c76a4ac23860c1853cc1f7b9ebc64f1739ebe6f2eb0af0c9c161a240359d29495c37d8525de0c1fa32a56abf421b1a89fcd7a4e79d8cca379bcd54b91\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = ed86313f32aabf2f7487dd9f587431e17b9a46e1a78fe89b0ebe81c737a73c2a8fef92c0963fc36e9808309d00c3bd14612fdf4fb236e06add8fe9329252\nB = f6437f1c56fe4b7c616f7618423fee27fda89130b53acdf525c76443e8b045f102b9c969c119af9f502477f4107a36bfb63e286e098cf03ff2a385d5f8bc1dc1\n\nSum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -1741bce7ae27a7b3effa5b08b39f9d03d69efe7b0716cc57dc106aac17925a2d77c18386f7398db17f813c9c6f2dfcc9347e9f55de76b11475fcf77bbedb1\nB = f645e0be56b860a19bddea45d06a8095ffc776bae3cce6f1d3e034091538f6bde1bbd5718c49b977eeab08100ade2a633fe5d187de3a89e1e455c33559aa9dc4\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = 20bd41a0d6d691e8554ee8b90a775e04f086f318b7afdc7b5d6d7c3b7ab6b955aa286809856e1bd195dace84b18b2d0365edc8e066d2e8db9ae8325d00843\nB = -f6467876a24aeb903f243f8eab6fee120fd9153a2da7f082d61849da2e2f2903d43efbdfd4729cc0d0ac6da9296250364388e87a76e30fa560c811e907beb856\n\nSum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013\nA = -685147a1e74dab824bc6cb7fb30a773fbe5e380f46189574038d2d2f3983ced8777a080af6b06e9bb3c2d134a3302fa099b4bc78a4f01a4c157424ee3c773\nB = -f63de78e0e1f094c687a2e3367e415f4bb8e26e77b2813fbb7223a2f9783e55b515ce1b8d32adad829d7d3cf2dcd04807948ee52215253752e4d0c23930ae8a0\n\nSum = 1\nA = 0\nB = 1\n\nSum = 2\nA = 1\nB = 1\n\nSum = 4\nA = 3\nB = 1\n\nSum = 8\nA = 7\nB = 1\n\nSum = 10\nA = f\nB = 1\n\nSum = 20\nA = 1f\nB = 1\n\nSum = 40\nA = 3f\nB = 1\n\nSum = 80\nA = 7f\nB = 1\n\nSum = 100\nA = ff\nB = 1\n\nSum = 200\nA = 1ff\nB = 1\n\nSum = 400\nA = 3ff\nB = 1\n\nSum = 800\nA = 7ff\nB = 1\n\nSum = 1000\nA = fff\nB = 1\n\nSum = 2000\nA = 1fff\nB = 1\n\nSum = 4000\nA = 3fff\nB = 1\n\nSum = 8000\nA = 7fff\nB = 1\n\nSum = 10000\nA = ffff\nB = 1\n\nSum = 20000\nA = 1ffff\nB = 1\n\nSum = 40000\nA = 3ffff\nB = 1\n\nSum = 80000\nA = 7ffff\nB = 1\n\nSum = 100000\nA = fffff\nB = 1\n\nSum = 200000\nA = 1fffff\nB = 1\n\nSum = 400000\nA = 3fffff\nB = 1\n\nSum = 800000\nA = 7fffff\nB = 1\n\nSum = 1000000\nA = ffffff\nB = 1\n\nSum = 2000000\nA = 1ffffff\nB = 1\n\nSum = 4000000\nA = 3ffffff\nB = 1\n\nSum = 8000000\nA = 7ffffff\nB = 1\n\nSum = 10000000\nA = fffffff\nB = 1\n\nSum = 20000000\nA = 1fffffff\nB = 1\n\nSum = 40000000\nA = 3fffffff\nB = 1\n\nSum = 80000000\nA = 7fffffff\nB = 1\n\nSum = 100000000\nA = ffffffff\nB = 1\n\nSum = 200000000\nA = 1ffffffff\nB = 1\n\nSum = 400000000\nA = 3ffffffff\nB = 1\n\nSum = 800000000\nA = 7ffffffff\nB = 1\n\nSum = 1000000000\nA = fffffffff\nB = 1\n\nSum = 2000000000\nA = 1fffffffff\nB = 1\n\nSum = 4000000000\nA = 3fffffffff\nB = 1\n\nSum = 8000000000\nA = 7fffffffff\nB = 1\n\nSum = 10000000000\nA = ffffffffff\nB = 1\n\nSum = 20000000000\nA = 1ffffffffff\nB = 1\n\nSum = 40000000000\nA = 3ffffffffff\nB = 1\n\nSum = 80000000000\nA = 7ffffffffff\nB = 1\n\nSum = 100000000000\nA = fffffffffff\nB = 1\n\nSum = 200000000000\nA = 1fffffffffff\nB = 1\n\nSum = 400000000000\nA = 3fffffffffff\nB = 1\n\nSum = 800000000000\nA = 7fffffffffff\nB = 1\n\nSum = 1000000000000\nA = ffffffffffff\nB = 1\n\nSum = 2000000000000\nA = 1ffffffffffff\nB = 1\n\nSum = 4000000000000\nA = 3ffffffffffff\nB = 1\n\nSum = 8000000000000\nA = 7ffffffffffff\nB = 1\n\nSum = 10000000000000\nA = fffffffffffff\nB = 1\n\nSum = 20000000000000\nA = 1fffffffffffff\nB = 1\n\nSum = 40000000000000\nA = 3fffffffffffff\nB = 1\n\nSum = 80000000000000\nA = 7fffffffffffff\nB = 1\n\nSum = 100000000000000\nA = ffffffffffffff\nB = 1\n\nSum = 200000000000000\nA = 1ffffffffffffff\nB = 1\n\nSum = 400000000000000\nA = 3ffffffffffffff\nB = 1\n\nSum = 800000000000000\nA = 7ffffffffffffff\nB = 1\n\nSum = 1000000000000000\nA = fffffffffffffff\nB = 1\n\nSum = 2000000000000000\nA = 1fffffffffffffff\nB = 1\n\nSum = 4000000000000000\nA = 3fffffffffffffff\nB = 1\n\nSum = 8000000000000000\nA = 7fffffffffffffff\nB = 1\n\nSum = 10000000000000000\nA = ffffffffffffffff\nB = 1\n\nSum = 20000000000000000\nA = 1ffffffffffffffff\nB = 1\n\nSum = 40000000000000000\nA = 3ffffffffffffffff\nB = 1\n\nSum = 80000000000000000\nA = 7ffffffffffffffff\nB = 1\n\nSum = 100000000000000000\nA = fffffffffffffffff\nB = 1\n\nSum = 200000000000000000\nA = 1fffffffffffffffff\nB = 1\n\nSum = 400000000000000000\nA = 3fffffffffffffffff\nB = 1\n\nSum = 800000000000000000\nA = 7fffffffffffffffff\nB = 1\n\nSum = 1000000000000000000\nA = ffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000\nA = 1ffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000\nA = 3ffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000\nA = 7ffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000\nA = fffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000\nA = 1fffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000\nA = 3fffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000\nA = 7fffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000\nA = ffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000\nA = 1ffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000\nA = 3ffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000\nA = 7ffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000\nA = fffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000\nA = 1fffffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000000\nA = 3fffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000\nA = 7fffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000\nA = ffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000\nA = 1ffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000\nA = 3ffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000\nA = 7ffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000\nA = fffffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000000\nA = 1fffffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000000\nA = 3fffffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000000\nA = 7fffffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000000\nA = ffffffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000000\nA = 1fffffffffffffffffffffff", + "f\nB = 1\n\nSum = 4000000000000000000000000\nA = 3ffffffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000000\nA = 7ffffffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000000\nA = fffffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000000\nA = 1fffffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000000\nA = 3fffffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000000\nA = 7fffffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000\nA = ffffffffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000000000\nA = 1ffffffffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000000000\nA = 3ffffffffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000000000\nA = 7ffffffffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000000000\nA = fffffffffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000000000\nA = 1fffffffffffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000000000000\nA = 3fffffffffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000000000\nA = 7fffffffffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000000000\nA = ffffffffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000000000\nA = 1ffffffffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000000000\nA = 3ffffffffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000000000\nA = 7ffffffffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000000\nA = fffffffffffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000000000000\nA = 1fffffffffffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000000000000\nA = 3fffffffffffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000000000000\nA = 7fffffffffffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000000000000\nA = ffffffffffffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000000000000\nA = 7ffffffffffffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000000000000\nA = fffffffffffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000000000000000\nA = 7ffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000000000000000\nA = 7ffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000000000000000000\nA = 7ffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000000000000000000000\nA = 7ffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000000000000000000000\nA = 7ffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000000000000000000000000\nA = 7ffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000000000000000000000000000\nA = 7ffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000000000000000000000000000\nA = 7fffffffffffffffffffffffff", + "fffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 200000000000000000000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 400000000000000000000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 800000000000000000000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 1000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 2000000000000000000000000000000000000000000000000\nA = 1ffffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 4000000000000000000000000000000000000000000000000\nA = 3ffffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 8000000000000000000000000000000000000000000000000\nA = 7ffffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 10000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 20000000000000000000000000000000000000000000000000\nA = 1fffffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 40000000000000000000000000000000000000000000000000\nA = 3fffffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 80000000000000000000000000000000000000000000000000\nA = 7fffffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffffffff\nB = 1\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffffffe\nB = 2\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffffffc\nB = 4\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffffff8\nB = 8\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffffff0\nB = 10\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffffffe0\nB = 20\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffffffc0\nB = 40\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffffff80\nB = 80\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffffff00\nB = 100\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffffe00\nB = 200\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffffc00\nB = 400\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffff800\nB = 800\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffff000\nB = 1000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffffe000\nB = 2000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffffc000\nB = 4000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffff8000\nB = 8000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffff0000\nB = 10000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffe0000\nB = 20000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffffc0000\nB = 40000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffff80000\nB = 80000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffff00000\nB = 100000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffe00000\nB = 200000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffffc00000\nB = 400000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffff800000\nB = 800000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffff000000\nB = 1000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffe000000\nB = 2000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffffc000000\nB = 4000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffff8000000\nB = 8000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffff0000000\nB = 10000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffe0000000\nB = 20000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffffc0000000\nB = 40000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffff80000000\nB = 80000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffff00000000\nB = 100000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffe00000000\nB = 200000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffffc00000000\nB = 400000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffff800000000\nB = 800000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffff000000000\nB = 1000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffe000000000\nB = 2000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffffc000000000\nB = 4000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffff8000000000\nB = 8000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffff0000000000\nB = 10000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffe0000000000\nB = 20000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffffc0000000000\nB = 40000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffff80000000000\nB = 80000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffff00000000000\nB = 100000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffe00000000000\nB = 200000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffffc00000000000\nB = 400000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffff800000000000\nB = 800000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffff000000000000\nB = 1000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffe000000000000\nB = 2000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffffc000000000000\nB = 4000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffff8000000000000\nB = 8000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffff0000000000000\nB = 10000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffff", + "fffffffffffffffffffffe0000000000000\nB = 20000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffffc0000000000000\nB = 40000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffff80000000000000\nB = 80000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffff00000000000000\nB = 100000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffe00000000000000\nB = 200000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffffc00000000000000\nB = 400000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffff800000000000000\nB = 800000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffff000000000000000\nB = 1000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffe000000000000000\nB = 2000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffffc000000000000000\nB = 4000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffff8000000000000000\nB = 8000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffff0000000000000000\nB = 10000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffe0000000000000000\nB = 20000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffffc0000000000000000\nB = 40000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffff80000000000000000\nB = 80000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffff00000000000000000\nB = 100000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffe00000000000000000\nB = 200000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffffc00000000000000000\nB = 400000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffff800000000000000000\nB = 800000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffff000000000000000000\nB = 1000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffe000000000000000000\nB = 2000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffffc000000000000000000\nB = 4000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffff8000000000000000000\nB = 8000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffff0000000000000000000\nB = 10000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffe0000000000000000000\nB = 20000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffffc0000000000000000000\nB = 40000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffff80000000000000000000\nB = 80000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffff00000000000000000000\nB = 100000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffe00000000000000000000\nB = 200000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffffc00000000000000000000\nB = 400000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffff800000000000000000000\nB = 800000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffff000000000000000000000\nB = 1000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffe000000000000000000000\nB = 2000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffffc000000000000000000000\nB = 4000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffff8000000000000000000000\nB = 8000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffff0000000000000000000000\nB = 10000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffe0000000000000000000000\nB = 20000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffffc0000000000000000000000\nB = 40000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffff80000000000000000000000\nB = 80000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffff00000000000000000000000\nB = 100000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffe00000000000000000000000\nB = 200000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffffc00000000000000000000000\nB = 400000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffff800000000000000000000000\nB = 800000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffff000000000000000000000000\nB = 1000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffe000000000000000000000000\nB = 2000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffffc000000000000000000000000\nB = 4000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffff8000000000000000000000000\nB = 8000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffff0000000000000000000000000\nB = 10000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffe0000000000000000000000000\nB = 20000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffffc0000000000000000000000000\nB = 40000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffff80000000000000000000000000\nB = 80000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffff00000000000000000000000000\nB = 100000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffe00000000000000000000000000\nB = 200000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffffc00000000000000000000000000\nB = 400000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffff800000000000000000000000000\nB = 800000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffff000000000000000000000000000\nB = 1000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffe000000000000000000000000000\nB = 2000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffffc000000000000000000000000000\nB = 4000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffff8000000000000000000000000000\nB = 8000000000000000000000000000\n\nSu", + "m = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffff0000000000000000000000000000\nB = 10000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffe0000000000000000000000000000\nB = 20000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffffc0000000000000000000000000000\nB = 40000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffff80000000000000000000000000000\nB = 80000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffff00000000000000000000000000000\nB = 100000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffe00000000000000000000000000000\nB = 200000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffffc00000000000000000000000000000\nB = 400000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffff800000000000000000000000000000\nB = 800000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffff000000000000000000000000000000\nB = 1000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffe000000000000000000000000000000\nB = 2000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffffc000000000000000000000000000000\nB = 4000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffff8000000000000000000000000000000\nB = 8000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffff0000000000000000000000000000000\nB = 10000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffe0000000000000000000000000000000\nB = 20000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffffc0000000000000000000000000000000\nB = 40000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffff80000000000000000000000000000000\nB = 80000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffff00000000000000000000000000000000\nB = 100000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffe00000000000000000000000000000000\nB = 200000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffffc00000000000000000000000000000000\nB = 400000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffff800000000000000000000000000000000\nB = 800000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffff000000000000000000000000000000000\nB = 1000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffe000000000000000000000000000000000\nB = 2000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffffc000000000000000000000000000000000\nB = 4000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffff8000000000000000000000000000000000\nB = 8000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffff0000000000000000000000000000000000\nB = 10000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffe0000000000000000000000000000000000\nB = 20000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffffc0000000000000000000000000000000000\nB = 40000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffff80000000000000000000000000000000000\nB = 80000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffff00000000000000000000000000000000000\nB = 100000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffe00000000000000000000000000000000000\nB = 200000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffffc00000000000000000000000000000000000\nB = 400000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffff800000000000000000000000000000000000\nB = 800000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffff000000000000000000000000000000000000\nB = 1000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffe000000000000000000000000000000000000\nB = 2000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffffc000000000000000000000000000000000000\nB = 4000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffff8000000000000000000000000000000000000\nB = 8000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffff0000000000000000000000000000000000000\nB = 10000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffe0000000000000000000000000000000000000\nB = 20000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffffc0000000000000000000000000000000000000\nB = 40000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffff80000000000000000000000000000000000000\nB = 80000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffff00000000000000000000000000000000000000\nB = 100000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffe00000000000000000000000000000000000000\nB = 200000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffffc00000000000000000000000000000000000000\nB = 400000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffff800000000000000000000000000000000000000\nB = 800000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffff000000000000000000000000000000000000000\nB = 1000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffe000000000000000000000000000000000000000\nB = 2000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffffc000000000000000000000000000000000000000\nB = 4000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffff8000000000000000000000000000000000000000\nB = 8000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffff0000000000000000000000000000000000000000\nB = 10000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffe0000000000000000000000000000000000000000\nB = 20000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffffc0000000000000000000000000000000000000000\nB = 40000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffff80000000000000000000000000000000000000000\nB = 80000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffff00000000000000000000000000000000000000000\nB = 100000000000000000000000000000000000000000\n\nSum = 1000000000000000000", + "00000000000000000000000000000000\nA = ffffffffe00000000000000000000000000000000000000000\nB = 200000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffffc00000000000000000000000000000000000000000\nB = 400000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffff800000000000000000000000000000000000000000\nB = 800000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffff000000000000000000000000000000000000000000\nB = 1000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffe000000000000000000000000000000000000000000\nB = 2000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffffc000000000000000000000000000000000000000000\nB = 4000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffff8000000000000000000000000000000000000000000\nB = 8000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffff0000000000000000000000000000000000000000000\nB = 10000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffe0000000000000000000000000000000000000000000\nB = 20000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffffc0000000000000000000000000000000000000000000\nB = 40000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffff80000000000000000000000000000000000000000000\nB = 80000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffff00000000000000000000000000000000000000000000\nB = 100000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffe00000000000000000000000000000000000000000000\nB = 200000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffffc00000000000000000000000000000000000000000000\nB = 400000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffff800000000000000000000000000000000000000000000\nB = 800000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffff000000000000000000000000000000000000000000000\nB = 1000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffe000000000000000000000000000000000000000000000\nB = 2000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffffc000000000000000000000000000000000000000000000\nB = 4000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffff8000000000000000000000000000000000000000000000\nB = 8000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffff0000000000000000000000000000000000000000000000\nB = 10000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffe0000000000000000000000000000000000000000000000\nB = 20000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fffc0000000000000000000000000000000000000000000000\nB = 40000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fff80000000000000000000000000000000000000000000000\nB = 80000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fff00000000000000000000000000000000000000000000000\nB = 100000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffe00000000000000000000000000000000000000000000000\nB = 200000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ffc00000000000000000000000000000000000000000000000\nB = 400000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ff800000000000000000000000000000000000000000000000\nB = 800000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = ff000000000000000000000000000000000000000000000000\nB = 1000000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fe000000000000000000000000000000000000000000000000\nB = 2000000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = fc000000000000000000000000000000000000000000000000\nB = 4000000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = f8000000000000000000000000000000000000000000000000\nB = 8000000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = f0000000000000000000000000000000000000000000000000\nB = 10000000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = e0000000000000000000000000000000000000000000000000\nB = 20000000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = c0000000000000000000000000000000000000000000000000\nB = 40000000000000000000000000000000000000000000000000\n\nSum = 100000000000000000000000000000000000000000000000000\nA = 80000000000000000000000000000000000000000000000000\nB = 80000000000000000000000000000000000000000000000000\n\n\n# LShift1 tests.\n#\n# These test vectors satisfy A * 2 = LShift1\n\nLShift1 = 0\nA = 0\n\nLShift1 = 13116120bca5df64e13f314254\nA = 988b0905e52efb2709f98a12a\n\nLShift1 = -13116120bca5df64e13f314254\nA = -988b0905e52efb2709f98a12a\n\nLShift1 = 2622c241794bbec9c27e6284a8\nA = 13116120bca5df64e13f314254\n\nLShift1 = -2622c241794bbec9c27e6284a8\nA = -13116120bca5df64e13f314254\n\nLShift1 = 4c458482f2977d9384fcc50950\nA = 2622c241794bbec9c27e6284a8\n\nLShift1 = -4c458482f2977d9384fcc50950\nA = -2622c241794bbec9c27e6284a8\n\nLShift1 = 988b0905e52efb2709f98a12a2\nA = 4c458482f2977d9384fcc50951\n\nLShift1 = -988b0905e52efb2709f98a12a2\nA = -4c458482f2977d9384fcc50951\n\nLShift1 = 13116120bca5df64e13f3142544\nA = 988b0905e52efb2709f98a12a2\n\nLShift1 = -13116120bca5df64e13f3142544\nA = -988b0905e52efb2709f98a12a2\n\nLShift1 = 2622c241794bbec9c27e6284a8a\nA = 13116120bca5df64e13f3142545\n\nLShift1 = -2622c241794bbec9c27e6284a8a\nA = -13116120bca5df64e13f3142545\n\nLShift1 = 4c458482f2977d9384fcc509514\nA = 2622c241794bbec9c27e6284a8a\n\nLShift1 = -4c458482f2977d9384fcc509514\nA = -2622c241794bbec9c27e6284a8a\n\nLShift1 = 988b0905e52efb2709f98a12a28\nA = 4c458482f2977d9384fcc509514\n\nLShift1 = -988b0905e52efb2709f98a12a28\nA = -4c458482f2977d9384fcc509514\n\nLShift1 = 13116120bca5df64e13f31425450\nA = 988b0905e52efb2709f98a12a28\n\nLShift1 = -13116120bca5df64e13f31425450\nA = -988b0905e52efb2709f98a12a28\n\nLShift1 = 2622c241794bbec9c27e6284a8a0\nA = 13116120bca5df64e13f31425450\n\nLShift1 = -2622c241794bbec9c27e6284a8a0\nA = -13116120bca5df64e13f31425450\n\nLShift1 = 4c458482f2977d9384fcc5095142\nA = 2622c241794bbec9c27e6284a8a1\n\nLShift1 = -4c458482f2977d9384fcc5095142\nA = -2622c241794bbec9c27e6284a8a1\n\nLShift1 = 988b0905e52efb2709f98a12a286\nA = 4c458482f2977d9384fcc5095143\n\nLShift1 = -988b0905e52efb2709f98a12a286\nA = -4c458482f2977d9384fcc5095143\n\nLShift1 = 13116120bca5df64e13f31425450c\nA = 988b0905e52efb2709f98a12a286\n\nLShift1 = -13116120bca5df64e13f31425450c\nA = -988b0905e52efb2709f98a12a286\n\nLShift1 = 2622c241794bbec9c27e6284a8a18\nA = 13116120bca5df64e13f31425450c\n\nLShift1 = -2622c241794bbec9c27e6284a8a18\nA = -13116120bca5df64e13f31425450c\n\nLShift1 = 4c458482f2977d9384fcc50951430\nA = 2622c241794bbec9c27e6284a8a18\n\nLShift1 = -4c458482f2977d9384fcc50951430\nA = -2622c241794bbec9c27e6284a8a18\n\nLShift1 = 988b0905e52efb2709f98a12a2862\nA = 4c458482f2977d9384fcc50951431\n\nLShift1 = -988b0905e52efb2709f98a12a2862\nA = -4c458482f2977d9384fcc50951431\n\nLShift1 = 13116120bca5df6", + "4e13f31425450c6\nA = 988b0905e52efb2709f98a12a2863\n\nLShift1 = -13116120bca5df64e13f31425450c6\nA = -988b0905e52efb2709f98a12a2863\n\nLShift1 = 2622c241794bbec9c27e6284a8a18e\nA = 13116120bca5df64e13f31425450c7\n\nLShift1 = -2622c241794bbec9c27e6284a8a18e\nA = -13116120bca5df64e13f31425450c7\n\nLShift1 = 4c458482f2977d9384fcc50951431e\nA = 2622c241794bbec9c27e6284a8a18f\n\nLShift1 = -4c458482f2977d9384fcc50951431e\nA = -2622c241794bbec9c27e6284a8a18f\n\nLShift1 = 988b0905e52efb2709f98a12a2863c\nA = 4c458482f2977d9384fcc50951431e\n\nLShift1 = -988b0905e52efb2709f98a12a2863c\nA = -4c458482f2977d9384fcc50951431e\n\nLShift1 = 13116120bca5df64e13f31425450c7a\nA = 988b0905e52efb2709f98a12a2863d\n\nLShift1 = -13116120bca5df64e13f31425450c7a\nA = -988b0905e52efb2709f98a12a2863d\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4\nA = 13116120bca5df64e13f31425450c7a\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4\nA = -13116120bca5df64e13f31425450c7a\n\nLShift1 = 4c458482f2977d9384fcc50951431e8\nA = 2622c241794bbec9c27e6284a8a18f4\n\nLShift1 = -4c458482f2977d9384fcc50951431e8\nA = -2622c241794bbec9c27e6284a8a18f4\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2\nA = 4c458482f2977d9384fcc50951431e9\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2\nA = -4c458482f2977d9384fcc50951431e9\n\nLShift1 = 13116120bca5df64e13f31425450c7a4\nA = 988b0905e52efb2709f98a12a2863d2\n\nLShift1 = -13116120bca5df64e13f31425450c7a4\nA = -988b0905e52efb2709f98a12a2863d2\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4a\nA = 13116120bca5df64e13f31425450c7a5\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4a\nA = -13116120bca5df64e13f31425450c7a5\n\nLShift1 = 4c458482f2977d9384fcc50951431e94\nA = 2622c241794bbec9c27e6284a8a18f4a\n\nLShift1 = -4c458482f2977d9384fcc50951431e94\nA = -2622c241794bbec9c27e6284a8a18f4a\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2a\nA = 4c458482f2977d9384fcc50951431e95\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2a\nA = -4c458482f2977d9384fcc50951431e95\n\nLShift1 = 13116120bca5df64e13f31425450c7a56\nA = 988b0905e52efb2709f98a12a2863d2b\n\nLShift1 = -13116120bca5df64e13f31425450c7a56\nA = -988b0905e52efb2709f98a12a2863d2b\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4ae\nA = 13116120bca5df64e13f31425450c7a57\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4ae\nA = -13116120bca5df64e13f31425450c7a57\n\nLShift1 = 4c458482f2977d9384fcc50951431e95c\nA = 2622c241794bbec9c27e6284a8a18f4ae\n\nLShift1 = -4c458482f2977d9384fcc50951431e95c\nA = -2622c241794bbec9c27e6284a8a18f4ae\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2ba\nA = 4c458482f2977d9384fcc50951431e95d\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2ba\nA = -4c458482f2977d9384fcc50951431e95d\n\nLShift1 = 13116120bca5df64e13f31425450c7a576\nA = 988b0905e52efb2709f98a12a2863d2bb\n\nLShift1 = -13116120bca5df64e13f31425450c7a576\nA = -988b0905e52efb2709f98a12a2863d2bb\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aee\nA = 13116120bca5df64e13f31425450c7a577\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aee\nA = -13116120bca5df64e13f31425450c7a577\n\nLShift1 = 4c458482f2977d9384fcc50951431e95de\nA = 2622c241794bbec9c27e6284a8a18f4aef\n\nLShift1 = -4c458482f2977d9384fcc50951431e95de\nA = -2622c241794bbec9c27e6284a8a18f4aef\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbc\nA = 4c458482f2977d9384fcc50951431e95de\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbc\nA = -4c458482f2977d9384fcc50951431e95de\n\nLShift1 = 13116120bca5df64e13f31425450c7a577a\nA = 988b0905e52efb2709f98a12a2863d2bbd\n\nLShift1 = -13116120bca5df64e13f31425450c7a577a\nA = -988b0905e52efb2709f98a12a2863d2bbd\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef4\nA = 13116120bca5df64e13f31425450c7a577a\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef4\nA = -13116120bca5df64e13f31425450c7a577a\n\nLShift1 = 4c458482f2977d9384fcc50951431e95dea\nA = 2622c241794bbec9c27e6284a8a18f4aef5\n\nLShift1 = -4c458482f2977d9384fcc50951431e95dea\nA = -2622c241794bbec9c27e6284a8a18f4aef5\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6\nA = 4c458482f2977d9384fcc50951431e95deb\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6\nA = -4c458482f2977d9384fcc50951431e95deb\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ac\nA = 988b0905e52efb2709f98a12a2863d2bbd6\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ac\nA = -988b0905e52efb2709f98a12a2863d2bbd6\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5a\nA = 13116120bca5df64e13f31425450c7a577ad\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5a\nA = -13116120bca5df64e13f31425450c7a577ad\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb4\nA = 2622c241794bbec9c27e6284a8a18f4aef5a\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb4\nA = -2622c241794bbec9c27e6284a8a18f4aef5a\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6a\nA = 4c458482f2977d9384fcc50951431e95deb5\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6a\nA = -4c458482f2977d9384fcc50951431e95deb5\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad6\nA = 988b0905e52efb2709f98a12a2863d2bbd6b\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad6\nA = -988b0905e52efb2709f98a12a2863d2bbd6b\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5ae\nA = 13116120bca5df64e13f31425450c7a577ad7\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5ae\nA = -13116120bca5df64e13f31425450c7a577ad7\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5e\nA = 2622c241794bbec9c27e6284a8a18f4aef5af\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5e\nA = -2622c241794bbec9c27e6284a8a18f4aef5af\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6be\nA = 4c458482f2977d9384fcc50951431e95deb5f\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6be\nA = -4c458482f2977d9384fcc50951431e95deb5f\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7e\nA = 988b0905e52efb2709f98a12a2863d2bbd6bf\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7e\nA = -988b0905e52efb2709f98a12a2863d2bbd6bf\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5afe\nA = 13116120bca5df64e13f31425450c7a577ad7f\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5afe\nA = -13116120bca5df64e13f31425450c7a577ad7f\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5fe\nA = 2622c241794bbec9c27e6284a8a18f4aef5aff\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5fe\nA = -2622c241794bbec9c27e6284a8a18f4aef5aff\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bfe\nA = 4c458482f2977d9384fcc50951431e95deb5ff\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bfe\nA = -4c458482f2977d9384fcc50951431e95deb5ff\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc\nA = 13116120bca5df64e13f31425450c7a577ad7fe\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc\nA = -13116120bca5df64e13f31425450c7a577ad7fe\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff8\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff8\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff0\nA = 4c458482f2977d9384fcc50951431e95deb5ff8\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff0\nA = -4c458482f2977d9384fcc50951431e95deb5ff8\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff0\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff0\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc0\nA = 13116120bca5df64e13f31425450c7a577ad7fe0\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc0\nA = -13116120bca5df64e13f31425450c7a577ad7fe0\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff82\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff82\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06\nA = 4c458482f2977d9384fcc50951431e95deb5ff83\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06\nA = -4c458482f2977d9384fcc50951431e95deb5ff83\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0c\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0c\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1a\nA = 13116120bca5df64e13f31425450c7a577ad7fe0d\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1a\nA = -13116120bca5df64e13f31425450c7a577ad7fe0d\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b", + "\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06c\nA = 4c458482f2977d9384fcc50951431e95deb5ff836\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06c\nA = -4c458482f2977d9384fcc50951431e95deb5ff836\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0da\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06d\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0da\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06d\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b6\nA = 13116120bca5df64e13f31425450c7a577ad7fe0db\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b6\nA = -13116120bca5df64e13f31425450c7a577ad7fe0db\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836e\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836e\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06de\nA = 4c458482f2977d9384fcc50951431e95deb5ff836f\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06de\nA = -4c458482f2977d9384fcc50951431e95deb5ff836f\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbe\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06df\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbe\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06df\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7c\nA = 13116120bca5df64e13f31425450c7a577ad7fe0dbe\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7c\nA = -13116120bca5df64e13f31425450c7a577ad7fe0dbe\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fa\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7d\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fa\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7d\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6\nA = 4c458482f2977d9384fcc50951431e95deb5ff836fb\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6\nA = -4c458482f2977d9384fcc50951431e95deb5ff836fb\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbec\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbec\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7da\nA = 13116120bca5df64e13f31425450c7a577ad7fe0dbed\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7da\nA = -13116120bca5df64e13f31425450c7a577ad7fe0dbed\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb6\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb6\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c\nA = 4c458482f2977d9384fcc50951431e95deb5ff836fb6\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c\nA = -4c458482f2977d9384fcc50951431e95deb5ff836fb6\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed8\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed8\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db0\nA = 13116120bca5df64e13f31425450c7a577ad7fe0dbed8\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db0\nA = -13116120bca5df64e13f31425450c7a577ad7fe0dbed8\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db0\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db0\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c0\nA = 4c458482f2977d9384fcc50951431e95deb5ff836fb60\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c0\nA = -4c458482f2977d9384fcc50951431e95deb5ff836fb60\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed82\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c1\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed82\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c1\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db06\nA = 13116120bca5df64e13f31425450c7a577ad7fe0dbed83\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db06\nA = -13116120bca5df64e13f31425450c7a577ad7fe0dbed83\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60c\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db06\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60c\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db06\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c18\nA = 4c458482f2977d9384fcc50951431e95deb5ff836fb60c\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c18\nA = -4c458482f2977d9384fcc50951431e95deb5ff836fb60c\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed832\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed832\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db066\nA = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db066\nA = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60ce\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60ce\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19e\nA = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cf\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19e\nA = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cf\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833e\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833e\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067c\nA = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833e\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067c\nA = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833e\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfa\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067d\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfa\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067d\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f6\nA = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfb\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f6\nA = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfb\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833ee\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833ee\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067de\nA = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833ef\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067de\nA = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833ef\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbe\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067df\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbe\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067df\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7e\nA = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7e\nA = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf\n\nLShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833efe\nA = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7f\n\nLShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833efe\nA = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7f\n\nLShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067dfc\nA = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833efe\n\nLShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067dfc\nA = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833efe\n\nLShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf8\nA = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067dfc\n\nLShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf8\nA = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067dfc\n\nLShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7f0\nA = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf8\n\nLShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7f0\nA = -4c458482f2977d9384fcc50951431e95deb5ff8", + "36fb60cfbf8\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000", + "00\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000\n\nLShift1 = 2ad3a0392d595", + "5b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000\nA = 55a740725ab2ab6cc884759e59af", + "8be8d741ed19da09c30c838000000000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000000\n\nLShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000000\nA = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000000\n\nLShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000000\nA = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000000\n\nLShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000000\nA = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000000\n\nLShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000000\nA = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000000\n\nLShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000000\nA = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000000\n\nLShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000000\nA = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000000\n\nLShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000000\nA = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000000\n\nLShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000000\nA = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000000\n\n\n# LShift tests\n#\n# These test vectors satisfy A * 2^N = LShift.\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 1\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 2\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 3\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 4\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 5\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 6\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 7\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 8\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 9\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = a\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = b\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = c\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = d\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = e\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = f\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 10\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 11\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 12\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 13\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 14\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 15\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 16\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 17\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 18\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 19\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 1a\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 1b\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 1c\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 1d\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 1e\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 1f\n\nLShif", + "t = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 20\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 21\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 22\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 23\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 24\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 25\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 26\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 27\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 28\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 29\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 2a\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 2b\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 2c\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 2d\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 2e\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 2f\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 30\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 31\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 32\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 33\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 34\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 35\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 36\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 37\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 38\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 39\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 3a\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 3b\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 3c\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 3d\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 3e\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 3f\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 40\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 41\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 42\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 43\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 44\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 45\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 46\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 47\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 48\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 49\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 4a\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 4b\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 4c\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 4d\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 4e\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 4f\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 50\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 51\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 52\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 53\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 54\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 55\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 56\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 57\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 58\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 59\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 5a\n\nLShift = 6327a1821", + "57565372c1b402df464cd822ea41b617e8b64b27800000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 5b\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 5c\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 5d\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 5e\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 5f\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 60\n\nLShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 61\n\nLShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 62\n\nLShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 63\n\nLShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000000000000000\nA = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0\nN = 64\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 1\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 2\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 3\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 4\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 5\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 6\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 7\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 8\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 9\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = a\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = b\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = c\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = d\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = e\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = f\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 10\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 11\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 12\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 13\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 14\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 15\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 16\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 17\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 18\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 19\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 1a\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 1b\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 1c\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 1d\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 1e\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 1f\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 20\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 21\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 22\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 23\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 24\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 25\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 26\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 27\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 28\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 29\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 2a\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 2b\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 2c\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 2d\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 2e\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 2f\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 30\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 31\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 32\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 33\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN", + " = 34\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 35\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 36\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 37\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 38\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 39\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 3a\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 3b\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 3c\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 3d\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 3e\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 3f\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 40\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 41\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 42\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 43\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 44\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 45\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 46\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 47\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 48\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 49\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 4a\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 4b\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 4c\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 4d\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 4e\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 4f\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 50\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 51\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 52\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 53\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 54\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 55\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 56\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 57\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 58\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 59\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 5a\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 5b\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 5c\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 5d\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 5e\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 5f\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 60\n\nLShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 61\n\nLShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 62\n\nLShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 63\n\nLShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000000000000000\nA = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e\nN = 64\n\n\n# RShift tests\n#\n# These test vectors satisfy A / 2^N = RShift, rounding towards zero.\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b36380\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 1\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9b1c0\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 2\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365ecd8e0\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 3\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c70\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 4\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b3638\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 5\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9b1c\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 6\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365ecd8e\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 7\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c7\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 8\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b363\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 9\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9b1\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = a\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403", + "565b365ecd8\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = b\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = c\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b36\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = d\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9b\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = e\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365ecd\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = f\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 10\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b3\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 11\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 12\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365ec\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 13\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f6\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 14\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 15\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 16\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365e\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 17\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 18\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 19\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cb\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 1a\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 1b\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 1c\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd9\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 1d\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66c\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 1e\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b36\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 1f\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 20\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 21\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 22\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b3\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 23\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 24\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596c\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 25\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb6\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 26\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 27\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 28\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d596\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 29\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806acb\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 2a\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 2b\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 2c\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d59\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 2d\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806ac\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 2e\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa5740356\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 2f\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01ab\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 30\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d5\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 31\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806a\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 32\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa574035\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 33\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01a\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 34\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00d\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 35\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae806\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 36\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57403\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 37\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba01\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 38\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d00\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 39\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae80\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 3a\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa5740\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 3b\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba0\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 3c\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d0\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 3d\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae8\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 3e\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa574\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 3f\n\nRShift = d9ce8dff4f2f39c216ea39a461080552ba\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 40\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95d\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 41\n\nRShift = 3673a37fd3cbce7085ba8e6918420154ae\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 42\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa57\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 43\n\nRShift = d9ce8dff4f2f39c216ea39a461080552b\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 44\n\nRShift = 6ce746ffa7979ce10b751cd2308402a95\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 45\n\nRShift = 3673a37fd3cbce7085ba8e6918420154a\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 46\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa5\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 47\n\nRShift = d9ce8dff4f2f39c216ea39a461080552\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 48\n\nRShift = 6ce746ffa7979ce10b751cd2308402a9\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 49\n\nRShift = 3673a37fd3cbce7085ba8e6918420154\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 4a\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100aa\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 4b\n\nRShift = d9ce8dff4f2f39c216ea39a46108055\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 4c\n\nRShift = 6ce746ffa7979ce10b751cd2308402a\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 4d\n\nRShift = 3673a37fd3cbce7085ba8e691842015\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 4e\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100a\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 4f\n\nRShift = d9ce8dff4f2f39c216ea39a4610805\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 50\n\nRShift = 6ce746ffa7979ce10b751cd2308402\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 51\n\nRShift = 3673a37fd3cbce7085ba8e69184201\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 52\n\nRShift = 1b39d1bfe9e5e73842dd47348c2100\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 53\n\nRShift = d9ce8dff4f2f39c216ea39a461080\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\n", + "N = 54\n\nRShift = 6ce746ffa7979ce10b751cd230840\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 55\n\nRShift = 3673a37fd3cbce7085ba8e6918420\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 56\n\nRShift = 1b39d1bfe9e5e73842dd47348c210\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 57\n\nRShift = d9ce8dff4f2f39c216ea39a46108\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 58\n\nRShift = 6ce746ffa7979ce10b751cd23084\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 59\n\nRShift = 3673a37fd3cbce7085ba8e691842\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 5a\n\nRShift = 1b39d1bfe9e5e73842dd47348c21\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 5b\n\nRShift = d9ce8dff4f2f39c216ea39a4610\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 5c\n\nRShift = 6ce746ffa7979ce10b751cd2308\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 5d\n\nRShift = 3673a37fd3cbce7085ba8e69184\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 5e\n\nRShift = 1b39d1bfe9e5e73842dd47348c2\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 5f\n\nRShift = d9ce8dff4f2f39c216ea39a461\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 60\n\nRShift = 6ce746ffa7979ce10b751cd230\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 61\n\nRShift = 3673a37fd3cbce7085ba8e6918\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 62\n\nRShift = 1b39d1bfe9e5e73842dd47348c\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 63\n\nRShift = d9ce8dff4f2f39c216ea39a46\nA = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701\nN = 64\n\n\n# Square tests.\n#\n# These test vectors satisfy A^2 = Square.\n\n# Regression test for a BN_sqr overflow bug.\nSquare = 4000000000000000800000000000000240000000000000000000000000000001fffffffffffffff8000000000000000400000000000000000000000000000000\nA = 80000000000000008000000000000001fffffffffffffffe0000000000000000\n\n# Regression test for a BN_sqr overflow bug.\nSquare = 40000000000000000000000080000001fffffffe000000004000000200000001fffffff800000004000000000000000000000000000000000000000000000000\nA = 80000000000000000000000080000001fffffffe000000000000000000000000\n\nSquare = c2fa18e1d110a4639781\nA = -df6a253c3f\n\nSquare = 4805f01d379f4ce8dc86ed269\nA = 21f253ddb5a6d\n\nSquare = 57def107babc1c2bffeff858947e69\nA = -95fbaee5a09c86d\n\nSquare = f3b01f7941961b3f5cc3361e3ac82423690\nA = -3e71292dd4ad3ed3b4\n\nSquare = 5e2d9c36d498ad1e8b6113f442ac513eaca74601\nA = 9b45cf6c7a43d910dcff\n\nSquare = 7b7c2eb3fe55615e422b41c6f725341527626398cdee4\nA = 2c7314e72a2ffeef170de2a\n\nSquare = af57c0ed328886642ed5d631b375fc89c03a99f1b427c6bbd1\nA = d3de077f8286a04daa9c497c9\n\nSquare = 4d9eac3058e6cbc0d12e639ced961c02ec1870afed62fdd44c67ce4\nA = -233da7e87ea4421ee8fe7e00c856\n\nSquare = 83c292d277fae28cfede74e8e80eba11dc132e16f78cdf64595c12c7dee4\nA = -b7a8aa7452678abd45d2ae6c349e2a\n\nSquare = c80e07dd01f9d19a5cf7f3c328ccf4de70fdd113de69382701294dd29674b9a90\nA = 389387eead58fef2c76b5cf920f35c5cc\n\nSquare = b9f69ca47ac855830fd7ed39c81822c520880c51c3ea60d3ccc106db37fc2b04c47831\nA = -da307c28ea67ca8d3117364ba93f0731bf9\n\nSquare = 81bbe3a13a22a73778233294ba0c132d9dddec111f768300f177468c204f8eab69b98e62d99\nA = -2d8f715bb32d410b4f475c4d000d56fec7cfc5\n\nSquare = f815ce34e9bc2e31e36e75cf49b2d15306d438a2a713b2a85b3ea156ba60c867c28cc65aa58fdf11\nA = fc02f2e1a26cd69f6a0e54cca4bbced739b43597\n\nSquare = 5f968707f58ea15c492ec9677be09c309d91164aafa754ab16ca47a411b5b2249858fb6f96135992e8a04\nA = 271b8eae3e96cc4900d4413d6c00b73736a5d89ed7e\n\nSquare = 4aa616aabcdc7ad48dcfd40d71e00a3789bbf549ff39b3e2ebb52017cb56014941961a5a6d52d7a9980fc99b49\nA = 8a3d3f15e6d7d2130aebd8cb99767defbe4c7704e3c1d\n\nSquare = 845e46db8c40f3f6f6f4928b5748618f021f9064c6522bcf2df004f8d2105e90cd354785c15a6cc32fcc77da2ea3001\nA = -2e0543ac8b8255ce30253cf2047a0ff353dea55a58551801\n\nSquare = 5dc5706dde9b326feb79941f08bd296ec3b6fb67270516b70fad9921438b9175f395310fb756b60d72d8e73e84ee8673cc40\nA = -9aefd7dfa709dec9e721f5c22867229435b2d6366462d0e438\n\nSquare = 63dc6565adba27974a66bdcc626596e16cf399541d679f754d9063ceeb320649bec09a940309dd1eae5fbba0b558939afae9689c9\nA = 27f8e071f70b0053d70eca9c6d1e28303b8da2d3c58083c2cc45d\n\nSquare = cf2176449bb8b215fc37288b904ca27d5d410780fd054d2a190a94b405f6aa41970b41ba3cc43eaabb97c2248e1e21457949070ec0f6a4\nA = -e645c7edc27512d4b3170d3c5430d0712a25c13afcc09c9b30bb11a\n\nSquare = 43194e5f12e828db6735824c194985108269ddec12c49a14658be3c2b7d298c2846da1aa3ecb7064e73c317af595601de59035faab6dc0fd911\nA = -20c3fb73a03217893fd4a9db6e53a3d83a8414d900213d0460dc91bf69\n\nSquare = fcee79e598f061157ca9416491f2eb069bb95a4d78a1d0538dab5c8008653db71b90ce3139e693ba284846be7b75d6b7aa80228420fe75599c12f090\nA = fe760dd61798c8f78e52b328fa27cfbe41b898de6e6bb4f4a684f038b5f4\n\nSquare = 4f0db9f9e6eff9fe7fc938f6d6f5e4fb017ffea0cea0f7c57f4fc1e5b2bdc00a1cb9c1e6c865e53309b6b73c4339b0bd485860ca9edde3019804902da6b61\nA = 23909968dd5d139994fe9baa0a7bbfa009b013df3859ff294c5872366eb7ecf\n\nSquare = 4441ff36d785d18208481470a5b8ba8cd65a45436c39190dde0b8a2b7d00bf67b185d98ab5c4a7853423778d6333abf6b115dc9567a9f9c71916d3f9db3af82c41\nA = 84307277f79cfdf33d83d7093f1fd8aeb94499a7075ca32733b68fcf88e819421\n\nSquare = 50ee0dba369b0fb61d75706652487ca08043eee712ebb51399122353f77f13745ce2ef0d8f0ea7b3fd94e928b0b2b42c2c9141b5697b13b6d1f3d66c6a9186625b87e40\nA = -23fc02d45c820c3a4250124cc457fa3886beabb41d3c1e26f711309604eb253c6da8\n\nSquare = da11876b316d4891a2d650692ca776f77afd32a1db08f591c9579fd1053a4a46cf78b4e4cf417eb99eb067ff701dbe3483dff22e7878d2ef2b234244cf7a29d93f62d6d6b611\nA = -ec463653389de3689fe1881679b83ca65134a1498a3543168dd4833a51b23edd3fb617\n\nSquare = b342b4aff7e5bad38f7f532f0f32a3672f7ea6521d23652fa09ef7aeffcffe52f056ab1b54a0f3a2147f43330fd199d1f290988c866f61360dc4928c84b3dcde8f395120008472100\nA = 358e27805e2a56195fab2ccbe3f931a4bd14023ee56c8a191697926f387c40decc578cef0\n\nSquare = bf4045fd680caa514e9c410fb4404e5e3a381abee023d5b509d6dc0b97386421f55090af8bab5ac08e9b2eb8a36a64c55960be9179d564c5429f4ec595d03d12111defafb7359b418902b1\nA = -dd450a0fa0914f0d65a1b555baaaf9380eaf8d58b272bf9d95435bad53b01337ac8de562cc7\n\nSquare = 86abcdf183ca059257c2f6bb91efc9853f4ab42801d3cde88df72d4c904be184e93d6bd1af6fc21a6836c93c4e0a1f728b3722d568572f7ade418274ef2e6ac3463c5cc50990f1017e01cfb91a9\nA = -2e6b4d9eeede7a72b8d0fcf6429c7e30cf291352e1bb43e92c14236716aadc02c02f75c7e6aa8d\n\nSquare = d5f37112733b097cab2bb11daa3d9481255060abd7bce42b752a7641a98e140922c375fcb68bf13d4326b374eabe3b01de0f8f6324b7b3e4142051c02d2f18ae2e748cf3c4bcc3fe157bc94227631d21\nA = ea087236372fbb01b80e57b1ae4edeeaa776355457e18165a5dc60ef4b6ddc0b127ef494dc44ae11\n\nSquare = 9e4db7885fa5f928ef236f99df3e7c8d17a5a21983ff882032817edd5658575f443eb9c5c97d95ee798a3809cda76d7a0ab9fde757a310e2f5cbb299ab88e92a5771027ab9f26816c02d0c97894da5976ec90\nA = 3253d712d4ada4c12dab41036fcf79b02e80d1a632ff6ccc44d3c1d08467a019cd6221507459b231c8c\n\nSquare = cf9c50ee8773ba94c9e943989a35513fc370adc3622beb125252bb92ff9b258b81a497700e3bb15bcb23a5b3082c095f7a5d6eef20433d689c20a5427b661d43fb0f9b7d1b16d1b73b8fd59ed319a26c5eb92fce90\nA = e68a0812d2de2a922f24c4e63b4c33e62f93943b7673e900d12405dedd0bc2a906daf8b4bc336bdeb52b4\n\nSquare = f3aa49c906844692d3bc0cf101adcba80351c2e744be01762a8c24804a9d8d5a4cc3c113ccf529eb79cb3304aefa74178afa53f235c5211192d4cd8610c3b42e246621acb3e5d1f9d86ff39a20a7fa9c568356de5b86919\nA = -3e7069ce11472563b0dbeb9a936884df66db83273a690c40e5d3b5f8926fb502d3988591abfaea7b7bd76a85\n\nSquare = 7c9a5057ca8095cdfa289b2d60eec80548f9ab2f3a996137ff9be403b529c4672e003d1eb074c76c0086e3d875cfbc90a40ccb61b799cc0401ba160d8d6b6ee46b2f14ed31c83de54cdf83458dcfc01e3234d9717b5f2c7e5079\nA = -b299da84ef84095d8191fd1cfe847b960729a3d1857082f05b2fa30ac45e90d2fdc778013b023f38db2c8e780b\n\nSquare = 488294b528e2c2da0145217ec69de2d021ca27f145f7321f06c03316fcc14bd4a9a900bd6a144086acad6d5ad32a6245f5a655e007742aa336430c6bfbe174278884d19fd93916ef57215069268ade899cb92dfed29628327b84d8240\nA = 220fa6eaae0238e78a91e43fd8c2fbd5db0c8501cb96d66265c8edcbd376814c39e4a6f21ec9a6472c6abe8c04818\n\nSquare = ebd685edd991dd5180706b72ce20ec4f6c5d9ce038cc8768f2ae2d0e676bd549d6d3f97f6c26f6e36bb664e8a7e6102192bccb354c024670085711db30159c6b7badab7c7c0b91925675ece3e23126ea6feaa28e977598a890e4e476ead100\nA = -f5b657cc3", + "8fd11ad2f1b188c61721b5ec6c9762c09dcbfac3edc1f07e675bc058e77eacd01a2b4139b1b00c40a6cb70\n\nSquare = d1b3ac1d7042c0200f80a989e053dee31cdddc835889a57482a0988afd82b0fe8d3667270a72967401c3e8d80dae349ccd4063f11cb24dd7f9a5aeaaa7c0bd7bf7991367b0d7b4d374dc9c5017da81ba39fadfc3b760f68da95ae1eaa2eea3fb040\nA = -39eca1bf5e4807fd6a9ccc9e3138a6fb390b10a330f0027f0ba9868beb77c93160b623de58054a4522183fb3e4e2d86b08\n\nSquare = 41c5e4bc851d48673e0a16336f0decbcb59dad36959b310cd1a042d24de00c587db47058c2d91d7f9982bdbf470c73f86e591a122b3fda71796e465513e10e3cdbd5e6bf035595644d588c091e23a57cc47b5173743b0dca965902918d61875f88735a59\nA = 81c2caee75e98f1822c854448302243feec55a5247bba948647f12d7e0bcde4b1dd6af63eb1ef948eec22a87d2f3213de75b\n\nSquare = e712c3705ef2779ec997c430f1f8b7689d7edbf2daa733dca89612bcb298180b882cdfe8e5cc1104b9f5d6d8f0978b46eef4f297dcc83fce4c39821ed3205e399328d69ad484d8b3189e207193203ef79b763f5e11778dc24839b4feaab291a0464cc66edbe10\nA = 3ccdebe5106ff5642b4ac0751bb799c27454f904fb72863d1055d1412b2359120ad196b768f6137dce4cb85cd29a990838a95c4\n\nSquare = b5063c05ac122d0d4b1e0d15c913f70f1309933ba737fccbc02d13a6c712e7b75fa757ac0e4fbe65977f17bbefde31c8fcf51f867a698233bf25bbdb1f03c104dcdbf1173886a48eb5a8b4d27cd841196de0b53466a3f1d28500fb4dbcee8d3458662443eb2aaa5de9\nA = d745c04ed95d4090ed66784339202f9d0e57bdc1a6f6b6ca09337153f0236cdf99b61db85604791b3a373885210f6aade8530c8d3\n\nSquare = 974463573c968f1734741dde2a800761fa749b553dd6499b920d3af9bab73a87f40c9cad39c51cfabcfa0895f1970281af063d80f89f4103624a75bcb0d23f5ef6c1cd9a10930118e1459ee8732728ceb7961f7d83cd2344a51e6229fe708bda46382e142706137facf7161\nA = -31323f98f0f73fb66e541471774ce0e0fff53d69b2b726480b9ec7b0775b345ec4ec57c4334ab8ff4b388f4c7fbdfa3beeba0f3e0bcf\n\nSquare = 673a62011d769ff0333f69f10f00b28781fece47ddeed25fb0bf4f8d95dde4efff60690076aa520ebaa3ba63e6d445541b9586241141ecc37cd75b178389265224533055ec82a393e5dd61640d3f442adaab917c8fee1f8fc0ff8ca8d577e1d2d976c2a8b873f699aa92c272c164\nA = -a28fdafefdd393f993a8fc1ae321e420451dd0c5071410367d5a911b2a3a668bcae4452e134159e0b1974505f99865cd97cdb020bab0b6\n\nSquare = c4f34585a29667b582a3ee69b1a5f6c04746d105a57bc92763958c5add45c64b5c1cfeb1a321fc5194aab818c92ede5408afae0a2a74ed4c7757dae0bcc602169a805d525c5a63ca97391a9a7987a3eaf04bc44c89547c5d312f7193fc571851b1a8f8f091849f649ae91e15a050f5799\nA = 3822b607fccfbf0c5be97d4358bc682784e6453c71781fd3eef9d247485211c55d742279a35bf35e64ba8ec8cfe20dc0889688e2bc81fe0c5\n\nSquare = cfdf0eb68dc27d60840b8afa8daf96bf831002dadb2801c5d6f7ca558256bf3c7c5372fa00f2b3e300287745f8664dcf8e679fa35adfcac93839cec53b349553f31058a4db05af40b047bb367234dd78717aaeb80334f0deabb09d2d4d90394ec28cc3589b0aa78cf227ce8678b8bb5cd775e9\nA = -e6af13779d5a5eedfecb7c4d34009affee1f0bb65934ea9656ed6eae02271ac8a29104439000650a3a8cd7fecb171a7154c0e2bb2b1cb908cd3\n\nSquare = 6ec1b1333481c37be059ed7e088c862f869bb559b34360781f7263eeb206a210b90321aca198aa41c2a79e3a8d7df4336c75c87ba2ed4b02052a07b234afd9d2cb55413d4296645cd0dc8f987120acbc82fbfb089190f50e55eb1f509c86734dc14b2e8ae42ce880023dc7a014b02727b53d0e5f779\nA = -2a18acca3306bf06fd90da4ec2cbce995fb08beaec6d1cf4b30694d682c83e04b39f9a569eec52782b9eda7db0680165c77a1b0f54a1b995f8bd75\n\nSquare = 5382be4ee86b9d80dc2d4ec58606ac538ba7074d57e2011346f0dfb9a9d6677fe015e4015ed607906e9068a3c5601f0bb77186a9d147416ac68e344318cbae5c70c437c5e1dfc2d6c3c8725198937ac2d8e796f749bfe95c7fe6d0e460a633be2d86462d48290a2f8b344ebcda2f6ad353d6fd5f3355d819\nA = 9236f7ad22da9cdd8c187082c630098bf3a558b04856e876433c570a63d39863416c9890dd089f7665d6ba073b2ce90f88e7d04af96f1c82287903fb\n\nSquare = d68e15e8a46e001e47022daf63d2b33fee0f9d3dfefe9d204b0de6daea31dca4b287a60827bda9de2860c433b77186aca10bf3ac1d02a204ddf8bf070c3c20ea69d9638a865c8843e8e63211951e10a844f8527345c5bb5417e3301a19c929e6fc48902f0e0be8e393ecb3fe0e9de6188a72d102fbae846d05dc1\nA = 3a973dd50d4239f05d86ba25ee6ca8f8ef46424951a8bb89e7d1d6e066d6fcbabb3758ad9e1647a440e51976c0ce628d78b59a4d9e42fab0c723182b31f\n\nSquare = f03a448bc7405d2d54c0ea1a9016d8757d4af893024e542df80fcce448491d07a4b451d67c9e7d9a6c7c5a6155bf156d3cdf8103162d8e0265111655fc0ae46f4be944fdf275221b217274357977abf64316615dafb6ec84c5466f617c4e8d9ad4739f3e5050e583892db75366a4a7d2c4558436ed036a79084c7f9100\nA = f7fd0a9634d14d540daea21c7b804d37de49b7c13bde85c045859ddae1dd3142994e385f455becb7ee30576d55d4dc2f3d9d82e86032e170da1730b2c8a90\n\nSquare = af945dc2241029744548517dfd7858d42097076b06427419e74ab08071a23aaaa1f5daa6290287ce8e832a0524ba5581d64abf054408ecf6ed21a4f8289c1e4c7a8087384d268a1ccf7ed40e74922a619b5c1f2c08d810065710046190b7cfff33d4f67e58927477500eec54ba4f63a57532ed10c6b861fca9d46bfc3d32640\nA = -3500a8b6d244f1a21e10de7cfbeeb75d57ffa62e9dfbbdba8fe93d17488c56dc89787f13e660d0d7c7755242f8412d00988bfc7d3f6704782324c48691e7ca28\n\nSquare = a466e34dc7875aaf945c088bac23f3347a41f7cd039b0c9120c2517ada94b96bdd72d7c9bb55539af12931a3a39f6e09a4cd4311fba57dbfcc51bd17b03905e2560275c8bb3d786defeb131a634e86ecb793867355b048dbaf2db8b654a4d50aace6bc9d60de6934ce25ab58381f6ddbd1c063652e283c30a2dcd61d9d776d60e209\nA = -cd26a0c3d84e83d9f14dbe95cc39e3ed2e8861b76f4bf55ab120ea636d8f9efb0b6198986eb52075108d0a5c6ae0ee762f834f3db802c3f20bedf938f47b8bfb03\n\nSquare = 9f3f4d5110ea1bad21fae923825ba869a9982b753284f1946edea19f22cf0a49485b9336a2af7df8bf2641cb2083f4dce82202162d85a5779a4394213bf3bb3e47356bfc1150e66ddb6cd945092c9af14eeefd2d08b76c5e4a585ed8ef39202c42dbbceb25697f22f9508e7d954d3c1da103818aa6f63121f895e2c26d3d7463aea7ca749\nA = 327a2f6607c41ce920c14e9c9e8a059a931d71aeebc3e05e93107265a2810ec286819a4b2af9d2b70b754bdab6022b10ee6b81b32a7382cee99fb2bbcf6fe85af05e3\n\nSquare = 50ac4c46f2014a7a382b0d5ec9db4a67f34ffe9fd5410995810d3ea8d7d87d47442d0253c7eceb1799272bb5f5e7bd63174959f9844e5b4b65b6a4920166d83d01a5c2638b4d3b6db7fed99e28b9128dcb7c10be539114c5887842f8e5a7fb743298ec9642e50bd0979156cc6aea9ce802a0c1b14a2a1b7afe28dba534c9933209f14474b6e484\nA = -8fb585e01a0c62367dfa8a1953e553476b1564e843bdc2c5d964864ab2da56e0bfa7f5ce5b7850398451619a061de02ffbe0c336ecbeae818d32dcd40355fd11a7a3822\n\nSquare = 9214e31bb62f62a7f92d6c7f1453bc4430595a1765b7223a1e50ec30f934908c19fe82d7bb8ef1174bb6787aba9df1a38a84203630ae9f62e08fb4ac55ed329282315937d193992e9e12adec9727ef91df5a065cc5858062c765f34bd2630fd3f654a8f8421b75dc384477744efef3d6f0d15820c9328bf43a43409f6527dce48a92c3e1ef145b5e284\nA = -30587ef092cb9456caa844be9629d77ef1bfe21d2ffd5625ea353beb1f294e38a7fdddd5bf77cffe5caffaf609b8976756c9eb4908ca77b1630ac0d706503c46177c5d905e\n\nSquare = 54bf52644a244276ad3dac90661a1e21468f23a117a1fcc904c66119d86ce98a0b90fd4096708bcefa7a9df87c6bb85149305f193cf5505802172ef9ec343f662a4c895a9d19edeeed5d91e20abc894948fe59c1869928616392f3694d82aabee325b651e1170006ca1fc355212308442a5ec8a8fda4f5f90b7fef2aa731f3fe0f028143ead04490d78b2151\nA = 934b16f56700b455d5791ee8c119b5921976a829bb5d1fedb201e63c9ebb82afe4e29aaf0ae27148e4d34269c48dfa42131cc8b3b78e23ac3e7292eb0d715247a345c800f377\n\nSquare = 63b7884fbb6d5521c38f7deea5cc131ec6bea15a362322a8e27c762880836cffb69a069a168663908707bee9d83aad41c045bc84dadc6cd927ad62140f8c2fd001d34f0a7462bc939cc8996e17ebabafda95a73483c70191311a6fb7c670c76c9e2ed7e589e464617888d30cb7793e91672d7de9b3b4b1811b2c009dd1c690d44710bbab832d91f16f9b3564a0c49\nA = 27f17f0865513350381ea1aa1545439fde427ccc64385979bc787cfc4c7e6b624b2c77140da2c4176c55dbe43c506fac14b4cd7815e87f3120330dd3003bee087a371f85d6f4e9d\n\nSquare = 9d1c4239accb286c3c7868ad3b4dd97b93774fd0c65e04ca8dd405c0298ec6d1f52d60be6ddb5f8f0389cde756b49b23dd2f0de568a432fb99dbbd40db798261d1dd39bf5017e6dc74cb9ca91f8b2f892c7eaa28485c04a96add206c7c38943912de065be17b65292db5a144f82427016b5e0eb4ded2e4d0b7d12b01cb0b2b61e5e1bf22dcf1567a8b149cc0ef5299a8b1\nA = c88cc5a46bc1cffedad4f45e66fb55dc4347eb2a24a09878358d40fbdb03e738ca1d54a1d26a777915248fd730daffb0d3b5305684709db0f258f581fde06b11a33a3f76b3fa53e39\n\nSquare = 789545f15fded8fbf0b4275cec30c3ac65eb42ab8cc75670fbb2ab0b4cd90ed41a1290383b5f14bf87a88c67ff1e04d0f478fb11fefa64e86eae5777855ddeae451e166e23ec30227fb4021d51ec7cfe4ce531c78ba1bf6c797dc73f093b0a5a5aa59ad8de3234808e776d690007c8c332b3f03331dbdbb8645b91552091afc36c28c3229220b1a7966c7cf13db6bdbd4673440\nA = -2bec94112014c1a506417e659157192dca1df58f933510d7a8d6f6feda5031d799a66d2746c09f827199ad9fcbf11f323a636feff5806c9fecb2ac684c2870d60c8a72358562c4eaddb8\n\nSquare = caa64c9f6bd66f76c99604d1f2", + "b8a29a9a10c0d6a41cf32b5bc40edd7a1d97b295c63aa62c30498f15d70e427d5612ec3f6a2c1f2997fa9283f48018435fa6092269dc2e4ad524cc6da9689302f5c398d79e2b2d19470ea8240db9df0bc0bdc911c4d53f4f24a7ce44ec76378794d16d367434b4f8b6184c7651db77fcbebb8fcc5d3a51ee9739922cf20d4a8888139fe4669a164400\nA = -e3c4a10a64b7e67d786aeb81bb7ea14655637ce963f46cce59bc0cb6b5a9cb9c92afec3d527119db97bd2605d315cf28198992b4b2206e5616d3c560bc8163f56cb1f5626a7ac6d8427520\n\nSquare = 429e4283af7f895fe732ee88e4904348ed01bf579a93cffb7aa8e135d41cb9be218f8b9a9cb4f556124105cf042de51f34c8162fdc7a981de88e005a014149c955068e87214c174daa40fbc618c536a6e507ebd313763fba197059d68c69bd39933d614b2c32f235cc955e335c4a37b9e98cd7f98c7f26ea2da932c7f82ffd95be22a7741da423123f8908cb188abc26afaf4ba6d47b56e11\nA = 20a5e2a911627544219a1639c3321bbcd6192a32129b248cf62351f85b7a719cb275a4e44368a74f4d1a307ffd27ea2cae4d8584a57070609a30fb4e365564908f3d501b53c1a54f0e37745e9\n\nSquare = 9bcc8d423c3fdfaaaabe24a910e6ac3619eaa15e23b9f317c844d39d164c952fdf5c4bd270a83f3902e54d3817fd78c96018a706c1f652025dde0b98afe35597e0d8782deaeed23337ef6b3edc9317d54e3c8a57e4e7e2695f9d2681bf82927bab193ca1f135bd0e542696772f08520faab61fb4ea6ff0d15bb91f21e68bd7f084a6b8f24a47ecc30a779ee86610387b29a1de94de517f81318001\nA = -c7b60f4c355f2ca3937ba3c124eea2cd8d3536226a44afcaa3d17abe931c09ccaabf25a1986b172fcf46fb02a0fc36f2c163b6e42cee047c54ab05e9d30f03f6943b9fbab83aa6da12d7898c001\n\nSquare = 45df25540de94883dbc182009c29fec43627d3e5758e6a07cf40064e0befa0df184528a84757b445dd079c2b0feded48b651ab18b4bede2a81796be45caad0125c3692560d19cd9a6c8c0de8383fea0bc1ab46f6aca4e9c36b26575cff88fdf1eb1e13182308295457374968fe3a9ca34c6acd24c753fb84d41246614789dfe154faf34fc684cd15035dc9c1c6b0ea171e089e0f3236840e355bd123ac4\nA = -216f8a9a3e54d4afadf368c2693743efd3eaa4cbda7a87cd07f5b1a713eefd2548343e7f091ee4d9d6ed1d4343c06a0597db0eb5194b91bf2c858210557a8288c1aa7b0e0607a24dcff9de04146d8e\n\nSquare = 5cc707d97eb107c5c40c0f19fd432cbac9855f280082802dbe4deb45bfd193ac7a9149fd12c4ae6e9282411e2f1f2ca92135424f215b800634092ed4ff2859d16ab9fb8619ece41b50f8888d3e13773d38789e19158e18396096dd57fa5470f50b391c22378d980e59b4585f013e6db52c1e24c14ad83262fd37d42f52323896f7d4cb3e38868abea8a07e7ad3f90512eea001c5147645bf00396cb0e7a553f1\nA = 9a1d1b0beea76e7f32bde9f4f2c8bcff9094db2d32c04fb7ff43624b61033646e482aa0fadb9f8b4225b47121070b4ee5d6818d3606ed775aa631e0ed42da68c2a09dab26b6a4d09ac226cc09321fed9\n\nSquare = a32fd053eb90c365e77ff47573a24add3b25b4c301f4c662dfc1fa635af8e18e7947381989b37a9c9de2713ca438b9f85890b7b160fe251933aa7dad1c3839d502debb42ddc927fa0e9b40c80dc3d408889be567699a856b1c9cf3a393b3b818432e95feea825c17d0981b942236b3779f2acaaccaf9a5817ca47bd03045fc4de454d8f1d4377e218c5f7ece369aacc35369ab57a71652dd42621491834119afbe729\nA = 33190b787a2c3327b122d1f5823bdee5c93b19b586ce1bf79d801a19b2558aafc8f6274d0908bb7a8362f7f71d3fb52b8ffc87d458249caba7af3a516ce868e8a620e3126ad43d6aeffee11866fe77677b3\n\nSquare = 74215d33fa398e21c34034af6f9c7af6a3e01982320ec8cf23074a938f1a31543f80e6aece01de247668fe67f276cb4411db27666e1dc8fb2bfa4eb68cfd3563167d1ac4efa3361f920d8dd0fbb7f06362167f5ab5ecfb72956c20db934f67ff1c75aabb594c853fa61f43d219a3f5d0d45274005e3b167cfff5493b0f26d15f85d8e906a0a6e7645eac1f40c6dc637e6d1e061e5b9071a1227469cfb2c0f17ff983684100\nA = ac6c0b9c69785f35dbe244dc85a54313ef836ac67c853531ef5db45b28835ffe61dd258c5528b0acea50f5aa5c0f5d08dcb8d82ee19bc432fa8a45badadb50693fedc1cc79a17d63aa73fe9597f1d4ce8ddf0\n\nSquare = dce5cac967c47b8a58ed6f1bb1d1e6185e849400228afa2bfa05b9c2dd327b04a86f2a4da2d02ea102868ea0c4da0f3e5a40bd02c87a08aaa5cd8d9358b3a5ebd8c9fc2dbb1268c261f46d6717b0307b993deff0adc8190d32b4f2bf695eb2cc74a6a9a712c5a621c673219ff8a24ded0997508f8f9eb1ea872008c46e71fa97f55b839950e63130c38b49c0ce3ce724a0e8faa9738d2e28ce6e7fc7eab62b3561d2981f314f751\nA = -3b735400064b15fad81b08362b8557f8318c20656839ffb4d2513512015036ab0039442032f1cf515f8c10c9933afe4206a2f309e933d1561b06bc665af2f04f4d064e073eed2280053f56cbeb137a9482c0a077\n\nSquare = 6b619bcaf632f0d8b1d715e8850c0cbbd29ac6373a9a5e93dd1bbd2b82744a8a50a7446b48c6e215911ffafcda9ed7becaf5d26b7d6df7dc8798d53239f62a482f974bdb654750def1c941c49a24fcdfcfe73881b556a7b528d88daeeaea8d62b357211a1946c81cbf0819ad8d0188f60aaaab4ea2dfef7e9012ade7abeaaa4a23d7403c1248c36aa26b43b8e7de8a5aea639a0449f50359e9b4c1b125a548383af33703f8dfbc2528e4\nA = -a5ccc69663a8712c15f96e6fc746252af89a8c2a6317caef905dd2d8a6d4fe878ac7aa66cdb3c3721ba7dd36da310753dde9801b31d759339ac919a464ab52541bb2e0dc938752bf0f1ff7a9524eb98340d62576aa\n\nSquare = 77ea5b715823045afe13d10416dfd46a511141a7d1279ebd624f1de428cc04a4f246246e65c3f84344cebfa32864de9264b2e54d4b3010c4de9d3e6a27aae8f5f9e9d8e49fe26b73ac7e65bb216aa6a42db36ac03d749b5dc04192df819631593202a58264714628686507fc5655f169483b0ffecf45995cbc12faa105895564d287a9f4b220947d6c93786c85b2ee84a0a29183483f7c241d6a67fd0b1c38c7f74421355a14c6d9ed5720e24\nA = 2bcd67e6bde3f54c4ce0ea428418fc5c97272217c6c7de90549238ee322810dcc1bb9385967673aa3f9f5a5c05d987c6445135cf1efc26b3c17e55b93cc052761a77c9dcb5c22927b09e90a92e053ec1bc799bbe7597a\n\nSquare = 40d113460ca3e70545bf3613c2ba5de5d8485641ebf531a43b6b8bb76884ff4f348727ac6606e026981d2116ef1e60d4b37b44ed7e2003410d7d636b58aed2f92e962003f28342aa5f059d23b3d58a1ddfb47833ffe1d1deee0a7e78b8f7d9d6487f22376664f1ed9ddb5ee3d17f43afda296bead11680fd17576a122c2599fa9802ddd84a2115f9fda03aba898f66e303895f452077c920a322b6aaa0965f51fbb36f01b1d412c6ccf390da050d24\nA = -80d0699a46619db033461aa6060983def7deeb976d1a71f5c6ddb85e8b46dc70b7ddb1d254971d38ca87c7ee3905e63506c6db105dd683375f4239523cbf1874069266c2c0f4b37edcdd261c51088081d25813758bdbfc6\n\nSquare = ace99f98cba0d1dc1c758dc7211aa4078a2aeb6d3fff19bdfa6981ded0982b15bac792e6b542ae48a86f9b40c6de937e402e230fcfc390b10c3e60202dee1337ab39da7a342999487b8d8b0e494f2809cd1bfdb39209da5daa590f78ded211b6bbd3fca9013300b951d8906c9ce8d1c0dd9554d5d1d352f9784f822c928dd9700ef8a5fecf3771966abb1dc6a70b301461eb6b6087d6ab80a4b624205489584224cf6578f75acd8091fd621d02306504389\nA = -349936d60c9d77a0974dc8985930d8674976db6b3cbaa067554ca6b30b1de33f2d4e1c9564ce102ac6387755aabf42916f63632a375d995913f9d45ebda54bee3fdb7cedee46ebb5c8ae7764e4de323c17c797d3b529230cbd\n\nSquare = db6c73be2a59bdd35dd312240aef18dde4231c72aa28551bb370a87dded587accec2279bea24c930236f06f24d537fcf242497aafcbf72f085fd3ecf030cd750fb382efea0f82ad9d3195680324d73fa99d48802d085c150164aec0d29fdcc3262264bbe72311f89989cc71a4afdac6ab103ab4fbb6e973a42a1f8711bee463d198f727dc7bad848ff8fa77cd3b2f612d142ba46e95bd79a86a1fe4c2b8f9181be84825d05989695842113828a83b826e7d2c8c1\nA = ed01dd49d2e5d51fd30e9c578259cf107771b4ded6bf21f8b9b632fd360e34da740e0b1af6b5a67789fda5a44025af0f1547271ca8accc7a975d98ea7ec3d41c9697018d84ffb5d49b88d884ccdb011f715a199ddc44a4109261\n\nSquare = d6e38250ab89ffe11abaf8c5d07ba11e9053f1924ee1228f834111af16ed282389d04330cb0f47dbb186dee577aed82878ecb065b759312eaf167c4698eab5ed03a8657341bf5fb14a8e28e3b443a6b657c1f4379ff2549498a33922ea84f1fb19d10866fb0ad07ce1cc44c93cd4d9ec6bbb0e61c797750c6b5d7e8d55499655dde112f4747798f0e985fc2b937a44da9b04c2dc4b0816cfc57da1f80179db653c1ce287e786ed7eff7ad6d1383fc6de8c941d4af7bd1\nA = 3aa2e696ee570160b2a869c3f21c3f223959a185cda2274feea1c829af2234c70a504c959bcc49fe0313f4f5ffd27448e28aa0fc6ce24f36943d334c626459d7e6017339e787ab074879ebf697a93ad93835d69ab09294d007a0837\n\nSquare = fc39360cc0fe040b6f8340e0728c650e5e74cf1664f7b301e79986fe066f36e8df34d38d1a06b74a1bdc76867baeb3f39a9161acd200bc7532fa4aa0ea829377659646f073db82ee044279ae5fd797edd37d3261970819589853cb320887a085c4011c23d0da9b6d6f1b5911bb3399146c2912a967ab3b3f611f0bd52e00f418e6a6f0297fcf5c4a1f71c6bb8cc8e1c76694bb7301502d1d00c8b6c05bfabbf5d350590561abf3e2b1a82e98b56583e2e4e25cf707320a0e40\nA = fe1acf3d7b54e718c901c53f365894c22c8bb4182fee8a4c2558731e01e1519bfd1bf6e353483b8c4219453fa66f06063c6c99050068c15cd13cd1648ffc42b5badfc70f6fd4a0a5552fe637e54c4f92ca45c60cf9a0163978ac08d58\n\nSquare = 9abf1324ef65c726330f64643a024c466fad37604f4dd3dfc404d31c2a430fcfaa0c78283666c15a094d494b96d3c12de6e29a34d2c99f4f8cae8217bcd2a989d59807ac68c46d60600238a86155de499eeb35642d0f581045481b40e4f0a76905f9b6bc5b9585f77f8410b99333f7ea983c3f29f3fe66ca7b793b784a5a6a4f74512aa4385dd1e996832b1f41bb3af965be58c4ac5e867cdf8dc6a4f9d20a6f1e16e153fcbb45ae5fe8a798cb06a4ffe467d6b6aca2b31f335a344\nA = -31c243593ea611dffecc65d1439db345b2e89941113f9792c", + "91a76b4890db6e4dbaf1482ee812e295d27956e48d07a14de38357f15b5931c5cc08d1d248df7bfee1cae5b5ce98984c5043a3e1a2b449ba1671bf1cfef91011e12bab94b6e\n\nSquare = 66aee3e4f43c672e0478c76e2092bef33e7c60afee5d4c7defbcc5c0c86d8fe956c90a740cebe604224cc3f518463b1208699b8ea2316315474991d0f120ae905a67028492cf46fff2ae244869db2a02d06aac6ac6eb054fb3c14c756d8a3e7ca64f06586e3e86e4477f185ed527a8aea6a3c741f3fd4b64a2ee77ff140190260c431cc53f411fb227377c02f85d0258a75bf6d44dccbb8bd04ebdafa115dd55b176b6eff5567e5b1bedcae15110826574053681fe25a695ac4540186e90\nA = -a221dfee30286adc076673cbcebd24a41a438a0a7a6a547c75d33149cb1a094a8425feaa5a23cc234a722db4cca8d5912fe1dfb6db4e92bd87c12f0d06b6d954fdb9b172955412b2eb5c9fa3b4df2933390384fd1f929a2b1a8dac479ec94c\n\nSquare = e880f8655b51739e34393c3e6d69d63e0256b1a887f7e69f40c78d21133b17e92277a136f5e37da2533ed599efad189975d22ad0340005ef58db0b471651d749dfbd48b3f7b3b8a42d4677048a855e99dae6c729d8bd7eef86911feca9f5490dd216b06d9e8d1ab695c1081e72449baad28dfe113744853382901e6bdab5413c67c52d6cbbb2e0bea711edbb3a219a4046e8739c04729cf8c8210028dbc4087737bc6c1d7e0c15ecf16774690168342b1372d3646d4d8696384bc932144c98529\nA = 3cfe075d4525a3c780d6d05f7bb708b2fdf7277a0f9967e0a209fee9d42136a0bbf98660d8ee8cb4720a8042da09f6271c45ad13db24eaac465f8207f78629e9085c1c890675f441c78efa38e5022b1b80afde5e3fd08e55648f2817631eb6cb3\n\nSquare = 8d6cf4eaf58099b1323fc598b7554b371f4afef5ab501dd162ab8429333d46916fe15dfc4ed6a99ca7fa7fc1aaa0cec3533b41e291fb7f69b560259507226eca87aabd07b1ae2eb93bb53f98fec508f051cc04db4a172901e06b74229c4fa3f550a81626c7a63fa99d41e46c2cf792287a5cf7bb68946971bd43c7c0356312cdc25e524665dd39a24b6464bbbe64fe8e87ee313b860639728a9143c3a6118bc8b150dde6c10a13bea637fa8873c393e6338319c506aec6ee973b4b52a272a74bb62084\nA = -be46a8072aa44b3bff0f90c81474dd576756fca624c15f55a17e1d0bd2842467ae000b04f79f561690c93ca7118ce17ecf830a8da3678c15436876d2a74324d9714dc8ad8181904be657d7f1da3313b78448cc06e32299a09ed59bfc1961e8bd722\n\nSquare = fbaa4fcf9800673fbd3a132305ed3e14f4889518fb56ab82aa5e9b3529b74d7f9a467626d68f4709a2030264aaebcf05c0a0edb511e81f357d85b79d925a24605f1bcd4645915bb75d363654b676266329df532cdb39152fb360df1b9500e0c296014289650ff77faa78a604397a82b34d16484e94a8de123fe720e514c88f11ec276725111563db91477480c3245542ec6bd0bb2f4aaec02c6c4eb1769030a31b05da3798c224c9117f7c38d3e98a343fca03ab584ec2d7e6db60fdc4273c3d8e23cc1ce09\nA = -3f74b25f2a9c4d8d977e69a4e067f9fcec281136a508e365b282e5fc3b1d097bc6a0f59f7827fb90d4890b08840a0a1919032c67448f8f1a771f785a0f125a4aa4137c154fdb489dc1099d57bfcfc75f4ca5e69f93f2bb87ed09cc0dc620d3e76ecd03\n\nSquare = 5135becca97d93dd4b16a5a1105ba3a3e3fe02bd6a7c3cd182186fc63ed4351641182a2727ab6715e9672458dfbc31aded4781fa345054eb4c317872e2af6d4ed64b2ca7e8c25e1e664b5349df937118632a64e4ce439ffc625a5ad3358270dc83fdfa73c7afba03406094fa36d87517e5e2e1fee5526fd2dc00d9210a0f6c3745b3d4bceee5f8b03d976d696c57a09d1e08e4ce780972eca4f2ed6500c23bf5782c31f13059e48246180fd09db693d2fb5d48d51846ece8beee45cef7efc87c003b44d7b137a900\nA = 902fbe2127354a7df5cb7fd057f3d080a7bebbdb83c86a50560b8c287a37a841bb9c8421c63d359078d2948b6b57559f98fad8f8014f93c912cb70a6701c4dc4fc5e88aa413fcfb685c32975a8b72424742eeff8262d28cebad00c5fcf88baeafe8f6730\n\nSquare = b5976cf6a6560412aefa6704b126e0d987dfcedbb4da436c08ce17b1bf1b6e0bab9f934abb5c4186a5415fa38724fb8fa341d381319e7d768209ab108c8debd99075d31deb3e03ff7d23957d4f3204d543b7d9079cf337be3037b1cb4908fd8c104d92e52f041b4cb27c045a741f4d64009980e8d27af75d9493920ed98c7234777592d6577f2d1b3a0eec645ab4cee2f28d9e4efd3e4514db6796487ba68a462fa0e316e1420d6604db2b901de46553546cab42976fd0d459afd81196275cd88ec4dd448ff331bb35499\nA = 35e700e034950bdd7318d5b3c17e90a4772ecdacdb055b9391b31538eb823fc8a4599f029e78e4fe5299ba1a423a449dc257a431d189dd5dca275c02cc1f12417e111c73b731631d8a1741b907dd8f24de226ddf9e3044cf4064e8e51ebd55be774be7ad2bb\n\nSquare = b7de0f73397893a97928e266bc56299cc8d43b16a251992662646072b58fa578ca80f7be1e12619012b130e9514be803dc166b12ddfd26f558d36c2053ee6209b01458379e49469753300ef20f6b3dcd5383b121861c76ab25debb28c448ec33a81250d05f7eff80a5a4133d522d270fab29f739b607395a77278609aa5e1a55ef58d1d48492b71ee30a24a6505aab1a3ac22b9d143c9d6781fae14bbb980fe3a99dfa9a1a406611d7d0304493342f53faf5fd79f9c96b9583a219a1b22aad02dd58f32ee98146b3a8cf054bf9\nA = d8f4d3bcfc7eebd7068b851858c3668ce062a834927e165679b49132d4f780ca682876c65c7cf2e7ce34ed10e43696477da6301d13f92abb8c76e2424c4bc28a6565f15e59563d607b852dc946652b68fbfda1c3200ecc2976400ce7296b96e75fb059a4c8eb5\n\nSquare = 5ec02661f49fb9807bb73debc3c6eccdac1df1735e0d61fa7e0eee07471068a5809796a2af490c46a77d61f618b44a3168dde67aae1cf9e530382411056958d55bd18f0e76fe2c31c98b00f87fcb7f5691ed5b65424f82204156dc361ef6dec5d44cf690582599b3994ee47ef42850d5d2370a4169c5f73942657f85422ca24f66943877f73af493c865fbeb29574cc1cc730e9bbb097b598574f6b90257748e950bff867bcc01bf62f8df67d7aee1b6dc1d5db88826e86a3f9fcd8663e09cf8393ee71a09c43d0d38ba6ef643f4ab1\nA = -26ef9b6708a80d00f4d01e0f0a5546ed217085ff23519819ee89af430580ea1f086beb0eb51982682c6d3b922a2c92752dce63657836223a9d94964bd584bc8e37c6e30fdcaffbdb128344d51a92705e1c9f94205ca36452c15a08f7e62e0e02479ecd48085de8c7\n\nSquare = f6364409467a829abc2b13c93979dec84984caa12154b7cda2f4c8d91bf24ad7c45a968ffaac8d6722cc26e6aaf52dd29ea2f09370ba46d79684b7a06faedcd17136f35a58e5b550f3a2caef7b195d8409914fedd3c3154101bd735155098e8b10fbbb1b2e13555d2ab5d5b52b203d4efb27e498b240f37178f2e89b413f94859b0e8b2ec10b926c8c0b6f2937ee2d0355445364841c7e0539f7073b88c7d568edf1b253f3c10627e22c2ed731b7d4d199449cb0b5e7a66109932fe2c9cd741d75170deb9f98469049549c10a7a622bf6e91\nA = -fb0eec3246e99212879e51b17ea6615275818ecc5ea3058b13dbaba2576ef90e1519e3629b09fdaeb02661091c395c862b848f6326b9f536f7af45718c4412f09f19261b537bca36742d3ec66f964343516aae2ac27e249a15beb545b447e37b4062180f6c82809429\n\nSquare = bc4193ecb5dac900191e02be06297106155c6840c4908fbf6e41e9aae137d53c3d4ffb87f334f49837dc4ab7a66299994e4f5c9bf6ea03e7db663bdef066e94c610580a8896a9ae9c8f6587eb83d789683f5d6391bbac3a1dc1de60b4108428e6f5fdeaed6cd3e74fa01f85c6368023b61a413b69b14276b66f22653491e4f25790985053d075387cb13c79dcf963b6d880d01174314921afe1cc700c02efd2979dcbc59c417a6316db9ac45a2d60d2a036571bfbd75f9f5e42048ca086cfb4b818a9beca4a6e0ed51afa320ef3549151fb39e100\nA = 36e1f16043b4c9b4a304496c39dd63459d6521d2ac92916d348daca3f972835973fc8d21b07b09d8f5e3197b39a8f3fd0011168b815d67c48143c413e169ffe0f56ff2cf8b6596bd0a3b5b7a6b9a14ffb797f350b7e6aa7020d84d1d1b8006850139795abe2c74f03b8f0\n\nSquare = 4cbb5bc1dd7112326e2c94581f19efc8fb25339a299fa9c007114c3a22b395e9d39a8ffe21134e97ad1b87b97e667ba48b2a40af61afc81fb1e20e8e38c7ba666b146016af4dff3faf5de306591e5ce6eddc1173fdda6fe241a9f2fc6e054c41e56d296f8954377df0d140096b9e9d6a5a23a231db4dfab0cabfb11190c7a0d1c55ae35203836d433da96ca7339682bac0a7edb8b5b4dc267c6e83ac9b67a0d0d564717ee3c20aaf52c0a750f3aad94a12537c6971ee009d0f82ff576e984b06c7f7b357f5c049454e31326b952af17aa62104780e9ca1\nA = -8c279ebe466de3115b8740f3ff9c1f605b4eaa75512d82fdc8ca5ce84e11a68688154fd603ae1d607807dbfcbb822a8dc259098842c6a7b7ec350be29a3daa20fd5b093a56692e9d42e7a389c4ad2122a74205f835e268c9742d09ad36238c34e143f6e2ec69c0f490d29d1\n\nSquare = 4f771ade09cbd1a033d2bfc6036fe46ae6c12acc6f2b9bd52e7781693fa6358cf93089f23d1f0ee6fca476a43093b9b52446f3a7abd72ed0ce9b562dc438822ffd84bcd898ef9d092f1b0b7ff89c4fdb33d8715dd4a0d68ec49ad41338fbb62ca87867d847a4d99310641a37ea78b04c85606069d0c0950484ddbeedac8ec6f95124e7fd83da4e942d40103bc14474f5cb125fa0b06cf167f076979948003dd8dc3711923f5af5beb5f56c0a48ac0c5240b62738c1cdb06b87ac3dfa17befbe938ddc7281f6c248c41a1c7b99b93f69fac83a46eb298a9fd8b9\nA = -23a845bf2007ba8480e3ece0a1bbaf8bfccba6bf061e3fe1d8bcbcd6c761e650891c0958bac68618a1f55b27d2bc6e1e1b50afc29f58e2e034bdda8405e5378cb5bff0d84efcb458c5428fc607597d89d589d85d90f3da4b89a64c9d1623b98b10518a6f2e7d2295c37527026b\n\nSquare = ab45d12a4e15a294830741f4b9d4a14cc7dbed1c3454612047f890211c749d92ae0418f11cd44acbf1585b1f7323b33ac9a4b13c44e1a7e31b0dcc1c6dd4eaa12a655b5de08f3b948270a152db7d9e04dc54677075797bfad6a9a0e3958458d40e3df5e15028954bae99518de4dd3adfb2ec4b38897a8a4e4807849e1416aa4040c95a0e49a8d2889f6fb0537875f87516c3723e8d3b46da8da855929c67c0eb83daad62ceced52b4f52d2bf1c4e34f26bf16aa7da3afe0f5df76c0858ed98f21e1fc3d01e1572715b774bd5c2faabec5fa3fa59a7a1f32565a4f1f9\nA = d164d875e1f766b4567e9228241213e69d6b6c58620600166fac56938c5d", + "9643932d01f1f4a2263dca4b9ad26dca1548e4b5b7e27581a63375d0e624f4e4c99b7fb9aeb25307c61142760bc4771e48c7ce38f5eb2408def632096fe40b80d488fe17a455d80edfc1c23c429775b5\n\nSquare = 5ae4e7dc5727543af39ed3d5e9ac086d1a2220421231b82f6f41caee7b9815b4049aea0d43ff499c6c9e1f226f8641351d03f37731c64686d9a9ce68e9234d6a762efcffdecd42f81044111599963d9b6873cc20bf4c8284fae03d2e4f238a14a74df4388fdc80fad0375a5d0d974da7854ede5896ed2ab25d2b49a3c39093600f73120e4fd2faf75381854f6ae80f81b977f62fc72f1fd01c278d183544052b77bd753dd88ffdf5c01745521fb8474b5c23b0b7dc709bafeb91cee0863a0c23ad7192c43cf15fc181d629853cb9b8334082c915dd3d04e3a0a81511d2e84\nA = 2622a7bf45ccd3cd567c757f4c5796b5a0fbca555bd0ac2759c24083172d82d6a887dcf93d9788fde052cb20a8963cb6db22bf5eee6151600f9d1896a7606b11a1b100cbc0925bce037bcea57e361efcc560a9abc495d7f7f45831c6429ac8f979dedc08c304f4da9c0d4d687376d5e\n\nSquare = 473cc933f5a650a4ae358c7f486d325c0e20c83b54838fc08b6ac3ff010f7c4b6a609bdf472974dfc5abda0c6b33c5ec7dc4628d85cb4276108e2b0bc4e19cba135533b3d7bb6a94332aea3165dccb230860d2353166b9905635e606185b014730e9dcf2c433e18cba83859fb2eac4aabef68c8314ef86dec2d534a184ebc4cb193643add0897341690cbe18bc2e775327fd7d71ffc7ebc49bad83cd68394eb276b2e615ec430180303010a454ef73b6a8f02bc48a1fc8a32f8150ef1b733f07da752b8e808000329f4924976bc8b8573927f18ca7c88c210845de6dcd0dee2904\nA = 870b2c4b054076d0d02877b19fe1210a8fad3422b00905a6db748239b8e807716ed9fee0d8c25496593717917edceb5db57f9960bddc1956b6652868d6ace82827bbbada5ae8c15efa26fda22657126c6300906f90e8fabfd58ddf312ce0eee760e0090fac44f00378c676115cd0639be\n\nSquare = b151124402d2f04b0e6599222d380dcf67b9716ef50d2d9ded0b21521b34a7294171f71b41762511b7cca93d9f50e9e30083ef19144882928011dbb143807d1b88c55eea6b19f0c4180023be6da63a59b6bc027aff3f5abe2f65c73b2de1e71c5f4b248bc4547040764e83a860cb3f882bb8b5f7821f92802808fa37c50f2f94d8f56daca841f42d3362762ba843aedbd03d3cdda887f75ba92423965ab4256eb842ad755aa7a2af331b488186f891065b07f5a299c807dc24fc176e085a8024bbbf12f386ef49ccc91bd4ada0936b6de78088cf5952ae6c04f6916799378bc0ede0da4\nA = -35439da9e361700152a35ebdea253378a1febec5f288e5b2bb0bdf25b84751b47e4da5aad7453b70cfd6640d5832237d2115575c738482ac6036c5fc21a981c0a7f979c8d621a92c02166b777475618aa6362a0e225dd6138ead3b2766ed9785ee01e4950a863d2fa0b7f5cb4c9a108bb626\n\nSquare = 4ed7263ae5beb0069f24318b38afe951a5a058a2e960e67f086c9680d0cc6d713f943812070bf94152f7926bdab9e5908941261244542b832f458f05ed5dc048c8b9eb84c2a85efe717e257796b4ca816948a6c8ea209c0675efb2fb5af4622b44e36066593db01b17f4dee21d7c1337ff41436cd0e5a8d01e4030dcd3d49839e59996fbbf1d39bd205343a424f2395b4d3eacdeb9ed3235d8df0dd00a2573260af63db3116a7c65d1dc69684a05caebff34e3d2cba9d4869a953a7b1fce10ebd008cba021008ac3187bba846abd7b39a1b97c9c07d8080549e313dd58b716022de3c1920329\nA = -8e1141dcebae61d5c4d81697f001d792ee2e847c589816f923f0ed42bb4de0d8f911b8ca47ffe77f80b9da6896a9b42f0030a3276218868bbe1a3fa64fb0a577704339af5dd82e66780da6f58900da3f1d75ebfcc302f78ed66ea3c7a737898a29b1f2500686b43bae1e6571addd2842cdce4d\n\nSquare = b09f5e9472cbb75070a67d025957fd5ac3be89c41e4acbcd5f75780ca459562461082c3f19c5a4a416a668b0a55f31f74cf2ec44555ddc43fde64da0ba781adfac4520dd0f78d04d9d2fd33d8b49c72663a6bc845015523e2e4e7ccc69e5b748b8b891e4089420bf0a3f6032602824c7230b5ff95f85a688dcdcfc890af3384710a9fe32ecf9ad7c6cc5761f13079b19d7b2906c7e63c14b64fc88c6f4bd7c41c0356c777d35c3626d49db8cb2d1e89ce682c7fccc3a459b08c20c4e5fc3a8eced9b37d01bed5af6ce9baff0d2b435e6e62871fcb20cf9ec10d1897a5c76e73a441e07fbcc2d9f4e4\nA = 3528e6581de547de385c93ccf1086a17614f23356a918b25bc6d73656a2302b318963bb679c9a93357f4a4f614e74f2e5e88e9c8aed8a6fdd8434630f664ed15ebb6095cbff1593f188a12f4dd6087a85b202f6c24df68ac3b137406c88c5098faf47d1eeec0743b35baaec7dae29b5a44eb09daa\n\nSquare = 5d5dc40783411475a4aac7c1a1eb760f76fcc6ec68dfebb754251cf499870654cd309422935ec841e6be4f5a15078356235c2b8cbe1ae755cd6d814e811072bdb76156b83c7d2064a202ff90af1e0f88f5889e5729a3cffa9faf33c463b74d0ad21fbb4473d4d3ebfa8a52e9c209ded5ce5131b12b69747c365146fa17ee5810e0dbab992f9da28b6c323062484d62472232721d608cdb9b5a341a677e2d7a6e5a983247d9a4001e16687b489b10b18bbf205f982b7ceee27cc3e9c6641827ab7952373f15d36e5f177b82d7eebb3f5054e12cec82c5f520a2675afdec6cbf6235d358c2fe73344002e400\nA = -9a9a19fcdf11bba84b0395088c5d187d84d69b68b77bc6418f63c88bbd8dbbccfe02917d814f9e2241fa0709817a0c85bd554fe887babae7439d96248514c12d71587c906247b3e965e954cdd57f1e51f1979f73c3237509863169efdf281c1359488daad3d9eb990a50ecf4d3fd25d4820077832a0\n\nSquare = a4d69ed4c4c9c08116ec5cc49ad458f0fb2ca00f356aeb148f18037bc49621e14820f325af39f3954bddc9cf01de7ba1e443088545883a94c04ff41a7ed5f65676109c5b711b4115775489667e00aa1b77f6dee5ac5c1789bc71c9fc797abf41c7c5ae3e2c1cf82d5b49b6c0da25190dfa9360b99b2f63444d21ec6114038b8284bf598eed24a2ab2b9802d6edd5b0fdb52f60621a87a14612844ffc71ca98180ff0915cf75f47432f73d28dfd7a932a125095655f07f50722b1673df2cc4f7566a1c6035792ff3f02356b9b9d25e905121df768dc6a1884cf5483eeb813c1c009fe4ed043febd61800ba978a40\nA = -335b12e40bfe0b847ed6ec143490df33d2e64ef4363869cb78dec008cb5cd66ea671dba964a53e48267da288ef4040e06371e1209691b81df02f2c86a79cac85fdcbb6732a1e5309fbbdbcd899fdfed18518d47258c9e63ff7f116ef4a8f5c4867aedd907ccc7d222cf8087afebc108f2a0f197c717198\n\nSquare = 74dcdacc1a4f02a99e3642f54f9d917b117d2ae8d9c392f8b6dee53fac66ebe1680c8e8cc29f5330e0eed3f63d10980060799bc37b34c93dd7b384d4ba30a5b5d42a145acc412ae838d7b9b7137637546d1118f7cf3eadf88b785f0aa01da8638f027c56faa16aba8591b64b45dae6138c9a40309b2ad29c5029a867465f9c6de8fbc5fc4b0442c8a8946272667c7622454ed6f2a236103bed7697dba20db84b5154ff3fbc6b4b9eb67ee43bcaae741d87ee2093ee67defb8eebc4a4a22d97a4e2aa7d4c31a1c88abf4a440ba4e2a5e40c4d903ba5ee4d80b4e8dffb8864bcb9806e015c1ce16490068df87282393111\nA = acf70350e554732c1972903cce269b215e985ecb8d6eeaa67fd5398d0a1b57c0db63368c0f8c2288c3a0466e2b3db081106b90920c46462faf00b5bd654f7140a689b78ef656a26b82af8dd1988f166ea04e9aa777a094d892bc7da4bc7bcf0618526f496cddea6d67df7bb0de9e99a35a0b1b210ff07497\n\nSquare = 9668b9e40a8bdde3c93943a918ca71fa0009cb05a1f592b2bb2c6c6172b2950719bfd80cddaf45d044cbb6aa99715046088f40ec6812945885679231c07f4200023548ead086b834abd8c8f8294db28b203329553242fd2f778ef5cc5ed0b48c7356d8c2d782a01809ccdb6b012896617f11d963300e7bd38ff512829514d94343476818ddf9d712bc70cffe7f767a9fc75a5630e6250ed45e6831b4660eb49d47dd1b8b6a0dddf3fb3ff0e12834337f145f741f70a2aa43769af50f099e004269ac47fab79e060800dc74da88141adbc46c15c7330931e3a2bed9b958f78b30214f81a64d121f96fbcebf7569fec0cdc6b11\nA = 310e7a40667d9d5dc29744b123cdf6a663a1b995f62fa9d4d853cbae0dd23669f4778bb2040317ebf6a06ac6299b21067aece5c5c1afbe6e789d656745ad66464991cada0eb237c6ffe991cac4670bfc90eed5f8c75073f4f846ea244bca0e9502ff56f8e9bc9b6caf275aaef38e26566fef35329ca45392069\n\nSquare = 49e677c8b052b7db97542948542449af47e14248021f8d3d3f92b9af41c803072f71050f16dd848aebb270affc47e85427a7c73f227f0d63f140d0d293157af0d972eb5b38de494fbc78ad3a4c3d1ab40197bc4427752b6102d1ced6d6cbc9d7caa0d1bcc57e708535822180055ecc9d9667e0590274b778480a3720823e931ff6daef358b1a1a9092f1f05fbb5b10ad5707a124e8be63bc696f083eb74e5b4f0e3110de8f297ecd30dfd2bcb010dcad4e387520d3d00365fc51c2a3dfe064b1ac77a9295f66beffbe5dd4333e5cd823b0f36b0b94d66507b1d9381060980f62f38a62e38e5a75203233bb8d64089bfd100f3205f1\nA = 898b5f3655de74cec3b0fde2ab03fd18cdbcfc3eeea48ba39317d26917130c2b78e05237cb0454ece268f091cab699fbcd51ce341b53d6ec0cda5d0d5388bac25c6517214a39d03450ef8502e1675bfe8e57bb6086f10ce4cf8ce65eadc865b5bd8a00dc26394f3adb2ace609149e3582cf44246184b2adc0ffd9\n\nSquare = ad00f10fed55175159b2409dc80899f9113ba7c8099d0402ec0f520ab4aeeb46d36369494a4e6fa23675adb38148fd2efa082df5094c0acfb77a9ab6ba7a299298d69b04b58011c35325f46b765e580b5c05eca721904f1fcc355dbe39faa92af5c9a6dbc4ab80e62b815b45983d9506ebd52b9efa7a6b9da352d1e4fd6ffa81d3b4596a0c14fb825297da361461ff2240e4378340d2ae529932d78f3d9f6b3c6d65d717e66122e5f590c50ce0a5d81ad8e0f24e104c0913cd8d0eb2de4c8cf62a7535bab5502df3fba08bb4dfe73d89c8b00edaa7d5f3274be9959e7ab6b6dde54f2491728a1dc11fa8e1c6a95e67eb7617e9b7471ee40\nA = -349cc2a5658fdbe9ba5c350d3b25baa38b1ede01926694bd550d36883e53d8758e8f1ebe83e2f4560605510413a7d880929e2d9cbc2730b1736dc2689cf7bbcdc68a342b6398e547a9bd67cabe298796d76b98ed4c1dd9c22e36145892e8fcf2258529aed24252a70b6ca8fd2aad8a84becf7e1bf98b1e9bb024b8a8\n\nSquare = daa3835d3189ec9ade592e6076e76d441838077a9431273bdec02379b3a6ac38aecbbd57c3755ea58d", + "def8105ac28f2ecc8598ec0c4bfc9c1c80222fffc776722eb0621cdd8a0d55f08767fc2922282a76e529d81e4d6e21a2542b8c9a403709ed1132e3b52786b81e684591438fdddb5df2f0b72e6b39cd2db6c0cc55c759c2dc1b6ccc20a5cfd10c6fd345fc766035c7478570d4ac534db3fdb718e2bdad3d096b137bfc09a562043800957e2afe4fdcfe292881f6189edfce52370c0438c2822ce3b14d73b3eff32f7e5ca97e989326b4e3a8fa35544193f8590bbb0ddb1f914894ab87998090771a0be1fd23917cd792be86ea0b98e6eb24\nA = -ec953f1b7ba7d561edaaa23076987daf86f50e9a66c36f0993290549a9006dd9d424885c0fa77295cfe34fc81c5edce9e2371b3039ea18d8f998d1956196284e6d81eb1c62ecaa8cf3fcaca28ca7e64342803c8dc3c139080bdd4a1ff30d7288b085a579d9e90903bd363b48f2072bb6fbfbd9ba2cab30a8a63784d246\n\nSquare = b33f4f3ae453058f4e865ec78f0844bab7af66a97dc2f265ca73ae2232777474bfdda39e10652d7386c16f145272192af728893c3d8a8e92c60d77722b924c30269ff5a399a2449ce15e50320c528c22655ad06227ac4efe5a993179ec61c2fc9115f89d75b53961fd16f7797657f6fbf55662b019608a1d30f64a2c0838e0018b7526921fdd34fd462bfcb2462b7065e2bc7abd57d71371e45dfd8fcfcc00a71f7e45430820747c9a060b72e4f6d2919cbffd00beb0c31a2bdc32afe2cc540b38dd04a2b73ae5ba481a6e535f37a757bbd6aaa972986213afadfa47cb7a15a6f1d443f93cb0ed824a10b4b7d82cae524a096b65ccb39be3c37c07f59\nA = 358da59ef65f62f633675764e292e5a68879df24a4727eca1fc4d232b3a6d936976c92eeb11456b5e8c11319838c145c6529d2f3acc828e55b8274bfe9afb5db241b102715f8e8164e454ef39f13ff1b37cf367a5a66c4f743c750896b7c3c29026e448bb36c6c06b0d9a3d048086ef0c3cd922a02e794223f388b5d646db\n\nSquare = cd4246489f6f221f920acbd8bdcdd17f47d2b77268f72254de4190685c123e8c5eab8517fded1852e8316c9e549d3fa355142d91b2921a3c94aafd8862cd2235429340da38a2af131b8d002f17662354f5805f6a7af7afb6dbd2f641036600614cea42bd8b24d86a5109eed29c0865a5f30c5291b1d1ef3223f9b9826dee773d98ce972da92daa19e843f84ca5f1cd77925a3c1117242ab0fb509b94a83f8de4fc8d21f856f37a4d025b3024bd0dbb6d8acfda4ab2993fd6eb7a7448d4f66ec725d37f0eb14eb242c0ff3f0c4572ba6b98a4ce905fe1b7ca3daca56c225171428c56af938fb66b37e99e54139157bbf41f536989ef813af738837afcd62290\nA = -e53ad05c88568f09f616797f0b7f2756fb543d691ec2a5b645c1e5892a247302826419a35b1348cfd2c1c569c23c31b4c46d6c57d4a488c29ab5beb77904d4adfcd0a01ea0a26bb0cc8790441cc2c8c900f030d7315b4319f1a3cf5685a140e03abe6b94730ad79e8de1f4a0cded86a3d6cfe2db267fa7dc9b2bb32872a90cc\n\nSquare = eea8028b26e0df090504d54da714a6f5f2695202e53cff479c78aedd47a8dc676243ec586740fde53b3eca9ca02b91031ce766242184109503fbe25b1b6d318e3cd5970fabd16dfa22984dd2e9f1e0f14c189170fc69c031d66663703e6235a942d51a4545bd7b0769d01d302ce2b00b83f01568a1e378f61fd0ca6201b0490330580cd9de85719e174a71915d7efbf65cd73d8f4e66f27e0dd3144d58ec09ed0f7ed7d1238ee596922807100fb7a11127944ddcdec6a9ca3bbf6df7301e354f3f049bfb7c275b43c3d8cda5907a932fba507c9145ea3166081c1b48fcc710ee32cd931f936c796b14f8a78a592e67753a7c9e428a01719c8ba82652f3a89fae110\nA = -3dcb44be1e54c5a5d7db48055ca9afa1ebe2ae648aa6e16ac497502a7deee09ffa124720fad0ab163ce8b3ea6a90f110ea52b67dbc424d0cf1e8c9726dfd9e45bebcefaa5cd5706edeed27896525f31c6bbea3d67ee97badefabf3e2532470b66e3ae3100f66ddf50cf02fc3a8e3f44c304251d3b6a7ca3a6e4bd5d16a41bd97a4\n\n\n# Product tests.\n#\n# These test vectors satisfy A * B = Product.\n\nProduct = 5befab3320f8f90542f3120235abd926aac3805a19e343f690\nA = b057af553afb120db6b7764f8\nB = 857734c4c27a1d17f7cf59dee\n\nProduct = -ab1ce167f4b2945c55ae3f87df50ad07d4be87cf9f8aa07b0c\nA = ae7a6a87ea8981a567d0b3ecc\nB = -fb0fed5f8c737bcacef4d6cb1\n\nProduct = -c2606cd48e6b075c8da79eb4668e7157f1f175c2860fd4c475\nA = -c28dc31984d4583e9d45424c3\nB = ffc4581a5c3f885cf42767e67\n\nProduct = aa6805b5408aff7f914472756da07830dcad902834dbdd6944\nA = -ffa07ff9f503511954e5dd3f9\nB = -aaa7af472ad8957763f5a7c64\n\nProduct = 58ca2569173389df29b5ce4b784086055dee821a7243db7210\nA = af417d936f4690008811a1ae8\nB = 81b26b80b43aa65aa55ded52a\n\nProduct = -a043d31dfce8bd01724d31c863d0a64f1bf013509d77737c42\nA = fb5fae5edefb6997d44a1ecd6\nB = -a336e50c6f7845a1686cc88a3\n\nProduct = -b5d6a45ffce851b201239d938ba551bab7dcb59fc11fc35fce\nA = -f918faa58bb57a2ffb8b01f05\nB = bae08c3006fade695029a1df6\n\nProduct = 6f2fde7d1a18625d727c6345ed85e597d546d9228bf7f0564a\nA = -8d108d7a16f0696d4ceb24445\nB = -c9c764cae465207097ef8d2c2\n\nProduct = 93808b1140841dc9735cd61c6f855ddbbb83066689b0d7e1a0\nA = b386d08daf3fa2154e9c768d6\nB = d2557dceb2d02d04d9c578670\n\nProduct = -ad04212ca8cadb1f7861c5130ba3a747046a2a7e4a0c72b69a\nA = e4e5f7d1311e0c5f2e404d55b\nB = -c18057a328d8c7375afdfd4ee\n\nProduct = -685e75c232f2b4a0e455fe5ee8aea52f292ad8b8178320e692\nA = -a683312f132b2320632e74ef6\nB = a0758f12791453b4af354730b\n\nProduct = 6f588c53185c503dc5b0dc3002d3817ca2e7eb2370b3e9a647\nA = -d70c9b93170261091f0c53f27\nB = -848c86c51a186ac4c9080d3e1\n\nProduct = 5e3bc5a04e054a9a244bf7c86cae215072fdb70e9199989427\nA = 898b64ef09d7cf63966e1a3b5\nB = af638b12f26aa5d12e97439eb\n\nProduct = -8d8372b235b16108285203c03a8aef6fdd3c0e1a9fd31d4f68\nA = f6003dc83818c14fbe36c9998\nB = -9343f6cbcc81fa4c9399dce5f\n\nProduct = -5ee6509abeeb7af7fc5caef40d1822ad3150c8d74f522dc7c8\nA = -875ff6f56ca72cbdf614bb9ca\nB = b375a68a21dfb1f159c22fa14\n\nProduct = ada25be404a17385af5a330da799e5909da81bfa0715baa6f4\nA = -c9b8df392e76abc3eb7d5ce04\nB = -dc5ab818c70594dd917b4243d\n\nProduct = bb24422ee4656ddfcd50ec38201b15baf679d3b75e5cb878ca\nA = f8e12cf4defe388b78510f687\nB = c07ee817b4ae95c2915b88966\n\nProduct = -93da296ba164c7220a17330647aef0980c94eddd2cfa2a3b2d\nA = bc5dc74ddf7a1363d1c2b1f25\nB = -c8f069bad7f93cbfe6df51169\n\nProduct = -6b2e1d132c4e0b0dc9b7e7de7d424fda5180480cb5ff47c755\nA = -a8048acb66a8bb88df39266e7\nB = a34e0b265d71435ae8c92a463\n\nProduct = 6ccb2cd93783576a8602ae43f41c786008b6623a4cca0a010a\nA = -b071f1f54790c951c1dd2a1cf\nB = -9dd89bb4d9b546207e282e2d6\n\nProduct = 5c742ba47d0d64bd97509927ce957deedb855766cc24c60016\nA = b44f3f252c368096fa62747f2\nB = 83439b97dbac579fa4f7b7d23\n\nProduct = -7347ba65691c913286c2fb55e45b177f031c1d86ae0e9f654f\nA = 937cf0643ffa53cdea24d642f\nB = -c81881f78243dd5737a7d28e1\n\nProduct = -9bc0649a703674e59f83ff9b8a560e5cbf51f65ca310f80f95\nA = -b536f8d9769be6f62da941ae5\nB = dc0746fb101881ae0cacde6f1\n\nProduct = bf4992fc3a124de350f9fb90ea825cf663b1fa051282ef22e2\nA = -ff7eacc7de1bb01d668c693aa\nB = -bfaa6627f9fc7ba68ae41bb2d\n\nProduct = 7c8992d34cc0b63f1c953f68d4e12a99d3f3a34d16bd76caa9\nA = 9e0d5a850d078890a983c0ec9\nB = c9b72c118b3e1f1023a696ce1\n\nProduct = -a75840c95082b9a0ae0d6e0a4eb5e09288e4e2a66e9697d9cd\nA = b2b042a21045a74ef1a5091d9\nB = -efbf8b120b384e869692a1b15\n\nProduct = -a510b333bdb4ed7479c142e8fbe2b12f7671a42acbe16c0998\nA = -e7fd5e0bb5496b9d876c27f65\nB = b6262653b2be44501af1d85b8\n\nProduct = a1c1e90afc4684754155526e307fc6ed798746f347bae2c880\nA = -b84674832b26ded0a690a8ff0\nB = -e0b7bdf2fd05a038ed3640b78\n\nProduct = 5588e0c33bffbefcc5695ca0615abd383343f21a8a0d22b222\nA = 80cad81ad9a66ab6a1c2e5669\nB = aa0453a77c8af1584f54750d2\n\nProduct = -6460c2fcd6cf3304ab163ea883ac48e2031cd10f2e9014c0ab\nA = c49ad3d7c8848d4fbf913b10b\nB = -82b3dedbe3cc7cd532ad632e1\n\nProduct = -a18717330b711669e85abde8c4dce426529aa621ba3da2a477\nA = -cab4a9c0a331a5a5e826dda1f\nB = cbfee5041c13075dfe3399aa9\n\nProduct = 8ab6282ee892b53c083d319a9dcab48af97a1ac8493c0bfcad\nA = -f7d13e47f9aaac8c25f9bf75b\nB = -8f4aa95231c1e2336aa092297\n\nProduct = 8f2d1c23c78777ed371f13155445ca3c88cbc0a9b299bdf9d3\nA = 9d8248d00defce1ad081337c3\nB = e8b479295ecd9cef7301f24b1\n\nProduct = -86d5e0c5b581fe59819730b4b71e33d1f85f9ab504c7dbe2d6\nA = b21b45e88acff48562a19729a\nB = -c1cdfebccc763beeac394b997\n\nProduct = -484ca05aefa113bdfcb1bc623f730c9f9555b462a8ab4c9606\nA = -8c12b406c02c4417163c0956b\nB = 8422b15c80c1c087b17eedd92\n\nProduct = 614c3c91f60050c785fd229a3ad74674577a90cacb654e0a5c\nA = -93d45bce155a23a397506d96a\nB = -a87e339c3fd5aebede5fb1b36\n\nProduct = 9683285f194a7e4feeab196a36bdfc4f828035fd184b9cc692\nA = f196d8fe760fdcae7eb60e2f7\nB = 9f7d88a2163ad818bf3a6377e\n\nProduct = -988a64599c19cc64f3cadc1a83fea6550185f6cc3ab82af822\nA = d0584b2a306671e4d2c9d0c7b\nB = -bb6e7559df199c68d6df3a3c6\n\nProduct = -68456814cb0edd951196d04c853172afdd5787a5bd69a57876\nA = -cefce1b0a1fb22862418bb597\nB = 80f614139947aea5e76cd55fa\n\nProduct = b4b1cbf5d6566e7a57aee0cc5c9c8ec4ad885e8766aa7662a4\nA = -d68ed1bea046c6cad057e21db\nB = -d7988b9be54f6e332d019032c\n\nProduct = 6b09212675ff5257a1384371e17b37dcc268bbb141577902e4\nA = a8208053adc20a609d5d01404\nB = a2fa927c5458c4fe662d7a3b9\n\nProduct = -8361bc26f9bcf55f677e047d822d30", + "04027da0d0455b244d10\nA = e82b6410b29020c2d6810a977\nB = -90ddfe0e7f0d6b9cdc0815f70\n\nProduct = -f1b6da00923fd513a83e32040a515649fbd362f69ebc016d9f\nA = -f9b697d9ec774a8d1ee5ea905\nB = f7ccb46a8869cb028492bed53\n\nProduct = d06206963f2e150bacdb32c823c3a47f013d5a267c3c0d0c88\nA = -ea8e63afa99c719897ad7f2ab\nB = -e36f11f55b6148d1b4f46e598\n\nProduct = af774a5eae6084df5ca499ef005642730adabf6a4f9533e2fd\nA = e4c7af7eea3ec9cc2443b7319\nB = c457bc264c8461789931baf85\n\nProduct = -76350f428bfbb95e6c253ec0f457aa84cebe8c7cb1af2a2120\nA = 8fd1ff97465775d44dee58ae0\nB = -d268a7d328f44baf80e35119f\n\nProduct = -787ae3f114f9a8dd4d249d5d3f3b0897b02564b9469416cefe\nA = -bc0b398bd0ec045b0cf147b7e\nB = a4050955c234e473257d0c641\n\nProduct = 9d6320b3d4aabac097a079b9bd2aca7f1898bcab0f23409fd0\nA = -9d7a4ebac630cc0662b816fb5\nB = -ffda517d3eb3214986b04e290\n\nProduct = 80bab8bd800ac8c9dc3bb57dca306f10af6fd88c5d8314833c\nA = 834bc50140d6c6ab938dc58b6\nB = fafee47793cbc533b3c66af3a\n\nProduct = -b08920f5922226b1dec87151ae087d8a7e5c1aea8c9be148b6\nA = bfd5b1ad323c79428cb2db36a\nB = -eb956a10edebdd658e6810fcf\n\nProduct = -6d428e08e8350bb4b0fae3b662c82df2aef7beadaa17430dbb\nA = -a57da276998c548101f514e9f\nB = a9040c1909712e1149d295765\n\nProduct = a57da276998c548101f514e9f\nA = -a57da276998c548101f514e9f\nB = -1\n\nProduct = 14afb44ed3318a90203ea29d3e\nA = a57da276998c548101f514e9f\nB = 2\n\nProduct = -295f689da6631520407d453a7c\nA = a57da276998c548101f514e9f\nB = -4\n\nProduct = -867614005cc204a8d19720fe13\nA = -a57da276998c548101f514e9f\nB = d\n\nProduct = 12bf3b676f64e5929d38c35e803\nA = -a57da276998c548101f514e9f\nB = -1d\n\nProduct = 24d8f92c68303ed0b96f91a8167\nA = a57da276998c548101f514e9f\nB = 39\n\nProduct = -49b1f258d0607da172df23502ce\nA = a57da276998c548101f514e9f\nB = -72\n\nProduct = -6fd5e6ca25c3d51b2e529f22173\nA = -a57da276998c548101f514e9f\nB = ad\n\nProduct = 1276d4705b81b82da4c7e82559d7\nA = -a57da276998c548101f514e9f\nB = -1c9\n\nProduct = 1ddb9abfc5d4017f068a67b5f4fd\nA = a57da276998c548101f514e9f\nB = 2e3\n\nProduct = -3a8b41c914b1b4a4e341433601f7\nA = a57da276998c548101f514e9f\nB = -5a9\n\nProduct = -97c0f4ba414d6e7d4c8b7ced84d4\nA = -a57da276998c548101f514e9f\nB = eac\n\nProduct = 1198739e0c23639c176d46d13f7c8\nA = -a57da276998c548101f514e9f\nB = -1b38\n\nProduct = 159150954ee0dedf541e4dbac0ec3\nA = a57da276998c548101f514e9f\nB = 215d\n\nProduct = -441d4bc44c86f02ff12c3d91a1562\nA = a57da276998c548101f514e9f\nB = -695e\n\nProduct = -64726b76005ebee27592237ba5dde\nA = -a57da276998c548101f514e9f\nB = 9b62\n\nProduct = bbe4ec7cf7c5bbd198e0ea86bb658\nA = -a57da276998c548101f514e9f\nB = -122a8\n\nProduct = 21f717d05681fd2eb1796776a69ef7\nA = a57da276998c548101f514e9f\nB = 348a9\n\nProduct = -396ac788a1748bc6955f99be4d2c64\nA = a57da276998c548101f514e9f\nB = -58d1c\n\nProduct = -54a213eb083aed1a04f3d1b2da62e7\nA = -a57da276998c548101f514e9f\nB = 82eb9\n\nProduct = 1366fb9c20fb14b8b9a9be4b3e3dde1\nA = -a57da276998c548101f514e9f\nB = -1e037f\n\nProduct = 238d65fd26da4733e5d93ab2485d40b\nA = a57da276998c548101f514e9f\nB = 36ff15\n\nProduct = -38272a99be154d531e922be405aee9a\nA = a57da276998c548101f514e9f\nB = -56dd26\n\nProduct = -64651b62b6a454c08951632c7f2c398\nA = -a57da276998c548101f514e9f\nB = 9b4d68\n\nProduct = fb272e3597b816144f8b945ae6130e0\nA = -a57da276998c548101f514e9f\nB = -1848320\n\nProduct = 280d9f5ed7243712ecb9a7c6358bcb8b\nA = a57da276998c548101f514e9f\nB = 3df5795\n\nProduct = -2fbb6bb8e1ba78cefc47fbbc20e188ee\nA = a57da276998c548101f514e9f\nB = -49d6652\n\nProduct = -57f29c13691ffa1642d2860dab9d288e\nA = -a57da276998c548101f514e9f\nB = 880c2b2\n\nProduct = 139c19d7668e6aabf2d7206cb0723ed34\nA = -a57da276998c548101f514e9f\nB = -1e55aa4c\n\nProduct = 2950ce04bf0cf836d4fe94b88fb757d0a\nA = a57da276998c548101f514e9f\nB = 3fe968b6\n\nProduct = -5175239488dad05a58414251496d2a06c\nA = a57da276998c548101f514e9f\nB = -7e020414\n\nProduct = -945ff0ed38bc6020cf679cbd3e0758c6d\nA = -a57da276998c548101f514e9f\nB = e585e573\n\nProduct = 11c69ae98f6b27e95477986f796bc67c8c\nA = -a57da276998c548101f514e9f\nB = -1b7f653f4\n\nProduct = 209afe75e8fb5ac76d13c06b545f5d4d73\nA = a57da276998c548101f514e9f\nB = 3270154ad\n\nProduct = -386d64b215e41506514f4988ed237e4da2\nA = a57da276998c548101f514e9f\nB = -5749c891e\n\nProduct = -6c13cccdb1d140d0babd52707ea72fa278\nA = -a57da276998c548101f514e9f\nB = a72fb6288\n\nProduct = 136228a8a45540372b9b3cd7f82021f6546\nA = -a57da276998c548101f514e9f\nB = -1dfc08a2fa\n\nProduct = 1f0ad3babf9d132eaa08cf5cdb8f19dbf01\nA = a57da276998c548101f514e9f\nB = 30050f2e5f\n\nProduct = -50d615ce183258e95af77319b766fac81e2\nA = a57da276998c548101f514e9f\nB = -7d0bf92cde\n\nProduct = -817d358293b86a56a4e881e50257c549471\nA = -a57da276998c548101f514e9f\nB = c84efb12ef\n\nProduct = f09b9e80be251de474d726b16e25a6865fc\nA = -a57da276998c548101f514e9f\nB = -1743322a484\n\nProduct = 22996cb0f9c60e35dce49f3825f8a479db26\nA = a57da276998c548101f514e9f\nB = 3585acec11a\n\nProduct = -2b307a37c91791a61c0691858f5f783e4678\nA = a57da276998c548101f514e9f\nB = -42cf6be3e88\n\nProduct = -8826698fcba6c30d755fc523de1cc25301ae\nA = -a57da276998c548101f514e9f\nB = d29cc8af592\n\nProduct = ae37fc99fd419809310782714530d7428d77\nA = -a57da276998c548101f514e9f\nB = -10d8059d4a29\n\nProduct = 1d544a20f9bc7d95ab67d1f65743979f23bba\nA = a57da276998c548101f514e9f\nB = 2d5eadef1c06\n\nProduct = -367897184e9929a0294d320f10278889fbeb7\nA = a57da276998c548101f514e9f\nB = -54431582d0e9\n\nProduct = -943a509076a00060a2e7fa1cddb7468d734a1\nA = -a57da276998c548101f514e9f\nB = e54bb102f4bf\n\nProduct = fcce6e42879af5ad13545c0bcaab85b690cea\nA = -a57da276998c548101f514e9f\nB = -18711db522cd6\n\nProduct = 258c49f86d0cbb14ae9edbd3456be8cede2022\nA = a57da276998c548101f514e9f\nB = 3a1562c7c269e\n\nProduct = -4a8bbce59ad7daa51136d557f7fa16e9a2faad\nA = a57da276998c548101f514e9f\nB = -7350e780b0f33\n\nProduct = -82f53ec9333275d5cc271876a7db936db49280\nA = -a57da276998c548101f514e9f\nB = ca94ad312dd80\n\nProduct = 11daee4fcc713db5b2806e47fa5dff3b5b770eb\nA = -a57da276998c548101f514e9f\nB = -1b9ed6758f9635\n\nProduct = 17038cac4f0c94dc24985ea108ae6682e175752\nA = a57da276998c548101f514e9f\nB = 2399b8a9b1116e\n\nProduct = -37e5f14394bf347a3ed061769fe8e6424af4348\nA = a57da276998c548101f514e9f\nB = -567840a7569fb8\n\nProduct = -9253d4a32a88d8f725984514d969012ead7cc9a\nA = -a57da276998c548101f514e9f\nB = e25b246f733f26\n\nProduct = ace3648371c16a931d29004e79f5b9678391da5\nA = -a57da276998c548101f514e9f\nB = -10b717b27b6a13b\n\nProduct = 1faa5b45d04c143c339b09d3aad94d39b94ef960\nA = a57da276998c548101f514e9f\nB = 30fbd672e106aa0\n\nProduct = -3fdfe246d27aae0d08d63b2bc501461d2bff3b8d\nA = a57da276998c548101f514e9f\nB = -62cef5f078a8253\n\nProduct = -5b792bfaeff04ee3d948cb343a249d49eb344f57\nA = -a57da276998c548101f514e9f\nB = 8d805ac65649c49\n\nProduct = c5f824406161eec321da5a58e3e00d393b55abe9\nA = -a57da276998c548101f514e9f\nB = -1323dd41d2e1e077\n\nProduct = 2226dec8a57be8e84e42559007e2d101ccbe67f8d\nA = a57da276998c548101f514e9f\nB = 34d47842b5d0be53\n\nProduct = -340f50f812c7420b502000940788a700f6769788a\nA = a57da276998c548101f514e9f\nB = -508836d8e1193d36\n\nProduct = -a00f1d96e19c590479625c5329a87774b5964cc78\nA = -a57da276998c548101f514e9f\nB = f798fc858657f888\n\nProduct = cb94f830cba8997331912a6a31c34f1bef826d121\nA = -a57da276998c548101f514e9f\nB = -13aec7a5c52a0883f\n\nProduct = 16b45140b048d6dc0b9fc811df7ce7dd88357fff04\nA = a57da276998c548101f514e9f\nB = 231f27f3e347bd67c\n\nProduct = -2aa94179351b4e87de5849ab619d94f47450640199\nA = a57da276998c548101f514e9f\nB = -41fe3ec2189599cc7\n\nProduct = -5489401d3da93158d4284e557d74016c0a7cfd935a\nA = -a57da276998c548101f514e9f\nB = 82c5281df41bfc066\n\nProduct = ae04d5b212ecfc9a6d7df07794d565df52991fb70e\nA = -a57da276998c548101f514e9f\nB = -10d3139229f5d02432\n\nProduct = 27821bc811f45d63089790b41d307be978d4b19564c\nA = a57da276998c548101f514e9f\nB = 3d1da85cc012b3e234\n\nProduct = -3de3c9e9d7fa3020a578706339314890dccf63096c2\nA = a57da276998c548101f514e9f\nB = -5fbcfb28bfc9044bfe\n\nProduct = -627dcb299a6720044abcf11469bdfd3f951edbb5bf7\nA = -a57da276998c548101f514e9f\nB = 985b930517b78e6ba9\n\nProduct = cc0622441497a37fddf1856d5e2c99df52b99ea4573\nA = -a57da276998c548101f514e9f\nB = -13b9b88948fb7e95cad\n\nProduct = 1a5168e1a492210591ad1ed660adde9110390e4caf32\nA = a57da276998c548101f514e9f\nB = 28b631c6e04b6ab0d8e\n\nProduct = -4d8ec27b7460ce616421b9f5cae708c2ac241daa59b4\nA = a57da276998c548101f514e9f\nB = -77f99bdf1eb09da6dcc\n\nProduct = -55a", + "fd796db7bce822a00073fc8926d3bd0c79772f036\nA = -a57da276998c548101f514e9f\nB = 848cdd6212b9bb3620a\n\nProduct = dc494b0d73e8ec07cd2bb6dd8191d2b4d48e7700cc34\nA = -a57da276998c548101f514e9f\nB = -154c39567bd8be5f6b4c\n\nProduct = 240e9301b4345b914ecd91a49a0e651524dcecb6fdc6c\nA = a57da276998c548101f514e9f\nB = 37c6e7ee89cf87674814\n\nProduct = -39002ecfd6d96661b336157ccef6536756ad2e9219be3\nA = a57da276998c548101f514e9f\nB = -582cdab09915a652203d\n\nProduct = -695f49fc891d53f396f0593efae3973082b76d4f9e944\nA = -a57da276998c548101f514e9f\nB = a30074dbce2246af043c\n\nProduct = bba2b7b45b97cb0d7fb30fed95089870742ad69e7aed7\nA = -a57da276998c548101f514e9f\nB = -1224195afc7b394ae8cc9\n\nProduct = 1910edc278515ab7d4cc09b496dc3c06c32c75bc7368af\nA = a57da276998c548101f514e9f\nB = 26c6701c39334169e7bf1\n\nProduct = -3670b7f9b661aba35ce50984d83173c84c8fa60e04d100\nA = a57da276998c548101f514e9f\nB = -5436e84b4a29858a68f00\n\nProduct = -7fa0d3e0082b37475342b7e22e5dbad7b8d4cb5d64f871\nA = -a57da276998c548101f514e9f\nB = c56e0f44fc63bca242eef\n\nProduct = da7fe3367ce640fa5941c033ac1874312f10ba5950da75\nA = -a57da276998c548101f514e9f\nB = -15200043166ff309f0426b\n\nProduct = 1871d72481f66b1d413100edd6b339cbbaa67b3b2b3cd57\nA = a57da276998c548101f514e9f\nB = 25d057879db26fa29a5e49\n\nProduct = -3cf1dd1e2df3456757d72f35353c3c7a659b2ef844ad857\nA = a57da276998c548101f514e9f\nB = -5e46be70de21949df67349\n\nProduct = -5e861cbe47aefab2a7ea59292aab1258932b9a322f66e63\nA = -a57da276998c548101f514e9f\nB = 9238670897685a6c9cbdbd\n\nProduct = f623344788efb857db55c924e95a437effa4dc8bb2bcd24\nA = -a57da276998c548101f514e9f\nB = -17cc0ec84c228225a7cf45c\n\nProduct = 15514c916b0ae7cde6add16c629d3e19ba52a101d75dff72\nA = a57da276998c548101f514e9f\nB = 20f9f925b3ed307edbb154e\n\nProduct = -460cf5b14f9d0b547c3084bf44207bf881745c409b08d07f\nA = a57da276998c548101f514e9f\nB = -6c5cbfd29f3dae1dce99221\n\nProduct = -5ddf7fb91d765af97dfda5333d8779e80837c2b51cfb4f43\nA = -a57da276998c548101f514e9f\nB = 9136aa79080defd1bcf90dd\n\nProduct = 12c1a0edfb6ab6a0caae2553fb3743827e1470a8954e0a3fd\nA = -a57da276998c548101f514e9f\nB = -1d03b512470dc3052779f3e3\n\nProduct = 28388a244214abf046488a8d95308d95f021eae4b994a5a52\nA = a57da276998c548101f514e9f\nB = 3e37dce784274962ff862e6e\n\nProduct = -4da476e76119deef291c0f56934a912a0877278a19a561ee0\nA = a57da276998c548101f514e9f\nB = -781b2f2dc40094a7f8fed520\n\nProduct = -5792496d33dd45e225f9dfca17419a04e075ffc0c90b37b82\nA = -a57da276998c548101f514e9f\nB = 87772a4fb582acafd3e4ef3e\n\nProduct = dd3a3506a7d748de16fb43d666928a87de0354d8e8a1bcaaa\nA = -a57da276998c548101f514e9f\nB = -1563841bf7851ff158a395716\n\nProduct = 24e8fb09a9ab0808ff643122479dea5ed41060c6c5b74e8752\nA = a57da276998c548101f514e9f\nB = 3918c30b5568318a58e9be16e\n\nProduct = -366c125f96b38b58d01c939c27c4100af3377eabb792b5491a\nA = a57da276998c548101f514e9f\nB = -542fb814f45924aa09a16f2a6\n\n\n# Quotient tests.\n#\n# These test vectors satisfy Quotient = A / B, rounded towards zero, and\n# Remainder = A - B * Quotient.\n\nQuotient = 1\nRemainder = 0\nA = 8cdaaa7c422f3c2bb0ace2da7d7ff151e5bdefb23e6426cf3e6b21491e6e80e977bfa6c65931a8dee31fc7992c0c801d5d7c\nB = 8cdaaa7c422f3c2bb0ace2da7d7ff151e5bdefb23e6426cf3e6b21491e6e80e977bfa6c65931a8dee31fc7992c0c801d5d7c\n\nQuotient = -2\nRemainder = 1\nA = 107f0e6cebfe22ac11294a06fed2b994d01c9b3610d50bdd254adafd08c93be8ebdd1e85e1286fe9c9e682a90cbbd6351681b\nB = -83f873675ff11560894a5037f695cca680e4d9b086a85ee92a56d7e84649df475ee8f42f09437f4e4f34154865deb1a8b40d\n\nQuotient = -4\nRemainder = -2\nA = -3d8746ae2123c2d3f1d35910b42af1f86f5e81f8e98986cea20b2a1bdb8af6cf111f1258f112c837accdf4868463fe9eba536\nB = f61d1ab8848f0b4fc74d6442d0abc7e1bd7a07e3a6261b3a882ca86f6e2bdb3c447c4963c44b20deb337d21a118ffa7ae94d\n\nQuotient = 8\nRemainder = -3\nA = -5645d65662eaac73050de06f8f982a9b2ae680467712284be3e2b0e58ef4bf4d72b5be5e12ee1fd803b47f161759662ff5c4b\nB = -ac8bacacc5d558e60a1bc0df1f30553655cd008cee245097c7c561cb1de97e9ae56b7cbc25dc3fb00768fe2c2eb2cc5feb89\n\nQuotient = 10\nRemainder = 4\nA = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b4\nB = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b\n\nQuotient = -20\nRemainder = 5\nA = 12805392c55ffa0e27e85e15f2b339872793664e9ed3074cd2600aa52459a57197130d1ea46775ef43115c9413248cc7b34805\nB = -94029c962affd0713f42f0af9599cc393c9b3274f6983a669300552922cd2b8cb89868f5233baf7a188ae4a09924663d9a40\n\nQuotient = -40\nRemainder = -6\nA = -3579fc4d6083394c691b060cf9e20318fe17da0487337f76710bd11512578830ba94ac7b587a2d5ab7cb4afe611e349cdcfb86\nB = d5e7f135820ce531a46c1833e7880c63f85f68121ccdfdd9c42f4454495e20c2ea52b1ed61e8b56adf2d2bf98478d27373ee\n\nQuotient = 80\nRemainder = -7\nA = -74ebad4b39ebaaff82cd91082408c979527907c363d8f0f75db410523f8477c074c45ff85851b6275b1ebc5279029818e78d87\nB = -e9d75a9673d755ff059b2210481192f2a4f20f86c7b1e1eebb6820a47f08ef80e988bff0b0a36c4eb63d78a4f2053031cf1b\n\nQuotient = 100\nRemainder = 8\nA = d2d8a4419fb3b1c22bfca04ca08c2ee066ccbc9fce2f41861b5eef91efd3c13eeb7eae5abea0ef1849662cfdfef7bbff892c08\nB = d2d8a4419fb3b1c22bfca04ca08c2ee066ccbc9fce2f41861b5eef91efd3c13eeb7eae5abea0ef1849662cfdfef7bbff892c\n\nQuotient = -200\nRemainder = 9\nA = 1bf534da2f4365c96fc5dd4928e73ac24b157b5136ead90cf6596033ec387a2c14bca828000ae1725f3a5ace8ad67a8c07a0a09\nB = -dfa9a6d17a1b2e4b7e2eea494739d61258abda89b756c867b2cb019f61c3d160a5e5414000570b92f9d2d67456b3d4603d05\n\nQuotient = -400\nRemainder = -a\nA = -3a172cc9483774544311a1366659d9e61cc9fac7dc11c68e36aa991ef4d5e96becf5bac3e0967c904d926617ea11bb9551b980a\nB = e85cb32520ddd1510c4684d9996767987327eb1f70471a38daaa647bd357a5afb3d6eb0f8259f2413649985fa846ee5546e6\n\nQuotient = 800\nRemainder = -b\nA = -5ecff3a3e47fa615b6e3ce2dedfdeefbfe1d437c394631820968a9650b59dc3a2dd1c9a0b06537e4e5c408a59e580921503580b\nB = -bd9fe747c8ff4c2b6dc79c5bdbfbddf7fc3a86f8728c630412d152ca16b3b8745ba3934160ca6fc9cb88114b3cb01242a06b\n\nQuotient = 1000\nRemainder = c\nA = d3ef80fca0ab3ac3432b22e2b485131d816810c39d02a9c82dcc05ec5e6406bc216026de3abe53ab103ea3b2ddbc2ea377ae00c\nB = d3ef80fca0ab3ac3432b22e2b485131d816810c39d02a9c82dcc05ec5e6406bc216026de3abe53ab103ea3b2ddbc2ea377ae\n\nQuotient = -2000\nRemainder = d\nA = 163956bc32325f28f48d41d32bb08d2a9c4ccbb0d818368fb13941e82b27da21d04094f7e897ce79c2d0ff8470505f1ef63fc00d\nB = -b1cab5e19192f947a46a0e995d846954e2665d86c0c1b47d89ca0f41593ed10e8204a7bf44be73ce1687fc238282f8f7b1fe\n\nQuotient = -4000\nRemainder = -e\nA = -3763f8e43bd05e6ffeec6d509bbe6ff9a9022ced8cb191c9abaf5fd0e0b75a53e2ad581455e3af09e702a77b164ed3fb54ae000e\nB = dd8fe390ef4179bffbb1b5426ef9bfe6a408b3b632c64726aebd7f4382dd694f8ab56051578ebc279c0a9dec593b4fed52b8\n\nQuotient = 8000\nRemainder = -f\nA = -531dd44dfa9e79a5aec8fa7c84bd3b753c146770d22d2c14a6d2125f7ab95e9b320e84c31cf3e0d883e1295a220f2a546550800f\nB = -a63ba89bf53cf34b5d91f4f9097a76ea7828cee1a45a58294da424bef572bd36641d098639e7c1b107c252b4441e54a8caa1\n\nQuotient = 10000\nRemainder = 10\nA = 900996b61f58713f0755e68bbdfa4e0bb47f034bb0304f77829847923d14715def1771f43b526c41b9667438b434d2b966c20010\nB = 900996b61f58713f0755e68bbdfa4e0bb47f034bb0304f77829847923d14715def1771f43b526c41b9667438b434d2b966c2\n\nQuotient = -20000\nRemainder = 11\nA = 179d7ede3db0c105525286551331d5b9e1f97a7883f0c13cf250afe9765bb5aaa527af7945c19cdd4596565cbc8532a3cfa5c0011\nB = -bcebf6f1ed86082a929432a8998eadcf0fcbd3c41f8609e792857f4bb2ddad55293d7bca2e0ce6ea2cb2b2e5e429951e7d2e\n\nQuotient = -40000\nRemainder = -12\nA = -293dc443c294c6a6c53dd49e84f58305d59a432afb6c7ea2039cd02a513231239571ae07f29b5427e869b9faa485511ca45980012\nB = a4f7110f0a531a9b14f7527a13d60c1756690cabedb1fa880e7340a944c8c48e55c6b81fca6d509fa1a6e7ea921544729166\n\nQuotient = 80000\nRemainder = -13\nA = -5b637eb8aa51ef15a18d9b144031c9756527fc0fb96c84b6df03700e5079ae1b3e96940a2c1e07f3b47ad8a9b2b8ca99171a00013\nB = -b6c6fd7154a3de2b431b3628806392eaca4ff81f72d9096dbe06e01ca0f35c367d2d2814583c0fe768f5b153657195322e34\n\nQuotient = 100000\nRemainder = 14\nA = 87c846f5469d4c5819aed0c7e77797209b2c1b83a7a0e2be70280b9f30946b5db9bd0f25a06cf4bdba1c7183a1b9eb75c19400014\nB = 87c846f5469d4c5819aed0c7e77797209b2c1b83a7a0e2be70280b9f30946b5db9bd0f25a06cf4bdba1c7183a1b9eb75c194\n\nQuotient = -200000\nRemainder = 15\nA = 11c2a4509f419aa977c3d37fa446fcf21b4b3b9f983fbaddeba4f51c285ac40322", + "00711a54cc6edf24297b1f3d46ad020131a00015\nB = -8e152284fa0cd54bbe1e9bfd2237e790da59dcfcc1fdd6ef5d27a8e142d62019100388d2a66376f9214bd8f9ea356810098d\n\nQuotient = -400000\nRemainder = -16\nA = -39e37ae0edd92b957e84682358039f5e432c42492a44f3de01cdf74d643760260f2837946608663e12291e9b0695449c1153800016\nB = e78deb83b764ae55fa11a08d600e7d790cb10924a913cf780737dd3590dd80983ca0de51982198f848a47a6c1a551270454e\n\nQuotient = 800000\nRemainder = -17\nA = -72f725edd5a3dd6f20b5e9ca7da08a99f8ec9214c80588182c0d42e03bcff34b488b28c03cdf41813a6193c10672a8ee68f6000017\nB = -e5ee4bdbab47bade416bd394fb411533f1d92429900b1030581a85c0779fe6969116518079be830274c327820ce551dcd1ec\n\nQuotient = 1000000\nRemainder = 18\nA = 966df62c26acab2d3d1dbe729e48d0181c68e9f5eba45f6caefa38d60e34057d09fe620abb8640cec8cac755957aaad7c6fd000018\nB = 966df62c26acab2d3d1dbe729e48d0181c68e9f5eba45f6caefa38d60e34057d09fe620abb8640cec8cac755957aaad7c6fd\n\nQuotient = -2000000\nRemainder = 19\nA = 190790727c1514b4ef83a1c6aa07493c0af7087fbc8a675bfd9a1e97b8ef80ef684219d6c6f1a5fb5b919f105fd7717cdd5aa000019\nB = -c83c8393e0a8a5a77c1d0e35503a49e057b843fde4533adfecd0f4bdc77c077b4210ceb6378d2fdadc8cf882febb8be6ead5\n\nQuotient = -4000000\nRemainder = -1a\nA = -22d115ab02f8663d8c009960086a0275d301d358cd3b250bb9e7c16cc6ebed4a8fbe43bbced856d93be64a17377d95f5f9c8800001a\nB = 8b4456ac0be198f63002658021a809d74c074d6334ec942ee79f05b31bafb52a3ef90eef3b615b64ef99285cddf657d7e722\n\nQuotient = 8000000\nRemainder = -1b\nA = -41f2e708ba47494a13607223b08e6d99c0b4247436632961d873804e83446dc97139ffaef3e25969950bd4b5bb4ff73b1a25000001b\nB = -83e5ce11748e929426c0e447611cdb33816848e86cc652c3b0e7009d0688db92e273ff5de7c4b2d32a17a96b769fee76344a\n\nQuotient = 10000000\nRemainder = 1c\nA = e4b52f78179039499c2f6b500840f41103fbd60eac0d7082297236f25189c18a8301a92f533945047fbb83427dcade334336000001c\nB = e4b52f78179039499c2f6b500840f41103fbd60eac0d7082297236f25189c18a8301a92f533945047fbb83427dcade334336\n\nQuotient = -20000000\nRemainder = 1d\nA = 10888959278661bc36089519a215bda60f9ce24ff7c0ac1f543b6e652f94dbff1f32aa40cad2b4b4d676f16948551501c29f2000001d\nB = -84444ac93c330de1b044a8cd10aded307ce7127fbe0560faa1db73297ca6dff8f99552065695a5a6b3b78b4a42a8a80e14f9\n\nQuotient = -40000000\nRemainder = -1e\nA = -3ada453530a180fda58533ab8c62beb4f693a134f512e4d23e487dac3b575e5390c0a90992400e402bb47aac93d46ded55f54000001e\nB = eb6914d4c28603f69614ceae318afad3da4e84d3d44b9348f921f6b0ed5d794e4302a42649003900aed1eab24f51b7b557d5\n\nQuotient = 80000000\nRemainder = -1f\nA = -57879eb5d92d565daac3ac5173639bfe44b6ecc69ff770af57bd79c9b93841c5677042cb362b794f3d8b24b0d3b73ed1cba58000001f\nB = -af0f3d6bb25aacbb558758a2e6c737fc896dd98d3feee15eaf7af3937270838acee085966c56f29e7b164961a76e7da3974b\n\nQuotient = 100000000\nRemainder = 20\nA = 89a2f1792afc54467955839eddc9ef2e37d391ce7a1a4a205291220c1f49f59ee31fc7a7a7f7706c199bf5c8c951a0d0743d00000020\nB = 89a2f1792afc54467955839eddc9ef2e37d391ce7a1a4a205291220c1f49f59ee31fc7a7a7f7706c199bf5c8c951a0d0743d\n\nQuotient = -200000000\nRemainder = 21\nA = 1c267719338a4562e934bc57fabe6da86ca534a34244bd38c15032f01f47c2fd498c83f644b345c5c661ada0e586a096bb63000000021\nB = -e133b8c99c522b1749a5e2bfd5f36d436529a51a1225e9c60a819780fa3e17ea4c641fb2259a2e2e330d6d072c3504b5db18\n\nQuotient = -400000000\nRemainder = -22\nA = -250249f2185d4b428fa9534f03ef3cbed535bd31c56c0b273e6c3d35e0266f7777a6e59a99da5738b8e3af8ac60061d6716ac00000022\nB = 940927c861752d0a3ea54d3c0fbcf2fb54d6f4c715b02c9cf9b0f4d78099bdddde9b966a67695ce2e38ebe2b18018759c5ab\n\nQuotient = 800000000\nRemainder = -23\nA = -710b30c23c3c4e646ba90da33d2ce35af2ff181c40b02e3ffa607966730c6b6e274dd4c3c78e578e0b10f431f2d832274bf6800000023\nB = -e216618478789cc8d7521b467a59c6b5e5fe303881605c7ff4c0f2cce618d6dc4e9ba9878f1caf1c1621e863e5b0644e97ed\n\nQuotient = 1000000000\nRemainder = 24\nA = 877f1caf75e7166ef18484d0718947893fd1ec016984387debc55c19e378a487a5ddbb03a80a88316f6fca16ae148933e719000000024\nB = 877f1caf75e7166ef18484d0718947893fd1ec016984387debc55c19e378a487a5ddbb03a80a88316f6fca16ae148933e719\n\nQuotient = -2000000000\nRemainder = 25\nA = 1ed1b7d9e4cf3d44ee98ef69850e61a39f54cc407c6795c07c887374441fd9ec258c21193f8a8c55802fb8f8c579cf94cb0ce000000025\nB = -f68dbecf2679ea2774c77b4c28730d1cfaa66203e33cae03e4439ba220fecf612c6108c9fc5462ac017dc7c62bce7ca65867\n\nQuotient = -4000000000\nRemainder = -26\nA = -35d324ba37d2000f960ca1c9e1ab96e341a2ae6a5ea5cef014c73a39dde000d8ad9606b817ad67e4e4593cc5894d354854898000000026\nB = d74c92e8df48003e5832872786ae5b8d068ab9a97a973bc0531ce8e777800362b6581ae05eb59f939164f3162534d5215226\n\nQuotient = 8000000000\nRemainder = -27\nA = -7039477c3e0a6f415e25e9f9b1dab1edcd8a23f984e7e3bc149c206a3b756b1be001450af4049cd4535e4243d7032afcf6790000000027\nB = -e0728ef87c14de82bc4bd3f363b563db9b1447f309cfc778293840d476ead637c0028a15e80939a8a6bc8487ae0655f9ecf2\n\nQuotient = 10000000000\nRemainder = 28\nA = d6c59dd07409da98f7bbc7ee471b6e06c4d9e832e9f4d04ed9da63564d37d3072a950564cf549bb5d6e7dc85565d3cc8ba340000000028\nB = d6c59dd07409da98f7bbc7ee471b6e06c4d9e832e9f4d04ed9da63564d37d3072a950564cf549bb5d6e7dc85565d3cc8ba34\n\nQuotient = -20000000000\nRemainder = 29\nA = 14d27a16a9cf2fdbc85b88a604dd8f0e57b5b34a27089d75d805e05fbb367dfa61c085aa98b896e3e53b85ef774a3fa52417a0000000029\nB = -a693d0b54e797ede42dc453026ec7872bdad9a513844ebaec02f02fdd9b3efd30e042d54c5c4b71f29dc2f7bba51fd2920bd\n\nQuotient = -40000000000\nRemainder = -2a\nA = -3bd0119619fbb5b260c44050d61e6b1925a49713d754ceb06bafb1d730a93f199df654b153c40e75096ebbaf5a6ce3c801820000000002a\nB = ef40465867eed6c9831101435879ac6496925c4f5d533ac1aebec75cc2a4fc6677d952c54f1039d425baeebd69b38f200608\n\nQuotient = 80000000000\nRemainder = -2b\nA = -61a283fe41d965ee770704bb453f689cb82a81089422d6d904a91776a06d32857220286e6ef6327807b724062dda143b46890000000002b\nB = -c34507fc83b2cbdcee0e09768a7ed139705502112845adb209522eed40da650ae44050dcddec64f00f6e480c5bb428768d12\n\nQuotient = 100000000000\nRemainder = 2c\nA = 87bd03a64d9c56fe340137065ba36bd07b556119546dd1fc3ae087ead32bc79ca7efb5c7230ea7bfb00ad419096d9279fbe10000000002c\nB = 87bd03a64d9c56fe340137065ba36bd07b556119546dd1fc3ae087ead32bc79ca7efb5c7230ea7bfb00ad419096d9279fbe1\n\nQuotient = -200000000000\nRemainder = 2d\nA = 1eb7cfb197d19f56ad994eca52d1af6466fd09da07d68d63067602046b2d42d3063ef5eda6b58afd69fd92b0b727a0ecde1420000000002d\nB = -f5be7d8cbe8cfab56cca7652968d7b2337e84ed03eb46b1833b01023596a169831f7af6d35ac57eb4fec9585b93d0766f0a1\n\nQuotient = -400000000000\nRemainder = -2e\nA = -3ab858b3329e5bd0469118be52a867b2febbe2894d962cedeb3a5be1738db1cea106cd0710c9f6937348c2c63b109ae623d500000000002e\nB = eae162ccca796f411a4462f94aa19ecbfaef8a253658b3b7ace96f85ce36c73a841b341c4327da4dcd230b18ec426b988f54\n\nQuotient = 800000000000\nRemainder = -2f\nA = -6137bae6cf7573afcbb6fd5c066ba37648cba8db0ecafe9dbc66959b19deabf42f3083719a2268b7602bafa2140a1ee8ce7d80000000002f\nB = -c26f75cd9eeae75f976dfab80cd746ec919751b61d95fd3b78cd2b3633bd57e85e6106e33444d16ec0575f4428143dd19cfb\n\nQuotient = 1000000000000\nRemainder = 30\nA = d00fec043edadc093673e5f5abef0c6bacdf1f3faa49a831a645bf80db7539d657f69403b122a5c6f879eb8e63be54d35ed7000000000030\nB = d00fec043edadc093673e5f5abef0c6bacdf1f3faa49a831a645bf80db7539d657f69403b122a5c6f879eb8e63be54d35ed7\n\nQuotient = -2000000000000\nRemainder = 31\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -940693131e2ba7b2af531803794983337dd526f0d84d08d58723edf002a388d55c8502d88c2a2a6e78233a2a1b1c8d339a13\n\nQuotient = -611b743a0e2acb1043bb33de50a59eaa0405b37bf6b622075dd69291fe5b53305dbfcc377d1f3082319c153d0c1ffb3b3346\nRemainder = -16e346b6a4297\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 30c77f3380ccf\n\nQuotient = b9e34073d5e6e5b9e5d2d7250150f8ad86870faeb88d5aed5029fb25c176de216e2388e0f5d33f7c3b56102873eb40b06f2\nRemainder = -16ebc86eb88339\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -197b6f6ad5b75c\n\nQuotient = 141bc8752e846cd63743e6fce4a22efc3eb5f0ce46ba81b8f578c94c516288ec3610fc9923f45d4af2b94c0b0a20b48ed0a\nRemainder = 9bab19f12d81c3\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a67342", + "6000000000031\nB = eb90162ecae18b\n\nQuotient = -381bd85c951e1dd775b0d7fab344aadf06b1b592c643b5852fa44aa55159eedf3b3e47fe0d9f399ad92da85ab2bfd18240\nRemainder = 1e4f817a2f52b71\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -546c109fa8a9d7b\n\nQuotient = -5e385a83b56830626cf8306acc232f955178080e86384bbcf92eec3a8961360223c4cfc1d8d118022972e61866cbfc46b\nRemainder = -292e149300fdd1ad\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 3246242094394c8c\n\nQuotient = 9af0246f4b49316df43f61ae3795a764fe9b1d071ce227982ebda7988a7a7a98129c94a76635c6913cb15e4f75ea1608\nRemainder = -dd3b3e32ddc79cb9\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1e928618913898b2f\n\nQuotient = 1fe40099811c648aa4e84e4fbb8cbc19706774a11391fc03a9667d8dc72dd0b26c4a46d0bae56ba90fe4bfac1517d241\nRemainder = 16e021603d30dde2\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 948887c1634f4b08f\n\nQuotient = -3f4fa4c179dab02ad461bbea8f890292c934496db560f72878323a4463d77ae261363f4dc8f53eab145fcc3815d3253\nRemainder = 407ccb4f0b814dc5c5\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -4ad17434071e1ce664\n\nQuotient = -4d17d19f7f6861189a520776339a1e425876808111c303e391118714370111151ef4ad2e6e84250f59b0fe09ab3293\nRemainder = -36f745b0f421d16db7\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 3d71635bcc25183cdde\n\nQuotient = b976d544af44e711351c6618106d3a002c42ebbe22fe939a2457d24e8dcc35c95dde5c7c77af6b4545344a198be82\nRemainder = -107334ab98e5099fec5f\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -198a54e35fa0cfa328a9\n\nQuotient = 1307bb8e89aaff7466bc238d32672fbbde7be19d15423bcfa14f9a23fe85af9739b72807fd4bc420ad0b0fac37a42\nRemainder = 170ebe9b83d4c43b79ab\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = f8e923a8bbc0242eafe3\n\nQuotient = -3925a167c1c4d2fae265f277302b989466e309a7211e0b7173031cbbb91ab7fac8dfe43c9d832764e222e9d8581d\nRemainder = 4d404e93edb435dbd60af\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -52e36cee22274556059ea\n\nQuotient = -4d5a6ef346a872142b999ff9a5429198b3c2a97e968f55aa2c01583efe30e9687c57e2bca2372db4d3d443052b6\nRemainder = -3a2ea5f9d204dc31f21833\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 3d3c79a115d9071b573d2d\n\nQuotient = a49dee54430f1737a04543d5f549efafab25f0f28f5e304f1bbca191f99521c2c4be1b9927bde19e1ec2060bb2\nRemainder = -17d02758f8fcadca911a95f\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1cc65a75211f2826c9d0811\n\nQuotient = 1808ab7c0ccac2ff8f7cb61248bf4624fb60352a356fdd1408904f8c6fb0cc52b7642ec59183bcaf5dd89ca0ac\nRemainder = 5c95323f3b8861261dc31ed\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = c516e6e3fa6e3dc52cf5933\n\nQuotient = -437e04d7076794850aada0cb4ca7a1055df103e74e00766be6a2fdb2631bf294cdbf2695d0a2f8f9eb5587aa5\nRemainder = 1fc63797594c56160536faa9\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -462ee529b488d1db2b6c60e8\n\nQuotient = -5dde5497accc4575a412e7232ce75bdf7905936e09e382d5c9f133faf82a05ad9dcc94ad858aed34cc14c714\nRemainder = -15e79293d5e055f906381a899\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 32765b0a34c88864d39bedaae\n\nQuotient = 11ac52a9287472e1d3b8577b3d50c95076e190714796761322b3ce869d96b44387e190e824849ee345d0a22b\nRemainder = -a158ccc7c055d64e7df3fbcf0\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -10c061a37f6cbd11bf0c327643\n\nQuotient = 1ff5cda1551867577c5ca72c86516a82fb8fc5f59ce967b73c6bcc1b85168389872c9a747ddf044d6dba174\nRemainder = 21e766a0020ba429b330a325d5\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 9435cd2dc2a92c950bb9e69b83\n\nQuotient = -2719c892fa3f4dbc9951b2095056a16159adaf32dff902e20a800a0cc2e858ccae408f2161aae25d3e1f6d\nRemainder = cafbe9caa1f83fd0dd3d5a6881\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -7924e4dcf8f96da61f54bf83870\n\nQuotient = -5080dc99dba295f4a2d9a474c2ddfa3b232a82fe629fe62177514988983eff8195b37d3fee3afa343b497\nRemainder = -94ae72f78982ac1ff83f300cfe8\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 3ad70d4b6b9b5f5b2eb65da67e1f\n\nQuotient = e475eebcfc53d49ffad2e0c2a4ba48fe7ce02c42ff107e01ab3fe5b26eee45c83c4f58c181d77c259155\nRemainder = -c83ac7582a02b47ee734e0f24dc5\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -14bbcff5423a260b21895327b18bc\n\nQuotient = 201308a421b85291d23465d648ad2a8d6f3393efc16fb675a42ea7bbca635ddd8c2449b1b34e5db30a03\nRemainder = 8e07efb8ae4c9df39533042362081\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 93aebb72a81ba68e8881fd1a56a90\n\nQuotient = -2584cc534f88f091fe471c652ac66a695906a7cde1fc1cde9be3ee09026b690c1a899378ff31f6acb90\nRemainder = 794801d9d5770a60e312b99d6b9f91\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -7e408caf387a0ce9bbf4309c80755a\n\nQuotient = -63f7bfc0fe5a5421bc0a19fa6c87713a72eeb2a33e5eadee8c2f32c20d14f403ab8bdc424b9e8e0c68\nRemainder = -24227c242afedee2473c1a66a5cc29\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 2f622c665af7f8126eabfd90df8e9c5\n\nQuotient = e557e6d2180aeeee5d2cef453fbdf38e84cc148f4608ade8836045498be2d318520ffadcea6319432\nRemainder = -dd290149e0e159f9ba6bb9f5a4b003d\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -14a7623d1d9dfc177e913d3119d0d30a\n\nQuotient = 1651d852316d472b41ba0460566e43fabb9257861859ad0fb6ea5a6433a4164299e078f4d50c58afb\nRemainder = fb60aff5fdd2a2b794b0d973ac4d92a\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = d439da27b5e70342aa5cb365ece15665\n\nQuotient = -3ae357761a8ff43d3b1bc53eb336260342a39d22f8fac44eeeac96c2f6de32580dd6a688faa9c515\nRemainder = 4fa6f7ee4faf2f6be99c5ce4b65cd642f\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -50700f9c0da59482165a47a3eda2bf07a\n\nQuotient = -543b4390e4e254226683aa0b83b2ca176ec27a373969fb88f766ac72adc9125ff83b2652e46afd3\nRemainder = -12ff398d9a7d9e97a7f63a0bb293c8fb0\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 383c5a4f1767e83fc382ad4f1c7c2b7ddb\n\nQuotient = ecb72c14c59d49287fb6b2cacdf04619ee617d5f3f0f1b2890fd4e79746a4fbd848613cf5eb437\nRemainder = -1035512a2717a89062d48f1bfd213333ed0\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1402b751a1e5f3fc46e22b43240d6ce9b27\n\nQuotient = 1e800ddc5d5126f322298383f32fd593623eb88a91b2d68c5d9f56e20c16ffe2cefabe873570ab\nRemainder = 72935d534bed5ba557b91ea023601f50b1d\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 9b4df766c608ff3efe5ea1f65cc850fa73c\n\nQuotient = -2c2dc2378abceb983904cdf6728f361d279b4c821710ae785724a7251", + "c43fe4f705f023afa7e2\nRemainder = 249f6433af4e8e224eb570fd438197af62f3\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -6b382f812816c77d65c94c0c660b31a69b8f\n\nQuotient = -5f3ced1e42fbd3c6b2c6f1e16953e0c1bb6efb4e49566f974a968f69a1a66a3d7558f5a802a8\nRemainder = -317a7fb1af65982fe4641fbb1e5837e6ea3e1\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 31bc97372d17038fd842b72eaba2abb26df62\n\nQuotient = af3fef8111c449b9e0858e7e53e1d00b764232f7a077d75043249c387ece30af351c8a40335\nRemainder = -a1493bcbf57a8480461d62796aa8f8541ece4\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1b076b2f7b78b4a0f0e24ba3a05d6c697efab9\n\nQuotient = 196734cefb08f09cb32ffefc07da8d9545d3451d5a08736757184bad94c73be71311cf1e01c\nRemainder = 273e33521f4d74840a96b3fffe169f79d32855\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = ba7746f4400f812919a3dc86b00642e1487691\n\nQuotient = -3c5989cf33145057a9c8e904435d12939db519cc6b9ca1c0a11934399cb139a73613950f2f\nRemainder = 456ebf56c636d54e37709b9e799e83b7a08cb93\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -4e7d4f389423f42e980eda55b4a6a45f6f4bdc2\n\nQuotient = -8432cf3338bce1d12586f83025aea50cff3864af3eb2103a36bbb0aba10b0ba4831641633\nRemainder = -4f62c678137df301c4bef216e6aa910104e76ff\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 23d4c57b5a8162aae8d937be12efbcfd7b96ec06\n\nQuotient = 9f94c4399eef16dfc65a1e015e0786c86470299865932c4d564b71c9b1551a9c0308af38\nRemainder = -168b74a6073b4a5b54fa14aacb5c3bb7897ed0fe1\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1daecf01ec633610373b79e04c22cd7499012bc66\n\nQuotient = 1d5b838dce6c0324f157ad125adefde6e1045dce9ff97cf8d1d39b79bce02128e3433ffe\nRemainder = 3aa816216d55fc3c910a030fd10fbda1e12f2ac2d\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = a1598a12a84e9cba42ea0e200e88d4599c9f615fe\n\nQuotient = -3edb182b53890ca8762f3039d2d71a8a27c36cc884d0879e0635e6326af0182bc47cad7\nRemainder = 4610b2b1305220bc0de584dd3f87d90109012a8077\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -4b5c2f1ba3a82047c9de61d47cbf1bec86b6ef90d6\n\nQuotient = -7571ed4c509630886483f6ca0923859e644063acb38cfb338bf3a681fe449501262516\nRemainder = -21c579846594fc3e5efc53ab01576a7b32d69faf41f\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 28550e1f7c6492f4cb682c37b105f92b049c13fc03b\n\nQuotient = 9ed8fb31327a110ef4377258681c5287de8ef9dbe62aa4fe84a7f2a94bb69607cbdb2\nRemainder = -1b7bb759dd0ebc346cbe216e56be8063f063490c17c5\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1dd1e61caed1efc07d21ce05d889de1ad65808cae026\n\nQuotient = 1aa716227d1ca6af68286062b2d6dafd7ade16abbd5d6fa4ada0365832fe18f73bf35\nRemainder = 32e714b0c4ecefb38735cb88cd5e07c21c81be858cae\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = b1b959a7b3262d7f4dff488315903aeaffd982b726d7\n\nQuotient = -2a9979a530046939e0b43a25edfbea6775784eb5cf346a9fc3a2d22e1aad473cdada\nRemainder = 4edeb91a2472e80068b1883cf2cc45d68ff9bbed1756b\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -6f31bbe097587a68fdf01d0bf93830bd03a23920ccc0f\n\nQuotient = -566ff76814e1c7d31ad53bfb9f3c0607ef1f7d1cf9bdee6e1cfb78b3ad7018f8bbd\nRemainder = -1eac095d6d84021c33aa9b219d191bd0637f20b5920eed\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 36ccf5bdece624b4f54c729a8cde13325d8dd764f44894\n\nQuotient = aee4f377611179d8b6315811dd94639aaaee63e99bddcfa8eee297ce1dc04daf8e\nRemainder = -59cb3ba7efa1637c46b21795872e8deaff90f13402cfaf\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1b157ad838684b45065aa77ca3238a4d8c5427f719cdfb7\n\nQuotient = 1c72d32cb83cf4a9043d3bb5002f61b03e29c34e44a9fc5cc4d613726f5e618546\nRemainder = 7312d11fb5828c7f1a0060a5152a7644fc1e6a59de28d03\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = a681444c4d47d829f7b629b561ffaa0c3be1232346c907d\n\nQuotient = -2702afc4095a0396215e3ca36e2a59725f743b30de0dd8d4ec4d943fef6c37162\nRemainder = 223dd3080ede3a64744b14df8742cedd71388b0df99073bd\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -796c9ea38ccf516a2054a1e584c18b64b996c9679960585a\n\nQuotient = -805585c6a7badc933bced6f8373ffdfe9796e963d3fc90e85b1a22c38f842062\nRemainder = -a6ebff3f651644915d5c466cc2915d104f0f85a44e08fd6f\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 24e8fb7a6a3057ddcafff92916c46f7e4038b98c3104ae831\n\nQuotient = 10383ff8feeb180d4fde925b534be97ec3d5f1f1dab5d8cd9ab5d8ea646cfcdf\nRemainder = -a7efdd0401c74a69cf74442fe3da907acf92e8edc51668828\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1240a71ed8d81e86fd9b16e1d64f438b35d6f8eff672494017\n\nQuotient = 195d95a520fd22317492117dc756ff97806c48c1aac67a41ae56fe503a60cec\nRemainder = 8b8692bee56f8a1ada9ffd8b3583eae33a0df9b73a7d8585f1\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = babe02063b61cb90634ac0493174073d2419e00728d46ad2b0\n\nQuotient = -37791adae674b866e4791c107a697363847dee4a58a37806391426ea48b8c9\nRemainder = 33986fc6a5f5c4f4e31458fc7de55e08a4e9320509d90299b93\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -5563bb852e7338c65aa21c516eecf47f498e5788c608ed46cae\n\nQuotient = -68a30494eceff55e4f54a556dd9b30025ccfa22c0952fd746adfd13d31d00\nRemainder = -1b511d0ab81d528d00a1058850bef48df2e9ae9357e779bb9231\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 2d44e919fd27bb3fd2093062d11830c30fa77febafe0a2082cc6\n\nQuotient = bd30999592dbeabb8871b76aa04cc1c6c3794a83f0178c2ad505d8189485\nRemainder = -b0dbce286df5faccf0bdb40ca60f508d436f9410c5e49c3f1360\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1909930e2d16fc877c15895a3ec8b2125858bfa1c5a1b8776bedd\n\nQuotient = 2171694ef4a9d57b83b09357a511d4e11cecbab5e9387928b480d686a0e9\nRemainder = 29abc8898d5ef85f87323c2a6fa36ab6e1bdbcc0ca742b1a2347e\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 8da37bc9c7c9bdc62f49cadcd40e156e776b7f4c8f7ad543f463b\n\nQuotient = -267d470f32911150d9944e684c14e1834734b15475bee968748dd5f6502\nRemainder = 53a2ffef61709bd7143c4c876e021f20a99ba481f2b11abcd45da3\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -7b117ddccee97816c2ca2f1a612cc0d94ac67f5a79ed41744c8fc7\n\nQuotient = -5a21a3bdd3a3d4f1361a978706ba1cec409c296a5b3c369e91fc8317bb\nRemainder = -2cdc818f1e445fb3772d2a56833aefb2f5565a5fca80662e6fc1845\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 348dfba3c793f0018d7d3a70c4060c3148b4a3163ba60af9d6f8b04\n\nQuotient = b301b4050fdf4ede8f9c746b26d968110e1eb119ca42cd9c9bd8d4fab\nRemainder = -17993daf81711fe59204ec82e363d2b91971129af9206ff9506d3cb1\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b11", + "85454dcf046745436391a673426000000000031\nB = -1a76328184b9bea8770c91cfccf8ab98e75b2224d666af58022aca80\n\nQuotient = 19c401336dd43c221a61264f8b91791d250e6c99c61850efe6d1e3532\nRemainder = 6c9e547a77c98eaba1b021777dbd98ea88f7fd37c95a2b182f2b9067\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = b7d7b1f95f4fe2f267af88b81af88fbdf603e54ab6de73ccd000c32d\n\nQuotient = -38a77853de88a8db14612884b515e3cd7c673175779d4ab71ba58f83\nRemainder = 51851549cfa00dbfae388cc3b46fd4824268e00e12fba288acceab339\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -539c0171f48e4160e5c308ee9e74f35d8b6d032e946dbcf748b1335a8\n\nQuotient = -79a7eab82e5b65f4f6734e8803fa7c30852ea3ae56e801c5dd11778\nRemainder = -f89592eedcbcc68d5df80663b3cdc638d9d779707d4ae5a552d97d009\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 26efac15401a945ffd37066bc5af23191292765164a0f1e4fd537fd64b\n\nQuotient = d33afb58753a21581c5b2351a74f3d220599ed56ebeacf1d43eeb2\nRemainder = -f699437f44af44b3ddc080f5b74f753d35f70baf3866040ba3c64b30f\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -166cc6a3c60facfa0d8d318f26c6514c7eb9113f6b625c1de804ad379f9\n\nQuotient = 19e55bdaaa5a375c36e6869700f8677db563e5cf985be2a8d1b012\nRemainder = 7bccc3a653f29f3f45b52b8de2449c868c64d976666c01bff2dca03a8d\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = b6eae7a82b5dd1554795573cbf558d7cfed813eec270c326bf290adccc2\n\nQuotient = -297530094c3e4270ab5cf67e60fa5af6a32eb41b18b050fa6d46d\nRemainder = 62d8b502e172da7bce53fbb7c1ae376b6c21b3a3a47523aa0023406e353d\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -7241ae5f1aaee9340d437ad2dab94b70dd29fc6fff7fe31b100aa5001644\n\nQuotient = -640f3c38230962c6d6fca459afe0e46137525e8d62dd9b84da73\nRemainder = -16fcadd5155910764ecf0b4bd0afc3707e2ce49cedcbd5414f1c7d860e95c\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 2f570d2da7a4e62097eb494ca43f7bde33e36525308dc864ffbaeb5d48f97\n\nQuotient = b3895ebba13c8f383ac0482be02e1f5518511420cb4513426bb\nRemainder = -21bc847fdfd48c7a4c36c778681ea20481081cbb7af6b281c8b8ebf2b2c3b\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1a6233954b3480af5f911a6bb8ad33967d5e0446c3e56f521e892c986b6b82\n\nQuotient = 243f3fbefbf842c79c5e96162fc42fe4f177a59d27681c54b3a\nRemainder = bbfaf15a90e744dc4a1caceda3cb339e5491e4507a1118613c5e9739f976b\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 82ae783b8a13e2e65d52dd3a6d6b057163347872f4d72245ff364dbf2421ff\n\nQuotient = -30f7cef2948c9ebed8fa3c5ea9a9bfa96ee4e9729c9b18e9d3\nRemainder = 1feb3fd887629cca60c664e385dddf538d9bf7fff2d34ca9e0e7614946d807f\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -60bba60d69093c0134fcb90aefdb9c190e7bf037ecc13dab3cc7915d7893046\n\nQuotient = -6b6f0183c1f598a68683ba7435c05d700d74681fe472669a1\nRemainder = -1f4d58f81a8c18523918d31791a00ea9aafbbb87792d90a5392273ec4e405da2\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 2c17372a5128d7c403a3b94838072ecf9aff88d164764b12bfbf6261df957e2f\n\nQuotient = c4347fe42b2a7d9d5a650b72724369c5c1f59262a7be3fc2\nRemainder = -1103ec9c4a15373949cae4e34b7b42e242da41edbf5ad8362ce5e5426d3154a1b\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1824671758069b7660bad819f06c86fc76a9344ea38412058380363e5c5b4086b\n\nQuotient = 15e8c8d6847dfe974cefeef5fee93da9e58b74d640c6c413\nRemainder = 61dac240f2b39832903d5ecad9cfda5162bf8ebb0610545f259b75c3dc6ab8771\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = d83386fb9682576cc70cf84520c53169e391b414f5421cddca6e257bd77753c40\n\nQuotient = -3572711bf994e6ad48535cc4d65ac323ef1ccff530b4337\nRemainder = b5899d4cb879e37022c539962959339d055900cca16153da09b54c658753cf50e\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -58a05faf5c61f85ac5a090b6bb045c851ea17332d9bfad4309ce2b7a79ad3cc575\n\nQuotient = -6931ebfc6e34305e5d7cba5284829d088d1ec0abdde508\nRemainder = -1b09eafde481064bab3a5c7fd895edceca40b1e62a9cf953eae1061dfbe00936391\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 2d0769f392ca9ec629ef1bfbdf08cd8cc9219330ffe3c05343df792dd94b1147714\n\nQuotient = 9a4800f0cb2bfbe8d234410deb510103b7da30cbac7d9\nRemainder = -971e4a529e439a1b96b942001631027ff2fbe40b8939e224adb7f2ed30faff64d1c\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1eb3d7971125a036c3a67d9f5ce580a4ef4c469a492be53a55bafd2eafd4032b5b9d\n\nQuotient = 23116704b7a1a86cfa2ee5707ee46268634db5d50dc0f\nRemainder = 467c6b64c8121e4f250492191ea36a27119a0a6d19af519bf7ccdc2436c885c99d85\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 87134e98f73470e23a96c6a9139af3d4d21574de8aa9ea1d720df8940bcbda343694\n\nQuotient = -3b7f72ecf4f55c02366c52f38a827f5773b7cdebb9ba\nRemainder = 194b334b2046a66be3ddd7c6df01c88967fcb11e97b8206d000bcf6043c6e9ccb13f5\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -4f9d0341cadfb1f0bc38184d93503faa196fb8170f8ba2b5d3b512c09d39b7f79a5b6\n\nQuotient = -6db1d69019dd4cb26fd65d5b88a31bb6413b30278a1\nRemainder = -2042a060391e181882dc0c8d91c3b03c1ea35e2eff01babb3ae876ba1e57a505d44856\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 2b2e8f445c0c3aaef0285945e4ca37a700310e003086f34d02c891b94b117f3d3032fb\n\nQuotient = c0e5b9a5853bb21b5e2e37f469764579d5cb2bf984\nRemainder = -154669d4bce7914cdc8d79f2b8d1faa43e8cc3b20fb0767e1c9a47c9e1daed4b665cfdd\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -188e619dbb719381e701363de874fe168529c10f30d3ff184e4356991fdec1649f72235\n\nQuotient = 180054f8c36833d44cab9dd61e6d89d28605c564af\nRemainder = 59192ec5c6fbd9773b8b7dd7d8ab1800dfecc8eb01c29997d15ad75b79575d9e26e1fc9\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = c55b5eb165c63ac2794bfac21980ebacadb93f1e059309fd2b855621572e8d9b3f29018\n\nQuotient = -31412e97045c19ec38951b0e3884c66d1d7479437\nRemainder = 56f1425227bfc6eb1ecda7bfae0e5cb59e92a2cc5306b28465c8739e40893dc5c1e94cbc\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -602b8c25ded1ab3877f58cb048c733649c7dcadf87b2652e35c4e5544d2306107ebff7b3\n\nQuotient = -8da1489ccf7203ecead94c67a5750884122b6e75\nRemainder = -15162026586a1e55dda72785f31c9e6140d166a1fd34c87a7d8c78f8d8f87bbdcf8f75b1e\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 2171ee4a6f7f67d5a33d0a08c367184d70ffe39da28562655e75f6b66c866b1c2ac93e467\n\nQuotient = e635f8bdbf80e99723aa5718d3fade4e573be2c\nRemainder = -ffbd73bfe05f95bc2b135f12682288c620215eac3d6d56503d93a90e06f236e597d1df975\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -149375d478a096e724b84faf795c589ef0d772c4623f5be38da99006cd833dc5b28363faed\n\nQuotient = 20f76f5c6d0c8284764a10f6936c22bfba5f851\nRemainder = 82e3fb3f7252dd87b5370d26d9e8b9e98c7d333701f0ce8a05c337054c7aeb343d04d7e342\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054", + "711aab90a05b1185454dcf046745436391a673426000000000031\nB = 8faf8c0a3ef94ab1069394998e5412a7d84f44aff97edf63abc46d96f897172c38faa0b13f\n\nQuotient = -382586dfe93872abbe3a504fc62a8973913f96\nRemainder = 4d407323ef56093eea2f3993334215950f4e1a85ba18cdcd77d819d92b8b292c3ec8edea425\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -545d81ed25602b158bc79aadf98a8f655fc399fb8652ae94333bf54c8c9ffaf8c6b3f2a9d52\n\nQuotient = -7d179efc493eaceaf46572a1f3a62bdfc4a38\nRemainder = -3de3d817a9cf7d529b5229a503e8ebbbd2c53215ac3c584c010947f780198dee16ffbf47791\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 25dddb00f65d6a1ba8caf7815a8063c5da656d775eae9e0108c68ce11dc925183810888dd04c\n\nQuotient = a9f7e5f235bae0e3e29393ac5c99d510b009\nRemainder = -150478b4a0df3eb20dcd1be8da283a00636c021c5c6337e7732aae9c4b49853b95f6d2475ea7\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1bde6cae7f5ced9006c0b1a61fb50982a433e4e2050aa486298f456556d8e909e96933e2ba3ba\n\nQuotient = 16de125df5936181981b4c2d0051a8b4d211\nRemainder = 29ac7c8a11f9beb9ad649257994216146b663bf4f237c561bf315d95778fcdb1010283475ebf1\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = cf24735a60ff5906410be5c4d98e3c9247919b57e404aeabc7eaefbf07bd64762bc61b96c9040\n\nQuotient = -268a52cd10ab4814268f66d9f44f71a98eb\nRemainder = 20293699f12fbfef2e391963866fc082a7884cd13b1c9bd8d5d203558feed2b889720be936451a\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -7ae7d548212830013b7d653072c33f0dd54a6ebd8792bf75809d29a8c798dbc67c3edd99a69b85\n\nQuotient = -8f051067ccb82b6a3dffedd0ff2ee97c46\nRemainder = -100dac0d3bf5aacc5fade281c071eb2399560a65349566567ce1c0c34e43f175a575ed1eeeb3b07\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 211ebb5dc59a051fdfa3b18ac491971e863f2086cdc099672c1215af4ec877e29950efa4f487be7\n\nQuotient = 9b7ee4c499386f922432fcb1a453ee2ec\nRemainder = -f410122a74386d724cdd45b2e548645ac5ee4a44cbfecb82aad34ae470526674da44ebbf557bb75\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -1e76750814dec1ecbb1af0fa2281ab3185e94e47fc16a77fed312f23f261ad7709ad7c9f85862c1d\n\nQuotient = 23efb26228d7bcf281cd45f54572e2b3a\nRemainder = 65bf2ef1c2f8e94d98060aa305f85e6cb869c74eabad99877010d30654aa2e578ef6aa3c5f1122e3\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 83cfc25e90a61cf8686e3d5857b2f958674d478622c54cf8427275ca5e9312ed24e44ed4a1b5e413\n\nQuotient = -2cfcae0e922f2d884bfa0a3346dc9812\nRemainder = 14de2725b11a9c6784d9608c52770d29b9fbf824ecd4890bf28f3ec0dc6c52e4df9be540332b8882d\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -694b057ff381badb37c7c15c81e74cbd6774e8d61c9e7d450811c36262ea834fc1287fa59708ee072\n\nQuotient = -4c0238ff3c18d4d58e543f020002802\nRemainder = -2ddef796c50817e82ea6f64a02a8c6b30ab40070ff5401c2d39ca14b9c4d99de33834bfe566a0c2efb\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 3e51c9ab14f522b55e8f9d3ba995c0846a864dfa2d568ea211b0cac1463ce6a1da72d0a15746fdcc9b\n\nQuotient = d41f9102a7785ce64f76b7d7b870b0\nRemainder = -106eaafdd518c658bd371164ee43ccd915a01b513fc7d220900039ff840ba36450e16ce9987e08e7141\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -16549c5d57b531528dd4d781f03cf275b66cb94eba038b782b739c3ab30b8631c8706abac06004a942d\n\nQuotient = 1616b432b3277e774aad92b0cf544c\nRemainder = 2c89373720b834d718ff3df985ae47c3a7cde0e0309f682f5fd48dc97a1ff3d69fa0dcaa1245e956445\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = d6721300e877a8145d05f4f3d8085697c2ca5f34a5357fed0bdb7169f83b6f8d855232eeea594846b79\n\nQuotient = -320fd6a7375a42a3961362ae196d1\nRemainder = 5336711bf81237ea3449f4e9f4e6358dc250f8ebd86082cab92a8079f2c8f835bc783082efb0ed7e3f66\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -5e9e8e1d446fdd314d487cac1226088696e33161d923acb67d3c75e87e428bdbc193e02f53200610fcdb\n\nQuotient = -4bd06daed3f30345d269f51e4381\nRemainder = -1f3513bdefa40662f0f50a04b418a833aa2f85522dc6c399298b1b147662ef2164ddbfb7247ba9511b8ec\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = 3e7ab7ffe5f63a6c1e109b95b83af470ff820cdedbb3c90c398ec42e44a45e1ca894870a7fa51f17ad5c5\n\nQuotient = d6fd01a0c5b55fbe36e58bbe77b\nRemainder = -c51af3e8b430870388357cb366ea888bd7b4ccde09ad3a1d2ee1426af060245c6d6b5980ae87fb66c4642\nA = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -16086df3dd5e665f2631a294563c68931faa19ee67d6a2153d262940a648ae71bb3c1745daca5ea977331d\n\nQuotient = 18bd9a8f5678d28cefd955cf99d\nRemainder = e193f2fece67b7abe16373c3f84f18dfedcf654d951bf47585fccfaf67ee04f5037354d057c9f5eaa8eef\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = bf758acacd11f3f3e6665cd740517c9ab2384266f3c7ff9afd0888cdad2f6c9401c24d6c11fc3949aabbaa\n\nQuotient = -371239db55c79521206c9e60c0\nRemainder = 93773085af7582dd298b09d7098835787978d820289ea6850f27d0d77eecce8614785e32b228f46ca4b371\nA = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031\nB = -56033fd85be464301f10177b58d895fbb6df6154da5c2a2a7cfc3a24d83a96f5295fb17a08148a4e51dde91\n\nQuotient = 696d8e378d12221e2d970c53bf63a20ef381db8566701972c22fe067cdba99c57b68706a5c6e52f21bb3de861e49ed2141b3036f07d1fd0ee\nRemainder = 9f0e50ca76031b\nA = b2668f5fbcf4170820ed3fc9b12a61862acf8e3cb17175482efe23c5cfd3556e77634d407b6d1f98a73437a8d6066319a7a860afcab2338a1b1313037e30f4d9\nB = 1b1313037e30f4d9\n\nQuotient = babe271ea266bc7bc16d193097903037819f82366c7e9ff8f2cb14157b40433c6ee327038d5dcc44140b070d823befaefbee5e13419f6f17\nRemainder = 93d7c547a9ba0a4a\nA = 74b1a591f449377836f378e05d2902b29964df59c6926e5a9182cc09ce3111783cb7021a185340b4880d56635de268d6f3855c4d9997373b9ff8df899ee3b3f1\nB = 9ff8df899ee3b3f1\n\nQuotient = 890139fef28aa3b77814e1122b9c7f26e746ee3c507e6082b508fcbe380de83b06a01f735239c6847c30eae44749fc8c5e3bd97eb40ba297\nRemainder = 6c97aace900389d0\nA = 7e89adea82b4cb6feb41297b6dc8d948e72c3d5554a987900e7fae48cfb38fb5282b13d9a1f5793cf7cbf1ef551865041c3ffe0e287714a6ec7123556af55a48\nB = ec7123556af55a48\n\nQuotient = 1fdeead441e2d7a6ce3cce2389b2a22248ddca7970ae3f7e7d8453052fd08534ff7c46f6a4537fb6f28df6c5fc8a7d384336e679b74205315\nRemainder = 2903c7cc2651bfa8\nA = 9ca66de3d83f0a747fe986464522bde5e42aeac20e8ace1ea13fa6bc9514c58517479a4281d4128c6d775489b85dfd114ad184613f308f6c4ea484a22ab0ad1e\nB = 4ea484a22ab0ad1e\n\nQuotient = 12f16c8f9f898a08853982e2ac5a906d784c5ab8d74007ba3ab311e861d7c1ac115efe694cab7583f75a4a59ceff2887dab53b2f1022aa452\nRemainder = 4bdaf1f352e87aa5\nA = 6e6a97b358b591b78db43772378dc084a11836ddc9dd4607f263ce620714e8fdf6bf67387c163b6f2999f84270802b4bd5c0f0377e949fbd5d42fe145e66ffeb\nB = 5d42fe145e66ffeb\n\nQuotient = 14e0c06c8cff1f9f5dd8afb6fa6c340f0953a18ba7d2b26b22d8e7f946ef20fd5ac277ceb59cbd4ce3e8213803c3b5b0452ed449e22bf2c29\nRemainder = 55422f1caf4a9a00\nA = bc9c054ff568af73e301e0751bc1ee055e82826cdc53449f2d9f45feda2ba227bedd6df9b74fb58a85917d60b087bef04a156a571716e9bc908ae83784ee35c0\nB = 908ae83784ee35c0\n\nQuotient = a457ea94da3237c0dd15ee30e9c13e7b4ca1dc90fcd67951b873787206babaed837a3eb17e298d74cae92d1059636f9aefe11aef9ffa31053\nRemainder = 124768541b600598\nA = ea6dc82b1906c277526ed867fe8b0fbe32feecfb935dbab860aef59a7d72799fd4e952e70b4c9304c7b2a06af8badcd6cfa12d0b6c9db38d16d2c4a24099ca14\nB = 16d2c4a24099ca14\n\nQuotient = da0a37eece8972a0e2e8817c54e", + "67c4d9f92373340488539d5051984bce0ae3300ef6ca9d0902daa4d485dec3b4db6c8b1ffd2c5d08b18ae\nRemainder = 1ba15c46023500b9\nA = 36ca8763e20e6ebf07a55cdfdd83892bef0bab68ac092093bfdac1a49c1da015541196a24249bb2262e70f7ed53e0fbae61f02ebac4b61f740548136ce50f243\nB = 40548136ce50f243\n\nQuotient = 3d8c433daedfbf681b528f88d610204d33bbe74d0b13978c34a617ae94177e07a757519b5a8f1a93a73d0751c7b5b72b4bdf475a9708fecac\nRemainder = 4cdfd72349c6110\nA = e0dd7e73b2a64dc017da65992176e2535c43b6fc14f2f7b0a7d894d768bbc77507eac0112b2dc3ca83d70989a1b949ccf374be6a012d80a23a74bba39671fcd0\nB = 3a74bba39671fcd0\n\nQuotient = 39d084b444e39c32f2883e9968301151802da15141f65893f37b8b834eb01c074aa1e1a978c5c99732c87ae106bf8db09e1728c8bf2aae88\nRemainder = 2950443357cd7477\nA = 16df31dc290559c3b6a3d192cf15d825cfe79f8dbd5c9848eac7fa90eea5d87f8b430cccf9baab3e8e4dc33467a4234d8551ff25e33af175654686ff1368e96f\nB = 654686ff1368e96f\n\nQuotient = bbead8f70c8e61114f22d36e97861f16037efabe1347613e78c51d7f539065421a66c907faddaed13ad2a0f0b00f8fd594e917799cd937e5\nRemainder = 3013136f5f728b68\nA = ba5e688ab4f8ab5c25592bc4334b6dc2b7a06d491d0f919b716bf1cf109b62a30d9dd59dd4bdf870dd2687894edab303277a5f3e3a537cc8fde3ee3bb61767d6\nB = fde3ee3bb61767d6\n\nQuotient = 42aefe467ff2a5614efef1edce25a1acba9c476b3abbcd680140a3aecf8f51c1ebaab8912de217451bfaca2842c0bae717b8a030b6318c0\nRemainder = 1f130dd2ead0d35e\nA = 17bd50b5322c51ac883852ad2a4446c039dbc210ca3aa0313065fc88cce6819b324e93b036bd0c71be58586cd2b243d01a4a918c10ea0cc5b22f9d795df09de\nB = 5b22f9d795df09de\n\nQuotient = 13de73dcd72a3638fe2a907fd7f6574bbb228698fa60e4ecffb082911c5f09c74bb4f50564d3d4035d07eedea38b634a3e3acc26c8e9aeff8\nRemainder = acb8702f0113e0c4\nA = e0327b2e59236a3f91ccf960490cc69b2afc854de9299ad2edff9618f9fe24251886afc65f5c581a9bc86013f356d599e98b8b10f5236a51b48a6b29025983a4\nB = b48a6b29025983a4\n\nQuotient = 27d11481f00519b786eaee96220afd45bc51700f7366fb5e7da35bbc84891aac3d9d2b709dddae371a6b78439fef810c68eef586e1d68350d\nRemainder = 3d1890c5e1555d74\nA = f3504d5d96c9e27a1527725ced337f1cd0a183531642051e166507432c01e8d44c4e8918701c2a05eb8a9d7e26bf04993f9adeef2826ae4e61c602477f849121\nB = 61c602477f849121\n\nQuotient = 10bdeac209c67b023044186704735c7291423054bcddc24b731ad601b49372f4d5ce6e9d85002f8dddf0411efce943f81a5e42cee2d0c9fe5\nRemainder = a93a0c5bd51004e4\nA = fa29e37b0d0410d19fd180149b14f94ec2edccd347da65f6832850aa06a61b7b78c96faf64dcb347893c93c560b8043466419864a382c6f2ef1412873b2d8cbf\nB = ef1412873b2d8cbf\n\nQuotient = 1c9b6cffe44241292320c0660b89f2f77aaadc8d36e33f5ac3da0f12b3c114a156870a92079f7192d237f8bf49aeee6282531c929cc56d75\nRemainder = 1ce3e5eb13ac7958\nA = 144325a641463ed6bddfcbd73e50620a44c606d71fac38efb1c9d2747b4903f7b51fdedacfb66db022aea09b43c7c2ad7b851035165ebe59b552d4f7eee617b2\nB = b552d4f7eee617b2\n\nQuotient = 1b4ad18dc0e634053beb3cf840b53e35117ea06309ea8ca22e37123fd7e1d391c96c792e5125e322c27daa73301024080d73ba3491484b659\nRemainder = 3286bdce6dc3a828\nA = e3a2b90d3ef446f6bde30d3e726cf3e78212324054b40deb0b18fe00645568fb0a6234b6bded6240977373731bb30d1349e25cefd54b7a9985735e9b78002691\nB = 85735e9b78002691\n\nQuotient = 28f5e8da6733240cc2f18e3cf4d42a50d92816062af33a9e1871fa89bdb39a0d905c49faf51cc1c1378741bea34d25ac2c8e522881a6f6087\nRemainder = 135784870eb40c68\nA = 593206f9367b72f9cc59b3e37d2eb23b2061422859162ee53656899c2471017474f500c6e23efe1f6b1e57852cd4229329dc182ba01a257122d76a26aaf9b844\nB = 22d76a26aaf9b844\n\nQuotient = 1ab276448d16c533b6e90b5b5ca266e13ec27b5a58c80b7657df963ec2d1fe4eb1c1d24873eff6408bcb3d0cf97c31e85240eedf0efcc1e5a\nRemainder = 27b105741264f875\nA = d84fde3d851b52ed3b2a1268e9b765ec6c09c5768bba709b3b799802fadac30a6c3184185e6d57249b1c34619f3c9d2b90bc0c348b22537281a39fcadf738083\nB = 81a39fcadf738083\n\nQuotient = 84a87678485b3e60ee1cae3701ebdf0a29ee44115a492c34a0c8e84090e14070eb2ad0abfe2c339f26b5099327515104fe3d1c5546feea98ed\nRemainder = 95f7434941f9d8\nA = f79a0643bcd9c28cc22cc7b4178b3340e4685dd2672792516d6fc08567d2de2d3e25d43f100a58826edb146ac94acac4213bb09bdf8a258001ddd0ab110b89fe\nB = 1ddd0ab110b89fe\n\nQuotient = 516a2ac26e5b3afa502c7f3c6f15376f7a380e5842c229443343b5b74dc3de84db3ae99a0c57043e32a504ded19943c0310cababb3e92cf8\nRemainder = 327cf78eed336523\nA = 17c0d5814e1020d5d69674bdf6b9df193a16c0c8567a589d014e8eb7f6c9c36560791f7acbbbacee7c456eb51a4cdd7ca88011e9d8d9f2d64ab08ad74f7be5cb\nB = 4ab08ad74f7be5cb\n\nQuotient = f0da0beebcfaa716f494cf3fc81fe65117c90adde3b3942e8e66986fe8050fd5c9ebe1c88c5db04cea4c4c14779555d70cafb53870671f95\nRemainder = 3b2f844440d7be00\nA = ebba8c393c2a22b094d824ed95b4acf6875719fc165f73ee6d359e1134949169fdacbb42d5deb8cea96e11e3aac985635b5bcc6c02a6778cfa8e03d9ce6fc680\nB = fa8e03d9ce6fc680\n\nQuotient = 56527f07593774f0fa642241400985d0bb9b41d3dc9e025ca069130d93afc972d75e3fe0f798e127c3e1b4e925000459a3a5a83b15186e516\nRemainder = b620b7a3b752b78\nA = 5d6cad9e26267abb480b2b9ac5ea323bc4c3c53e0de8ce40c89c85accf0499aea5b11703a04296519047585ff12f8795f98da0546c20016a115100eddabfb468\nB = 115100eddabfb468\n\nQuotient = 294dca3b56ce9529aed2c132a9bd6c0c61de7a58ac50582f396b4fadcf7873b502bb869f801a9ab1f12384631cefee72b3e6050a7f69eba4\nRemainder = 53a0fcf5486c7a6f\nA = 24aa73803f270185d23310df2cf3ef67b18d7800bc41aad2ca13f372a27ef0a9217194f3f512e79f545a903895def195a5eb9a1a1b6b3f4de340e9da9b305d3b\nB = e340e9da9b305d3b\n\nQuotient = 16bf4dab1c29bd284c9b6649de65a4ee58f21d6a8b51627ca133fa817872b1a4a9956662db0aead5898ed0eda08511be7c47449638f2fab95d\nRemainder = e7751deb047d98\nA = 77b04d93272491322ed2fe651044e28cadb2ae7825f02b55aeb0f73b8b8a8b336802416fe08c718ab681581ac04d87116323f61f50bfd2180542fcd4a46dcff6\nB = 542fcd4a46dcff6\n\nQuotient = 388ae1c243bc9111e663c0c80495c36e8767bafe188b532b7ac84b5160d902af1b638aec6e4c66955d16bd8ce94ce6027a7bf95910f705ad0\nRemainder = 7c667ea307017c2\nA = 52f357e9a57722a867d8199242e100f06e8df810ee913d6992bfd9dc03ed78bcf44d692aaa7be806df0c9e0802851d7ae8405f76114e6322177907198f85cb62\nB = 177907198f85cb62\n\nQuotient = 33dc2fcceef7dce92e3a9df58566c6e28d03b58ff6ecbbb31e43936cda6380a56788285d37b5e8f11487afd78c39cb2150cc98d9d78a0c6cb\nRemainder = 429a380c9f8eeeba\nA = d99cf9a0bfc347c9631ae8c69defe1f1509c3ecaeeee5dbc61317bb73fa5cc6e704f64c865cf4d898f8a2f63214dbd511f61aa6e09856222432376698f8d2f67\nB = 432376698f8d2f67\n\nQuotient = 18ecac9e5539a014cffd8310ceb1170577cb23aa9cb3c523d57ad83069d1609ff743cd3c275b67097a038b85afcd7105ad21672f9ecbbc7df\nRemainder = 37924fea665f5c92\nA = f87aa8b6e62b09291e0e9b832ad71d8f85d60501a8d89d2638dccd4022e89bc4932c186a198557282527dfa86dfacc2f90fe0656695b61429f8220509f5106b9\nB = 9f8220509f5106b9\n\nQuotient = 37c0649a53c8cab91a7458702870bf64cb1de9fc1c6b9a3b92444119d368501b62d3a5138af72bdb7752eab8af6bf4e3bdb9e3beb1805b88\nRemainder = de179463e3e91ad\nA = 995c04c1f24c4efe88393bab7a7545e39193662d5db7c8e557d6c554ed4367f5af82c463d0ba6bc3148620481140add5677937989e03fb52c0323980d8841d5\nB = 2c0323980d8841d5\n\nQuotient = a6d193cfe7d8983768ff29908ee6e07fee99927a4bc4ef41d01f63f3b4a2e7029630b7d925d0979458cdaa903771286af672253cd99593b3\nRemainder = 6bf69921db298b3e\nA = 55c856daa8110599cc4fde0a44acbd69a68eb177e0438f7d843ba0fb74caab2a7e0c8a6f176f5555779e65c555e9157a16a1497edf36ccb583a458f0372a57c9\nB = 83a458f0372a57c9\n\nQuotient = 63f379bef9866b59f8bfd6bb0120a75dc03506b0034e7440764afc8ec14d8d735aa6f03a568ea98d0a74ab9bbe9c6e11b288467e5f79a2539\nRemainder = 11c077beb8667d88\nA = ff1fc3ea60fb37ff23e2f2f4e207a86e055cca41eebcc5bd6376904b51fb3d233cb04666fdc92be33239b5ee552870e45717890e35fdbe3728d6ff55d5662419\nB = 28d6ff55d5662419\n\nQuotient = 285ba8cdfbf00b112e496ce65cdba2271c82a273b3d30bed82ef2d360790c5deb97f3311bd5eb9876a61e33b3a37782d00c2d5ffbeec752ca\nRemainder = 1672a8aa119c3a1d\nA = d614352268930d301aa4046cd38e2eda4dcfcc52eac984943f2c863de5c4f8a44473a8ecebf12cb8f4da4722d305e5c9c3eddc0109d416e854df334dbfcfdd4b\nB = 54df334dbfcfdd4b\n\nQuotient = 358178128648fa9ea28dcfe68b4cecc7071e129e3ce4d113f5d1e387f7e5a412e9d2dfe5ff16d9987a544004d213ade9c134cc240eeb6871\nRemainder = 44c3fdb374bc0c30\nA = 18b973dd011969e29a1f4a5b8f118313f715c2e31dfebd9fe0957cf23cf36eded89c38637a8d3512bb23324ff2a3627d5b942300200c823d764b7a6c12d1c91b\nB = 764b7a6c12d1c91b\n\nQuotient = 19ea7212f6604d423b308fe3f2f4986f31aea9d6a117a3e207e38ce5bbd8d7a866285ac60433630de547fc84e364c451457fbf864a82c6613\nRemainder = 2718de2dd0796f08\nA = 83577f755a448d5586e19486b04de7836818223ea920465c4eee979a9ce5", + "696ad8e2fd5253b5d5dcfdf355465e8c0819658ccc5580fd29b351169b54c62b779c\nB = 51169b54c62b779c\n\nQuotient = 13e0c5b9905770b60a6f978d1c983cbc84dccfaed0f4222f534df80c7d3d129f5e8f74f19581332a7f6d383915424c71db4ca19bde2591fcd\nRemainder = abf5f6c8ab6ed4f4\nA = e2bf43c91cdbb244790eb165cc13feafea36f5187cc9bf8aa8cf202042efd5441e3822a1164992da5be750aaac0bb11f09375bdfbd4a39e3b682c7ee6ab5f5f1\nB = b682c7ee6ab5f5f1\n\nQuotient = 3919f31521e87f90df3a4463d0c83fa31e3f569449009d307962d26f07d854e8d3f0badbf55311c206bf34e6227949327a93b1a5ada7a930\nRemainder = 6c3802d44dd4668f\nA = 2546880cc6f97fb379afbc4a2664115ba7909414f35a5bf88be2ed5187bd1a24afaf82eeceb0b438d4999ebf9b7ec752236669425bd3cce6a71d9ad67ff2ff5f\nB = a71d9ad67ff2ff5f\n\nQuotient = 121d5ad4115c2768b962e51d09f426d61624e0f203ac6c923289b4e7964e165b34f3dc1ff938a7cf37478d407de251c64db71d3ee629c1035\nRemainder = 660a35e1c1245910\nA = a36d3250c123697adbbbdf489e6cb40be57febaff654ca951c9fa0b396b1714c55ed6e05e468153ac443dabca29de9b43cc0cc4e62cdf24690593662c86fb5ac\nB = 90593662c86fb5ac\n\nQuotient = ad81debaa02f6e60da58b46e76ce041fc4da64138634ea7b3c165b8fbda027eb64b6b5339e70babbb83430d60383c2cfe22029e617fd03a7\nRemainder = 2e4aeafa2ad76832\nA = 8992cd131757ba5cbe54aa58be115723ea3438ddc782a4d1996980b7b312fa76e4483584df744b10340e5fc9e468690cef538920a732a8f0cafb4e30846cad1d\nB = cafb4e30846cad1d\n\nQuotient = 67a71b9ebaec91121a8cf6bc2932b6be01af7954eca69c5202d771c2c2d13683cdf90ec942a3445771ccfe484f947f078de825ea88b3c05a\nRemainder = 8395953f744cfb31\nA = 4f8ada84096198175174896167405b85cbc03fe0642f6b263a70f9a22f19ad6c9aef38da8ac036d409e6fd925023c95312cebe04eb653e0ec473dc8dfed98967\nB = c473dc8dfed98967\n\nQuotient = 9416326e2347a541b777a0fa1b0c35d8fe76c940d24c6f6806d6ae8ac1e280c16e480786478bda3f780ee92f3f3c361574efc2ed5ca98e26\nRemainder = b8ff45f31bdb58d8\nA = 902f5e48b96b9b1fd16c3b21292ed495987ddac4e1d92b2ab10378f2966c4399d6a41eef622a4991ccd1f647531dcd145de4ac99b3036779f9414ed2f4ba7e08\nB = f9414ed2f4ba7e08\n\nQuotient = 403c651b4e571e8301c4158fc185396554bf61d900708d2af5c2bdf495b3cb539b0b9b5acd0d71654b3aa68024961d5a7bc9e2788e6c822b6\nRemainder = 7856ec047cec8dc\nA = bdd6d846983fbf140173a26d2b709b9f31b4fee1eac9d25fdf0ef3523be0e6afb372acab470cfe1806b36d84017ec99302eb9eb5eb2862222f4916d8b6201d14\nB = 2f4916d8b6201d14\n\nQuotient = 1b6d967173f9777cb6194c8f69289b91da731456fe5a1515a49e4463cd906c84f97381cabdf9f358d97fad5d3cb140e3a3de397e7f9f683157\nRemainder = 83649246ade8bb4\nA = e3da80658acd53ada7c2dc57178e697f2907c5b0c64f4a87a794ca7521105a0568a32874207646df3768ee60964b7d1d2e29ea6bf7fbaa7e084eabd4ea553a72\nB = 84eabd4ea553a72\n\nQuotient = 27b8f1e49e404455cc68217a20766590e749507976a3a6de25a7cf2c32593aaabb04d84deba1ec6bbe048a2959ffd747243c396dc53c9c811\nRemainder = 3daa032278ce53d0\nA = ff3ead7c7b27f607d16f1ef4ffa91b6cc28301b9256cfcb0c22b6818371ce648ae8812dc50a86e4bdc0d0b1e5b0d55c6ba07b240886a6d5766cfb3ed0937a543\nB = 66cfb3ed0937a543\n\nQuotient = bf987f58700508356fb6274f64a9f78d455e4c436fc6fcc980ec0800287ab3789b91c29a8a72b16645ecfeec926b6f8242f3c7dc3adb40cd\nRemainder = c007da44faa80584\nA = 971aa67c9af10f70977f600e10f9278b8e66d2471956da38e5f4b3fedce9a5fc7ff42b800bb4a78314c70bb59394d0880383f5182b6c1960c9e5b47ef8e63be5\nB = c9e5b47ef8e63be5\n\nQuotient = 7332104442474715d7c4cdac15fc1731240f8b4dd0e6ff3284a15a62a8f9a071dedb87f2220efcc5839cb7e6933a8f65d767819db26e134dd\nRemainder = ef65a7789f54174\nA = bcea2ae4b1edfebf905a5820f0481b6c58d76a69df9dbe84764add3f49496a5d7005d645eaee3754e0ed105c13a114e6a0eae5cc4efab6aa1a3d3a0050fa86f5\nB = 1a3d3a0050fa86f5\n\nQuotient = 3f6182804a7ff12fe7ed3c8521b55564559b1a47a78e1fd56597b9470e7e0f6e7e48c58bc8841c9d118718ccd5e0c0bf9a08d8e244ae60da5\nRemainder = 398e30aff5bd284\nA = 2b877181a960c5e29ab1b2672ee22539256a82369e8f6cb5bcfb69e5e4a41f782e89b58fc0ef6ca336469ff929729f8492b44f12199f0e1c0afd12b2c999e787\nB = afd12b2c999e787\n\nQuotient = 1a80a681d2c42edbcbde552323dac3a1c03b43251a99b5549da6cb39ec6947daa0d574f0df68512984fa8e269b0b27a5576b3aaccb76ebc23\nRemainder = 378e44fdc7a5ec4c\nA = d37e62f44de27a1418f348139eac5ab9fcc1ada21ea6d7695273daf638b4d7eee6745f54b99a9678cf742d304736ee356f66d16d874f8cc67fae9be5dfd41a3a\nB = 7fae9be5dfd41a3a\n\nQuotient = ee982a63816d56758c29d284c19b9b984908cf0a9ae3f1f926e162a2cae4f88703aa477c5c14042247635c103494d11593c2c3839baf4d93\nRemainder = 39afe3275c01aae6\nA = 9a0b0476cd33861d2fc3137df292728e1f636f6fcba5105f384533723231a3104e7c77df46f7f34a4bdc63d5c67b418cafcf106b26ad020ea547d34edac1d3a5\nB = a547d34edac1d3a5\n\nQuotient = fb3f4a39a661e5c31228a6b7b4c27e6e52d1954e8ce262b98b61650efffd762cf2a1aec228bec5d5787683cad6b2e6e49a0de91c15c81874\nRemainder = 63e5ed36ff73a42\nA = 4453712f56467328401a69d4d749a0771732734a760a74094e50a62a030cb604e735bfe0bf0641754edff94ac0e0549e8c10941255f0f21f459e52a6cfe4d9ca\nB = 459e52a6cfe4d9ca\n\nQuotient = 7af60a7c0f995178be76c070cf49eee311e6d1e3afaf50c8c93ff200c1b3fe742b23259b4fc0b9ed0947be4fc9a6c212d86de9a0f7dbb5279\nRemainder = 19657d8ce516a138\nA = c9c92a31ad0f3cfb56a294c42a26eaecb77edf33ed40a7e6797927a0c996a7c0a701b484741163df388bb082e3daebf4e1b7a99002632d6f1a41c1d517238557\nB = 1a41c1d517238557\n\nQuotient = c890c55a8e2a3105b9bf9344a57a9b9fab5fa1fd57083d52431b695553bfbe7a44a9b6cd1f83958224f351f8511b14215d1648e88e938573\nRemainder = 1bab5b03c372daee\nA = 88341550e470016c7ab600b9f6cb410071a77f907a58cb6da4ce3e955d1e859534c2c1098fcfd91b9fa66926e51896733c36a824c3a20844add94e27f30ca651\nB = add94e27f30ca651\n\nQuotient = 34c240c42da400317f66f5151630493a2f200ee418d5ca3300cab10dfb429c2acd7280bf066fe19115f86db83d8f5b93cda714533b16abfdc\nRemainder = 18cd326996ccebc1\nA = 7e96d7b90ff09b114dd4393e9bdfb13d8ff517681126c566e18dd6369d87d248734d94bd02a1f19cca90be7642822b636369c51dee441a9d2663ec896e1d6c6d\nB = 2663ec896e1d6c6d\n\nQuotient = 10d18159e75efa8204e325e6be830b4ee8d2c07419e8276edeac6cc286488fc0c888300db3ebb5f935aa82654d3b932540f0093d1880e1d6d\nRemainder = fe9b6b8ba7c30f8\nA = 731aa6e2fb2ad1e1f80d7668c7b0642203af24af382abd207a5ffb588209e8b5caf953e9a96b478f39ec03a397d1433998e3c95e382d93376d80cf0c957788e6\nB = 6d80cf0c957788e6\n\nQuotient = 450d1f4a105ff8d1a3efbb12165ca98c67ae70404472e4862db479e03313b08783ecc42104780c9d57df0ddf19c5b4547ee9ba52ea82dd0c7\nRemainder = 169e15b4d5aa180a\nA = 902bcb1904b80183656dcbd51879e2982e2b46a547c9ae3119ffc12c6a003e4321b519289b7f22fad19d16480182d1d797c3045b2d29dcc12167f9ce5e233d89\nB = 2167f9ce5e233d89\n\nQuotient = a426f71cb3d75365cd076a6c35c10765bbc3f4bd317fb83a70083b0f7dc43a4e0b95508e60dc1dedb780e9b485f4f7a8870960de669b73af2\nRemainder = da381ae5c97a506\nA = bd59dcdefcbaecd9292c4c3685fb87d3a94c0f0ed01e43e63e1f36fb65d6c5eab3b584f3d1f76d31458c9f6b4c69869d96e943c61df102771274c5b4d821469a\nB = 1274c5b4d821469a\n\nQuotient = 26ccd4b7be090af22221729b0ca51a5e66435c2d33f8d88f94405f6c0123ccbbbbc8080cd8448a977946019ccbf5d267ac3f151ebe686720\nRemainder = c41f9e7bf20b376c\nA = 212dbeff03f14b5825f0d7cf8a7501db21b60581a01a26d522ee44e7fe69545cfcaaac64dbc76c7e3027ac39ddc2d80af6f3fca1824c6ff6dae90967d9ab48ec\nB = dae90967d9ab48ec\n\nQuotient = 801df28f4fd987b4e980760f4f2625276a2a7191d453095c82aa98a2253324ad2873abae70cd98c28ef3ce102fdd53469b9f01889f3ba8b0\nRemainder = 8e435da582e59809\nA = 48341b28138dd04807e522e341f74ac46b0449fa45f96d7fc586997c056a21eb3c399752a6a6c023509f042cf9e879f397a34af9aa2ec2e8904674f2ea3ff739\nB = 904674f2ea3ff739\n\nQuotient = d3857b72b70adff9b5dec3cbc63de7c90ccd7aab6595339b2de39bd6b9789045141d224aa4e6bf9a06e017aa3edd00e716a771b3f5b97771\nRemainder = 14135c686d2e9f70\nA = c1cea45dd46409d5e24fb7ed7d849dbb079247af2d312e01083754ed07f65f090e4dd50d23a973488702ef00936c5d78af603ec0fdf03dceea8f939c922b1e7f\nB = ea8f939c922b1e7f\n\nQuotient = abe20c90896e261e7d31bf40e7f3136d36b0b78006d12225a4dbef6aaf2062b609379eefe7e5af5bcec17126286f196f1330da8477096763\nRemainder = 230307c44cd55896\nA = 19a637e4f3051be0f7c4d35513bca4a91ca9b8082fe3c73899b70b6805a7aa0458512495cb6ee1ade55ecd5851be1dba96d65202f06bc7122633a0d905017545\nB = 2633a0d905017545\n\nQuotient = 5ed3765c4a777a903e182f7c9ce39d19c01460f389b904c3ce1d3525edf25ffe7dc0f4d9e24f0bc8b7e01bef19c83e74f17884bd7bfabb2c\nRemainder = 40f5346f8775e20\nA = 546578393e914be30581e24508a33f6560a5805dfb1c675d1ff1d6f5eaa7ee638b9e0265f543413e04e3f1f3b0895dec271c9897a48d9ce9e3d7df32c15b75a0\nB = e3d7df32c15b75a0\n\nQuotient = ed73a67932746985465fb0606fb0e81595514f1647c911c303d4d31eb0306e3b2aece07320f6fe", + "a57a7071d73150591ab2a82a7d53968a81\nRemainder = 2e495a881876da00\nA = 8976445bc318921f7e12c8d4e8e50596849a1503b5efb65e939c291de136597c05a1fd16137f0bbbd7197df943cd612118d1e55a50ee097c94331c1cfb1e941c\nB = 94331c1cfb1e941c\n\nQuotient = 5dce24b7a16d847b0c43cf365ea20bee9679fa0e8732813e827cf6ef3c9bdb7fd8846b5689ce8b80a7dc0dd05721cb06d2700aeeb7ff04d6\nRemainder = d8ead1ae3126aded\nA = 59b99e5d028e6771d27004bc19830a5fcb347f7ae04c0ba7c49130bfb198c5b16821e425c979e6d2dddc14889ae58475bb52c6cdefecf2a8f4dd6e462bbc8f47\nB = f4dd6e462bbc8f47\n\nQuotient = 170e10b399a4c5fe354b536fe59d53602102f215d5107493680ab6e181f67d75ffd45bf49ffb23cf9269b856156b5ac6b1c5def4ab1abb18a\nRemainder = 57131776937c5df9\nA = aeb35966e2a616762768b7f63ce3aee5e81561080617bbabd7846b3ca03fafaaef83dd05b8d16cef40db0a56f3b0ef6eca5e236681cb57c8793dc0907d9aa30f\nB = 793dc0907d9aa30f\n\nQuotient = 1acdb88f047f9bf679c50ed67ba01dd24dca92103f8ea2677215b6142083b64f9fd2a365499dc8f2bc61e29fa176f7d76b55557fa58e34f9\nRemainder = 5065b726dc6b3758\nA = 15a6292c9fb66c6770a8dbc6fd431d2a4b57338581f78d0860fda90182cca563eb2272a79fb4f5a6fc72c90dc23e8a95713b65988b5b3f9bcec4f0466c1c47cb\nB = cec4f0466c1c47cb\n\nQuotient = add8127c0a27c961203ea0351aed5b3c75aa816e9c2684574e55f55c7140adcbf69d2cff843e5f53c157bd60b43c45c8b6658de72062fbba\nRemainder = 67f48d3584cf4fe5\nA = 4e8938c8cc46d34e3369c5d8536b18c963dbde56020678f77cebac5f8777e0afc62ca2ba4f533cf6cf7561bdce77b6f495bc1b05f1416d1173a6a288012c7c73\nB = 73a6a288012c7c73\n\nQuotient = 688ddf883a0bcc1ff9bd582119c2fea7c059e19aded8c048390a1d8fd7d769666987418bbe0d4cf4b67009a342958928769375c1c0d558acf\nRemainder = a5356d04b64ee12\nA = e0c9e32056977aeca72e229d83f0d320fbaf5cd8bf3e033289f46101c75ef59a854982f33bcbcfd200034e8ff439d669a03fa404e7dbfea822664967d67dd5f1\nB = 22664967d67dd5f1\n\nQuotient = 39d4d94587fd1445f31457c275fd6294fcb69ba155e7da3e6cfef38ed1272d6c95755bca49007ca62cc101b038d264876f18594b8fd4c329\nRemainder = a34980d5046e2ed0\nA = 2efcb12fb55c923f5c6ca7ae076765059e15d9e75240a6e5fc3db92de184143fab1934c7450c3a380a9851846c9f43d67bc199a314e82e72cffee795d695f82e\nB = cffee795d695f82e\n\nQuotient = 145ea82eff186b7db4b11fa1514674fb9d41c698efb33227eb1abbc4eb78bdb2a280c0c4c47adaf4e010a4336cbb5650becd1ef544e223e53\nRemainder = 36052bba2867f5f4\nA = f6a6c7e33fd4c664652d696c495df387b85b132cfdfe34bbd35759477b4a3c052f610df57e49e85720489e4bb8dc923696400a4a28dd000cc1bd491446a50b96\nB = c1bd491446a50b96\n\nQuotient = 35d0c9d870348b113868282aaba22b21ec87cf421519a23b288b150604729356f924090ba038d7400c0ccd4932836c65902b4d3c46a202a0\nRemainder = dc8c7d087bf24b0\nA = 22228c8a5966ebdec64007704a373b0596ae702d62e29e468653b21a890ace2f02c27f26b043f48495687ce8c2ca8092ead21aa250ce0f6ca26129615a2432b0\nB = a26129615a2432b0\n\nQuotient = 52fc995a486c4bfd17ed9722948e9ede1c4ac2fe80e6bd7482fc47944c4337a185a506a9ca473d49073e1b813ad742f19b13d57914888d5f\nRemainder = 75c703f654ad630a\nA = 3473041ae301dd2806da30dcf06b9c09600086d6873cf3ee9d5a0be638849afb56bce2664f797de4123f6f8fe3e12acd32e33a285bb7f493a1cc13a7108327f5\nB = a1cc13a7108327f5\n\nQuotient = 1744946730b2789977620f2e7439641125dd338d1b31fc50813b34dea70b83d209330bd17fd527db9a402ad9752c26b8823082ec9971f4ae65\nRemainder = 453a3d59303ec3c\nA = c0f592d83649bcafb7e2de1a8a71fa863c1f51b595bfa638c8fe30731c6fca36da975b6f19c657e3ca29efff6febfb311c003ec68189998c084afe4979b5bb19\nB = 84afe4979b5bb19\n\nQuotient = 468f3eece20aa9d6473f3c559760793e702758a3d9cc19d7817216392c7cc7c3968778cf2fe0c3f0c1424d7512cee19ac0717952f18aa287\nRemainder = 5904e71034e3a02\nA = 1f0c99a128c757d76ae6dfcd01012f0453c8f89b00476ec46321ecb872f99a48b4da29a4abffd0bbff2b727dfa182652ca85350b4ce100fb70a6a40ab6c41d95\nB = 70a6a40ab6c41d95\n\nQuotient = 12198913ef16c1cfc7c1be13f1cc5991a61ff74935e09f0c46d26456b7cf2825403b9851d07d27e0197c1fa2ac5e32e836979a184f14cd94a\nRemainder = 33431c3df719f946\nA = fbfbf5494a9c5384c7ae3df6c02a5e1f9f32dc31cd7f437832696bba164bae1a9d95daefb8bc08e0e8e637436fb747084460697b5ef5ac9ddec06757dbe61aea\nB = dec06757dbe61aea\n\nQuotient = 376c2f902566d83c21eb7c3aa3a6fa0482ed52c253f67f00d5b915d0183c2d9a2891c2ff837fcb426a4c990c48bda4f90e0bf69d13558696\nRemainder = 31540f5e05e8b4df\nA = 2527f8cafaf7e8319ca53104229199188ab1ca5fe592bde8ecf605e17ca6446414e06898a85e177d6985b5cc6d4eeabd6b222b5f44b4fc1baba050665c090b5d\nB = aba050665c090b5d\n\nQuotient = b8fdd5cd7b2d9295258bd99e2780921cb2ea70627a79088039fc3ab1c62bcfc6307e86db4a7803f18e5339f152063f9e41d370e97b1ba2f5\nRemainder = 4ed4f2d12e4f4ba0\nA = a25bd113c5a8c67ef65aa80f1512de43c9441fec0c41250048d29c406fbdae80912eb3970457d621c552e3af7ef2d6bc1b5448e7df5be724e0adf6f71df7eef8\nB = e0adf6f71df7eef8\n\nQuotient = 5421daac8cdeb6acc2b8b0dd85b592f255ee4fedb3a9e90f2a5bedfb0f9f033d7c562c96958346bcdda4664c67848b9d9fa7d3892bc4e9af\nRemainder = 7e5661558c345eea\nA = 490aef65c81b32f5df76dd58decdec3e3f73bc1fcbdb6aee0c93cd98725056153b572509e75d2cc4b042bbeb0a77d27fbca1e39efbc765adde41a7dfc5c3576d\nB = de41a7dfc5c3576d\n\nQuotient = 156a8a24e7804c5f576cd1757dba44cb4185bc13cb56603b54ee3b70fa35cd98db1992904d4f7d99a63b3a486e6fb31141a9d39cc0301f897\nRemainder = 29e9c1627537e5a4\nA = 5e4a10e772de8dd2c96acd714f7d3880ae8ab460095a01038f3aa9b8ac8165889403b42019a1e70e0e7f32e77fb388eae3579dbcb690729c4671868b0526aeca\nB = 4671868b0526aeca\n\nQuotient = 1b0eff2ff0aeb2c02ee3cc9e0bff808f4d616eb290293b13a6b58a84127972bb417d55e1d001a9720ec72562ef3ea688e64c4f32c7e26cc87\nRemainder = 664d57c57d4952e\nA = 806b8504abfbeec4d5923f83ddc071be88e11c4394168854448df96160b95adb1fd9c288852e2f3df3e36916ba5118815ca2e83a6a7d9e074bef9c961e2958e3\nB = 4bef9c961e2958e3\n\nQuotient = 2e363b13b0457a0e9effc2d7e297df78f35e5d24d0f8ad4525b573fb2f66f374871291ee8a8ee3d15a823b560156d474c678f79ee480bbe4\nRemainder = 5ba8f49e0ca36ab4\nA = 2e1bb261d98ec405dbb068daac5efeb0a51f08149181864e9dd6bf6cfcb617b76d8facaee2ef468807e0403bc550d58e8ad9e5cc0f094b02ff6d0277fe642f44\nB = ff6d0277fe642f44\n\nQuotient = 149a5b1a81b9e47ed36be76252055bb202dc25f8fe7beaa1ce59c279b32941cfbaf8fe4555867850b2fba43b10b74534db82398320f9786d25\nRemainder = 1ef621737e81780\nA = 63de892cf5df40c98de78c755c99e94e0e76cd5dc0b49b8856fe69dd0abcdc535bb1416f0d02b4eeb54e8a939cf7ad4edfb7de4dac87523e04d8ea8637e50920\nB = 4d8ea8637e50920\n\nQuotient = dea8a9211974758752d89965eeeb93cc616f88ce757ec2809f829cbb8d99b4ffdc3f0f643779fc5e0bb53b5273a5b15965f4a364863592f\nRemainder = 9ae7de3edb6c7edc\nA = acd5cebd069f7febc38c318867ba3a562bbf8ea9b19a6b33538ba107e49439f8ac6e880c6267c29b39141dbe2273d93062464de307efdb7c6b738c0bb282c3e\nB = c6b738c0bb282c3e\n\nQuotient = e9149b347cdea84d740be70060b239af000c4336ddf36fd5159083b795c4763588c87a959df0104212a04cc928baf60b0ea72e8cccc6d477\nRemainder = 3ef5c6ee67e6f5da\nA = 6ccf1b8b406e6a106160e73ac4122a04c0814ef5a47708a6776eb52002d52772d3fce3fc05398172bba191390aba925bb23aa1eee626410877822f27d1e3cb09\nB = 77822f27d1e3cb09\n\nQuotient = 1606c2fe44cd0b780ee474a9c7daf0b2bebf62db0ba8ef5a99fe22036019890a4c7dff73e678965bb0e2a6e61d00a74a1d33dc1106842115a\nRemainder = 7cf920ba2897f714\nA = ef9a3983f26237576311a871e4a3df0538593dd0cfda58ab90b889fdb35c700f7d158abafad127605057ca0532e846992c41ec06902ce58cae0c1fe238c726cc\nB = ae0c1fe238c726cc\n\nQuotient = 8ccf17de5068451fef1c2808c62e19997c7f920d5cc0fde1f5a247cc57c6d730df553cf33094b786597a343a0ce9e4bffef568247e904343\nRemainder = 2689c40a54df34bc\nA = 8435babd279b7a3833d01988c58005d4557f7689ea9b7168ef42ce2b31a1a3c32a982aff654f271a651085335496dd826ee4b3bc27f58920f05dc6676e51c662\nB = f05dc6676e51c662\n\nQuotient = a9e78c48c779140b1d15843089765ce9ece3855537ce88cad3eb7aa7bd6ec72df65adacba2bdf6c491066406bdc3dd3dd734a70e93eed958\nRemainder = 53da0b15ac079ccd\nA = 78550cb7b58b58d6878b615dfa25a5b90a1ff631740e631c7f8829962446903c686c810c46a1551b6c1f7a89ae898435bb8e36d1bae24a80b54edbf4bbc9af85\nB = b54edbf4bbc9af85\n\nQuotient = 1e3b41304ee07f6baf1ca061e0e28a3740991c6ca2749eba70d3ea1f9cba8adec45cb69a31cbff22784a9e056e884713c0812e8c7981e49328\nRemainder = 3d051148ec43a72\nA = 76b9453d315e7a9c592e1f2640f5b6b90a65e7f2ff8ac24b9b47e35abb76fa5d303be6d501b341a882bdd9d2a1c81a9280724673f87fbe9803ed5a2e7edaeec2\nB = 3ed5a2e7edaeec2\n\nQuotient = 1921410e1a538a71d33d9c5de95593fada116200c399fa7590ebc374282570477f5f4abdd5166784ccee9671a1a23b96378df62168049f6b8\nRemainder = 1a1f4aeb882d7546\nA = e4aa84f782a65d376b10e7789a7d56695885aae274db6cb37e0a34414397a57b4a5f76dced11376af5fd11d31828203e685861a6dea2397891", + "96fe73d0e46116\nB = 9196fe73d0e46116\n\nQuotient = ed2afbd2e63617a651911017d9d02224d521e99275ab642ad1a941827983b17ef0f2067b5405b20e8e97f2ae6099150a1989df94276aadee\nRemainder = 4578107045b9cb81\nA = b547cd987638ff7e3c30fec9b728bc10c3b8cf16e7040bfe0fe9a26e44d2898c4c4d28ef525cde2b4007b2ffb3aa80fc4514a99b9aa2e112c3acc56b72ddbe9b\nB = c3acc56b72ddbe9b\n\nQuotient = 56181509251931afca3bb9dca21eedd6ed4226be67497d8d1bd0ec052af146993e7358f132e842f9b6c4934cf1b4501f5d6c5912e65c8d3ce\nRemainder = 1b9861df51429a6\nA = 32988a4e0769a5aca200f6f6f1498512e13b4904a9a311cd8a962fdd688de0c6e50b04f42cdd2cf8bf9b0a6922657f9ad195773e1250f85509672452618da9c2\nB = 9672452618da9c2\n\nQuotient = 1fa45bb973dd1d2df0002772afba55284a1e41f6aa4b0d1a6c6a4beb8ae00b52e88a9889037b8bfa9b7ee38036c57b713b48af156c3f9e8d8\nRemainder = 2525d52ecdec8814\nA = bda657ddeabe24c82c883e85822941bf64448b7cbb368468078101289b6fca36680b3884e35edc1fce5a5cdbdfc11359a1ba8ac0785c09ba5fe5cdbd30726df4\nB = 5fe5cdbd30726df4\n\nQuotient = 63e21f5568d07976aa81a2690b9e81b76fc3291cdeb010d1693d0e80191186815c7b2f83551a5f1b172640425d4733f06f4df1b2c8a7e6ed7\nRemainder = 14781a368471ecae\nA = 9f3dad0b3b56de15ac46cde1d79aba6a2f3b34d685cc810e9fa3f2d865bea4afb480d58653630319a258e9e8ded9be93cda3bc52b80a9359198221221724cc3b\nB = 198221221724cc3b\n\nQuotient = aae37878db016dd758003b85ef52acc7288b7b74c4723e3876a710baed4751d3be2ae49123b248f2b2c55a5be702c4428b1dba9b8a6ae8a9\nRemainder = 6c754d5c167e1228\nA = 4b93a98eb7b92cea0a4f5c2223e77abdfbd332b39f295b4ac40f71625d88e4add7e482adf3010082d8dd8854cf714a54fba0887de87946e97137cf7eabda038f\nB = 7137cf7eabda038f\n\nQuotient = 9881f551c4b7e67611f37df29e77cbe4e2d9fd5e17b7da3d013d6f3d4312e53dd26dfe3a2a12525cfef1ef81e6ebeeb7ef8fb4f918bf15ee\nRemainder = b14595005716bfe3\nA = 7737f8e7337160c14cfa8411236ca0354d8aeabf389b9fc4b14bb2ec3bb68286f3d82eb394dbd8062862b955e9fc8e86eb646317d1315d09c81ef51b30288cf1\nB = c81ef51b30288cf1\n\nQuotient = 4c8519d4d85ccf845fc5b8f31c27c60f0893ffda29ba86e8a3fd5fe67de5d29cb29362679abde996039b8febda2ecf71f6b9e1c1874361464\nRemainder = 10fae644af084f8a\nA = 900f7846e927760d9986894de6489e53cbbcdd59f7707917e7581422508f2ce79b77bd2c56d964a41e60baa927ca679faedcd9cd8102dde91e1f583ae834b092\nB = 1e1f583ae834b092\n\nQuotient = 16ef17b40bb73063f3cd0929cfe2405ca0ff2d3d426ac05f8a8dfadc85659105f7f728e113baab59247c4c7936ab975c08d6f1c72c12c532\nRemainder = baff11e6961c72e3\nA = 130b212cb6f3d854e4f17524953fd8592f5e59dfe92fc7d955e2899d1dde1ae4aa20d749caa349ca8d1bda7eeec2310532a7af54660e2a1fd4929335a1623bad\nB = d4929335a1623bad\n\nQuotient = 1cdd7ee2eff733b83beda5b862673177e2f2151ee0fd9ac0bf0ec5b7e05516f1d1b59ea754b0483d0e4bfb7668bb99117907a58a8ceb78028\nRemainder = 29e33e0c2a515780\nA = b0131ec2c1ffe9a523591a9453d2fc740bf885e7efc1a0158905da1e646745ef1bbf39b406564cb3da2f842bee307b36219bdee5991c969d6199279c25d4e380\nB = 6199279c25d4e380\n\nQuotient = 20bfcd06f9c54c537ae563e33dab31047aa30a6bc4e7eb0902bfbab3bbb7e65df442c46625c39e08c88310116348e9ebca2450ab463727f90\nRemainder = 11d8f2f6d4c1f55c\nA = cefafbaa2990eaa88184162ecb118d20e5999e5a8fdd25ae7f6248650ea74a8cfb92c58efecdd5d31eceb618f1596d7a6bfd31d092cf86da651f629975faf91c\nB = 651f629975faf91c\n\nQuotient = 37204c5735e4ba5e47e845d8b652cfc2b1dc715abf21ea0ecf5b1c6c8b9e596591fd7a7f41787be1a028c147a721ebb891b0abe3bd079b589\nRemainder = 1ee700ffb0ea02d8\nA = ce22d36b3cb913b32bd0e25cc14c7270d3f7b8e600a9b6732377f846adafd7fbd8a09d12fb7011f2283d988fc29aa25948dd4a0f24512b4a3bd460ee19887d35\nB = 3bd460ee19887d35\n\nQuotient = 191051194e4362bb201f5471d4bfaf92f79b6fbd119ca3dc1afffba334869ed9f8acd14fc42a2d8f616d652610a483ad90f5140e9a5ca4172\nRemainder = 74785b6874d8fa37\nA = f3c79f9a6af1c5bec72218d969620149afe8bf068cf7a7aceda977076665bb5a2c30729ac3aa976c9be379c6a5458f1501db8802652ef69d9b9f4f097027ddd9\nB = 9b9f4f097027ddd9\n\nQuotient = 6c46c17fdb03d192f75d636e1e2ab4e858d55f0f205cffd75550c4347726b5cfe036c6c901782cbe5a04f1985d9fd1dd39d747d25a6a7a88\nRemainder = 9a836be71a24e72e\nA = 4f6cf6e357b4985442a25b5c84e2cc0a5e685e2f5ff71ceba439b81f4123e16db2296dd4333fff23eea92bdbb812daf1d27c721412fa9847bbc9a0bf08879b1e\nB = bbc9a0bf08879b1e\n\nQuotient = -4984390f93e11c9a77880cfbe157dc41d43fe901c8895ac5091c5367a77370b16d42e8cc260058adf4d3fc8ee8cc6c0099804f4c319f15561b0a2b1caa7d703db82a726c9eab569c\nRemainder = -19374dcf21822188d720d6ec892bda2c084e8af84f38012da7029a3c3660c7e813fd4f7644ca80373575ff98ab6d743e939269c51bf62e04f\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 330af318ce0ffdaa92448777ed117de9c104e0f975651322c8e01b1c470f3cfb7a78b11f7daeea57614cec37d18b89155f19babeda0016171\n\nQuotient = 1a56f7d6c06a316a9a466319cbd558a99f06843782673a54775d859768a61933de3fc410068d00d5f6ab13fafc9228fd40ad41434501f8827bd7461441140eb6977f18d102d446\nRemainder = -3c3d566cd48a909292be2ce30f88ebb68e9122a3359f52d1d7b0189c467b829a9f226c0b64845715020dee12d179913ddb7f17da2db86d854bd\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -8e770450768d07ce20ff8f5f6af464b1ee5f1d0e8faaf927a19d3ff801f6089378133e822b8e63cf29c4c9ed721adfc91d3355a3c7bbde77bdd\n\nQuotient = 42131cf8f52a6a3f189697ce402a8c9439bf05cb3dc1cf8bc49dc2f07cef15b3bf0102c941b5b3bde6440abc6eacfbf77ea8da06ce932fffb226b33dedf001e9657464b0f06\nRemainder = 4cd483574fce075404dd22072abe61200fc455c15b382c7f2962ffd82c38ec1e2c60f71267cbc35fcf77fe1f9301d6b5f884f1c416304aa9f4d4b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 38caa64e74b29a7e9bbf341edbab112a730b17103831a9ecb70ef077e9660b2dd1fbf71d7f6bb4cdae2ed7cdbe9070ec9fde996c91b9bca5b83450\n\nQuotient = -11d6883fcd705ac97cae5bb7f8a2929d6f636f4f232ae9a4af9769183dfce9a9296fa0714c3f4fa1eea467a5c96a484a59d0cdd87496b9398e7a818daf89a58add3a39e80\nRemainder = a6b7984fd80d719ffe2e6eb756e4e3bd7ab51f6088e04ac8fecdc744b0385294dd23b5007910109abf40cfca814c10addcb5330e422b6f5eab6efa2b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -d25d50f53c694cddd56aadda2654ae5888603b39cdbace93d19c117af5505750aa24e615f95446862bd693f5b444e2a876eb2cf49f6c7acd007eae02\n\nQuotient = -3fa898b02c621915f44b213ba4e80b8e85c7a2f4c78df2bda7d99494bbca3eb2d9354965d83e1c9001f10aad9b3f3ed837a630b329f5a4b28935158fbd9d291a120b08\nRemainder = -320d41a3875da2e83ea9a83947f5abb1a7026c84020e983381722bf7aa87d5987ab088cb2c37fc3781c82c81bef3263fec560023e236a747030618e9d2b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3af2721aad4b18db27842b5e539d8cada9dcd7ac4c5b885065dd2496a6f76fa73c8a51b239b5c068ea6feffda22d8ea806fb488ad5a94210264597edb40\n\nQuotient = 179307c3e14de14a744d082825ed723b996a4e15f156ac473960583138c43f4275b4436c50ef8f21a7b450a969819b81c15bc355fbc5fb55cdd8e124d931d142851a\nRemainder = -9c8eabd36a25e995c1811b79a2a0357f6aeef4477cac0ffdd130046cb2a647f928a34d91d9b489d394965719cd58604b957c693a93145328e5568d33d88a9\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -9f2d3da1da77914df66bc889a40847a0d705d4648a11f282e09173d170e96d84b5a45092d995318fe7a954b54b88b784423402519a38bb521e84a4f6c5485\n\nQuotient = 6c0f316406afb4cc2aebe34f7948422de0b612a02dc47f4ae59419c579fc465ceae1980a3e524fdfdbdfad4862f168a9851664688c9ba01a8", + "bc1ac156a6276643\nRemainder = bf52a2fb6493eac22fc8b334ccd8e8fa347620539d9189d535373f94503310a027c5423197c7279bb51ab8c459e27f548d57b55740320e80b753290d077aa7f\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 22b9e55639ad3ff4f071a49c8bba6bd9047e162fb31882421db8ec5ce46f28fbc35040bbc74ead5a948c47c43e9c7adc32fa52046b53f12b07b5224e0d8e93e4\n\nQuotient = -1008fcb6894d8c411905136fb3e05b38ec5d8df35db06379fc2d6d3e3579bcb34fa6e021b98b899d9d082c111b1a6ac8e50418fcd5968ade6aff8828d8e4777\nRemainder = 3d7dca387b00c677d855fc4af4d86d86331fe4309929039e828765f0937990bffa964d3ffc5d4f2f4b8bea978329e7cedb847c7cc341ee52217f903ddcf9446ce4\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -ea045323f406bd7ce25b3ab4993b5f6dd92ca80e3a02607a862deb13470ccef229fad67ae958cd87fecf4f08d9609595077d0d1360d9fe48c4566e237aa877e7b1\n\nQuotient = -42a50301031962754ebf9c4b1e125e6df3dd40ffbe09c044b1cf4b62ffb4f92d298b05933a450bcef65e86398da80740a610ba45928000a5c12d26e9f6a4\nRemainder = -c5485b82cfefb3f980e0fc7c6cd89b1345a8fb942299bdc36ed4ff8916016315a0da84ca0ee2824dce3c7e5ed49d517c45173c9c8e30b224940af6cf828c73db8db7\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 384e523d5a687bd1a90101e43334894b6a27e8c6809a8bf5bffabc34d558a8309997dd6f2a3b7c1a63100dcc0b6647b444ef7e5aa4a9c52c7caba1ebd096c3fae6f95\n\nQuotient = 1054439945ccb5bc5461fed04e364c7a36d5dd2c0428872676debe07654b2ce31e435a90c81f2bac1032143acb0c49ad101398feee8426bf270bdc0229\nRemainder = -7bf919e14b2559ab82b3c1bf428d083a4c851a7a1fea44718377e9e945caa5cf48e0b1ad727e251bbb330292402a75ecd96a56db4ad07146533a3ab5a717d0a25a3a7c9\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -e5cd83a644ec86b94f5e33d4dc307a2f14ee8653288145dabb2b5f894560c164470197fb9e37749656f47df343c245258627aeea17965fea10a57336bdc6b4a47443492\n\nQuotient = 62675274798218da426a54ed7158f8f737b7b3c328a9c351371f0cf61f41712f9b28741f187eb635ce45866762fb5fc5051776151d202e2556c5845\nRemainder = 1aeb5d1fde3c259917e430e6790b00484d0d9508391ba6ebab0f6299190d4b34f5f7d8ea2174974471a1e28ee2c15e05da645db971f699d5d0e80569b7eba7908ae579f5ed\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2622350611b486e6be7a7c1c073c230d604d782c2696038a3233ebcc3f01c6a711969094e47f49e294f2c5bcd04fb1b7c0934f19bf6e7aa519a8d4ec2c172ac59cc1a57b26\n\nQuotient = -12970cdd96b92c37787971cd8dd166999ff241be881eb9543ff29165a9c1a3beeb38b1910a5724ffe2b73ab95ac1ca88d3989aa531374d4ec6122\nRemainder = 627455cb555398150e5b4c1c53ee16dac8d80d9616ed1ef40031424287f8028a9cad1a10bdd8430f6f65368cfd00390c8d4355aa5ecdbd1ff0266a1ade235f33cb5309446961\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -c9dac93cfb7abaa3fcde359e09a92ab0b5c06359bc09ae9bade3c6783064dba90b233b4c8d5c6236a13ef96c7a223e37bbdd931eae61e845e5a10088f75b3ff5f1158e833b15\n\nQuotient = -6742b3871dece5986d4e219bf5f43c101da8896f247521fa286fde696e0b71ffeb3b6a3e4f33710c9ab150b7a1f747cee76839c5e7f2509f62\nRemainder = -203b2d6eec9d485f7b439fe9d4c640bb31170af38418faf4daad577c30e44ca06efda55ceea4fbd959b3809fa2002b6e2cb891decb09334ed89ac66ff05502036b2155ff62f8aeb\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2457088096865cd052e9cd9349c6e5e34e46c89d6e860a36f8e2a0bb1e5d983e07d05e6f6b31edc67e4793cb4d40979c029c80a13e654b66c8acf6b894f615a3ac800bbd09ce020\n\nQuotient = 15eafc416460d757d0abbda8d094eb535262a71dd033c25e704a6df54265b6123247e5625da476e0c220ba88582a1ed94265135bf8bf1fb1\nRemainder = -64ccd9a0ae0b0abcb5507d51b2e6c8e52e67907474605c439796febda06eabd8a3185fdfc0bd088cc49fdf564b5b45890b07269c15b1aa2f993cd9872b97aa6cc37dea2f03444b3ed\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -ab34d3906d8a2b806b22c73d44948d703c1e05a9337f75cb0b5df5205c5e2d23f8a92d8381372f9398c9ac2f7b9302b83e48b26512ccd0b06e6b8ef1b930ec2678d71e2eddbf7349e\n\nQuotient = 3b22916d9fe3145fcc3b8872bebf5aee4e14235f618e0aed09199852c6bed80df39256d8407d334c06f4479f230913370b7d451fad99d\nRemainder = 1b02a7b97f9ac1f6306aa00fff0e59f55fce463ffdc640364a950df29474e08b67cdfcec0628e973d42fa1e4f98e988ec4c47e4915651a1731b71d5e36a10a0d1b3420427dbb79ba7d52\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3f74cafe9ab0c1b307cd7571fd442665fa3205fb2f45b3811b92d1d38b096a2025b8170663a29c52ca84da102e62048e583fba96a594c0b23952fec587814857c25221ff2cd0533cba6d\n\nQuotient = -12ffa4b6fc369404968911c17358012b993c18c2ff34122e06f450d3d441926b5f5638b40efb012d76d8bcd3c0012d0a0ce5d55c596\nRemainder = 64548684fd5f6c816bd296234740a4eed772570bd4a48852462f9cddf14f1350ce7c7c6a58aee8f66ad7df87927458db09e3af08eb5376de08444f35e5171cfa0992fb27f70b81574f6e8f\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -c58383afca9e1c480ee75d3cb6b0b99ea42e827d39fc96bab6b0dddc97e3eaaaec02a74847f9f7d49937f5ade3580bfcd491990737d172d4079437067251ab403c36a9826e974b113e2d2a\n\nQuotient = -4964410c2b038573107b0151b36177cdd62495e0dbef536b59c8aacb8836bb45e7bb014e5022360621e8e82a273d0d462b8eb6fc\nRemainder = -1250c42f8c9b129a5c477be446b86356edd1b19409d362c3a5fb5d59c30f1c3fdc1424a88a0d6ce20bae885905d98c8a5a6495931f73edf4c60112ed78834e3bff6de3ed54c867fbf16a1cd53\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 33212ef4a8e80daf1049ac6f639f8e1990142ac32f7ebc97675ec90f8eb1a2814dfdd295ae67317253d0187ad33f3932a3a7efb056d0a3c87d28e64e23e9f1de751ee6f0f61c6f39d08d72f0a\n\nQuotient = 17f77efddeed52ef2e423bc2c10d2ae15c97384b766f4108474964c2a44789e61249103d9f5fe00b4d612772dc6ea12a42e395\nRemainder = -1ec95323b7b95169d5ec0667f3cbf683e98c15dd0fe44df4ed9de9586e43f1f69337e41a6d11d889452665dc0b03cf8d9ef2effe0b350eeb9f6468751b8a2c42608ba2a33192b770cb62381a966\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -9c91fdf2dd1827ed103a102db254630c278bf8b47bb12a342a92f081acbdd8ae5f5476ae194e24b187011ac25b19fd09e6e690777f9d3efb6b3a32c8f5905e1478a27fe4b1adf17a70abb4e7571\n\nQuotient", + " = 4f5dec525ffc737094f40d27446ca0be5b7a2aff02d51d99609165c4cea0dbbc1d92bc0a8680782b616c149bbef7f5ca912\nRemainder = 1bc84ce56a9a0c74962681c02ac927051c81f3824d9f3f0f91465df333ecdb449473d9c26ae3abb9509add5795e89ba5eba6ec7c89b114c86e6991ca0c185b34d6e66925a14fd82809dbc4936d273\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2f47be01e6dc6a86097676fbd472c2af0c83a2f743fcaa885e44fda7e9f350e9fb7a8cd07fda59ccb7963f1e95e6a1236f5f94939decdc85afc0e523c711b24641c844cd3113c17fe35ca988ba407c\n\nQuotient = -163cafed5bcfdeda88555f30bd4cc2da2cefe2bcec9a7c19c36ccd04a45121a5a0dc28d0bf6ab7fa4b78933c47a5d5286\nRemainder = 93f856077f5b2907cefcddc4d767ffeb0acb7af64bb9dd8a15dcfdda6c244c24fb8404ff9ea2fe1dc337faa05930d33cac4f61e171d0236e222374cb3da76396ae1329a407fb4ac652fcbdc568d0fafb\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -a8bfcac452a5e48fee9132b73bc2fef771450143ab80aabd8690ce54c9b52c2b5a669076a7a35fa6d926268077bec6d90b722b5d074f28ce3843fb0147e567c45f4e91a11416c082762e71b5c6129c08\n\nQuotient = -617dbaeb8c6f9d584e8eae923c872048f9f9bf039ec6b50cf8f09c061bf79acc3311b37c2502e560848c05ab316fe8\nRemainder = -1ab4613767c4f1f7d127e848f2bb7c72a3a9e1dd6173b63198b80d3bbebce6a31494f19b53ad9e3a77248e6f9b26fc59060e2759a20dcdbe785297bbd912da9a1819527fac550d64bfd20ed1f96450c30f3\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 267d9397138fd0374a7a58593d41627ba1203a646ec2c04997acf607e9d217b8f40183d2f9304447d6f7e727a476e636ded4697a5ff30a9ae3d249baf97969658209c1b32ddc0edf920b0b278e9b5464313\n\nQuotient = 10ad85703fd51870306c5e36b51512341d6d39e0bac47a03732787b2f62e49c76666f7f49b2596de6cb5c5b2f31b\nRemainder = -846b4479713bb19ebb8c1f1b75d2be0f39fc1095a3d2ca149b5565146bc19382b86e5ab0d098ab1fca1ce701d582400190fee34b602845c3c0c498925710f0b9e3af2412ed5ead1fe03d77e9b2b407ac83823\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -e0ffa4e120f2f46fd1430b6022fd03f71a22f9b120f8d40e901279be235b32d94760fb8c2403d23cdeb728ae73e2b16af7322d6ebd5f5673187668c99805e700f1e997423886bbcb851448dc1ed4cd66d6598\n\nQuotient = 41567bbf616ab41da51108d7edcb5a8a4877c5a8663b3aed7559421b1fcf4b535a54989efedfcc935b3917fcd\nRemainder = fc026e554a0821e0d36b796fe6a676fcd7383a55fd6158d78ace4edfc3d8aa87c65f0eb41baa2aafadc51218b0562ff4b5c9b17bbe84afc491d9e309217a5138ad48dd51e1b1a9aa51d69963b608ec47d63fcd3\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 396e9b45ce43d3f89386cfad8ddef4b483ecb5173234530c67447ab74629d246c18b9da09522c77f598957e3fd2a1c0c9417399912fd547fb1023ba6b90d63d223bcbf3e7ba155e51bba7e8635aa5c39d2b9dbb8\n\nQuotient = -18f1f395347ce8df530d9330c61c0e30ac9531b50a0af2ae7809db1258285c15ba7a436121287990fcdbda2\nRemainder = 51417b9e9995de34316a66a2f70c146df8e36952fe64124819607bd8691a465f4fde98e590dcd56f0faeb95d1b67751081c2393626713c27ec2a2123aec2a4ec3761e5ace4aaeb612d46e52e16d72a186d2ec8a7ff\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -966dfc779cbf9c388a84e947d1128e2392399ff45d9491259c7cb19589154f82f41e852e0c6bb5a728f6e87ff4ff95abcb9b2b57af1b6b7fc125497775ecc1338e4bbcb5315f7afde4e283347184b908545211afb6\n\nQuotient = -3fd962e88dc1d501fe9335fff8b6b2d50eea967c3035a3dcbcdc9599b81f9a445ed5a6ae7413b8865fd4\nRemainder = -97f06f6155f8d0ee6850728192e0b4fcf55fbd9ba982c5f1d598ddcbc4e1c4be0e209fefa6ab3b7eb2b4c645e4dc40217202285ab0a7270d085dd9d4fd24e5293faf6797b4c3c79bbf3ec63fd82942549f9e8f862297\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3ac566d6b2d18572360fbdc626ec488aa316a74f33d71a17a2d0e1d2bf26395623eb91dc4abebf2f944e9bc3d669fae2e4332088e9ff9d9f43927a7888b1390ef60f05efd6e63ec606ecb3e164ed6dbdc9d088586aa71\n\nQuotient = fb5ce21bcf28490afb64e6746a1a81792c90eae17407c0b4c5ebf2464eeea43e516be2c615f84901d\nRemainder = -3d255bf94c3d610c32266fd472d070c0f5e7dddb88d32723b2e1a20709aed2faf28701e0d0227c2b33ecfa9e708e5ac354a97be732b786210d86f1f05d191513386c580b1ad1f4ac6890f87fd0d4270f23cc5c2064502c6\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -eedb64a6e204ee3d6df508830704f1d5b2d2e627698d38a114c07458ea0befd593a80dfd2e08fcb1893adf57061ec4fbcd3130692de7c46f5ca51361e9b79bb7a91963618b8e5b7591392a5f0e3be954e8b9978c97f12e9\n\nQuotient = 6933a3123d0b32693351a834751345300c49324b861a663e8700bdb3b70ad996747b284a8ea5c02\nRemainder = 13849ef93cbc77460c3c496e8f31f7e01a98c21cdfcd6877547161f9601680665b394933d3a0824f0d32854508c89f0e4a0873280c779c7ca636cd89cf6ee5d42a917b4f382be3b9654039f623c11b43164827f870fa0f0781\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 23ab6042240a7709d43de7ee17332a9710bd0d913c42b3591341527bf48d5bc30abb962482292d45a15cb03c9457cc8d78d1e00aaa63358427b000e59e4260bfe1e2cc603e175d7fcf02bd9f61fae3740cb8e10a510ea3d1d5\n\nQuotient = -10e67cbb33dc6e24765893a047252766c2bfad8385150689dd4fec9ef495dff63ede1fdf78bb6\nRemainder = 9dabe2cbc734b910fa1bd25616daee5657d25b6e4dbc2cd93cf8549715c87974a8336fc5070d86c11f6b670d4b3bd5ee8ae3af2bb321fbb4f8fade3f5c6c2d6c366b4d800dd13ce897f13b0d3fb79f1d9ca525b4e7286c56ff29\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -de093dba98747499f2876c8b6b7a6b9587284835ae35f0716dd594c826cdf5b9179f2c6b08d800a77a6936602ff2b64ee0b7c94493bd5009633f5bbe423454b7f018ae96c21230510ab4bf5db394ff153b0e9eda3ef90eb4c253\n\nQuotient = -521f5e35300b9ec2742ff472cf61235dfe2e449772afa638b1adb812cccf269afd164b7602\nRemainder = -2ad10e8758e1d358d4744ad344ce319617027107c0b8db195d1b58c6e6035450c9b377f026fdf9e5737750af5615cff2ac3ccee623c060d779373136d48a735b353d64bcc5f2e6ea1e46083fd799b5f57dd5ad0ff3e6df9764af977\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2db1990ba1e353a1a62de1b914ccb691380b6ea937c13621a29f0a40ecef460cea52cfbc77d98706fb3c9939ceaaf962fb8003b0cfb40535e0dee22e8e7d04b5648fce2e58803242c199421cc4b26cae776d3603f2ce410ddd1e0da\n\nQuotient = 1d45aa6fe6837a1b7ac95efd55d1690b66487202949a286fc85da7ac0b50b860215e44fb\nRemainder = -7984639b596f1d4e6efea9d8b4719215588620ac959034b303584679a44fa84a4be0c89fd2e29f54e62959f9b7a858c06b0cc051176af82d4b85e7334555ba11c39e6cfa1829995c383ba81dbc220e527e90a1d440c1d0", + "69703cc1370\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -80316fdc405bb002990d3ef7d0e98defcd1f0e370d1e51db2d21ecbd96230baf69d00b168afcb7b8da9edc3ef7f6621ae5c5a0d7797e5c92283342e42468dba1036fcb2ffef1f493ff97826477364f6b5a41dc56d6389a01b83eee041\n\nQuotient = 3c0c3f7a777e611d1bd0d17d669a1ef7920b72ea8de06d4b415a73b836e37d6cf0780\nRemainder = d8c77134a75584ecd5ab29e97a909ec139464901f9cfcb1d3d9e29a63d204615b6845d466c8710873980f107c40ab54eca9f8933ef6d726f9bd0f3e9e97eade5eb1a9bcaa7b01b6ad51ff3ecf67d6e4d345f128e990494a2db434fcd3ab\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3e7dd961be36c0c286eb9e78bf3b33e6f9bdf2c2137a0c660f1d21dea31ac9a044e526bf47ec8190e137a60f1f55e947046b9cd04a2485679e48cac80a1bb064a915208889289d63a6e338cf7069ad799861c31ec6eafe02a4ef2c2641c9\n\nQuotient = -178d749de2dae3a2ea4898c59aaba98ad9f340762040f5aea13cad45a793f1256ef\nRemainder = 6c5d9b19aed9f099255b6e3d251aa50d1e534e6c86d82eebe097dc8dd0748201e48ac62eec070a999c21f5c7684e5a700212e9079b5fb731321dd1e16ca82ce80c1f5c17fd1720f1353bb90997f47f5fce335a43a6f59facff0b3724423393\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -9f52ead13916f9807d0cf0c6699578af52c54816828f22de62328fbd7b4fd6c3740ffc82af4e24892092c7ecac44b5e775944445e6615fce25610984030a345731f944128f5734e6e315a0ea97aafd7563105695d026880d065761687b75e8\n\nQuotient = -4fe43bfa9417839ee408b254603c3dd176653b6915a89de5b781b400162fbed6\nRemainder = -1c15816e03751a203ae23c48965c8541849b09996bc81d28e28d7871fa87d1c3b2d383c056d3084d7d01d853bebe270fe2c0839e71851e169d417c47caacab2aff8a8e05f65dfb20eb17ed8f67475702fa83087bd868246cbb885d52639797b85\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2ef8419306ebfd215d9079c7a2b959a53ca2f4553845e3cd32caab2635c0e77fee8c5c016c121e3cbedfac57f810c132486ba78df9e719a976e0112516893f14cf9b89f95a89aaabf31cce509ac8e7e62ec3833f0be4336afe6d7d73518141d39\n\nQuotient = 127e8c06e12943017f9dd57ca24dca0ead230092811d307386c81b6efe009c\nRemainder = -24f3431858d5aee412443feab243b465b849f5dc97e4de4db88c7adf774d9bdda65fa0a28cf6b18eac6078b00cbeed2ac406f8426aef868d4b59ab045825d4b0a18af6c9105e32abc72fadef55b221278d329ff6fb9019630411bec143c4156df7f\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -cae6399216401dec0f8ff5eaca884ab061469082ee3a18e49e0b4d5f9cfc98a598c373249a8ad2374e0b3de71370e93a98650684fbb931aa5d8b4482cb0be142492bb71743c251346df66896806f926a4a5dd4c16ca3294f01bb998835e6583d29d\n\nQuotient = 3f180694e59df85f48ac02b6d4faa26278af9641db18d79f198da5d802f\nRemainder = 36cf82dcf8c7ec783b4de68e0627a4a4b2a508637c176de09feef62dcf382bfa5d8b88539b5ca2cab6cbbdbbd0e54c092f00ee13f4a352cb570034cb0a012cc0fbdb6ed32967f3b81d146f352139bd3d9a5c27789468b7d79b84d6a8f6085f859532f7\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3b7983bfaf565c5ca444367654a07b8bc2bf7fdc04ef12128c392bef2f6b67d9475b4d2f0ce1c380913aa98616fbe1d74dc5c9d64df15f5c9b87a8bfbcadf335a6e8f863c7a01ac175a7d79645ababa5f961fad7d1b9926f7284e254fed33765339e0c\n\nQuotient = -11f635baf7b7d613e84dc38978a21ade2f4cd741d0c4f6ae592d93af9\nRemainder = 4317c686dfd56216bc4865f8dcb6a3446e13d8b33861e74d6c4a3223c387ffb8caeea0141049898609ed1abfc2adbd21756cf64a72272aab6c0b8f2177419abcbf9086635dfbea80a7b884181f2f2ec9a402cb0505e8208909fe062d5e6dc7094d66af62\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -d0ea50558197566f22704e66a70328cacd6f4b7ca9b00c16b7c4b4e7dcbd47c9b2526b3858ebb4de7a571ac570872f3b44ba1fec655c0778a8a87ca24851f6072c5c0b7591b5e67a8cdaca78fa46f201e02379fcb9a8470e4a4971acde36cf501d369751\n\nQuotient = -64a078497f85588d3402355bf3e83d25ca1f0ed2c24a395ef6de6b\nRemainder = -87fc31ac66a24ebd629a26209ccac1b2c85e52dc83c5240269ae5a27333f33d31152c9470efd41472af034e8536bbe94b0a49e892b1d23db3c13fd84b7395d7e3f19d7d4cb4a4c07dd1860826696cf7202483446452aed2b4980388e7eda0ccac792d77a33\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 254a85bf512d9159b00a70678239902ee7e15ac2790ce5747c4a4743c6a0851e6a179b64c75acf312dd37a7b82a729246f79196b8a399ff476c48a05f89c29fb106bb06ef0300c4b330a7b2bcd4ea1e82584c7a96b99ec2131c885c5851343cfa6ae4d384e8\n\nQuotient = 116a06b1d38067cef9f55875fee1254c8ce39b42c19fb232a287\nRemainder = -c15a797fed3810e4f536e9509564b2142ffbfc0c961ee5aa923d43a824765c05d2a99fef79bfcb6310c77a91d9bc6d0762bd687493865de270c99989e891fbf6da7ea5c7c7a1032449457eb73222a011bb755ff44e4bdce8e86f8aa9f687840c0832f7fd8ce48\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -d77c14100d19fbaff6334ca6aa504001a1d56f274632dc89d48e1d517935503c26b60c047cab9e186a55b72439761c884f63fdd2a38ca1acc653f6ccbb4b7262e6215e6d00c8829b448b7ac8716fe0bfdbf8088c8c61eee8f8db43b7b5551f6278081ac2eb1c5\n\nQuotient = 6fc9533f6d0e6c55494cb1b319ec47bde8e621aa92d91155e\nRemainder = a1a70f674cb141a896c4adace0dc58cdcbe2503fd0ad36ce348dc5b8afc96d0f2f8c65bbbadabf2920012798b7ccaedbe8d896dd2674082ad3cc75b54c5c190ad56ff34e8cb5dd29c031656497d48571295d6da396d5f4cdb652732d874a79a674d06a1d7b979f5\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 21917f48bb8e65646c618068fd9069c06e22ce8c679a845f9c4ec843849010abeee12e2d3c61fb963297abca30813c446f2ae82e909ca6ac7839fb58974fa65f3b5d91fb8b3f99d948519ed56653d50026d694060208cf48e3c757f64885b4ed4328c6f071e9f5d5\n\nQuotient = -1abc689fd19523d2e295f260d248041bd00ad3009cc7581\nRemainder = 1ab5af1478fe7373d012befb319b53ff9e36899c1749ea763fb74f7d24624e70ee78faf3115c2a423629528f45295e4adec7b122b993b5c29260558be4831df06468bb1c63e8afcfb1b9b533ec6acf754563d2ae25e2adb4cfe5ee3024611e03a156484a130ee01f3c\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -8c5a7b6bc8ed6ac015ec24efff607b0446c1b736dc8b409e2f433e69d0ca015d70c64b4c924175d0e0102ebc3e1dd96dd4d5bb01cccad229e699f9d8f9ad0e04339d70cd113e93d50c10c03083a81264396f5db2d979d272798ed30efa15d52289d0c72f42582ea56f\n\nQuotient = -4aa210fbc0457fa7366a8aa9a3acb3f9fce812303ec9\nRemainder = -737bc4fdd3d5496fc7f936ccf14bfc3d93f5b7caf4718c444db7a3228b41015c67aed304fec7704ea8238ba6cccb1e94cac3bcf4764a44bafb49e5fcb0339ae44c0114cc304b9c4370363657cd2bec09b", + "f962ccb21f6091b081e71d2bff8556600576e18d4f78fc68b12\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 324774e49bb429553c10156e8db122670d6dcaf6ef5291f515c517d7ffaee36ec5ec5ccb4d12dff71ae7a05bdfbb03ebaf4dc6c4e8bfdc165b77cae20153c27d53bf27d92ff25643b4888cb586e773955a1c02ecbf0fa6958a8ec0b832332eab2e449be6e72c48d2f1ad1\n\nQuotient = 1c8631a18d189f1fb689f896005f2dd2098e0dae9e\nRemainder = -1a1ac9612fc3354056a5378de5b315f12591ee71f0fa9d8a6b2ea2b1c4eca9947e5c4f5ed3d4b78e69ef7a1f5a9894b9c7d85f6e2244ae76881eb06584eaa98c78b60b46084b517f4882758691f91d9e2acfd580d5e901dae14ff4a4fd6b0d7c73450e4928fc6f02fb5463\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -838df2a27bbb033fa0e581073b879d6e8747fff38539801a1870f2e52d91bc84cf10f2560e93784650fba080304244dbfe9da679f207b6920be46b0214a1e490537e56d99beef3f58b30f311a12283501ad79a5407ff209d19a6efd0421aa144e0cd427380d89bfae5d1f5c\n\nQuotient = 4213d04b9f0b30026bd355404bee887b22b2cf9\nRemainder = c2bc097d1c20f050e88912f066b658446cacc7a4d510343a8d88ed007a8c0cfd5d44fe5f067a0e81536d121b39f2d0feb8dd053bb5632e3f9c04be5f6bf4091d646860cd38c96271cdba466ef8b7e2377a51d5669117e664269fe3c08a51b10e1e019ac063d670a3c7db12563\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 38ca0c2f03a5c56676a2f95cd7a69d4aa2085343af6b1d2a71e0d1c54157ec0e8f9125df2a499cdd484c04feb23b1e0042ca908db74744584036c79f21c25c40401d551a65afed0ef35f1ea000fa1a99cb29e6307f6ca0304145f7e483d008cf9efb028ebb654115a8c6b87a08\n\nQuotient = -134e043b3b88b31f89ff4bc709cfa1bd2c1a8\nRemainder = 99c1c846cbce5e9a26c5afcc0186bb1e43b2501ab3205d13fdf01dccb9b1a935bc1cf8adf74d58f1c316381577366b6d126da49991a0d5e02acaa678085f335ff8b8e975e5bf2e52a05488ebfc21a3e0d0bc5bbe67442f77bfc3c1f0c03b7f7ce42bd0fedd8a498f018d8cbea47b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -c261a6c562fcdd56e67fbd2b91027f17c95da43175eaca6e4069c16d240ebbd240582dcde953eea739a4668fbfcdc6af8ff3ab58674c95de90fdb43f64a61108b030d644a44b0319b912bb563f61e520dca9c88f411b32e99c872cf00a01f5badad584636352913b7429b99ecfbe\n\nQuotient = -448c4922b7a7d5e1efec2c3f41d0264b76\nRemainder = -2599e928027d10d3a11056eb719768e5edb1a625fc0b8a1dd4439ebd30a82bfdf89e617ac7c71622058cc64ba32dc242d96fe3ecb856f1b146f831334af562cf88139a99410dcb869b9ad6ac4826563b400b59f55d8fff262dc920fe525b12b2fa167ec237028a098c9117cb77bc3f3\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 36be11eb72832f8ae7b6bdf689f794f62cc1c885e64706d14a77a11df9761c2e9cd81d8f6a0ad0cb1696c69afd80c8bb992cda5100cf1162d600515568b9dc9c81a518da9d240888d4984df65c129ac0b4c557b4e63ee5be79a27473ff5bca58e559cb04c4ac93b61545e7351bb6514\n\nQuotient = 152474a1a76700598c18d9301866ec00\nRemainder = -274a2f9e2bc5f9d75f9897b28f840b71bb10a3e4e7a35ee1dc1150be61130b4e0e987e8742c5edb75a1ce3158eb8bdb7d657b8ba39436d7c88fbff160c7488ddff2f13b3b95ffe149a3d0d2d406b1737a7671f69c0e5d7074a151cb2776b2d13ca24bec261662f2967fd22339ed6c3f2b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -b17c79a31d5085b49793b6a6d628109a6047e3b1afc947e5212d0a9ae32b1955cfd6fed07fc60634ad15f32a9e402d7d5f750fb6d1ad958211f9e8ecda8990689e5212cf72b24e9b51bd07a6e0477dd4c02381d0ab6c0ad3cac1f620f723ab004880800736804751349f6bb19d3db48da\n\nQuotient = 5665f53d5a7405c83a5ff382ec376\nRemainder = 252d055186ec896cb3142c9e4e49c441e2ddad365b86ad21ae4ef1c522d3306c2834d6993a5e1f8c64a1ed582bad8ab746f7e773fc004b1c47814f73560db72f7237ef6e2f671d3b19a8777be2e4c662a76db87ea64f32c48ea371b1ffb15df26726854a417e18afcf49054c6d2e0e337e71\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2b6eb2caa3ca650be02fa199e9ea6c48646a76434e268713753a547e49571f9817ad396f2cb7b16d307801fc8892f0af3e7f93ce08f7955a8acfbc0b56add4b4c7ef7351f60e402b9a8ef7fe02ccdcb4b00b7ffe78c7009268dbcf1d606c3a1b5307d9a8ee6121c6a635a742b8bf36b56cc7\n\nQuotient = -eeda035247bb13860f228d8f2c\nRemainder = 3976edf710ab42bf069e5829de7e16962d1b765f6ae6ad0ffabe723e21ab01cb9f3f5f4edb1d8c13cafc0556c0aa93d72dbcff754ae9260abd294647b71785bb049bbb865a26bba22defc458a14af019a796e942e77d03484028aac2b3798fa730ae0193d89728bf80a8728715a0807b3c497b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -fb5e55f261aa96f54983869d58b3e9f0757d363b9c43aca5580b7c0380096f396ec79d1b30037702c19be5889fc6376793cad51975100f33ebf43e0897dfabcb9adf3adf8d845aa7589ba1f6d155b25f73dae3b2f835595ad6050401fd4e6392012d06194af415b810b0c10a53bc56350bfcc4\n\nQuotient = -5b37eb0c3e3f8f8d9ac6f4e4\nRemainder = -28fde388257b9a11441c592580cd38caf2d69e2ba57d43151c77d26535226e05e08a9e6d8ed470d4354e9f46b7626e5f2b22b652a2d78f817bb51598c727a765941fba63510b58fb3dd5f30717f237da43b42d20bc260b06d488c9c912bfcea1e7808544c58960a3e1355c50c889cefe75d4d9937\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 29232a3fb059242cae6e0b419ff13c479048cfe46a9063188706c6a3842674b16a1aeaf771c5b0ef401d2dc8a57f6fb4fe1b3c7bb545c18ae763e39421e6a07c4469d234f9fc737ac21ca67a5553c7ed693eede4325dbd132dbd9889d815c02f426801eff1f46e7a52f72845234acc6c153f34065\n\nQuotient = 1c7ac058af2e7bfbda9484\nRemainder = -54d7aa6dace87e61e24d87053b9d094bd160916b720d7cf4f740a4fc5a7f03909773d0456c530ea0204427146fd44d3ecec51d8627b5768de1494bf42081a8a4fa97163b0b93b59e70e533f3257723e441cafa4aab471ec4086601021c4462e1f74bebf298ef45fec98fa8e6ea97415f84c93c12633\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -83c2cdca7577b32c20e9e20fb498a2bceb7174ea9aca09d4dd2fc7a1d3b922797b4e9640c7eb9dbdb4d93c7fb9daadd680c1c7645d8102d77e9c877a9f65b13239f9a650dceefc1fd41ea9bd2b38a622bbec99cfddbc6e88f377cd51cc29fd17a27f3d0d970403a2aeeac6ff9fd69c3bbc5c2b0fe7e\n\nQuotient = 472df5f4393f33cc382\nRemainder = 16579a289cc776a47611353e158c43dadf0a78833396f8419fcbbe47d90c7e840e2c90e73e563e6c505bfcf691120ab0f1e9ef9c31db608cade70eb8e487b1113a46e2b5c7f4a172ad99b502eacdc0f91c295fe608389e61d030607a94d09d349fe1a0cc46d1e07c8db533cedebcb4a3b89afd8b924993\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 34b7f6780620246f5a0a92a768072185f02e57a52db1d865c21c952f4386ddb7e2dc1df076316cb4f2f394397cbcde1af0197fcf33e6428e6f5d42a9ccf623f7", + "5fae5940873097d4591d9b1a4cbd00074d134272700ab06d901742da695c3ca9d4f917a808113336f883e769fa8051cdcb0cad7cabd1cc\n\nQuotient = -12b4e74d76bd306d9\nRemainder = 8768fbe8ddbf60b548938d8b4a74c4a326ef335257e5f513e65a7d2cfbe9d456425ceb719407bde3cbc74c9c978970597b5663a0ec61962e77eb351adaee2d2d37f1fb55b5d2ceccf282ea3a0d398be1dd1b166d55dce04a39ef434fa392893618003adcfa61401276ce4e599051ad93152e3477ff524f0c\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -c898a753745f0fc178227a7004d917557cf3dcae2e85e95aee51e137b29c895755853ce2d61f214b80070174cad8ebc2795a7d070790acd335b383f9dc88c01227eeab85f1f29d76c1136ffcc7b9fdc073a3a03d8812c7c561b32d8e69754fff64acfd64994b7e9574d2a7cae6bfd5a6fd61dee7ee993bb7\n\nQuotient = -548c97fd02eca7\nRemainder = -939e90e281f97a433eb1c6510668d0fc448f03d737d92693b6362c692167add7e4442105d60ff3db29c03ed06c3121aa4a53c4625906519a4092e4821c918d2264ed0cf088b7da43a222877f3ad9a9fe8ec06fc66b9cfbb44e0fdca1dbe4e461dda9b85231b5b9733e0c78852da83bae557755de3680ab61d4\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2c61dce04200e725ab0ecc5016f66044218391bdf650bc0bd31f3749ac06c24707e79526ee459ccfd4bc22834f8d23f391f2e99135f92b5abd0b04079ab75a263c0e98e46edfb440cd865269ed7872e8c1ada312df1bfd6a5fcd2ebf548d7b7d1d75bc36f62e5e9d15262bb8652a8041e5c8f4d673eecb777d1\n\nQuotient = 14622572f311\nRemainder = -6d197a84d2ed486327790059adb5c073218c56345f48c15caf6892734fff0aa7af4782738bebf24d984bc8adb3056f67e57f9960001a67fa462afd8c57ac9d60ae6517d58ffb4773b637ebe6bf2473a5490511fcdc576a4c40ed03b3afcb2fd27c57b66a26f6d3f9b2bb101502b1117ba3ce7214c9db6302fe20b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -b818674faf69bc92085b7230d9335d7bead0413f2905539a54e8d1233843ef13f07cb5538e0787097cb24f152cf54a92e62ef143e31cfbbaf3c09650b14229a4f61a783eead26430949c88a87f1618788abab9728aa52dd8419f5d568e6a109f278b2afdea91cdedca43e562d4bb8fb7f1b7aef13992fa7edc320\n\nQuotient = 5cdbb03ee\nRemainder = 1cfa68d5da7a600a7ac598b9ca1a0759f972fd9a46ba62e5e96d8f6f00fbccd0ab26ca03d14470b43793411ea9803c9409908625fd74ef8f9b2d7c2064b2e3439adcb684e6f01432a1feb0f492fcdd2b8b5a6cdbd0bf460272218bcf763974be8784e5306c219ee535baf5541b8580952e3690b585fd99f77c46d69f\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2869338cd16322409d3efbd328b27e2ba53cbf71816ff5c093849b1d866b8cdecbd6bd8ffea0b7787251acb760f85c277ded21e56acef05d29bc728cf44f55be87cb4c8913408a01a1ad53461058a1cf94538f05ec14a6d3eba804264df957de7eb1a61b794a1141218966463dd42402c260c229241ec46afdb5a06a\n\nQuotient = -f16da1\nRemainder = d8b66b622b5a54963c2c84aa186bfde5b67a3562e07a23a5f6843bdb615a3c5d4f007ad8b275ad7e4c5b1436252efe35699cff2e0546e6dd8c7230d6ad560c51cd54db6d312be32ae4c708e9047c3a25c211e2566c58d6b9291de31612006d4e847c6916702be99b3f7ce40e1ac842908acb7f03dc120aa8998c60737\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -f8af8fb7002a9d2218dcd0f0c139b8e3dbbd48e25a5c910f6d0b6684bca224f62768b64955580306bac6bfd45b99ad77483563fc7dbe015edc06bee3ff93b0afa8f5866c23c7a7570b366550490c97ad84062c2495cff30717aaa965a8e15e270b504dbd4fa943be4f97a7fd1f3b589bc9fcf4f907a7690d99c978a374\n\nQuotient = -71bc\nRemainder = -13316e9b053a06520526f579718c326402d2a9686d51a340375cb53d7cebba99c8d1ae93388db0a41cf55d5753dd1174014ff3305fcdbd5b02de9e90c45ec0d2900ebf6ef847c2a045eab7f80f07f01c81b9fff093a779a280ae42239df79de8d2ec4bff6723788c86786fe276ae6a4dc1472442b552258e1e5b597305187\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 20fe256859a2e4c4f77db6adef78b2aa4758b29ad0787ce7e277bc68391d5949bb4dd07a9b1a79fe890c8a760871d81adfd3858e27d1bd6de33fd31b8aa6131fef9130a50f995c3be1d615d1bfb9878804b7f6494237d8ad78ac219488f17335ae54b494532f03a3fc8e9576cab6facd90c662658878fec86db66bacda3a7\n\nQuotient = 10\nRemainder = -23e09736f469c83f280052ff01071b1bdb52b7e2b061e8a1a8c6a4e091fcd7ca0b33ade885d928a11a3375599aedfe554d1c2289795daba08f07327a19a8adfc219592bcdf9fc5aee5961a48b3b1b5fc380eff5ed2ba7d7e564462397fb6c6187254ee41c74602b141d7adba99205d2e0b35da57efa96397b3a5d112751cf7b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -e849bc0bfd9560cb90e42c8e4e88df175133c14466e530716d89ad0326b660b0e617b4efe8df6b000f517d3cc24d9dd4cafa2773dafd4c6bace0aba54e43c17e8e3ff9497a97ed83e6408aa0aee0e6485dd1d89d52520d1acf4d587422b0c5cd2d5e7e81fdcf842d6331779e800f96628206e8be020ad4021789008a641f67b\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 22004040a65f9b6f120bb7243c638cf3a4cf6fc58c230da932c79568f68e31af7a7b8569aae77af671f8335ae68d6dc1698baa9d6ba9cd633a662101b45bde51d55098b50fabde8546f317ecc2ae7a39521bc075942e3751a349f51ca3c371f3b8a6cbbea3e11a334d677c07612bcdca767194c07fca78ea8a06cc3b0dc6dcb8ba\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -cad46f410062dc33ad4d712c3b743ae2b7613576b2bd7c346a8479ed679a08e3644c7ee4f23b95f1cc9111905714b170abc37ee1003956f64f0a7e876b38d524fbb2436ed56069479d8d2e4029770f7801a7278fff99b3dc76280f35c7d43ee594073f725554a92eaf4f785c18a7cf6669dce5adb0995233241f3294cfb5bd8f4741\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2fef69f9745646aa13e0c38d77951161a1f881a7ceef032698da3fce00764959f11140bec7d7f53d6777c3622453d4525fb068da48047609d18d463a8fbacde1d21035963b668ca11d5b9ae66db13de7a7a5b66a40608dfb56d9f9f0c8880426641083a05b5ff9e6ba0d6da3a04af1af01dc218e9b4f6ad7b1d3a4d1d26a5c906093b2c\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90", + "ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -c50a24e5ddafb768f64677233c5cf09da1b4f06894bd68e194b23feb5c5d6844320a12a02d13ad012f13b1438eedd6313bac9c1f9bb4548fcd314988d8fe0ce6458306735307afe08a96a0c2bcd9cf126f529e48b7ff4b8266caa28c40b5c3d2a473ab8805c860d27d7ee9c032423148d96fad019490ea019d40679de7a2a3323e80979f9\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3a8682d0e5a4efa985dfa8bbddc2c0d72a4400b8b070a8cf7450aa8f831d8a91c9ae3542641b7a4ad793e232a0d301b82664fe2c7f20bd9bf8275828a2a20027d6056b211638b9b0220fa4252d058bb485dd3c4622b1eac97d54b9634b558ff1bd5bd11085d4f3d288f7965af52beaa922b23ac0207d5763c24c085076128e0ef7370eeaa19d\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -f00fb238bc9383079c7ecad9b9f6efc622d58a76f2d5d40ec7cd7c3c083c459fbcf3d128df4d20ead5f585505515aab11c36584ca622d28e0cf037419a649d598346063a07e29c61b7a8e76d1949dbce3720d45576763aa0d391b39dd6b694c7cc60a1b4f4f107d87130402985695e1847e82cce39b8d0fb5c88bcf3b37d6dbb90baf5a8553c3a\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2b809f6baacecf61198856d9edbb768ca2df2abe9b7b8ce1669fd9259732c8569c0cafde2e32d253094480ed281a8db230f84e780c6e8bbf3657c0b0baaf19ea973fd8daa2870c9d79f3695d78e063f9130fe07ce806a088ca267fd2820f10dac34b5b32aebec20e4362dce26eee0c29d2fedc1e020d452bc2499234d07a2a6e54314e3fd6dd85fe5\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -90ed75629073df816ec1d6dfedd1cdbed9239661e362db706288dc4d774d806bfacfd4b32c3013ec67d8c2af133b46989f12f809fe202d33d5ba53659bd2a9a85d3fa542de4a5c656aacbbf8899aa66ba816b809f2629f37b0444cd3a6dfc99103bcf2a5ee87790b8401be806b5d7fb7064ff0a6fc8ec769d0ccbddbc3d35f7dc4d388d8d28021c95b6\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3f60052c9dfe0bac797a674ca7f11377a24c28a1396ffa0f46acab7909543086aee1995cf51852ea4a21ff4bbf6e7309cba9848a7b2e3b33dbe660bdc58d513d16bc709f1f2253648b46daa7aa037332552db1da81b4ab9850ac4ec66621648fc856a71eee3cedc6617071600ecbc5ac8636233f288ec249b7ae0bac942a5fd539d03990c4fb28a46653aa\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -c12fc156d9345cdfcff94bdd324429530ad8caf8afaaa1a82297eb3a8aecf2ac021384036749e489fae05e8776da0deca7e4325436bc8f383bed579c2d67a456c4e23871489780d760d63d0bc0d1d0ab41f06a091b44f602bcdc0bd4e817202e39ca6a934c0c9405adb5a14d24da895c58a81d1c7ce52734183e00d80a414ddd8869998822364e029b3f42cc\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 205dc6227dbd3adf8ee49dffd43f835882822b1c94f92cf38f5efc62f943075d80b33588973a0e0a8ff5e800ede21d394736ba98d4eedc53a9122f8c262cd09fe9e91cedfd0237003b0124d757797ee13cd03e7a3a257bd8df756940a4d22face9287edca00ca23e7d5e629966ef710b07e54241dbace041aa6d9f82687c3ecba818203adb376ec0b201894a500\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -82c30a9ef6a83d81b77825c71ddc563939b8508f1b7e44c725ae0f61006646ba9b86507ec9a4dfd3755ecd8bfb451c2d43a61599732b8aaeedff7a304ce0a9327e2333f75e9a010556ecbc3abaed02214f25e1c8373bfafc2c288ea36b8d5f848b76295a141d8f633609a6656c07f3d98177f5fa83833476dcd111aad179001f81d6013ca3a54cddcd8dc0ce7eb24\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 33aeafda3cfc20710f0b4a3d9ace4817eed80ca57ce6c82dc2e7946058a40983c9204ac95a1399fa633bc96cb10af3ddeee3ad2337c64391a42dc7794fca629e3e1e4e03a2ae24a000e7113b91c1b6230cce9592e45b6ee7984680b45aa0aabd7f56cab1a64ec310cefe5211821a75deef2e0c8e43eb467dea79dc8c03d2d523734498d079d5493", + "c904a2ebfd8a3a9bd\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -b897bc87a40211ef8f93645b1f6c981fa00ab3b12e117a89375400ab5f4c64bfbba01d265c7bc6f5e3a8e26de5de9df3b8f70f4a39c0eba577db5e4b7a68f751b4a69ff4a38915983cbf70dd7e066779405d572f5bbe0719c978b6865ea1a72d90d3ec8a8c146f20d98595036b3de88a7500d7b476644913e4b63e85c4e2632048e9600d553e560759770a902cca680b17\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 20604e080549e1c503049ebf4a56cf9447d90fe699a9773915b0a65588890e15bd58f55ad7b52bd7b7992a8b24704f1dfd5fd07c70aae4ccba5646405ff8a9cbf542dc334cc0c27a790c05420b552539fbf0a155861bec0e4d9e3fbf045720ea3aed58307d5738b64252a963f3fd5ecd0587cb4d7e159b4980dcb112e26c9c34f10a192e090ade157eac1d7a6f970871eaa69\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -f11fc9682601cab97c25533b2599f50edb1ac65d46f1969bd9c3cb3717461627621c8cd401a0a0b91f3645b8804e095aecab31c1bab0c26df556adafdd7e7f4f0510e0bceefa3619e26b8c9a1bc613db03857f53e9eb5d4b8f75a8cd1429feb81edc705e5a779d5f95373d2243368ce17ef22da79a6a2672496bdf629171b7973fc4659c8eae9ae867cf38d6d7617029bf59d2e\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3cb0ffbd9ad21d0e86e4e4dab4d237e2a17d97356bdd305fda772fdd99acefcfb8309d813643c852f66e1c6c7fa41ffd44f8335ef7333b2b3e846139fa9be2c4ea762afba4e11263c0b5fab18c5efff2a18d83ee89844f5f4db2c1325f0f55e066a9e01030c07a85e2c9bbd37b5e767ebcc9b95f474ecff24df9ae52a19edeb66546a3a28980f616eb5a351cd399e5f8436f17faf6\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -b8aaffe779855c6ae51807f8cba780aa64bc22e8fa5e33f7f1dcb084fc476791565bc33eb37b4f791ef5cf46d64576f48b5fadc9f096f20c798355861ce5d24a7be1450bb871f9821099f98213d74a5e5cf83b895ae65e0e0fd096698463906a112e6e169a1cc0769df7a5ba6812300fdd33611761b6339385e1a70f8f8b2be7679ca216f5b183140e69586a27aaa9f2fac118118875\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2b7ee3ee34347dd89ba4a81415aa1269d0390346597b07444f0febb71d490a01b6fee174634bd88e8aa180409549b2726d044b4690353de2fb2294c8f69c612485aa066f68fdb89466760a85901cbc7312bfe5a6f656e67dfd2d4ee099ff97694b01d6d5b8626ab1650eac5267be53f5f3ced5dda1aa86bf42ae132a28fddb94902a515da40e0fd0586dc8b17a34af8eb03d06f70ab89df\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -bf8213944ba785e01b8d37a12de77b2ce1492f34bf6f67406cb51da89675b4f70f4d4f314f30ca8d65cbc48ee2fa1f0a3e4ac0de3a87d2c4c589b6812e850623d78ef2e46fbb555f6d3c69b211892c11a4a2dc3d8a9a19e96a07952602ed5ffc0232c140c3e828acf990e5425d8dd9ce0c1107ad1c6f96c8fbc90ffa457abab0d843094dca3c8a45ddad81b7850190625613a4851485f38fd\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3083421e375f0722b9397e156de47f77635d62ba1d51794469371b473b71c02e3722841bca2ca06b5d1cf1492bbacfa0abfe394dfdaa7bb8787550ddbd953540e9c97631d9a1efe0c8f8e14f395c82d20245cec6d8021f8564b4d66e7779c3245734c56fb74481172f4e349d9a113cd0ee5263c69ebf746c5285cd4c0fa91d9531f769fea3610c2972ccfe9a22c00aa62ebf52b3a4c6135f3069\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -d736bce537f47ae4797faad797af8cfeaf8a4fd42df1f7e61febf8ebf6e47dabc48252ff7948f3dbf8cc369b6952dc58f64cf09b4c53447d135c7a753c21b6052a9726a47a61e13628edf0f2bdb357f2e780ac1ae1f28f211296c8961c2955b773d7dc2904dfea96780b2877af133c9591a0dd54cb20884f014f363862478ee7ec45236bfdcf0321af0692e68f744af28fbcca827ebdc7b210da38\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba4", + "66381056a3b92c35d9b8b71372b\nB = 2cf1708f1e675ba688c0d19eb61a05d2c8642528ea6b1512375faa732acc59ec04ea0aa55e0049144be09eae1292b6cba6db7a9823f1e912df6a5032bb9674f4f26c0c8244ea0dde7acfda566574956cdc33e4a27bcdea25fe255c19f218cc4316ae8428ea61d1bf865197a066b959c5fcbd7c9596207997d05fc38e32322aa189ea06cf5139522571661745c0d72b740dc6d842f1dd8481e318b5792\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -a9180e44a284b5bbe72fff46e55869f749b626ac33c8cb17be1fc260d7c6f460f24a89e1367112e00d0da4d213a821d09f103f35bc4eade5605bef23c5d048b1cfb45dace8b9c637af626a85fc773cf51e6602a7a5999a030030cf114ed6a4ed7583465b9303a72e7f60824c12329517c6763b0f64abd8ba2b9b26cebe882a51f05ef8076e527d53a213db910a5f42be5fb78729a3dcd08d69a709920a2\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2f26e156b3b1117f7cec542b20fcc06ca66cec03a19b6f5eeebf22b4c0fc265df5ff06fc9dcac569735135bdc142b526b295225711efb71577b10aacda2fa446f5208487c725407c2188b3185237740c813e4455a6f1dde4f62916237f23164a3471aac0fcfe24ad1ce1dd81a6144f5861ad0cf22dc337abe10fc4a88b36116dc4929602ab48eb971fdd7a5ff747d6b9e0b2bff75c59621550991966a0a19f\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -9fe18ae697576dd36ebdb621d14cac1cfdfd1f5cbb7cfa8962c5a7dace96f9f54fb4f4cf2e650dbec5d1ba89ba53d251ecef7dcc1cab8c2ff3d77903f5fb5f29a4e8e3a2a3c05c105d5733b5132f2f8d88f99d17de86ca1191c32ad8ed469bb649ef188306f69f183bd0fcc32759e4f855170f88c0a3f6745aa98f6225536821bfa056a42b37535a622f42b009859c974cabf2e14f75c749d0fe5a01fb3ab0c0\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 33ab185854b20a8126884eed85181b14e75d4ee452958cc1043b099bc16c24b9c2f3e0b792744f230013907844496e600389800e45fd55133fff0cf19c9c152b9d031039eb90da568f9c5212a3ba283f4d1353ff8ff9dd04d292c265bdcb77c3e411716f471930bccbb8ddb819ebb0e0036dc1a18457cd97f4f5909a725baabbd15e8ce33875895aa8dce77a4dbedeb0271a2a4a17f77f5920c3776caa4a75ac650\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -e7ca0c037bf8bad5f8d9c5a2737e044d9f7284c616156d142612a53eb217f57f4aa00b6daa424e6c0d9163939e1ad0510a1cd64fbd576f3e54c59d7aa6228fb3caaba7cdcc951e00ed141ac3a68abb9780bf46bf544fe0e347f677288e962fb69782741df49b27cbbe8720c6f8f2e769147d89df6e17e3c592bede2e696d384b9f01b99b31c505d67eb6193a8844f8c4cdadc9fe45dd446a0dc572c9da6e58ed303f2\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 22b76d6973e37aff4a09216e57662f186c0a0748c4375d6bed370ea61d1f6fac2d9bbe04487a629118b6b0b0c8cc4179fff7bedcf048cc529498bbd9cc81ef3a103d6cac49d58bc41c83f961b6df7f00c7171fb7d9359e03c76e4364cffae5f67321ce646e9b05f9c04aa16ea65389e940022eda6dc740ddc070bfc7e589b86fd1559dc320701c39de20d54d0483fdeef6c4fd012850630b982c2e243ac1ff918377ceb4\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -e6e4d69a82b83e26ef8ac0f4c3a211153ea6655b7ca12840e7b866510d114693049c5b8b22c3a097eac832bbd1986e60564298e54dba3316807ad64bd6c18903a0f22660c9e8d5dac180f57cbb90b176b842d5b58d6dd9f47499a037833a92a18f397238a8bcdc4afd129382fd6d200d3d267ca1e6bcc2cc65950831cb8e30bcc01665c8149b874c9f11168153c187341afdc43e4d8652ce4fbed9f9eac75db40d64344ade\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 319a81f052db21ee213c536db2cb8a71e0dcd0a9b2ce780a9588c38b717c5e487a337f82b5223f638fb552e92b826192e6a1c27771d1e86584bc6c7cbc5d9a6ce6edf2ea2ccf6939485959ccbf3183b40e410768c4665adf90a0ae2792fb4b5d8aaa06c6294e31893620decc3bc72fb4eb68f1e56b48e39c59abe869d07509b7564268d0b7f178ef09ef5dcde6e7dbd2a20fd1d4fcd707943dd63adf590a117ead1ad10ff85cb\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -eced809145e696ceaa0ee8f831eca67049509b31a1b15e7fc86cdd97a73a2ca05bfea5f4b283d287e49906463ef36f2f8ea23c2aa12d5534c08e9769055e04822be0f8ac85f404f5c025a6833b4115f78da9470451c852ba0f24062397d20385f58c5aca10f3f09072b2592e5672ffb989a390abf86cbce74268aef1f4ffde730b3b962df1088bf8745105a7462379ce142f819c253", + "8d9bba99e094ffbc4478625bc54df16c5e1a\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2c1ffbbb30e71d5fa77b5473392f95297b489c85f83013262abbe948842473154e00c86b2e354278844083f960fd746a3b7cb9baecb9c66932774b3a28f678d50dd8fe52fbeead43d8c8adad7c0fcdbe5e02664b0feb0ce214c5fa007c5fa2d08c5fe96787b95639311cc4b7eb2a7217c9c38c6d93444fa60c1f52ddae9bb2ec1a49a593e210e47377d3623cd2c4994ad9343863443911062e12233176f4a65ec715b3c9731c4a0cec\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -c3bf056b905c0392a7b5fa57446ed350f325eb67d59f1784c744b04c7f4d8f5397db913407aa8a7f1dd0225c1a9673828db0d8bf3d4908ef53307131bf5b5c4c6068ad73b874aab98e8db33b0a758532172acd8b2c830d0679a8226537090166317b8eea91e8ee4a7282c0ab0ab6f2b7b63d728d22b534fdc88294c376a8d036ba9a644c2489bcc84f6aec83afbac08067a7b93f3897f8dadfb68c327b751841927a728faba47dc44ec4\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 23fcf9510caa531a304eee8d0b2d49050fca83abbf287b6b6dea06501c5afc6d87d2924df1d45b1bf6c4bf77b563a3013cfb4ad9094f8ee9892d33f6ee1c70131cd5721c5af804a9da7654510e8591aa185ee723f8caa78046d9e6fbb891e6024d2ec70110ae61c3969995e35941d2c7f3779d5bb71ce5b693bc9ce4b087068adbb554acc4ab23624e060f7cea169ab512a06ff3d2a36c2b6e3bd9a75f1a9ad30a6a16b0256c42eaff2c3f4\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -c32d5e643b12db6616554116299c1da672efff1eee394378c5e9e5f702ea4ad64f0dac8904bd2751d2cef91adcb283599f6c661967dbab27059e94dd50025489cf74c6897a22e95013669aa3063fcdd4b73aa6a9a1ba5cad3956bb26346e22df6741cd0ba1c0ab87fbe74035618a394383823216df47b910cae495b8fe7ac5feb3b2cf0d0ef6c75db477160b75324db8eeac48a0fce72b9abbd7079ce6f529a89025a03a3777cc7d1deaf3e4a\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2a8f2c530342bb6ce683a760540e956a1155c0fe065476e400caec59861ca97ca71e51a11b3213b2baea1a41a29449998778e0f533fcc181698d293f05e28bff2750ef4095170de98a19a36ddcf59a65f3789a3808ead51680245070262c9544e446f23652eba47065a2bc4701c55378bd49733619ed2c213f8ed12a4a317c465f37efe07ff2df8e88fc33d3eb42cde9408dda28215702bfa607030839285a8bbf89b5e8842fa7d7f50d83fd4ab5\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -bcd2b2362aa146cd120b729e81c98ae598804006d046a7ed0f9782baa10a85e37c7c22288dc61c24830a1b42b123d63779e88d7555028292fed5ada1793264b35e961b608bdd7398e421c5474c33a65059ef13787e0cedf4f8f032beac48c4b5e5a67417109142a43b198ab617d1de1a38d6fb4922c6ef70a5aad3faf6f8d5da3af9679c94cf61ee760ba792d2972376425e2ec9c4109e969e3d9c3dd90cdbaeaeb7382cb7bd024b75a1fd6d621c13\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 3940430ace4b5b87bf4baa2673582db3d27307ca4cd8e55e976ea3e10da72b6deb7de932253bc9228c85cd4ae7766cd0264004c658a66d81e60bb9bf4dd66e2afe11057b7f7b53a1ec222510748be53a93970fb056e8082631b2b77413fccb6e61cdc6f224b7903d75345afed8a4f194b4bcedfee1f16dc256c2bb9f4a129fab6a9fe752895a93937a3d087ab7ca212991ff34f1bf1c55987a574674af43986312bbc3bad3280bbddf4ab0217440f851b\n\nQuotient = 0\nRemainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -f0dc20b88450f45381791e85d080e4f2cf38837391e16e608b8cb5e0ac0ca75e9f72cc04bf2f56f130d46aff31efbabc0ab14f0c0ad680d6899797297152be85ac012644c8d0927b5b6c70dc3e5a8d79ef92a0873ec22af3d9683bb5db1ffd5ebfb698c5ea64cbe2b6a8b9f14d4c18624be1b78b19eca14942ae9542012692cd0d5289ebf75fcf5486596f92659143e9f952af3622137e633376fb95e628055e0fb1ba3a37ccdf0af69a4c0d6b0793078e0\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = 2f2135850715f623909e41a745eaf7b37593567fa8be2d1ccf76d10b93a096e244b91d8700cca37a2ec1bff7c3d21cc3211ea8b03a3594921dec32faa185e7f3d9d17e98cbf8d881fd2abb944181659242ede21df7e5e8784f541cad678df1ef6ca4a5fa91f7856c62fe593c4d24436810cf4fbd11125bcb571f6975d82afeb81bd0c7700e053fc175fb5fc7b329c438479a863b8d5fbe6b4436b67355c51d0306e8847a27a30c9e61f0e08232673cdf0ba4e0\n\nQuotient = 0\nRemainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4e", + "fb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nA = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b\nB = -cf429f101a2e19a65af1e238f6745215cf476ff2609c846f10289f1ef21b89af2aec53def3f4ec07ea42041f8b5862dc37fd03b2df12adaa8c9f1933cc69b526d47797b40f49545fd093b8ceddee3c55721d1fa19b336218de0cac56d410cc6cff4e620578cf820f5cdaadc367dc4d6372aab1e0ae3831a6d153c14920b1dcf09e7629b7442a06385420d79742e409677e3b82ec58bcbfa668ca072e981e20728a983d84a432605389c855a6668e0ee0d2b67449\n\n\n# ModMul tests.\n#\n# These test vectors satisfy A * B = ModMul (mod M) and 0 <= ModMul < M.\n\nModMul = ae2ca2ce7addaee2e2b7752e286b2bb6a58b51cfbed5c924f00398e59ec36fe6341cd83da43a33a12410f45f6228079c4aeb3912be87e2e81fa1799151bfa0fea29873097475b2c3efa312145d0bf7e51b2a7c9bc961a4f4dcf0c883ff90b919b87c21099fba40257645be31f95a3a277\nA = 6b18497fed9befdf22a01d988d34213f6687d8a96e86c188dea4172e7c6095a0d18d3c86c0f5a1af9c6e3aaeb6baac2a510930b3ed06ec78ec2e12b\nB = 1a058d99397db0d209f01212dd4023ae01b15da04fe62d1f76f21622b2695558c67d706c535ca7f19b36f8ef2d508ffd6cf6fcf25e5\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = c462c7cdd79b7604246a0cd97b40ea5a9a77408f13cbb548b56ee713c690dac0507fd988bf28e77462832f4307b08564a51510d4a951c1ad7564316dbead2b53540090827a8ade8092a6133af0e5fac7310f787dc1472836178ed6992b9f71224da3e884bef8e8379a58e6d4be0fbaf59bc520f786631857213305e23fd5ca65\nA = 16c92f77c139706430f396f72ec7adb045745cd9f5899b0074d9955bd32de66f57c05c7929b575312a7f1c04f19e724d64744bff7b31ad0e6171437763\nB = -8734c4a2361fc530f60b28a5f1c7e93136c5ff6bfc7553965eaca54c61e6befb3c0f8cef4280e780cc5940d21a740debba31f863ded75\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = c462c7cdd79b76042469eb41a7a83115eb84103da4ba438c3e33227631dc185054ba4e607141d1e60990d8aad4e0bb0ceb645ce9ccdfe72d4738cbe1f6a73ed3e070194fa4feca6001c4a853940a227d15c1f1cc153d8c96e90e24805929fb11e0665e0c41c77d5a97fc5903a8b215360e26f6a19922d650f460f7056274ee92\nA = -6715098ab2ba3ea1e6341e89936e3ae913cdd450dc831c8534071f3c362841e47d88f2cd29c0d1239aa0949f3685f12f8519625bbf10b2c7a515e6d00942\nB = 536d4b3e4815ae5ed55bae6950f5a8a61d52439d2800ef1b5ba2285b85ed0f6ec4af9fa0e364a6b14f6f6b8bebce9200467804e787f9f3e9\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 309b3e30f74c58beca8b2c23f64fe1203830db8a7e306e1fa2e2022f0d6d422851da509d1b2936f088f0e35effe12a7463f47ca369bee2f2980bc48dd8e696b2d8c6f35cf55fb8baafc2e613b4c684de26129cf196741aab873f81e498b1e03018a539b5eadffeb5953029f31f8579df7ec0ff3f752491910\nA = -11fec955948e007b59fc50e729941ee9d43d552b9411510b73f6b4faafc0465f261f8381d96f647267f72175883172918b5c866cf1f1ffc43c55f3c96a60c01\nB = -2b3792f39499767e0a8b7a6a406e470a78f97ebb36765beab5fe52e95abf7582736db72a2ebfdb2405e3954c968b350a459ff84ef815dbc5910\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 9143ec3e9f74a8eec476cab17ad8636eaa7c60e108e89ae0702dbdb2b255a217ba2530c6fd52658cd931b962054a9c20c8713976ef3b7989c40611cd25b0a9ad0635d61f6dc95dba6e0c4a7d53ff539b623b97ba3d66344fa324f905abb861c6b1e830c4b0fd5f6a4b01f09c8e1408941291b2285c4625267a108c\nA = 7713413d87f1e50840255927ff27bad79e5de5898725a876e4647913158cda9f5fa031dd7fc11d2e8130a0ba99e8706341c1a98d5fee3218763ceb1d131e9cdcc\nB = 1384e60753dd4bc20cdabf398525e7c4aa40065255c5058cae0b2ec90a3821bea8de672a712431aef5864eab719ba621cbbd8b46fe86fb31286091\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = c462b3b4a0432890d141c0f46a28190a2e30ebb2e4ba90ed132169cd72316b290dbf5c261984d98e63eea6525fa890bf52185ad7f164cf49f67ca91c2f35511f3bef6eb7f3da31a602a78e4752e326d79dea729f4ca6438f2aa65eff44bc60979b42e44f6a301cb5de8fb42abb47bce5633c6ae9479d39c9e8b507d96161e0fc\nA = 17d806d7c76aa8acb051fd9c0c782443f1b1b6387455f7cfb737c41658d0459bda5d13587055eafb87ad8d209bccac1fdc392aeca0774ea48799511c1fb9141cad2f\nB = -d7c9b6574354e131de4b8643d766641e98554a03238ebfce1112c3da5f049d6c410a7f05758571aa2625f7190b936a214797570539317b32fb94cfd8\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 16c84ed15ec6352a8ce6d5c2bdc0d9f13b333072fc7041146e944a29391f83e346b8ac0bee6dde98a420ba4f8852801d7c5bea6f1177a6cbf799edf2146f8297013e0e796917cc967786788ff12d9c1d07d9ce4b897bd22a1b8a391d3b4ecaa5b5c85d0a03aea5145db6350c42a964a41ee5f83e7d35e14cf442e5d99ccd0ac8\nA = -6d84cdf18a2f53fe496248fafef183914d55c42267af3dd42a39515e80cf29211fd58454986f5fb6afb56170dd9865d3158249090270bb9af341c830522a4dcabfd494\nB = 6f6f3f74187b7d74dee92f79be864d0a2c56d4bca3283742e9cdf15112c8f4208e3ac8ecc98b44b4ad74b0671afa4aa9e48dc31d34224a1f66bb2b4658a\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 8fb782e4883ccf3aaa2d3e020b08993d580c69ec8fe66ecac152c5babc8aeffafe406736cea492450fe6adc25dfa2e12723a3f9baeb02fc0f785b3db760ed28048e1710a78a2ae0c96b67c109c5034375a512b6fc7906847253f66316baa0ef90facc9ab992235153684d49d6939ab9e91086529494d7386f604ed69aca2f53\nA = -1f745c8f0c8fe6ce3f893d77fb274c61b72b2d9f9c5a2eb2467bc00d1f496d0ad469d76bce318bd64ff1107ee5fcad4469f84d658586a5789c068b0cb9b866d8fdcbcac5f\nB = -3a2347b491813252e8ebef1bd181534b074a368d076b8c80bde2e54ec3b4ec99001f43080c7857427e069d99b1b65cff998a141ca6963aa5fad1ee632986ad\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 7c0c1c05ae1d6420bd93596a01aa0153000ecce660a8a14d6fde7d4740719cc495fe6681a9a08163b2dfd51659b3ae7db0fbe09504370bfc695457d7b32665a4df53e879ac817bf715d5bd6ca0e242b1ebacb1ffd6698ec90c442910a92b35ec103b345f9a9e5c7b005f8028da4dde80f36f6f6e5675040d19e46aef06040eb3\nA = 4c09264420a9452c6f0b55baee42c076aae5a73697cc6bbb88b7c922f236ee4c18e477f88e2c40cee03f0bbe87d3ac8dffd75f635315f856a3881c6373e8b9a286c813325d3\nB = 10474ece7ddae5c53c4df5b594439124370932dd94aa5d5b4ddaa233b1a55634fb7d72e33bf1b02965fa9d1538f97e1cdb5ec0477cec8ebaf202aff8533211169\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 481543f1556df756ae2e422ffe35aae020c9bde9e9b1f760b43043a4654de363dc67f381c0df1c3c1b90edb4343c47ffb8345a1aaf5dae56f446fee08a0b9ee8c42fff57143e10846610a9925be96418c4c957b4e92af734b96fd6f21974877dba52a0db1fec4aa97640e357434f95ba74b6b8323cbe", + "17118dc489552844602c\nA = 11bccd165d9fa2d8b01a48c0ec549a6e600396cd2023f0240056193ad27e971c604eda8aaed6ff6be8be1001f3dbdc8655f1ae84eceb963938ae7bf428eb5c968f584798c1bd8b\nB = -cfb6629ddfc98a242e3290959f4d0726c0b1770b52393bc7488a471a90f7f0951362c03e67f443c9ecf4987f5303a789bf65e0fd59cc5eeb9f5d4f40d3e4a14080c\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 2a770ccfbcb2bad207d0e2dfaeed04b6e7509daef00a1df88e57509451739a8a0f15106ce8b53d280a4b4e09900420714cb6961ebb0e00e88567c5df50d2f2908b4bf8e0a9a5a8b3c6120503c14f16a99297459543c467dcb67915e0a10e19f72ed5b6891a6121b66abaa602818801d3306630bb04ea57e6b31b2c05e368d398\nA = -442c80289bfbf00db06eafbf06109b55f99786a323fc2c6db5686f99094cc24aef50475841243ec3ade2a1e0ff28b4032fd8afb8bb5e28f3b2863bdb9fc8f033adbaeb5f2ab16fe9\nB = 6d43e3c46f4a55d49e78f40d34033a7f5fcbe50873930e7c5452b6b3b176534e6e70033868c85b4d63052964093214dfd0bda6a84e893b1aae3cc72aa83d039e51c014\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = ba0e8c91a86af1001b13deb115c77609a1e7a3736a6b807255aee898e3100f469ef6222be532dedb1b8d3db4b3b55aa4b5da5629c83e9b2bde76bf2f2a4119a5378b5cde000980b3e58595d988ff776f0388fe025625ccf368e20914fa90dc771c826e4a836b2890e82ac2274471d586b4de5dab3278f0e70207562ac6e6493b\nA = -14be403d28c8451cac4dc83fbf895a9d2b74f730c39b0fcb33d7258f99211dde31a78f182ad1d27a559031d67d6f2f94a741f141bab80fc692afb452ee2d502099ebd5760ccec7f7ebf\nB = -2742dfd02134594edc6d3025aba5ca4a34dfeb43821ad84164510b43be4fb95748f8d0eed7bbcbeca14efe843fb676882784bb36c889be29bdad9270e0956286552119561\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 20c691d6544912fadfd9894cbfd42745991f39a29cbe3a1cdd302bd0487bf70c0179b9579b77f8481bee13ddbe42f32d734b6118af92884c946ea8576f6dec867c1c251c73777cad7c7c76e90da00ae07f96c8d6a751e5b18157dac4468c05d32eb86e74e0e8312bef85905af8193a3f5c799c5875badbc9eb7ead1258e56d7c\nA = 7ae9b4d5151b11bb7bd4d1569a6f4804f3b4d77948e0c6300e4f28d51c9a0afed2ae7503e53489edca5359e2b3d0c82a9cef316cd7e1c1275c31fc9c51a8c1e5fdf23935484e467d6460d\nB = 1f46f88d39fbedffa8501fa1268bdf3460aa98e12b629da59676e61852a4d3f8c59f72a2fd717fe2faa09639bc651ba516cd39297e0cac67444ec57c0db47c2a4e250033d02c\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = bf21b3cd55c0df8d4d568d00f757b10ef3de782ae71b289cb2b59d36df1341382bdc1825ba13199f2cf279a72968b3bbf5f7e3d13ea9adeb96d81132788231fd988eef04828119dcca21ec1fe844998909cc95a8d01720e883df27f07ef4dc3f09081015dbbdf019b96707c18b0b1db6e689e8f86466a2afea4a9cafc576e10c\nA = 1243b14aa3d16a55935f6f8ca49295e35e7f75b03de7192e1e8a479abc0a430e0d340acc05eb9a61a5dcbfe3ce3a4c5c940699f5043e924f282bd21e341edf8b7a6741c6ac72d7587a9e7a60\nB = -bcf08b2153e8ca911096189e35dbdb21b77ce89685484f574c89f1747612f39340bf1b204a23530abb36b2c5e195940b86ef1252d6729393c25d4c73dd434b6dbc3057b05d3f15\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 460539d96c07e72acba5b59c88fe904bf7f1e1648612908444b0b08172d05968b31b43456918b4287dbe01afc3cb4860d9c2fe549a580c989b6507094f6c241eadff910d2603f747f8e289e7a8176ca4a978bba89288a4cf875bf3e03939af966c54e77c28119a39d34a2b7055465f58ef2efe7c82ac547fb675653198e4b504\nA = -5a44cb669c055ba7c28d49f84bf8d12179aa30bbb9db2a48d7a6b09e44dc0e0f7471e3629cd2fb51e5a53346ae025fb49f9591ed1d71bc79daeb3f1254342d8a2b091ae07a758c1555efe59e78\nB = 646cc0f766346aaecbc5147a4488ce157a6d844045b80884eaee9d419087285fa71108b5ab4a05689aacc8d2e3dd0e6714c55eb8f77487a3fc5e56c3c2df0c4acf28a457051118560\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 79b536f4f30f9f7483f90e65e6456ef8072d9a7430405cf8c9377ceea2c676afc338837643436d55ac6af2326ebb362684bccc5092367209822581700d641cb8d331432b761e4c6e22639a27335f45a25ec019d180fc53dfb53d69216d7cfaeaa07db8288adc35b7bbccf2829631c1eebb821e4d3299015c3d462dc17aee5024\nA = -167529b1e8668938ec02a68bf4d76c22dd018c41e19be25e2f821f63c2046085d0af30d8b4212ea0f3f9943be1c14fb2d2a944551107cd2bbf8dda5bf258957325f06277036282977db4575b0deaa\nB = -378e1be10a57e03b197bc2b1287d643ba6d89da4bf6a6170816691fb6529c602eced237863ee39659be3729825f032a57eb5de0a87b0894d1a1244523e85b6f50a3d9976dbb038490e46\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 658169197ddd0bfae101c10c3e6a2b10dbb456048e81160b47b197fef439b1e0ed710399cfc80ead8e436f1c0399064f92da50afc335847515686e055fc7bcc0ca721184435955b896b0af4f4d96672ebed2f154538d49fa507b945c0a6ae926793751231980274213c80046666c28ada213a2f87509d1466b8d1b2122e93f8\nA = 49136d37ae8f3da71a6114327833e8aaf3dc8b5a9a27e9d04c953988456e525263f86ba94397321c2093803b789f8db3ed7cdba19c4b796500b979e02952e1625246f8e977e01fccc133f94cb22832c\nB = 1dca005663385fc00b4fd58c73adc7589d15ddbcb8cb2fba03a737a320c447a2b21e576ceda73811a31d8277883fd31e22f776bff3261a098ecf8f40f2855b0c723d1265eeafb43f85323e3\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = a49fc8084f3e780537b4038bb769b8db3653a3315298a99c2ede6739a1732a636e9787f2e8b09d0b9bea08fac43cccca71a315e6f4a7d6417d171b4693dbdbee8cd9f95be0847ffd40ff027267125d67b89737e1d0365bef6c4429504d13cd8ddc7810f456d6293c0c57c14a307b94010d79d5c13b92a907f923966fd3c5c8ea\nA = 1e7d8de2061cca59d1cc19b356a8fcdf2ccf917e0d81598f014167c5a8de027ccfc8f2cb8c37c396ebaac83ba862c146bb2d551d10ce03de9528f97725804e8a6de57b9d9da811200604c2a032462b6ac1\nB = -e38592f3acd75b575f64ced439d5ef2377d21c61bc70625639b01bf755fa2c6de803ce155744993493debcd4de40860bbfcee86d0b117d7f8c3f8ace68b67cb6fe7a81a145535553896424f7a\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 5a99c8a6afaa97d8e7d84f4899803c7786b1bfd2ecabdbfbb3bbb92247ff91ac213a72f6d23c24699d60babe91a7d9cea751e686c027fa1c954474fa5680f0059118426c71299462b11de5f2817d190599cc4b352df4d2e80605f9ad1e32eb13712d3027a2b6a19d52151e37e7fa057d8fe59dfc8a943a42a1756a38f103a75c\nA = -7df29221e6a102e32757c18f87927cdc90ecb012ab0557e0ab855daba832d76ddf595b9c5a62988ca968b64fd5bba2a147a5991810c17cae7edfde38bdbb7e13a1fe5206724c05a9fc9276c8d4e503a860c7\nB = 5c586d1aff7dafea3b8ee42e0e8854712c95385374b5bd1fc8ec41a72b296e070940c4160509a4a1699a678533ff3d12299338fc441b0f01e29a48677bfc5aebc644555285756e97c74e1af6aaa8\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 21fd2d881b6a52332dceea42664aeae1ca110512c13bb33e25ba4ec0f39f80eb73b1fa08", + "34c998c23a2453dbff971eadb183c51a30ba78d593f23be9cb6b2b33a554ef31e4a36e0314fc2ec889f18debb956b89d1bf8172553271bd56d89ed0b30abb70e68abaa2c76f73cd5a3de93433747d09c845b5f8843f9fdf9f6c975c8\nA = -19fe3bdddcf08190a037768b77666de803ca4f7f0d7dbe6aaaf334a486dd0da7ca024d1b3df11e0406b0326595a171be30b04574c1a7d04f4d2ccd334663690fd20e4fd168386280510a00a70c1a11e99483048\nB = -33b2400173c057980b0e0cfabbda1a5cb5b83b7ae80708c199f28142237f04b071c6eeb63d42e80eec04b76152250c9e4d4c4f19a048cb9815dce6e66710fad1d27494db5c31d9af37d2aa779d12d7f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 1c45cfacf30682a876cfe253f05b393a2cd4dc065ce73126508ce897a99a723cf5145187643ee62d746f6edf70269ddce3c348a1432316286a648ee9ac31ef87feb14f25c42f2dfc2e84bb5bdb4ec0124e249c526c55ff2cd0ae938555c5f86d856eb181572ed01dc045f1ababa52d249e56aba0ecccda905d7d1e64bf89bfe8\nA = 6a40d948eac2fe5bf6db15d7f6b89fdc0712e32d39a881c21859e8f7722391ce05973efc7c40e2c0d7f56c217d8a986bfdb08bf87bc0435873cfe4d01967c46f7d39464bec411d0369f6f5d1d83f42596fa47451d\nB = 12529775e8253ba220d890d4912fb95f91e4edb59610e889431208b6bb42b089cf2aaa12ff9ff98c2482e7f4cbf35b22d15fa28aa288217bf766e937a706fe1e600143087b0a67f668cb7b762c9b9f38c0\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 3b3b08e8eda8be3918bf648227eb0d569dd898729d9cd54deb32b1a1dc69cf7b2c4184c8ae9641f0f75950df263a5e236f428ca86244e617b14a04edd0f31c02bd4d84f25bacfcd4a2786825f0361251475eb6c7e99020dfee4298a1f1bc260d4e364a332bc6f651dde7ce5026dbeb0e5aa75ee98874da54c7930108ad28e3a0\nA = 149d36918fffa682cf90c4d3f3d48e6408e7ddcbeb44e78b9cc7fbb08108f65215761a61d79f37ec8f67cc51e0a9b4bcb3834b0ebcf6734985153f29a2778473b80147eddc813b4fbeb98843f5c1ae6cea68f88dbb4c\nB = -ca87f66182e271a69c0964eda92a009d438078b584c3eede28ce1a501838c5f497186d305c09922f32ba858fb55f2a0dbfc9cd0f93b789c1f800cf092726d6d33db19e4f26c7dfca69b83925db14544ebfe2\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = b199655160d88b6b4157ada0e5675f82b33b5592408bb57c46e2f7d8791bfccaa51436dc3b772b83e907c20ce7edc2835ce96595b78c0647d244e9bad6f4184e0003eb0899e7a47ba0be888b9bf795eba95e5073a85c4d20416fcd4a8d4e1e16b403deb38845fb8bf9e9264d68807acf02d579e8cd104cf2bd555e6cf73d0450\nA = -70ccbb73e33a7cec30ef2071f3b1f2e008e70fd6d00fe8b7aa4b9146fc6d0549c57d984cd014c7e0a4ed6d33376998b7c2c9778fb9580d8ca4ba795c88612721c153c186740c58df3fa63b6cf7a4de76e049217218c05c\nB = 6cf4168d44a8da8e8446b4420466fefbdeeaf9623a40e10b77547687b25f36916f2c18cf6060c03b3b40e0959479f6aad5e44dcff0ba799262ef53e280f4a7f667d262d472b2e573265774deb5ff8f25dc1822b\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 6ff91af444c61d2e2fe8ad73bdc5377d5becd55074eb60f0f98eca3d8f4be8c02f196b3afea12c36f78b78ae6a5ab677ffb7d9c0bd58987cca816affe468c7fb4b56055f5d2326532d6ed1c00ca2d052ecd103994e8929bce04e067082b4ded7e1973566f99c514b4e0d95b9a8a931ef4f6355066940990fead70208a63841f8\nA = -1c924bea12ad6f8b65abd1796e381fee2cfbec15138191bc22d57165928794bb080c83878fa5fd19a5d657b2fa91165459966f50aabf19440f7d75f027b32e999ff4d3f7a7ce878fe0f33a847d644d86ca19713ca9968d97c\nB = -3abd4b281b8f25f5957d1f2fde904457d49a3a7eeceada26b454ceb4ae0e879135d376571f08b5038b7b3d73a9a9fecbe265b72375756a715a523ba66737085e5ef7a4ad988155adc93eadd5d95a0faea56914983b\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = b9076229b1a1241e8b4da3fe143ac31d060785be6ac1e841c2fa9683d2bacff2e2b5dbac33f58b0b1718ad2053c37ee55ea54a9d258ddd8930d2784852844d85db24e4721762839a5c73cfe588efedc8932ccfa585e1b5975083919be9e32a86dbdf5cef84d3d4b2ccaf7a006c0cadca1e35fff2da9da7d7e779494d8f85bf4c\nA = 75eb0fe6c07559c2b0c7b2acd7d29b5798f6c4cda64a504ebabdf54bdc773ab28b218f0defc040016178958d5561796230b71edf49bbdcbd3f14494859843c8ca7a0f777cb05827f2839f3982832f4f3e3c5e50af17ecebbbc3\nB = 1b8aa718d61447003fdbaa748a9d86befdd2675a677cf34a1be7c81e4577f665d71135a8a243976a4f6ffa1636695567bde522f8fb1948033a7e0941f833d827e957781cb4349a08c6be418befc8959960fd5fc1b288c\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 9df82b7c34ca97a3a5d4efa28d5ed4f35484914dd73af9090c4bb31ea3496ece8ec650f4e7b07dc779c97e597e76e43cdadbfc6e72b61ea718c073be1cd204f8ad2bad0df1e530e75705f3d3dc285e9d793c8d42f04dc20773d3fcda8ef3ac1cb10d33d20a91add0358ab8658f49d2fe51d0d2d72684e31c0eef85e5695bb4b4\nA = 1fc2a171445ee6add5c2e4d29e50b91d83338f8d63c111e4d3e95f16d2a33be02bef24dcc3d6ce6bb8f1ef980dbf8fed409a0232c0566153014eef840aff58ed8c33e8d463d408f93e2f5381a26fdea63676c4e5397eba1d39f928\nB = -bdac7a177c77451104852bb99004ce8e617036906667258d85adcbe8cda21ab7d03aa7dcf62cb210a9db8fc750c7e1ad290b35473be0fd607fcdc686de0b78fd9f258f5b25e2ed43c2ad1a38859f882b9f6b293dc258659\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = bd9f3d2e8a1086b177698f87a9860e3a5f030e04a0bf4ee9436ac55e005bda01ff4ac662cb85d39e98a41c723ae542a83a936c3bd0280c6801ffda080ec0aa4230b45dcd0bc5eb41cfcf272028bce3572847637a92d1543bb2b8408e880f5b776e1cf14fa28d15cfb584f025596ff10c9f091c837a3aa622d9e5c856db8ac207\nA = -7fd5357cbee7c5e31fb62ad03bd47b705b574d915200fc7f1013d836b9cb683db020b152ae9464de6aeb8baf14999ac7025dde6173fae6ade325c60ec310eff6dc4130a8efffb15ddae90d760cb7f76a27d0368175d4a44a22f7f223\nB = 5894a0223e4aafe4efd4572752fbde4952c8b09cdfc35137e7e6ed650f8fdcfce9de673853dbf73730b159b2656047e69377d7c5025a6b346fb08831e64bc8bc34b75765012460d8135a4f7a0f41d768fb85abf17f5e2f5c3f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 2c61867bca70e8662c7e5435a5aec020faae86fb079b992bf49d8497fc5f96abbd38a6f04f6ca8510e0160e546b3f68b7baef4ef0f404e881771cc12ec5ed3e3787c2d2ad6bb957cc59f8d56f0afb4bea49cb671cb42f4e8a0ee1dfadb6fa14f84a5b3269dd33e20d658ea4cc39499c7a39a4b5650ad7018d32f97954610f676\nA = -1bf5ae15f24c7c14eb59605136a3f679f303cd5b81e4a27465281d17715afdc2c231d7ccbc59f80ad176f4e0326eb757b52e3695e27c6776d7936da47e3a8a904f735b151422029535045ef489e61ec93f02e6d588491c8dad1cc311f52\nB = -3238dcafb85ce557036d19e42e7e7e473de9f9da6f920e18845dd010546868d2652decc94596cd2c36bd16b02c02559892b9f573bf21ab18c3c75591413d046b385d08aa66d849ab8adc9fbf788e837b047a7ce2b9c63f7fbd263\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = c1d04b831b712d0619db462c3f3fb5973f5984e9a48493ff273a5abe17a548e185d751628899e2851e425a7d4b2c72d4d908dc813cd122b8f497e08e299dca9166f19752ff8cd9840a70155ed9e8c063a3840838b3679f96f1cd5f1cbf0e037d222029e02769dce7fdaea0bbb5417f85497d77c76a387c6b970eac15dcd128ba\nA = 7aeb60c134e84f289e419b74f99a5ce", + "5b4aed5fc630d5d591ac7643251ad32d6ca7f052fdf8857f67138262d221de644140e9018f7b84879d74883f8f251303f65e06bb52246ec6a912772cb698b47de41c1826ddd065359f6b9f1ccb0cdf\nB = 17f81e53d9fa6201e4d3eeebb32267929cd5258d10f053e7c021c4afd17094f8ecf433b1ca752f8740f6d6bd84f801b1b9fd64bc4787b9ae5e5aba0b4318a63dfe27e92d5a3ade192af7563c74c9d6006ae7701240efdd6021a83cf6\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = aef89874854ed34deae1b77286f9cb0e3017e3ae77fe050bb244acf4f30dc03504c73c1a4d44b769709bdb53811a5d0f8a76a08e6a66fc2cc4e98537ad6a8049f02494305b89a49a55e71fcc3f5fc42d6b478456ada9b19ec0a03f5ccfac5538c0040092771660312be5e51996073ff1a506d7460c57d54e10dc2991c028606a\nA = 18d3af14bbffbfcabdaabe44074b407d69abdd80a6eaa5954f0e45fac85af7ced1715c78da872f7a8fabaad3207e31f12b7195cdb25abef0a1e54d3b13349d997f207fe130d7985e2033cfec899a0af310c9827749cd22bd062eb0b1faa254de\nB = -85a7d9f08a60031e689b0e611d7f7f46e1178eaa2e6459602e738990c77f4d3783ac43fc04d53504cf67fccbeb02f9846756f8e32fa4a9316b6d3b45f644254077bef096a72bcff17ffa17070a4355121cc5daa2f782fc0d0bb48101db\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 14a85edc6297763547702c212b1a8274b8f85d53ef35cd1b01ed51039bbe030d0a1b9626ae2f571a43f1224d723847a1c6708f2238f6f6fd75db6656e6c703a5acb57f69717efe8ed58a3713ba2720d8c001d026d83de0ce5e24b67c41daacedaadfe404aaa9b672f00562e6901fbd0710c4303fec41ee3338100beb36c9b1ed\nA = -44414ec207060d105f599b9a66aafecc5b232b55214c1a5e1922f6b59439b3ff77cd3a327bce4f7406871196b90350e6dca9aae147ce03027dc4de7563c734f111d95171f489105de5ca80047cfa43f7e932917b816ba7d41fb95b4106745d700f\nB = 45f2cea1b9b75880ac3ec206740cfe0ecceb488c9155cfacf5885a8cb49be78af8cf221ff8de2328f4880479c031f830a3c9eaebfd83f7de501b7c5cde03c4720c56a676d331b2a13c4689a2e34a43fc11f62825b8776e75d31225ca7ff65\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 7670c1e2e141d8f8f5466de8ae2e0ba2eb3eb7634699eab8415d3a37f8df291d00def88361e9fb64a2f116433dac3ac2764fd62f3201dce4e48a3b7019e5465f82241ffda29d5eb0462fde74dea3168f8993ccd4d090b9c31a5a6cd7e05f725bbc89479836b89379b422250ab049f31c860110df5ed69089716877fb0ad7b0dc\nA = -15b4a2f808a85a5bd466a342c4853c04ac0ab73f8e53a4a0477f73dfeb8d7a911ab2eb5d3d192b9b084d0e38db491148947c66f838aa5f460c37341b129137614259efa531c0e6ffdf163ec6851737037a5299060418d96da035e6f583e6ba79d0414\nB = -3e94fdf22004384f7881875b1d8f58019ed8afb1b6a31f5d591e77b0998f3100b34174d6f3466da44b4c7fc8b92ccc5679c26c146b704198a65a88554d24291adcf897bd758a035361f671a82972b5962002c6a828792980f86a64547165327f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 35b49beccd8d2010a8d777c1ff69e28e01a1bb78c6466e717f0a934bb62f9bbcec5ed29f9cd2c14d240a6c33b28c986eb9c8912a4927605532483dcfd31a50876e1819f3d7a0f49bd276ced5c4110470244fca52d2611ed7e31cd8b73e749aa70743b39e92810b3b52320342a65cad3180f6e2966059d15f79e5574348f5f66c\nA = 6fd078e3cbcda6a71a710e99204da640edc71a65974fc765999a74ab50a0e4b090d57ed0ee869c8da2cf694b6fab56e87c4af62fbe73eb8890bc066ec3460beba04dac3b8fae7e4f316e8f954c6e8d934e946dfdc9f4cde0f26bb3d40d5c444b03bfc65\nB = 14d8041a3b83468d2f44f150ad8d8d0a1a22035d630f2a17b70d5c3d557d3abc7e4d753e1ebfb3a3ba465520b84746073d211a67e079ec7f47c2cff9c06da69bb5cbafcb6cabe7e0018867c42e07931d6797d4499463e3cf786c6d5d6c8cbd600d8\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 2f6e0fed8a9720fbd83ce950d7545d2c6d5b271582194570424f90309227a51777cac974bca0ad3c1289ceb91cf75af73b0645cc20d71e7789144876b8c1bdd550328d9907accc316189e8ad81310848cddd2dbe362c9398d814a048f93f9368fdbec0f19ab87ad2a59d4066d738c3da3cb71d4716f2cd2336ad35ea1438276c\nA = 14bda9e4aac85b0ab7abece728f61450b7779d3b5fb83be813758e742d2ad76597f132aed91e20a75c554f0d61ec4dd118eb733d04942b2548b1efdb4dd22fdb543d9bc1e4bf0574ae2cb2c46fb98cc4835b6a074d6df1a3bc5443beabdc784d542e3349ad\nB = -efd765f8ffd72d041ac3244078b8dc4482233e9411b289cbc2cfc26fed2cf28e286835010438ddc9e7021ceb098b10c68bcc4732608ec1f4052df9362176ee14812bbf09ccf7c2882714ecbbf92bbff61c06e9dc35a368208a05dde949fa2cd091ce0\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 1f0c436379f6dff55a59093ff2a0626a9b959e3e3e59365afc33c7a7893f04bca863ec910c446957baa8de4e35a1f4e9c4a776ef41b053f03b775f327eb7e5fbe68bbb478aa4339ae703ee4b573d6931e47e09271d40239d527fe77098a7fbe519f5eda1f26dd6a7d0ee6833efe37187d8a85844690fecf9fdc3a4d80b921130\nA = -51eb34de29ba24d2b1fbeb0a1c324f4ebc69cda2dff971a315c0c2775d988b03ca29891ed0790f3dd507a1d26ead461dade9284613e45df338dd83aebfb66050465d8aee554970b43f7d4e0428e1512289fa1f9b23867b67095c455b66d536b91207b749189c\nB = 55259a1122eb7eb611a69118d3d42c2f05dd228d71c0e1e42ae3a8d3d180a95b74150d844e916ac85105805126e4b995f2ed1cd3fcdf28e1fd241dbe3125dfb3e4d90556256eb513a2f7c9b596719c83b26931d92bfd3573560e8bf054138f5d6b9cde72\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = ac321a272d2206df4dcd6ed8ca194a1049c1e3a20bf325fa44809d302170f850721c077bb5d792f86f7ab03ca259567397cc2fa1429771190bb632ac2c92d3fccf6e05e13cd33149994cda5f9c57da155439663f6a13c66f9da553f5038fb92fdba186ed9ca04b8ec87cba4c5a68c8edeedb94e38a6dbe293340dee1a4ecc768\nA = -19ac99d7d51456b00a193b3b04693c7e5436e05763f0154768db078ea5111cfe9eda3451091af213b9c8cc649d341de66c12ab2803ea39655d3d7de182a77355ca444c5d2778f791d39952a7a11839e497f5dfd8a703df49ec4d7628bfc25a992e94a6477e6be39\nB = -286d1d436f113308be594f0f43d7a05120639152b7e2f93058cf602cbdbc016512bfd23f7aa937fb358b7b602d15998ecc150f2b9224c58527c0c1267739e065e24236771e2c683957871637468181e6e896b513569bd004b9845f0f0e4c26a5ca123365e1c\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 3466804a1b7d1af8b6060aa93a4c325d9cadb33ebcc8bd991f9e44cc2cca8918411efeed0f005790d649382ec40278c8cff903cf3db177d24466c58cf6a56ffc14e595c36bfefaa2327d37f616b1466eb702f5c49170598bc361d892e18051b8233dbc5b3fd6832befd9a995bcef3b0f3beda6efaf09f7306ec203172e78264f\nA = 6710c19330d3f974fc377e28039e0c0ee0a558621fd67fe724c326537c18c66dc5eec60980e07d401ad5556a05688d2dbe7b271f9d5eda3032bf7cb7c420e7b5d65a195bc037090b6fe83064ac3731624ce2baaaa62a6eb07156ca12ee51d4321988026cff573ede9\nB = 137ca18f47a151363a3e8c52dcf024262ba525ec8852e8e406f460fffc2cf88f1999b17a5821849317fcd84d09c88ebb6eb0340120f113d7ca5fbd91c6a40cd790bce7b422552cc0cfd2a6417add2501db1667f2802e5d0f4df824adbd033a90a155cebfbe0b53\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 6f248a70b2cddd9627b32fbd130f05a604866799365f94d97f1eb582b28192959692a870be7c2614536a8de84", + "cd8c1364a75a3927ef9dddbb8c6c87dbf526f2d3a7916384f2daed96002831173fa4a51863c28b4378f99b1b201010581d5eabd66ad1e328cc4e647bf5e0588bb775e130b4a4d029eeeeb5852c5742862ddbc3e\nA = 1f014cdd87cb33ffee623cf454edf2c476e91df279b4f0879637eb6e8e5ccab305186de67585595d34ebc195fb150408c4620cf6c7a0b0d9695ba0e0e1d7552ca7d0be3dd678b1cce2beedd11939891a6804770f1c843e16dc2ea6aa8e4043940c37fd3d950caa122845\nB = -8d8d9dedc80994fc5db04d8c935301e47054250fea9020bde8d5fef01f2307cbf458d5afef5210a369c396287c5eb453637a2d721085af3de0d75a5dfb5dfd22fde3b229d438439af7b296b9e68ffc982efc6c825556c52a735f8be12a214a06c4270824d5268fb6\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = a35ff7e232f047e575b200b9fc4c9253de6ac04c612b8a82c275a951075eace5e7d6664fe8f78301d554cebe7b996c1f4ec3ca59d8d12d7196eb3909223de94c220f0445d24233534af1c93433b05c5924799d2c781fdb88c4537bb8d442e6bf76b2d966827bfb4f40378a3f135103513da056bc0d375b1339561700d15a0227\nA = -58346cc8a9a1e5b8babaed8e7f59415388e0db654ea7cd465d96781c57faae7a8af8e7578e46f3a8de7bd1027188e1cc32fd1c0d60be24fa3289a12cd822a6c9a77dcf8799624856c27ba88fbdb047473274e651760581b44457ed048cf76c166d38bb9b2afd3416ac7e45\nB = 61951a16dc6466a9fabae99df29b7229f1ab96b476092dca1e4f8fc8e7404e2fba56ee66486d1f27f89bb3f86f271307228d7d6cbcff943961e177300b6acec1eeb46af1c5725f745a2d2af0fd9642f57a09c9ce6742114be0aa6e939e638bd5c7a92a7c206b2d36e35\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 90b441d8277eb1ed454964acf567067925881b5db0b446a7d554dc61ae87ff979bfb0e58ca1706123453e62ce31284a5a2db1228d259e27abc7fb5cc5848dbeb9a6808fa1b4afa844ab39b652abc41423c2833e1209a1674db518b6df7ebae315dd7f416df54e73088762ef64cc2cd0a08b1cb01c49d9299d149cbe84145a55c\nA = -1ebb693ea7d18e0ff4a9a51124ebb78bfa3a4635b75a6387e9fc745a2325409f927324d1289be8a4f5cf2d5c04adc7ead20564f97e453287f03e5ab59a6133584f970446652d05a131d7d382c47b7cb97580ef6710a532dd4f5a0369dd3db500ae5a3c5efb587cf0cd2638382\nB = -3916ebc4653e7d6e0a4f1e234d765d41e9e948b5acd7ebc73cb595559c1b20b037a3c8da0a7aebfa5fd327bdcc922551cdb8db3fb0a581fa0620ca2d2559ccde3ebc44542b4d80926d061e2a35c08c09547e0cd587c396ff2959ee93ea64b1e6b7e2b624cdf445988e1f42\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 3ac61c3a028f4a2df6645acbd36818a2f76a3229d229ce22471760807585a909727411e8b68bfa4e76adc459409a101a1ce83900d46918e8d0903a163de87c07bbafbd60c7f536a62c59370ea53b6cea4384345343146bbf529334b4201ebdc7585b6e5eee42696400c9be9f496406a4eb51d2fd1b40466224f1752b181774ad\nA = 5a16d5fb9047949684b80805e5d962bdb939d0d0368b48517a2a826679c37ee0ded4fa83e657192d9ae84294e450f7e2f2773d1f13395169582cbf95860891b9fdf8f3240a16aadd1198e884f22b2718219d478e2410fd4bb98ea534a3626201959af099fa55488f5390791bcc7\nB = 1f67066dd06ed4a49cb556dc2fce22814754885a7cf6c13915d974b46b0e6269c0fafd688f45ed2deeb026a7cbb772c080dfd577d21ed2c81e50e7537a70dd550eb94fcdf626500040da88c43dabce13c82a93769a9e0ef66a471661292dfd3b3af07169e2dc909e43678400b\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 7087dd62eed6ccffc7e1370cca9444dccc4ff160458941aa9f49dec1a2e9ecce4cf50ac2daf06994c5010cf225cc92238cd60e1aed9edb2befb0fb354ffdde94ef5e8ad0415bc95851d59095a5c4850ec52a74c78eab58309f395d3078dc481feb9d30bcd9f113af7a01611b94d085e32193dec738a64c5fe9bdfbf5dbc98cda\nA = 13596eeefbf06e9ead8d883113d8ae6cc3da8b6fa13ab66681db5a9c083ef9e49d905ec19c39b149cc09452eea0446b29cc92d4e865e6f681827336945282fa6b276ef552363229a976c503b822e6e4a9862d3fb30dd0c3627ccb97a7046a6a679050a39166388a9daad5ec5555dbf\nB = -a4e574363f2e5982cc087b38110d257019962fc166c2d6e6d396220bb308a8a0dc7d90c5cb2ab85faa19b07ed7dc11eae9bf2abde0a5fed279e77a717b43d35e70fec4e18445e37741262d0b0c20dc4375371d87d839d39934f1dc41122e815f3f37352d04d0cf514738b351f02\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 8495eeee238164082240ae1db1e3c1e36fb6621e6b714c9de914f9de8a587d7106b8dc5214f7c60c0ee231d7441e03cc26462e71adf8e29772ac95d0395722d2756f9f64daa8ed41d7ce824a572d7f9fd419112ae823b5b48b8aaae09fe093e9ed05918c4ec88ab159890910837ad0691849b44be95993682b2da2b124de39ec\nA = -403f21e1a7911806747bb78a4f20c4e6572d49c6c4ce071db0c8c91ee985e68a16e60093e4628414b2673d25c9f13c4c43600633af95017e3846512197c9515aaf9953570ce5861620716b3d80eae7de0f033772fba82652484cb3ce7cc189d1fafb14e044e07a88da302547f2e623d8\nB = 689d1b4a968b7c00082ae3a29c8571f826c4630c947a7767fe4a71af43a5de84db9b5baec0980eafd0019e09de1b5c56173ede68c9a6acf260bef3d9a03f4c83a33106c94ca7e1a8615b3553088d1d05a62ddab0f1e5a126df5d960f67e3b92981022e1f0358c7970bb2fd5dce7a7c\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 397df584bcd3b2e1ec7ed89de624e9d104bd6812901e38c5740755ce91bd54155c0b624c590ded199590be5d98bd1ad4acee56a62d05d6b5fdd1ade12f7db8e3eb08c4a5996450cc1204be7ba61b768af0efd563ea478033324731e24fedada1ad6e564238c891494e85ded4feb2165fda22f75bf120856034a9206511885fd5\nA = -19cc480d1e07523bac502872a971d78bb26955c5453386f5d51767150e229daad3ab2dc85e0fa0cf6e72389391fe627fd2d9f263f105508642eae5a095ec4d88545dc9d0a2c436907460e1ea7db174673000eb2e0b60d57163ced261bd0f6cd8ce54133cfa10591f1fd27996353110060cf\nB = -39c45512fc7c9620194fb7ad22abea8f6dbff4a137dc4523115ad7e262934143cf1f320892f8c097a400d4099e787ea7041d0d69b6269d191fcdc8ea28340ecacab71058cb39a9c7362c848826b35ab560c27113fe53c497ca452397891c81365b6e7f07f916d47961e50b8c7c5cab38f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 263ab04c98efac12210beb66b13fec7c260c5b1cbc20cd732a511fb3786b917a617d6622847f4eed70f25982ef5d0b0d13848c62dcf447e3a1d491f4c80e69cec03cd318f6f93134d582210bfa81c1790562053a71091333348c6624d4d793fd6ef971d284a4ebf0be0771efad302015abfaf3edba017907f10ea14a46d9fdc4\nA = 7a354753e39b9ad1c0ad6b65575fc7247487f3ea320fa82d1d333ba8dd5d0ff925331994a6961c9c603be5775ef1842159551f0bfb34920b93d90ca60e6abd514650f77ee8ffff2bac0eecd0fe8ea0fffc6ed0285c9f3c3cfaacf338043975457d62f9c8dda8cce1e99f34529435016fe2ed4\nB = 1a4384f9620567c698ced05870b4dae983d8f0df6aec888353f9dd6ac8ad54340c3ba8346bfa47bac38897f3963fce972f6d55f3407ae03f5c7637be1a34e483e50dcc27148b76ef079f117104162beb191d146ec828ad5c5bde5ee1683a031d554c276d837bf1f2f622cd11baabce10212e\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 91cf4d1899e170bf75dda0d51a6481f79eb94c333b876382c9d04681073e949191223926523f6531f0a45765d7f382221eaa080d7bd05a3c19220ebe18802b15d8009714e8e4e9872223049622ca02040eb041707c7e525f698cc361847c66fe3673a72e4d701466bc374f55fa5437216eb59375c0e2c4f7020149d0118ea72a\nA = 12f35c48024e8271e8f9a60a48b5a214bfb6595a837c041b230e6ac87a4c1d4b3f93a2d3a193c750c9857c8627d0f7c454d6c4f224dbf14a865eb83e990b1d9b8bfb729b8d3dedbbe9c95032e4d60676c2baa2aabafa698392590add3b83b521a7a5e7d6", + "f8af207e44ebecd735374acd01ef5822\nB = -8fc18f92c0613d085cf3ee6f586b39b99ecca864bcbe60fffc63c585e5613df68f3534ad46e244916b1f9188507a3692526c9e403b8e93480b0a5a6297f65215f1a5d8e20631a9d559fa1acc15a98c9397761ce18903f393b10444ba51bc92ac44df90d4cf0852da9d75902230c6de6f26dfdb\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 9af562a7b61c6c84c91bf979f32ba5d246d2ee2050f07ec2dd5cb3f9496bd37c3922ecb2b5b17085a13e93ab2dac6022077cc18c621cce3a2d2247e5e89de8692a36f596e5dc7a6969a4f3ff0d1580eed380e6550c6218c1938caa2b7ab401ae6f520063c811088504d60a19da3b5018d640ab8d340f35d1337a2ede8bc64bf0\nA = -63bc10b8fbcb391dea305fe61b404d3bebd035514a812d0e1d38daa3d67f9f1bb8f02d2979270cb9147aa51d66ca73d4b5787e472456a13fbe0d568e92b622439d33ad3c357a56dd26806ebda7b3bb592385ca5dba7e5eb5d85eed0a1746441e8d56e22decdbf8f4296e30d222da5af17c427e832b\nB = 57a602bbdefcdd00f42ed1e2cbde2ba858d171804da56b0ac87081424ad1569df1308fee7c9ed349eb496d5409c4c46921f09ff0830bc9f57e920e17df16523598fd90314141955ddb84a1522ff3ebfa812cfeb6670525123476a739f64ebe6a5f1fc805a880f8e5a71b908c483a121b38d05cc2c\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = b395c9f264172a3653af6637e72c4c8e564d1ce68032a5d761bf546e0c4b51b33cb026bb4256fa639ae98e54e5ff7d8921ae411497272b53d97c2c44b5b9ecc5aba43dde201f64f1d033056f19ceb0cbd04decb486a1d07ab1c64fd213d7eb6db9cd11efd743462e137f368acc4ca0b49a7f85587bbb5ede4be1616889e2699d\nA = -1e71df5f04001f6468c3a192086bda948aedd19c5da9a5286856f30524238d95b0ae71940f2af123315ab5d2fc61964d3e970d5858b7c1a78d0f2cfd10cba7ba4830a8c19a09b59794ca5d7da32cd8376b5ab06079b51cd9819c0021ea41a9e43aee147befdbb17a92cac7c7767705fdd908bcd291fbb\nB = -394c187308320ba1b14d91d75b8ff993dfd57f9c84e8185f12bf9924e046629ffcd7174879f9925bb643988259cbe9dc9277fa83a25012f91159b012f1964aefddd5a94ac6c2a55a22bbae93085dee079f84cea1d53dc4771901db9a3db5a14eb17c25aaf5377e2beaff6276cbce7cee97a9b8f32737\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 6602ce0fb5002eca37e85b60cc871b7b2eed13d38c20a37a6e0886ee4814f3ce2515f8714c67ad81e8c3abf6a00464e6a51b15e55b6c11296ada43cf459e15915026d3260cce8fb796241fc2b0bdd2b65ec04bee3b7ab6626e10597f3b13b43d16c34afd5b43a219917626c88b24c6f8392bde1b2e65a50b7f1a8dc5eb096702\nA = 4855ce75a3d7dbb72a257f6291e9f6ccc158647aeb2f8beb3e8fb32f6f59af1a46617b77440798562d6f58bfe826d3ea7dd28daee8f5162d7d24ae6c24c2deb2669b15898689ca789e2005903f3a94e991e7d3c8f3ae6181029d959bb15e71d7ba94d2dfd3ddd10f6fc49a65798b5f6ffd64682c78b5d91\nB = 15b3e9992aa3f042fd58ff97a8c04aaebf46b75fdc38caa9224394a1805cc26e4311bfb498d5a04d19396e98d11c8810620979362df82b23a115fc1711b57c7a56b8408e2682a2edca36cf9311addfedd2d0889a78cc1ab170d1379245de6f1f6f4db815fea9130463dfe5283f195e6e81486a1d39634aa\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 6a81ccd82f00d829bac186fb38b85097d52afa3ca83a026856bb83f94d6af6f6c6f3141d433f8fc159d11397df8d2f44c769f255cf8148249d8e9fc4f59ec3bc8e804d7d5189e71e20b8d0e540b59a2854ddd7feeebda5a95f17605e8bd5f311a63cc2e4ce23a51229d0a49ca04982c1bff79c201de6cc6150b690c98106a39c\nA = 1f1589c9b5ad9d878631cb03c23ea7e94680220856285668838452a63b726e01709588b38e578da8a4845aa5cc2e4723beafa4f81a1a2e463f67d9a3e432de7064ba8bfcb943cd9efb0e5a136649cdcf5e85a667917075804991b997f318752304f4946d69abf161625ed0c03bf9abeb4ef28034f818e2a643\nB = -909dc7fcbd27d0bf7d6a3d0e2937ce725b5cca0acf78c103d633206cb431e2e2c785aea4bfe2042df32417143de76b71d21587112f36d067f878e556b94ef63d59a07d19647593efdba7f3f5324d64c55f93a283a0dafe080167f6576053f9beb326994f4a1d53e18e3f3e770e69450bb70f276d128e48ecc\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 69139f2e10726f83300505d15dcbad5b5f284d1c06789181683b7b8caf35dff063dfa4968c35facf32a3628dcfc19b3fa4c30ba0e030b06773832a2631529fe0c0c402e05a0c4e9446a8b6c22754c70ef540f90d903d83a2e3592169ce6b5edf939ac5ff25b8bd48aa2425321602a9571661a1109e275a3b3039ff0c2f430b18\nA = -5d02cf3969bff8789850ac898c00fcb3ff1fc49a22cb243ad18703bb8fae25f83502bcdd885417fe46e8237fd0b444712c4fdb8f4972dbf9278a83eb305efc7a8210ce55167c069d1c4136a9b66d0c4dfadbf036c079d12aa082fbb42bfb0098006136a61f3da43aba3d3bcf2f5ac2d7884caddd0cfc28681d33\nB = 50b369234d993721288662d83298d99b9052a0a66336a5a31b76dfb20ec2b5be3aa76f78b2c17c63d78402a15aacb585be5c8d2e7083145e316e71e111fd34f5c79363c4591c247b1a94b20ee042d840c42a3001d6c8dc7cc1e1348e0e3ea8c6551f9d24af2dc2d0c38a54ef065ff048b148ce4f11ed2b549c50\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 87de406a6c957e85c759f8ff684023a0f98e93ad4ffcbc6fb0038c7a7ceed2486f15f36555d286338aab3283aef677118f7cc3f88a7ff0ac9fed31da6786ce895c3c08d3edb652bbc9ac2b44c4cd24ad281ca3a8e8e6e4d730f4f0c25487cfc1b2afe222934eca8b1e1572780dcc149422a88eeb1bf31065c929685a0a97ac3a\nA = -1878e0497aa1c2942a2e6956957c876dac73c4bdbf42bc92498f29a006bc92f788c24a4624b87324a7c8aedc6b2c0c8a1a442aa91557aed9bf2c02b6664979e8a9a21330dd839f4ba8f84515fa6f7db9287f7c20f31732b98fc09ee7796dc524870dc35851814bc57e1a8ac49d8935fea04bb08b8760df33a98149b\nB = -32f4e94bd073cf3f70810d9af7a873996a0510109bc6fdebb855f27dcd012c59507491152d30849d75f95dd868992c6fbbf29b1d899cfd401e9e7f4e0436732cb4cc9e6a6d6b0cb63fb0bee21e422b7f7b7b14dc5d2b6d10447fc4add390fd3c8e7b06f1d9b181adfa8d04459ed051bbdc9666623b00e3871e597be\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = b456ccf9d066dcf4247a21c7f3820e324ac9cf004cecf8dd1f6c3aa40c2a33e24c423e97190fc71bb9fec21d36c5a687065a7877237a2a05e64cabfb3b20bfff0b1f5ef2e9adb7edcd7140d1047b0919a2c770579ab44a08e5ad9f63a06f90ec7d5885b91de5e524b2e187937609b4b81d40a0b33e31a48d7b9868add75286a6\nA = 6c484e3c6b530dcd3644b19fee66c41c7c2c1dbcde574d87ee13cabef9dccbe5b41e25c32c6a56df23f2e87176afd28249e5fcb918723707fca94d7e2c9623a3493d395db802a1b49d550f52c29666f785652fe81afcab00a60a5b50cbf523cd13dfa06d5a5b0809c68ff7264a2cb35b8d52284172c62ee658e8417e6\nB = 1b4fc753d0530bd07094bae09a02b1ea684fb4e8519086b1e2ed9d59af011f61d1b94ffca6f354a5b428417b328bb1e8af3f6c7ac9121dae58de9f1dcbaa9c73a357f408b870e62b0c7db1a72c4c440f2e6fe90b199b9dab29fc23927190d3f2bf8a7ee926a152e64474283695614ad696c85ea547f5f51d02d1b823e3\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 5e7c63276f350f04816a6ed9f98507a78314f1d99081fcd906affa3b8395fb58d029ec657af82e77ef45611bc988095bba9c26f25f8fd404432fecd02398e69635f3315a824d6a98b33eaf6a91f12957a5e80cb48d5b086c795eb3b1e04da5432a7e8be3d683addc586a44b6243ffbb7a979bf9664cc7ec41e75f267d58a7127\nA = 18efe267d4c62576294f4ba44c67a058cdc0bb44c48f4035682b2d6b8a63106081af43d99098ce133f8d7f9cd04d4dd7414f704e32871d43d6e5d73fa9f447873168b43b32d6ad19378d74a967f92ec7629a690d29a62a5a6e734e9ccf5b84857a00d97b9db846b057004b03d88b827dde717fc30e6a", + "5246c752d65dd625\nB = -ebaa580d3eef5361547c692e107439c8391ac0a2d1cec0cd275d0be69133eba8a94bd186ff9a129af3f5a015d5ebd30215643554d7064635dc11ec7a8ed2200fd637b099e534237f0495d2b629abd4c8f84aa1d925d53e98490d02f9fe51bdda08b043f67f0903c0195fcb886c04397d3612e4501ab8c7b7db69f781e169\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 76fcb39f94dd2756e8266c025cebe8e801524a757b976e35ed45e3da3db720061cee9037fdb34776c704ad2059ad8920e400bfbf10eca9bb157eca7750cc31fda06473bd22d4def80189c47ba32e2824c721425f225563df2a2ea1edd090e01c0bf980677db5a5dcad37d21a68e2832d1012586f506480e929b2fd9bb4aaddf0\nA = -75f903ed9bb0b6db8e3be16e797258f6c18f6cb7b16f835f04e3045f7e4974d7a86a63f2ec351c88fadc0635b6dc83a797cdcb5cce1a1674f89e44190991e0930575b19e2aa1512bbbf2ef6f8c3e707b17516756fadb635d8c6bf9caddeba14834b5950a4d1e98bca79a4d15e5fa5fa3c1727d7a49b33d481d32fb14ae4164\nB = 4ccc582c8460f7def2d26167b68788a681c41bdf6dc805dca83127a18bff6f5ebea6db75cd959beb859637b200ccb5c7644d571f436e46a357d027edc9769da226278f7ab947963f7caed1e7e70e572980e960e9764a40c6db67bb526694b084976142471270b2331da563a10427cbbb38e76203d7da5d67487eff701d75188\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 5adef30c67aefea4da3884b8a1d0ce6724492bc76b477f1053621e7d19f3cac15448e9401d34e05ac4b508b9d1db9a8d323cf43722e0af6e3c3b6d463c6007449c3bc3236d156cdf988dfc308a1b4911554ecace52938a7b10f463d14f917ec3d9fddcf6d33081745009c59b58aa22bcd7dd8c3bbd489997d4e0bff5473ab9d5\nA = -174e8e057a1d66e22eff88de26f43fde1c8efe5611f6ba4f318f027f5a5818df02ec3f014dfedcdfc8c143c5005c3c5098d409710967c93474f5854c1113fe4030e6682bd56d389ca8b9a4587b8b9262d146bc92fcd81d75c3bfa4281898f394f45d5dd11cd4c7344ee7a933ee346bdaeb6f5188967c388b919a0ce6730c0bbdb\nB = -22702bcc4f9d5bc6f803af6af8072780ff7de7a346d6b9293ca751d6ee3a81493fa86738c44cf2b7be4bf14a55a4f8179c35c09dcb1485f4c08ec5e9f9b1efa91f4b5f15a31a46e1ed71cd934ba6bd271bb22bb5703aa468d297f360ecbb48f9fd6c572683e83ebc3d432203347dc62e19fa06f93e087283347950829d4256bf5f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 5c2f67b1607776c10fe2c30b112e541c4d8229f5f99f615fa02cf715d3f20556a28eff5c233c58994e9c6c1fcc37b3416b0875b9a62fa5a09a4b8f9e216487203b387ff97fad1f39f674ab19c5e34cb2f162e6b0b0b0084f0618e64928423b73b189c744e3de9fa50d66f45975f68b14866cc16c8c6c722a54420adf027880aa\nA = 67056e93b69e8a7b789f1f8b835d9c6ecb7762f844d656b26df9844a60bfbe0d55684f61debeed31a24ef4246485e8a1d43d49eaf97ed9e7b9f2d2916a8d85b8c9e8ad5575cf5a3fea42392e5d1dfb23f7ad41a7b56a4f21e2828aab38a602d560c99783a4f807120292ceae366b1fbfb4be8e5d4561bc8944e7f17ebbcb0fb6296\nB = 1f874f244ed6cff9f910ba9a58db0dc0a7435e8d99ba6412e976b8f64d4106d3c5c57ba079384fced1c261aaa538e131734451fe84fd3cc5cc8b3ab46b2031f888d95084cd3a35a61092672a9118eee4ed1a0df0409e3613b3ef45a8b16b71ec892755dc3f83c5492b67fb9a143ee6102d053078f4875636b20b536d5cf851768cf73\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 7850019c6712f18eab877faa8489daba23cf34b512a3193852508185b13cd5a2e9f503fe8d61b74b5d3930021a5b8c38322aae9b9b1b4814fa4c2c5bc409b58f11fc8fd7854b17baa94a6bff5f234832f9468d90d148fa2bfed774ac03f2dab6a506a70db4ce363f932adcae202f04fdcae968f632dd674416c23d4e21345ef2\nA = 1e378a0f27e6259763890d29e112e3d8d2bdeb9994c49fb67ab680b6e71a52fa0a7db886d3baf52f36d943b5430ae8bcd82e229f4197239c35678eed254c5816722b995e9c311be942f8124e2f80c1e59658433a57f346adfcdb83202e55457308161d2f928b60efc39538a6469f90f1a868cf6077568c8241623896ddc2705cf04e4f\nB = -f4ee37e39d4cadb692bab5483ceaf0258b068f2c0354c540438803780c983469ea28324ce7e209c3bf55b91f0a2f4544bf318585e4514333eafb9b8c2f02170c620e9b5280a828ce1d8dfc64ae9c28577e15071825a85a59656c5b47d9a382af6b78a5b3dab1078dd647e0b473174b8415d401543d30a4018cc3eddbfa546d0fad9cbb2\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 4c8f8b671443a3af5ef5749885ce5de8e2afeadef9051bc49c0d7e72922d049b1accdb79d82288e472b07578e8b6d2176d6cbdd7f0caab593dc0fd9224a94920235410501fddd6001b62a7f7d8eceaa7a8e4c0de52029fae68656e8120972b5cc1c2e909c2742e836f2fecfa51e12e4f8a2ec7e69eab061c81785374ac607fbe\nA = -5769eae759dd6bf94468eae94189d3396886d4569b0ce264c22d39b623be3abb01bd5008b9fc86701a3373f7764118becadcc69481cbb134c20f669cefeb376dfc489dd4ee91cb333d06afa391dd322abe2b3b715d11ee372666473a473e29dd90fcc97e939049b455be52b3f288db306999019c1177ab5820d94859a9d2f050b7ee1d4a\nB = 44adcaf1e2afbfddae19b23cfc0f0ba1f940d32945d0b541db23f3a0a9d06fb1f67ade9a8e620bd96f4005ced99430c7a55eb7e93a701c829fd5b9e55dbb4d3833afbcaa0d9c946916b1a86af4a6393b1155c6439b8b82260e09ccf0ce5d1c4856f4d524983e4b0fa123267694a1c6118beb8be26113a02721a02d7b0ccb01ec6e9c0f9e19\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 51e25767b8d4d7b2b0c2652d9ca6bfdbfea06acba543b1bc8d3d25b2fe5f2998febe1a6e742abc3f482b4267854c2223a5918a9b5c84e0864278283bcb5bace0c046db1d0240443404fb62d70ebff3ccc655e5f5977958df4c878d9859a69731744f3d33978ac31551487270bb4fb56ccbf59402ef9fee42cbc329420180de08\nA = -1966812979042198f70b3f1238c93ac5c6e5749f1108c2bba869b1dac7680f910e56318c9b59be9212e713a348767ba6e75917fb599e929ea2144880d18d4fbda4f4663c7abb49b02245169f385e09098a4e01b56dadfca8c803acb7cc244f3c98bc17440ab2afce318476b80e1d0b4ed9a8d6f2a0be64633f8faad5eb48de2681a38a633ec\nB = -2e4f5eb92fc34c753c61dcc826abab6fc4f427c6ac7e73ffdf65b1037464b2a9a0b0290e713d81ab57c0e1dc30e76fdf96046fe10a34cc4511398319ee34bcaf73763a9042fcacf59a100c43d3333ffb3743048e8df0dc61fd0da3f935fadf882ffdfa9f0f42980c1af6edfdf161c4b16087e2b14277f655abe54582de79c51193e13169b55e6\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 33539b5f38a9943b15801d449adabe02da6e21651d96acd9aa40e866bf65015fa40178399254e8af6bb082d021e2a05da0f45b699d193b70112e114f0d25287476dc0c733c5cf9df57667ad0d3ffc4ea2f85b43cd10459cdca9465b0974e578c00a6e275e0b97ef2a4c9886aab7b5947b78a88f84a3f1d8c5f26bd07bcc59886\nA = 531b891fe9e8db322cec59a2115574c7a304c423e6b11516906b840542b2c608785e2c18033262ab9cf68f63edb40ad4f073ce8841db602cf8fae0a6771d741c6392976c9b333ecfcd0c8e9997da40616ae2a9e0c6be93fdc7af0dc0668ded1e42a9f729c70f74500ee76a91d3d993c075c2f645b35792a20edf17c157459e35c0a48da6c4c6f\nB = 1a6fdbfed1054a0c5758f92f72db7e5737b0740c4d8c3ae4713366ef6709b21eaecb6b74c92541a9a0c99ae18ac6ef7de79d4c84ce39ad59cea9c203734a99bbb895916275e8778cfcf7fbb7b7d081a677769e4ab96bc7bcf23303100e629fa8e07f5b8fc2e39c7b5724c72907eaad09d3088783b3118e57c9c8ad1799b43a13f73864c5602c478a\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 2eab6018361f557ab06725ad90f6886d4b468ab1a193f8fdcfb4ad15fff781c8681329a27aeb5f03a81d7c404b8017b12fe23165e941ea767c733513a07e921aedf20596763f6f977316e37bed70f6a617e5c2757c229c59b3d7b1fe8755b5f65f7f4", + "07f13634aca7c8a267e661ae2f77fc5a95f56cd6c8458119df587478b1b\nA = 1cc779145b2b7bf9ef4c9692845e162329940f96eb43e04db8728bfe736698082aae6b6a1b3c32867c293b08547a0941cf4059d2d567840ab6ea526e3724ad59e715a3782ca656cbb739dfdf0c113a18f0dd62423d4edb60057fcaedbb852178d38f1b5a232842b4fc645cbfd97a8cac0b094b870064302dcdf23df2c9e9f736d93409cbb8ce9ab3\nB = -cbba16086b51bd83d3460e51cf193ebc79b826e4f30978274eac3b2dcb04e9d7b56a1449b7cb128bbfeff5c4720bae45271fcc64085d3ee501f0f21fe73cb7db5f275d88be55c339f9180ea21a8cf3755a875331931b75d23f57c2030c89c6f9c1ead431cb4dbd4480564c83f8470610e5673c7eb6c0fe7351ffd7ee460df5db7872c67041aff0227f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 96fd93535728b961b4167be8b304e570cc34e787c12a9a5d76e099b336ed6b837cfc246c5bceb04b0f4744c5da7071fc01d70e342509473e5bd7c60d6046c9b4f21c5ee71c4e678447f837db3a7694fc3936ca733efdb7d387f0f6e263b3ac0b89054a826da9716691c9d580ad38d701d08ca090b6c59be466e1b9833e75d820\nA = -6791fd686f46c3773fc8d7f4753d178a93f6fa4941f4305d9689c2a305bc67840bbef80ff05c7bc6de3a595f73846609327d28540cd705f5aa94a3ae5915ef55304c37c4c43a4b46906889331ee16585629bb303673d439de9c0236f708fd19a977e6e1032e0576a921853f7dd328979ad1f1aa945905dae93a82b3af9451a541f544c18ed2546b66e\nB = 6ae062b39c77bebc2fef05743e6d35e14a31c6fe1fdc42d8de2db94ce70a6d60d66263c7414b1081ef2fa6ab511b361b8baa9c71ec628dba5bfd772c440baefc2fbed68d40897878232d9715c4b7e7c9bdd41cfe7b6986d825f68be8cc16d04afb0cf593f3028f3dcd91bc94923f3d7211aa5f0f12d3270e8df8bc191808f0e266c4fce2af97ac7ce06b0\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 949ea5f645ffe5d0d03359d51a663c7dd6e6013812a47be309575e036503126f48677c68c4ef6e7b3f72d76657fa282ad5881263e649b5297da82e24298300d032af3f5e8309ac7eb597b16e257a6f7af3476a264415aa7783433e83be57ffb3fdb404a9ddc3527d6a9c297f8cb7b6674961b3af837ebb65f218147a46c39cba\nA = -10f59ba073126d92a201529a5374500612bc59a9e66322c6706b422d35a4f82d97e668b268f5527b4641c6099c80bcea504234f3c1e3fd29eba0f161da97c50aea542becba499f29d4ba5571873d4dd9eb3f48cb26fa6c929a704fe8e49791b2ca3293c2428d9cb453263935c9c90a4a2b39d23a0baa12535845f907d42b729033a0a1e74d18da30a88ed\nB = -34fdf9ae6760d4f434d09ce2a7760ca2dda14bc256015809745524dc49d841b07102aefe5a1d0182e3e09d4d45b415e46f653185742b9b8ea6960160752080e5c9577a12182ccf1a293407b534ea8ddd33ad16cd19ba537d8db5b542f86a2a292423d452bf18d82361240a7efa831518184572c5a8b73b108a81d5036b3b530d98bd47c7fb2123418f12e05e\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 9ab739ddae55a0d71b39974628d4601122ba6c5035c3ad0439691317f23dc33c0014f3e870a105e4dc1432ec79693bac658433b21cfc218ed411e003990b94ebfa87767f3614ec19f5bc30704adcaf85a9d3d15ea764c8f0bbd52ff388659637746d39859398c79016ace8c6f97d3a5616711a235b85f334fb889b9280ccbea1\nA = 76b15a0aa0f59ec804a5e9a627e1fed524320b29120b6789f8e71b1ac4e00a9a8c826919035b84f87d291e2f35460bee181342136dd9eaeb99ed00c6328b8e44c49ede3921d6275f6e7f03de179fb2374ae2fa6c58852fbb2649e214691daef945ead6c8bd5a53ad2b130e9eab6ad046ddd6b80874ca6515322bc171ee32749333669de0d9c883058423579\nB = 1fe2171056ed4585a143b6b2bb5f44047664f64d710dfc05c18be5840ef9426ef05b6e92e4ecb5544ee4622e9030153dd9827f2f01ef38e62b88ecd6c46b4457d16644ef6d863c226acfd6928a40de614a5853137124fe69127a7f05463eaa49bc742d8f7be300d06b302dfb0ba86801119bcdc01b516afa360aa8b22b7c6c1839cff859ca1bf26e3f7e030512d\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 5631048ffdb2767aa04d59d8a5750016b38b983a2d53743ba4de5d93bcfc8ec30183a84bb1e290ef9c72c7ad357728acecfc613a6f9b3d712456d545ed54a337930937f4589fe41e66ee930db3dc10a4fe41481008c69eced65b9d1c46b8574c5ac8f7d94025d8fff00ced17a5e17508527681bf94c2dedd51502a2c4652538c\nA = 1aca12b1933f25ea081e12ff4a4f6f9ce379f96d976da2ff7b8eb8ad791fabe31c1148fdec22dfd67828e540c955a1e13f40c5b125e1c7e6bd839bfa84e5bfb58bfed76058c6db77af7a34ffd25fabd60e19f65e1faeeea6371d7785f2e5bddc8650a7492e06691d61f997483661eeff54a30656f1daacf31182486bc40647975151fc05d2f64b50e632f5d5c4\nB = -88ed894287043e7e5cd2eda3c1e5c97f85809f7a246b0c20891fa9a024f3aba4ec1f3d112580fe6ba6b0bdcaa1325ac7ec9508aa88c187af08e4f37631eb6cc97e4481b18f747ce6d35ff355e425a4833834ffb8d34a818bdb015fb818ac9f58feb87020234243aff912da5590ea3f6cba74f1a9fc3ffa2b4aeea25479c55a3b572621e75d86d8c8f6ee4f587e0f5\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 6ce341aa4a571cd5bc110dd436acaa09f409661967de0bd096c77c60db58b2b0ec95cda50acd7fa20ea4266b2c579eeb6ac214a75d40abbb70845db74c4d6c93f8c545add269d45fb15d985e7e630d0425565d06dad4a3ff9835411e51fdd9780c24f466dbf29244cd1b8c3445af181d0928db399bbc8632f7ebcb9d48c0b754\nA = -52c53999b02a92d6254557203cb31a21dcb896495d1f29f3277d19129ee43e521ab9d5a297204a844a9537d63b74686eceba72ea2e7b98ee8895513395cf7c44c99348f5c4eb657874a8115f0027d6a416b8a04a1ec0e6809b7701ee7d41e99996e307bee9c295ab3df1faf674e0067d0ab3bec4da998580203e33760870ae472a3045bbd66e352b8f4d284efc00\nB = 4329d110504caeb71ce0453b0706ff675f646e70a6bd9575791a38f672eff226f4958f8b1fe4123c0001d8f8595d8030d0e9798232942725a9b9d654ecf50546adfba7103fed796b455ffbb4c153e70f941bef7953c8a210d6f2f4ddf5d9a79d9938503ae8f24d69d5d7df1c988630ed960e12dd877bb80a1ab0bcf6db67e0c0578fc0c40408f72b19052534da8d31ed\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 4b9fc1e0eb4be199427c48bbe1b53948d0135bc1965b8aa5421a4ec704b13cf934c650405ba02ad611b0f29d46d82d4a1fc5a84651a29364524e37be2fc7001cbd3c792aa477802999841ff19620cf66dd2453c9b05aac349b9094d43b40e358f32805d87cea3cfa98e05240ff95ec57d88e0a12917628ebd34946eb1ad6799a\nA = -15a223b691d8b3696306b0ccdb52c1d62c7c2d1ac71e5f07cd8fba960417b42fb5ebed5eb9469be67f231b5254bb0fcfadf5ac5d2906769e8bf8292f0442986cabd88805a162c0c1f60f9ff0bcc2029ce33452d05f754375c0bd147fba745bf8a0008792d4f90d0e0f2cf391f2d7865705544f4a220ded44732321473c0ae7870394d4e625df11bd0923340cb70b995\nB = -340e5ccd644849d982bdd455ddb3b9a23ca14e168bb87256bcc370ffb6b7fe78fd062b3bcc1ad3c8c3b8cb549f2baaf1b7f0f6522aba02fd35b651f7de52b3aa2e0e40352bfd6ed0f84a2bbc3b3a396dc8512ca1db01cc69611925f1037794c82a418f10e0d994f458d1f19051e8bea32b90ce744d46718f42e711c094ad0a1ee96c88920188078f1b044ccf307e4cad7de\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 31c090e5160faff9a136a7a482b42a43ae3c7d00c215cbdad28804be0e7b12b0b3af820c1350b1622a22c8875f24d48ff16231c826d1a946c66f70aef92d4e6582e3ce9213d907267251ac74fa3cca9f1c8fd53fe9898aec19936a2b797fc345d68f0791cc740199be39c05053d5591d874b415e62653b04a3f41e263d00f230\nA = 5419e87e50b28b6d24927934b541d8de548a8f4ec7e9b00aadb6d23f2d33406177d3fc72d29ad2c2e141ab2916adfd30ec4791c626af61d8d192276d632aaf3b54e2ffe83b44f6f1ac441e6823b6b58cc08fd7a0af945a02eabb5aebb2c7ff0622a17b38077cd0cba906ce23e71ac7f4da40ef6066565b4cb3a62ebda28f3629eaa251dbd9979b123a5447ea20331723e\nB = 184782ba4daf429cbd13ac13fe93fe5833f09915cbbc707feca3293e505ce9cf0b4b12ffc8b178e0a4617f809be53d4895a4182e7a8a65043361e654befe8b0", + "1429ba4b7420193d1d7d90930ee19cee0316f33a5795335f5fa517e1ffbc99b95101b0f936353afd3bcfec34851ebff1ef02fea991a01b587d28640c935ec91496d1aa3ab8d38a6ac75b3a4198ed27b9019bb3e\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 5eb9f3ca660de481968a3c7321281f22fb9273b16fc10d8eff1fe34842364dabcfaee4993c1c8ddb7c8d6e509a8d2afc005075d5fd3c4471f0622753c7797aea900e785ceef905e2606f64f34e47239c40b74f07e2ca70bd5a18cb0a88780489f3e98232221f65ac9c5ce703a256b7b75eb1dd38778d8bc05a37ac9ad8d36b35\nA = 1c73d8e3d5db127a81477a5c4c6d61ac62af446981773ca15a9a01fd5175a2826a8763f91d68df28ee606e8ffc203305875a238d2095345556f12f3b5e10c5bb6ce3f90342ac74b9ac057195c863c4b9d28ca1d958a98649c7f8897bc6abbc39becae963f61b33bab4fd20d9d0e5464f21c2cdf06d00f597dfde45dc5919f5124f26888b12d72cbd2f57de3f2de7c014f891\nB = -e406fb60e35f0abdd313b8431f4cc89fbb034daf71fae0cc727e9a93cdfde53566fc74e48f4cc2111fad158c63293bca0b21b98416381b81d2443d0e91647679481cd6b6869b37112d3b6e575eea7fbb5bdea422558d817b49ac36a829926553202cf9dcef09423c085d26176a89be741ae20a434ea461def090dbffaf2e2ef97bbd4ec779041ed69ec07d125c7b85a2d215bb0f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = acf9d363fc9b76ecf7e61c33270031340e66595e559dd1c9dd4d2243819b660183521a4124558fd4b216dcf5c52c4127fe517c48cef428b9ee0f1bebabab487c968a80b9815e82c12e807c096974ea3893a8d5597f745365c352a6bc6ce92479176092f02907538c5e784bf26dcde7672338f402753b08de8aa21b9480df6955\nA = -7c03ba6e3939ebbeabd35cca277eecaec31f326ab75f1a29e05af50c4e62e0175d4d6a57acab87cf1fa3a51791e9a2b2d4d5db570ec3941263902b0c74544c323c106557cd5139d2a25f3c3ef81ca009d4e3c16f1abf6e2b5196df1b30def46d61eccdcb3741a6dfc8e8c5e6db68ec29c82b0adf6e35ce7aacef8da806b3b58bfa489d319869b20768f8eebb604a9624d048f9\nB = 4e021959da96ebeaad17f9896ed53010d80ed3fd4c3a826a266e82b80ad81b3032303e7c0e58034a652b8aac00c08d42a530039de60d74ad349438f5ecca1256342ded6f30e3bd2aad5bf2b49124cb27f45f697e157550dbbb37f5aef0f04839aaf1ba43bf1e77a1529818d0fa91d940904eda6b748e5c86cd1b37592542c43b7b4afe2b8926fef6dc01784fa431d43900edef27f8b\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 24124c69aaabec7a7b4e7a82245f6cb14b199852a8b314a7b8d9049cb66096d5ac93ac75eb58a2004de8b0fc8375638c0878fb6a45be8bfbcc292e3571df1bb8d6e346d5595fa395fef983a365e4e868154fb3e337d47771419e7f1dd5e4220900c564d7cbe8e7792ab288f99d265aeb296c5ebfdaf08b88d9b30ac660cc3ff8\nA = -167c959417e9566c93e7e05d2a410f4850e3a313e516ec958c3d2fbdecbf58072d05691c68981e176a867d7467091dfeca11f695f750c8c44ebc4d08e39e679d96c4791ceb1ea3b89fa3ce26f7ef214c5368c03ba694f7ae592bcd8ae53a66cb3eb1e0cd3c105faae6eb7e7a8fbc88248be722406f2d35e46c751b5ceabd992091eeba15191ccf6dd61a7ee0c624d43b188c42b6a\nB = -343940f3b2a5f73a51d6f609e8af306f44ce7b5c2e79edf6f4dfc07866dc5c4b2e0ba48099b5503af87762a44ae451d166f8914ba25b3cc41a766583bf73d27e40784064582fd9fe952fc00e9aa2d4e4f1ef35818978e725e69c1bcf267fda4d635d1d292d54d3ad10bae9763dc5d7f7226f371184465695f2d384d749fe07967a1bb64df22f294ed88b13600c7068d881f713cb8e3ce6\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 50cac148215963e58cf6d2ebc36fa518c63a0ab8fb136ab84c9657fee459043ee9f42aafec89e8ba5fd1cc5c4495a41e80590ce197e12c087ff7e6ea88ed798735f55a1634562b82f8514488ada526e5dc10700058980885000e266cad55948d1e080f6343f84b12a3698d9ad5427fad4017d931df77ed2e45e2fb8380b7fa39\nA = 6a9833d768a22ea46aab1a1619f30283a1ec254a2de5652981d73146aabe31041ed04d271c6f2e5e2d090cd615518a06563a94ee2b12cf9f142de3f15599998a712974d0ce9b122a2aa65bf8750f54c6324f12e321a888154330f0f9e1e5b7999acd70d4e6da95c2df1da2d19544b7abd2bd3041e3228c7cdba44f7d1cbfbcf968f8fe87fab523eede0485efaf5cc9e56095cec8983\nB = 11e782e2b3f469b1e3d14ccd1b8301ffcde7e371f6e9afc99af5809110c6d70e1cca5c0bbfeb95fc3ef8352581c11ba75c0f8c445ce2aea903769a24289581c95ae5ebd9553fee61a30d155bf6011278807833eb2ce7ee2a98fececa23fabaaa259409e88e3c4f4eb1e04176d44878ad3f6961e0615ade2fe86b6eb02adeaa7c9019d63231a28f84b7dcc8bb0e71e2a717db09301e1dca20f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 7cd49d72bcf5ff4fa2c686f21e1f0146c4f24b9ad2e900dca1c0a5d2fac5047509064e65ac582946b251a3f04850c9abd8b80c92af0fb11ac13debdae8b94927f1de0e4bb217e78f5d04897c6a0762667d3d883cb754dc610442c9dbd44228a7ae4f14fca145550d813655befe3bfeb52f1c76f989ea8a1dd9c10fbc7e9d6574\nA = 109fe33568598972063279b71ba0efdc2e03f770cdec331428fb8ca084c9b20d0fdb5cf9ad7ce90c8cb8f0fef10d219d7dfcc6b4599440db8cff9971da7852880bf004266886eced8763b3569720df3a1fb0dde2717ce0183f2250034871146628430f206c12f5fd87574c206b203d90c0f2c705cad3484c73da8bf4e9f7e1bd433a6f7fd27df63079d30c490aed7161bc594eefad4bc0\nB = -b95da952cabdebe0194b7fba519768e1b56149353cd12023b97397b59e0d7f4dd1d27b65b833948f58e66d3f6928cc3140cced835dbd612cc82a7e9fae1621986f71ddb6707ad57926b03e87e165d30fb145795a70627975bbf9d9ac9bce07492de5227c666663cc28b3e70b19dbaba7f16849535ce5fd61e91cd2875e0a534a10c60d21f919d566a3469d108a35ec3f023210efd5d318c7210\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 98a89cb3c9602fe503c32c44609bd4487b6c8323737b3376dafacc3eff96efcce7a31f1b61ee6799dc9561e77ac058fe5195cc013e72a2864f7e492d9f35244b321d46270a582f6f14f15fa8203d392e81b183a1d64d48b51d70e38d49c93869ffb9d7509f15ccde547d2d9c4dccd50eba49190b6e831a9f4f9000a95dc83f3c\nA = -67d7fc8f1766c40bd476cdb65d4dd161c3d4c2c5860a0c559f0e87ada213c9ed33308c36bb1c7d615fa69ec53656bbae6b57181a0134af23ea2a75f8fed3290a2f483392a3745fb57adf2121738c84f6d34325121a702c8ccac0090ea27fe9a5ebb6ba9d4f397e4a7e3151850b3d7d25643398bd3e4c1da081471389799245d986cab825a2e6ca72b38ff978a2753c835299ab4597bc65fc\nB = 676ddc4d18960817ff8fd2adffaa68c87d234d62d445d6ba3847ded849356d929d9e4ff01f517d7b1c0778bf90f475923517d855956f17ece1e032e2fd474d2133d6b8a591995454d8b587cb4f6fdd0fa29305f146d340cbe6b6efd28a926c73735621be0c5decb792083b3f063a43dd9f635e03f78c1bb56389a5cc993c8f36134d755a324d4fccc2ac3bafa270df67db0a4ee6ea4497aa33b5a8\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 76c31404854006a7d55554762094df6e11e0393f5b0451d85de2e5b104432df72023a35f44da10dbde01cebf77b8f9d3ad582373c5d32232564729af0d03c5450e439045d96a2f0a38871c922af2bd38c545d219adce0ec80fccd121d6a733bac09253604a8a0b1ecf0f24e44b818ab9e9974181cef10e9eb17684c57d72257c\nA = -134e8784878a8f3cf49ccb952075f9f9bcd24a20f8883955f262867045c11a9c566abee00638927e5de924872fb98f6376e321ebf3f567db6cfeede62e04f839617d78b7c9d3487b60a0d3897b3fa49b14c12511d04854bde4a9dbe5f31424a3d05cb75d23b46f6c0819536020880afa5a2c173f6881754b56f82a2864c99c820156f96b5cc4665d603597331d98d90a52f4a30c6215ee5eaa2\nB = -3c5c0d35de5fb21c84d2db228829f43b31132b582556b92b495f59df502a6d00584bb5bacd9b8c1a8c7eab91db0ea24b40f07e62a712842d5c2e1d208a6412a068cd5c6394d715260b67fbc03e3ae7eb4862f74f4d7484f747774fff03830c65fe022d579adb6737f6dfe297db750e6a58d1004e7e2716838befc2ea97179ecd53b7f36e3540e1c3a0f3e044bfe2d0efa9b89d2d308cbd0bd88ab3706\nM = c462c7cdd79b7604246", + "a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 5b704b3181e5d0494937b4d6aa8172eea82919fd1d884493197a6a85ff047a7bcd5dcf072bdcef0287be20d4ac49918d1df550d184f86d7220f0a84fc4da3ad05e131c443fb529df01fec9fe4fa6fa2f36e791f9e16b4092759016d2f9b1ae7c3d071c57edf26386aaead767a3109c12a5004c7b9fa595e6d592daaa2dd1df04\nA = 48a0ccd2d14e14e2aa862d306501efe5de239e8ef36ff6251c861a0aee9f739411f402491bd99aebacdc26c4f30306f9137ffe4579c2f13efa81b979ddfffcd23675ac6307c0aa3ba8ee77a2e3a3c8e241bd2ade6484e6ead32ce8d752fb3584d14688f223758c5cb8705cea9c56136b219d87f9904bb56be2ea1c9a035df33455206e6b7972cba32ca4c3db41991117d88da3521780fe65c4023\nB = 160120a35ae3edac3edbede9ff1c6f317d95481227d87785b7ee46cfb80fac9973e418244884caca3211a3f6cd3bb419cf70fbc22d82ba5ab98ad80e1f6c2cda753aaf7be78613ef25577107a47ad1ee3c3645db85c4d29bd77900e99e1f439cb23c6c68662c05322f94feffcd9e37d8665cde984387093a043447de590e7874e6acfa37ed302040df4d5c3dcdf9fed91b3d17ab5c141d4494d0f301b508\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 448c3a64958b82ccaaed3c74706ce0a48c5e059c3610cc03a6b5a03a7de5d4f1d1e4b08a31478fa8edd58401f0171697f0662146ce2b371e335d695f9e4a671255f29fc0b9b7d1b2eca4cc7f8357aa0920b5942e31bcfae84e909828fbe5d02251ddf10dbe4c15351f675e96e2eae6d044da1f0858ce8ba9b7aa146850b85d93\nA = 1b2a52aefe44170376df29d17ae2dc1501c9c296f72f271c21f53db71247e72c3eb2b780190c45343bcc8f548507559ced3bd4a6fb13f9174dbddf965b9c4a56c3d88727736d78be9db2268cd02382e50c6fa28ddaf8eab9f44ad45d5882a5100b3027c150a7f3bb36f29d24a76e40f3820ba116d645800459f06c20679321cf5be72450879462f0eac99ab6ff8d26b464cd0e6d78621c9263394c15\nB = -b7d9bd08d7d8e0e9596851b7e03c78973a502afcc7b5fe5b0db6034ebb8a11df1ef7ed0ae1371eb4111cefd61c61935d768be3e3755e481daced219874cdf0d07a76e7144be626cf1fc21c8a0e9db4389ee213193775e95d4d86741d8d8fc820c239b7a90937000dc3e89b2fcd61b44e1c38c655bb3d31aa7e422b4406c9e4a88e6a2c18ec7c048f4a6b5b270c90d9fb378f64be3b5b351621db48a6c18625\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 2192157490ae044a26c23eea6da51d3a3dd08c7fb67a9beb76d37ee24ac0089863aa7f00849b81bab8259f3a0e1bc744d841e07aa413c286e4bef2ff3356bdbecee756026915894584b4fcef7e49da4012cd9fcb5dbe3f3b867cb6a7ee959a328b0fd56a9eac1f4e40a22bf0a30073cd2d48f99245ac03c373810c54eaf3306c\nA = -598eef47b40d1fa1ce260edc561bd1c1ab286a7e068af412ec2baaecd07c5b9cd596505ea1bf0370ea961c4ceeb9be76baec74e6952cb846f20e5da406bd01368b85d59569b403b7a305cd7448f331f10a34def43c738fd633df9a3eb194c32d53aeb567889927271d71d3929d43fb9338248b64f7d23cd1b053239e09cc2ccf5fe9c9ce240f1a10fb151a8583e4b4cbc70ec3082dd20a9962d564544e\nB = 559fc917de34bd7dd7a23a432142ed79e3ac4a6caa357eea21e423eb9af7fd94f1eca735d2588ec4c2ff013520c3a0e209627217cc69bd5a07ca46a43ec1f1bdbee5f09ceb1b2c18bd388d3852e51070943f16152a73da624be680c671057677356c6f281a4ba1f7c60609125d7fd9086c907ca5c191820d80e483886b70c1074e2963c49996ee92577334881edafd88270bb967da795aa4fefb739e4367390ae\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 3488bf00f67b852592922fbae64fa56d2e4e7081678e789bbb3b4f48df62576d537da2e99c9bdd721c725b9a828194662bbd51ee20ba73d4ed5562482540880686d9fb1e8ae62d08e39fdbbab1d18e399ebf07b3a6559dda8b043fc25a8152858d39b10ff64776e00a839950e7a9ed5ea95b594b6e9e9d4348ceae08071ec5d9\nA = -1b135d8cec9969561be396323e2f8be0c60903ca59b6c418cb19876e9e3cdcb9ce4f5251eadea11fd6e785476c70822aebdc94617063d161ebe55584a8a774ab230b8228a2b65bd5a6c873bb6b261429eefdc7d0c64c7e78133e739efe57f835ad03ef8f84601e1a2310659db5e0ee706f23e3c5c38c9f8c36e5b15b654d1cc528f1dd392f1b08921af8be6fe4e4e6db774392441883ef867bc729338943b\nB = -34fb63435c90018e5843098e379c76ef3ba0615b6b500854b3dda3e77fc5646228fcf3a6e1cd87a506e4959ab05e24474990ad98ad0865942737734c03dc289307f1b1f424b9a8c2264350943449b3d2b0f71f989039131e23095d122ae98c0089a184dc530669e804140134e5b602861a5e61c030fc3d3b3eef0a59f8c0579fc9b0afceaf16698de3fa07c43231312254c04ab11ad7a29efc4597780c2cd1b64b43\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 8ea5fcf7fd41803606c95729d2d910941e43b222f9b0c93a1a803b197fababbd653a92ee34e805906fde29b307a962a294aa4dabebf0d181c046653ad0fe6da1295eef817f3289dcc6579cee8869198c39a9f79992cf6894162d35d812df327a64470c935994aca4985d0e6a783b853ad762338dabd575ca71034e29d768d014\nA = 6858d029a62b0f75e4c59f3ec067e3990b2304c90a097daccaf554abec49a9d297ca14648471dba08f22ebbf8e238c89ea06f188203599aba56611eb3d4df09ea795a7e28f91f4a9a582c6b949c6ffc584a076de653446aff9b24e87202037974aede37aa9a121b5b70a3e9b5ca376c9056c2c91f5d5484baebb64cccb6a09b4f40529afad1ed64b4cc4aca586892693fb5f92edb6b4d5f678f7a2441e51410\nB = 197d6deff7adc30b025e7e418cca0a641e1a1b35f78fb56b9d8847f0690313475e6fbc6f73c3a718b10bf37434dd9fb1eca33a99bbba674195b20d35e3b34ba9d7c8438eede24ebb48e6d39eecd93fcd7dac44235ad32f208919f57b261da70ca378f9b03ae5e5a733f97f0b3f4102d971272015bf50b6f3e50c7b36cdaa14a8a580366c9cb0118ceec6e627827b0b8f614656292675ddb66e1c55355d5a1d78e69ed31\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = a25db977e7a8fa4578fc530995335411432ced67e131fee2cd7ff56970df64a6f0f4a7d225d2f4ccec8e98273ec9a0f1aef01dc0b866e425d64e09cafb9ebe3f80bc0ad71c769f1ecd5efdb4a990ebd3a94303f52f4a97e3a1d615918f8b2df5321c4aa9339b4453d7a710a803106dd0ab49c6cd9aea431f97fea9fcae0bbd90\nA = 13f97ba15ce46ae32147a0aa4c1639b6b555f4d8a1af15ede4f1103f7a0b06b4625bf456d667720adca0c4e26e858f008b012fae63cd89322b33fe51e87714519e7dc3cceea27d968b46ebc04024d063b17901a7ae978591ca6ca41afffd81769f04b714134cfaa6700cf23bfda6ce67313988bba5fd3782bc62f76cf551d140c978dc002a779ae37400d34cbea013a5d1338b203ff267861edd88ab8ee1e4c4d8\nB = -88d8a4c8c680fb01f493f73753c70ee753951d4734627da14962e36449db5490b8c575729fafbd203a125b500b96364e6799d9cfcf0efb4ec877e86865eea5e99e2fe5e7655c1ee0eac641e73b71c66d7a72c2934d1ccfefcf59781035b2c7b89e5de3f7d1e9128cac57947d22e7577832ba374492a2f53be37e17733d8bc625fa77fa5cf093975049a5c477f792fe75e85da26cceec820c8b255df0292824b4c3a8ed455\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = c1f2165a402fe9becea284dae60453965ce327f540bb8969562485fd1bb60372b8689d9c9c97c91bcfd699dc370117ea8b704f06cae3d972dc6e5eaac971597c69d4dc24a68b256f97229e643706aa6d2d844078a5fee2d08270820055ea58155d7bc754f09d0c6f804e55ebe53e3ec418747d4130cec68533f6f0c2f8fd2409\nA = -626a1580e52ba52a877cdcd62b34cbc7f949148671d4a61201e03e98985d704b2975b9a2d9c4557deae065becd662ce8448171ac582894bfa2c59d4ed20c6d0471fcad1d0fed1291df5e4556aba72f3645486580c8bfd0e3c8f6cb34fe17ccdd75fad4d4a2db4e00bb8c2a23ed17a31e95631320590f40416c153efdaf897e3b278a1faf1917554d9292f90c4edd5992748b58492289eecde1af34976ea8ff507fb9\nB = 44c336d7739118340048939d6c198f73f90e13030b69be286ef920902391d87a58df3632091d0ef25340eab395203e8dcf3389e95debb7432165147e145735d2e3226637b4b8cb7d85d68308be07f217f57fe439b31fddf3fd469869a20f1f852e1645b0d4903432ecd1fb6397db4c11f6b6b9c0fd25778b0ff00bab9ff576b16538a6b7da40f01fa7b987af8ead41ecb66b", + "8940c0e8a1208d0026773e711153d99348e92303\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 98eaf476f11168bb63fddf7dbf3347e619f9b580ea6804ab893214e94ebc089cb652e307f1f37ea7ab9052a352e260ff7d1e8c17461bae68c52a8a8f1a57a84c79b2c8fcc2d504ac4f553d2534f2a776ca129ec1942d83c8ae24c772f6a8429bd61949ca1aa714cc3881ed731497b84415c88ad4b9be34197a549737edcfeac8\nA = -15897a5a986641fc2cda42d185d72aa1552eb92f788bb71cc74c0e424bd038e02c620d0686ff88ebdf0bc1632093c0d89e724e7d5b526b0ddc4c7e145aa90b36be0d8574901fdf286df84a6b52674a78cf21ae4865618b4347bd905461d878537b33cc41710ddb290964c48e44d4d2ce2ed82847de75938d23ed418bb9ff1caa03b5c1ac5d65692dd1defbc6013b3270c4314a45dc67883762fda5509b915e8277c1924\nB = -3a7141f54a0bcef68cbc3006166f7e15a5c2394892a428fa417a485981316a537cb3ec757d4a2473fdec2cd61010a9ff865852af8f43afc79a97d394bb6c58643858e2b4dc5cb958c33781b5c35aced7882e8b8d7b4e4249c2b82150adfb0c8f2bbb1cff3d2ea27ed24eae030ef468ae4d6b7462f0b072cd2a2f02426b3290b87b14d14b34e91a94c5bd69e9eda53335cdfa7df90a57f97f3d023ff85537fe0a8bc5d8fd7901722\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 34464b7a50713d17b01b5940b5acfaa7006aa6b9b083bc17e0535b08783761391eaca8703af2edbe13dd0fe9036d38aecfd9faae08c0861042ea1a25b41fa8a15b7721909783de3aca127e955e177987518dd010306a795bb66466fccd55bd9e2bde17470cbd36b1e8f8b63805229754387a5fb40f3ee9a8afb2e51e25c8bea\nA = 701ae8c5bafab7f41c999e492f04a7626b2b1054e6dce1b83002b2d3de46717225b018733b0fa8fe3f973202da8a090ae3fd14f48b27097513ecd4ceb1b9729e7783c17fee9be5221fce4ed3860275b3b36b7416594d2b65e198ff564e82301cae23756c878494e57b5ea8fd22ad800a582cae32fbc985d122cbc6e0eac77c1000d3ede45ae7aa087534adfdea8e9f924efa1b19c43dfd3b7bc83d7c40df7c6578a320a19\nB = 18e0256543619a750384d30b6a7afbbcbdcd9a2ce644dbfc97a8ff699e118032558f706502c9b956695cb25a46d7526596b3d0b67b69611009265838bec533a9488d24583e7d7f2284e23c3cc4ccc5920fc57e24f60da0d479d41f5b9c6ad9152903a4f37842176c6257fb1e3e0681d6d583e704c1d1b24cf616fe638106638fe9d79a0c74f0df67cb2df9d99185324ebb037d01ba0066ba947d5345cd3201b19769d438c43292f572\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = bc57cbb3e1051d3a3035f77c2e375c7e3221dd472edb1a5ccaa7521849fc0ccc7568238aea9335a733d839e89ace6f2b66ef238267e0050c065c3d9553cf50cc5cd93d34fb43c3ea1c31b8ebf0b751f595a7e5e3e860b366229de4286b9d3f0267f78c6888ab3f208c55d9292079116ea0eb9f4ec2934c97149aa132c03336ea\nA = 1ffb0aac11f6d1d257ef7aa997a030e2a12b0615fb11ff04f344f6ecd550e8e77e9883c246e009af33a51204e4066ed4249950e022a61337848dae17c88317e15ade5b5499c0d7597a69a02b6c18db0f975c19c16d2167c583571e947676ae9c15be60e69d76e78329aed5fa57dc5e616795b5487f3d52bfe74b54bbf93ceda093c2e14104a6d2f017f0d200a9fc89deaa283e04b0bd9015ec67598425312868eeefeae9c996\nB = -9de2d82e25b449b8ca4b02b2d2fc0a023fc5804ea553aa84674a815bd74193a2e549070e2cfa0b90a53070646875282fdf855940905f834f5a07f073093c658cd1813fc5cd7092af592092d789ab5481bfb14b6683139646cff8eb1c5dcdb6a33113d1c97d4b587f15f972c06046730b7e712a8e3dd5f4bfd07cfae289047de31776f222d11510ab6b70a200ceeb6802d6c33f913c509b31b96e2b8dba9e25b0d2250c3b102d814683f1\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 9f7f4e010370ec1d76fa83f73c80825c3b71521855fca5db06d7ed830c910d0430375bf319671f6a83bf6b57d9d53cfaaed5bc5d615c5690df0067b18791c33cb9f0ac9fa5f0473e4f4eb7840b0b660962097606b3de5744089ffb37d9c0df1123a91a5896d4deeab8aebec469b099a3a9a4f6d822030ec2fc4d11636706fd0d\nA = -7f56093243ec2399548ed95df79363e6ff09de211dfffc314b7cee526535def0f9a8eb9aa6f1736528ee7aae8be55c06645708d576111766ea33e0564c12103edd61ede3128a7a642f968eefd0d7f3768b1325c2dd910d459b15e54145a234225fd29932234e59d3ff5099ec4d5b5c6075f56382ade1101115c7b94e1e2a7bf075dec210fdaf2357c735416dd5d616335002d1cde6056bf7c478f810b78c661a3dbe6e54084bc9\nB = 4df1a6296428d06f51f31a1b0f66d0b77a04db3bb8e1b80d64da649899a1a55d4041bf0bb47d3e3936ee0f3740e1e8c2b235e1b8944d28c7d617d1f968abcde9dce10d6e3c27b2e3607d8df815f5a39da9b5569e95eee1fe5532c0a80011e7415800d8a9ec175fb1d13dad959becf04964b70dabde6d37072dc9f6d914309b850cda33a565515dd6c0181fc48bc7033b314ae0bd5872480e02ffc08dac4e3030d83b33488cf149e19b0021b\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 6da5fcea305cc6eb47fb17190889e6a39c339da1bea2d7c95e997fc538b4aeec8b0edf7c109faad7fb6c656420f4afa104ada7a0d3d14d3ef0fc6774b59aa2687c0b4efe7c3fc83194a89c832f7168346cadc2b1fa6fa9a23a67c91ad731b4cfb9943738c7f9951945b2eabb3743473d9c0444ade756291f53fc7641501597a2\nA = -19dfb98f9f7d20fd331ea749d2019d8367935fb75ecde45d6dabc815ab9e593e51178a72816f85aa678304e6ff3a2c24079a59aca253d76c4ac633fea1070753ce770765bce47428f8f5ae40c26a3ac91ddb551b3d575bad9a3b6fc7954acc93aad2131b78fd212fb0db7cca4195b41651a5311bbd4d8c64f1c93e6520eef8e6308e98caa1cd0d3c9b4041182cbfa131c4948257f1200b1c5351bee77ac8bc8e44680ce64ed0648f3\nB = -2736d5038c60553927f389c0650bb1355b0ce745a7dc5f52c9909039465344af910a5f6a9cc4ec130b9877c1cbb52fc08b20d672e42b853d26a02bc07eabb9e3f91399db8465b6a8b1c9f4a4b9eeeec6e9b6180f1a770c139c8f29ceced61cc7ba182884ae01d14dd85bc924391333e8ef039b586b6a0ae18db3570aa560c2b0226d5e23e7e753873637c25aeb19e74997da4f5d0755571785bebbc7dade57446e0df4cdb8df23c1003533f60a\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = c0265805aa8ab52da5aec06ef7cad2026fa0b18edb27b4903e3c068ca6464465e34d3f3bdb4bcc10a19441040deaf5569645f7e09b36c56631b3a6144d6206d39c9bcac53b54210db6d484cd6a2780bc68c07272de03a9bba7e51c9d86cc8883cd2e1864a2ed711d505930143c883c57545e9c40851c6df8b3314a8c9a0d201c\nA = 5622f906b077d243521325be82a43fce321412bdab1f15e4ff0c11a7066a288b7939afc01d30243c8a4150e74286611ac1ca4daf457aa23508a7af869d2d55f54f2746afaec477cd7df0d5711dd636802ae7f673b3f730236ac3899330f89cb71d48c2838322fe856d9d8b4053d9c1e66acdb5e43614ecff954dbe37c5269d7ffe00b34e682c0be3d7cf653ef212daa3d55dff92b329126636e440b0bab55f4810a2849f77c39ebb93e\nB = 1ebe0d1800b1fcfb67d7d54568e45dc604450c1dbe103ee21d48dda300c1d9b9415dcd9f5a56cf12c2ede3c862e895efb83621435377387b29b882b2acac78386895c7daa90810092bd3062a3a4867f92d54622d7f0b89b40fabc4709fd507d4002ca80de231596630c234fa418611ede0ae4a9616d570232c1b03329bad02220ef64e455c164aadc16190ce35b78060a6b117b4b0641fa64dd8e8cddb5914e7657573804e63dc7b216b1a9aa175c\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 606d2b6f756548568013bdaba6e811dbae88fb01f5f36d30d15dc1e099d86bdca9fc1eb3a785034ea14cb7f4776586327d57ca5a52ea1b30f26e2a76140bbb0e930c7780673770fe22c5ed443c349510e1494ebe402f2621b1e6bde39b8691edbe5c7242efaa6634553e6af146dd40666edf4a3db5d1e7f9347fa1189c1e5168\nA = 14ea5e6fd612945c71fdb17ec44d95015773edc908a85a6645a8eb823d11226545d05b81791401cefc81ce9765eacea7a619cb482f29d38988d355ce731bc9009969b7487a3acca2d2065c1faadc5d6dd8ca1dcd3f3d4ff61d0a75ef75272e62193618f6b802f70795041de26d6ce367ba996dfb91167cb1fa16c8977f982e1718de7d60275a7f66e4ad72ee55ea06267cc4e8b08f488579825cc674b0bdfd34a01bed08b62004fda", + "15b7c\nB = -8a542280f6c8bf4d9fbc96d5bfa6ee0d16a09dffdcbfeaa2dfa1097a760dec7bc540a0b5b2020bab1eaa594117a40a9bb99c3f16fc340c262b29909608740b8e77fe4706a88dc0fc3bcd47998e88fa02f617062393978ac1bfe14235d43f3d5edbdfb9f140412f4fc2dfc05a700f47b1f0f90da7ae07ae781d9ccdbb951f19a8b8a9a7dd8a65942842cf207f3baed3a0b2f08a06ad0d9ab7ad0110346293d51ec53ff8165b925c0e7906be8b7303252\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 512220042f151479a6a8b7c743ba83366cb7733caf37164e9c823422ccbf78b0b83f426a7230f559d50bb0ed3d9486c6a6e25f4cf96c4fdcb2c861566c6a73215b6d08995a14569710cf9e54abded1d77fc7722d06fda4557a3a99862e5ce963e1be25336fb42a4629391cde3aacd47ea5f5426e7185c5df27d9136a6df26f54\nA = -4d108217b778694931088bc255d1f69cf8f5a14252156163f948ae58d58f2ed54f518177d668e795474952c930052c1bcfcae11bcd15af168ec2e881e6ddc8de257d0cff90ff3ad409bb3a080d30fdfda99078cc3ad8302a4bdd77de66ac082b40fddb3cb36c75a86bacaf60984a74a0fd575d751ed2830650d85844aba9e3f781b2dc6b515bdb8d9459b083e1aa653ef177de76282e86c99e97dae9c0b050c9e6456a051e7d99adad7be4e4\nB = 7b9079504c635655a588ac360955fceb10cdea5f3de548ca2db681da38c17a70df5798f72cf18691d14a5f400ac69fbb47e64115cf071466c54bc7077a228249209542683ba57791352ef3409f6a947865d8f234ea9d39491b5c001685487b32130bce9aeade97d9537afe3f2f87e8f3315619ef7f215a73cb724f1adca99b90912aeecdc81485c0d00a74387ea99c965118fc6a9af1163e60d1ee6a1eeb12d7c2bb9a54f747a415beb5873d616fa0eafa\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = e36899d83a143c82e19e11494ba18478c0a9497fc89fd83df38adcb6b33918645a416626409a156899c6583ab9a4426438d9c32cac54b78df579cb7b6b1feb3f39ca4a6183743a4b823082896a89f9f1722be842cb2d2ceb605f84a9f9b61cdc7e184593fc2f9ff2994fe6cc4860d255809d04ab47e154eaec9ecc807ceb298\nA = -1422272d9e91a14b38b3e81cbd9411a0cafca23addf4f33c94a1bca70603db879dd8a9c0b95f5986bcb447731219c4f9b32a1e3253b027b7963ce40279dbf4008e526adc0bd7bcb2b533392a105c6e8e1bddfdd2bde7dfa0d2e3b1c6ffa07fea07ecdb9fc828283e93b0ce4861945562478b1a56de32251b7d31f9a2309488f7cbdcc38cd6b1c951570675ef0d61e1df69fed78979dc755f160d93ab5a3e65dc2944d3333cb85aaf87a153a90fa\nB = -2424fc1e71286ce3be684a10dd885e4891b52e9009c3021d90ebcaf68b6db81130bdbb74869cbf142e0f44ae72684fc12c85abb5157987428c7812889beecfd7bb43fcac2eb6298ebf1dbcd2e70e4274841c2703b8685df18f6e5bbaa1422004797defc6ba843e77f891bbb46699a863bc1d77c5e3cab809c247e2975e8170da00fd9c8b232abc3fc6b16951ac4e6c96f9503c1ff2d6832ff9c35b2c8aa408645849c577d2b8599ef520da57fe2a9eccfcba6\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 4e8a59476d47ee2cd0217bae2981cf25a2c38e5f5d5c30c2d8bf95856a6e8f42429e565f1836365e550d85207246514624e7ed932d6f5802a50ff9f15d500dd84b27729c1717a3df0f2d6dfd40f0094208445193ba6500ba03fa3f4bdeaf9251aace8729b32ec3215bcfa170575e26265fe523cf44a071470e3b1547901e9227\nA = 452cfc78cb9597e67aacd4ec83e5b473ab8b7a1dcb6097fab37e25d5a6e25c69c73a6c20de0e2a744375bbfe7f612036e69c7a503255d9e17c6ec1dc6cc6f634d4c79bed4764496e5c7c026fdf9408242d3b234195e67a5681e7d7b861f58eb631ddb9aeeb0e5b3ff7a7657a7fde5975b8a9e1f643893bac47debf7918c7ef8f6d7439320dccaf63b80ec9761559078baa8e35d98fb9dc242ba83536eef7ba9901395ef02b19990d8312203df7dc1\nB = 1dc222e7a737e6d97a703fa232defc6c0a4fb2bafd247c8e547b9c474421cacb7692ec98f94be19a5e40269e1f5713d06a6d081a943dbc667bc867e481b99c55e437061cd44c4482649faf870d9347e0252ba9dbe116fb4992dc2c2a0583c1351e9e01e71e9324f5fa942322485bca93c2d95cf304028e68224fed446966073ec7326c93ae326a7a533a36e053437910418bf1761abd9c4c5ab7e6f538e9bf963903e6c80f21a0a38a683e8166e4626a8d8b743f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = a4d5e9fb7f0d75ce41ffecacd2ee1e4d15f82dfd4decf5ab1bee75fb97792d0d574fee60a30b15af80bd38e6a25b1821e61628dbe456e39fea3f8a9ee6ef3d2332412be1500fada0c1728a1457656eb3e9d94c64fb2d0ac89f10f2b9ff57d73207274ae7e8c7538936cb7241615b830cc9011d4363ef88f51c7b3ed503c25179\nA = 13eeef030b3110451fcb1a258434aeb51d3dc805b38c72ef7c79d4b0e18d600e5dd28b552b59f3dda1898367ec7da5dc6d9089a585cf52002eaf8f9ec64b8d3ec50d0bef7dc3faf203c48583ec89757cfeaf888ec4a91470a6b8ec9f26a6b07f3311b4fe972cac2f2ffe47f5c11d2dca87c62680e2229120cba4de9cfce9f7f5c33af8398c07ffabac1675de1845e05a32536329647214e54e5d9216fc0cbf2730898eae19e425688bf184d16bd1d655\nB = -ea324da99252edb03f40100e528d9a5080c43be97fe4b7e03d9563ba48040d328e57d0defd4b7ffa9bef3ca0d2682aefd2a0ffca8566e755b11f2e3c6c1b707f1b9465592aba6181e583babd5c70588e7123361a8ae77d8c398e33f894ee288babea1d7eb63e2f3de469e502b5048417043c5a9a9a3eb921cea1533162e3ce9c79e6caf62bbe7e17b180b72c59b9ef5fe1a001b733d909a8278029fb4a63077ef9b3545f1159ad73dd75030aad599ea4884677e01f\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 2f096fb8fe2156c41ab695956f13f0fd9a084f87ea5f5b1acb6b60c62617b8d7079f4b072223ba18cde474af3942599fe070ddb0ac1a99f42b9506a2648e1b8f6106015aba0bf7a824842403bd3f4ac8b6fc4a9861bf0e8ac59be0322f0495e4b515fd579dfef273160ddf96e453f4ab663e703609c709fb1f016ca919fb26c\nA = -4212bf679cc00adb2ca502604b71dd5dab99cdfaf55ae92aee6bcf8b3b6354a384656c09eec6175a95c8cb4591ce118e783d6344525c25e5b356e45802ea3ce1fe764833132e6b7bec434e4481c9cc2986904988bd8da7dc2e31cdc481fd0e359674bbff524124bab1ba4379885a6cfc1b73d953e6d1aa1b938129d74fac9dc597c31383f2f7e02fd995f7065290a9812ba8e205316ad5bac6fc65c6c7310f1a6b033503ebfe85bf6d3851bea1b65b9c15\nB = 7ad83f97f40d5be508cb394c128764532f0aee9a108eb02840ca1c635860b6d751d5f676e8670e2f61466397e1bc68f97ea52d64b335d07aed22f20bb1ed19e3e42e4205d650e6d37714c2f80d39b111577725e3bc7ce75bd7ed5e44f8377d5fc2b97f05c3c1ed5ca1ec90ba3ff7935a25a8acbcb15fe1fc7aeaa1e444cc2f06c1e6711721d24b8969d465e4958cb87924b3e0fe99ccb371009b5b15747bf6dd5d0fb73b8fdf58d955c8773a55424a34c741406f6f904\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 909626a69c803e9acdca97c56781eb672d6fb31430a53b853f467ca26d4ae96c182d71c0212894b776c88e773acbe9602e3ca56584c39b5947724290def7dbf04c6853a108c1282def95dbd5bdc015b68daeea0ee959b35bc5af98a4ae4cc7486e627bc9432bd009b21ee9af3085f074a3ae1bca879e321018e991e7898f2897\nA = -14eb8e28dd04a159c576eb10578c24fad9eedd3d8b7560b681002a54a4bce2167de05cd061338f63c50b86327a79595a2dbfc1d3f4e76aabaf88cfedb69faf5148c61f8cfb2130511a3bf4a17d846ededd4c08f3b635182dff1854e8c4c48007af028e06f01235fc2becdb32adcb9e2058dcf8f8655624bed9915faa06be972282cfbf8530bc0cf2de5b2057df32e4a6cbc3c772feea0a511cfe3408a6dab0e2714fc4cf15602ba0da03bf0016f1f3f5ddfe1\nB = -388da160568aef9f82fc16f48a22e8d7aeac99121cfac9b748c815e5d3a823b673ddcd20c1168f98ba204df5e52535f61b224fc0374092f8c834321949fa0a812b5e65c492fd9fe8246b74143a943bcdbeba16024e311d673357a3dd3eaef9ae3a72bb06e03e34e091cbe5b6a9eb9fa3d7f36c03baa5c3e242f2c186b58db5dddbd73f6aa54aae027529b8f8f0a536b9b283ab08247b9977a2ac2d0d9f162ad03a2fe247d2c589b1a2d14b5f90d5b9c0a95918ea956e261b\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 128e8844a2f04704a4a60cd33e85cb7ad373ff683abd167894a35a1d", + "af947f504c0abd7a614e293ce10797a5330147c88c4d5e1dad1bdbeaf74095e3f5a515f2af68b7bc11ee1f53b493133905b654318dcfe73118ef1931eac47deb6c4958406b704ce027d9b027803eb8e639b52d5983094b8ff4b54e86a7dc6ea169ff1af4\nA = 75e6b045aa44dd9b8f4b434dd4bb1346fcf558a5e96b00fef9b6cfaca72fe8b1672edc2a64beee8b959683b1861138b297629b44a0caec6bad2ac05665728379cffaf66a129f0ba40aab7c6b1c3fbdabaabc87ed3dd580ba80ec7ee765e9a8fbe845c0d207eee7a1a3a0c39650c75ccb6bcdae2e0d5149991dc3bf899ae9b7626a2baa17b168b260d82fba84a12f10e09234035e08b730cfc230f0d2651c03e34d4952fca6409b5c6ea5d8791c90466bdc4adf2\nB = 102fc193633b0e60a48dcc17aa76f3e52cbbd1012f179736a0ba7a102f8dfadaf434063b0ed1b1528a018b349eaf192fe62f868b538cddd7e8e6fd98b93147727d58561517b2836e4a373bb31fc8d5e42d16126ed80b880c1a37940c138fc1f7255ee0b7fd39b1b799c34e5178580cdc076ef3fbff65fdff7497398fb1cac75e5c09cc7df1168a20f88a16e7b3ac78091a90f1169bccd48c0d06b4707ab79b741a168deae5ced5d48bb5f5dd3f465e43c82b9db7edab24569b2\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 9aa9699d1e5d2c6acb21e31890c1899f30a925b834adb5b8bc8cce83a1718944a2c90faa71b34379a21340457478c0c43121dbd65d62e290eda2ba6230bce4e6f18555a1380c7c95c1700793157f7c1cbabeb09460ca28dc596bb17851ab2ba6dc6bf311ea69bdb7fa8eb78df74adf171d4677a154b8536f8104d919bdd58648\nA = 157fb9e1b38f288db78a1a0e22fdd9f48a59779487a9ada2774a094d34536b85993e7b9ab6e24f081c4cdfb64a82271100a054169e4f1c24e3957ae9aa8300e85eb2a45a6d5987eed4f0fba6fe8557cbf6128e018c5f9df028131bbba6c544b2c6312aeddc71405f0e4ce648fbab9e5d51685949408e4ccbe06fe501a36fc13ee65c31f062313135054b7679eef45964c77f5a1556ac09b11c496d0ba8c6057e283bdaebb4e6d9e5c557d975745f9f98a288d5bbe4\nB = -82cb6334479bd997c771e894cac1ead87dcbaf8f5006be5c70ad48ef94303137bdc45f261af91a201b276a17d884a56ff27af7dc06cc5b7b9c94f7c4d4a36f68f8d309c477b4969a6e7cd1b2afab9deec06555cb753d8a0eb00965359ef865a84bfa87b815a42b2050e1635d5ae5e3743c007bd79e820aa37a968702a960fafbddecebe63f022553cadd7a4d4fb27b4dcb981e8b490e80bbbf13af8c4412d158775db71f5fbc9986e7b8a8f9299574abf7bdf9ce7544e8c4e85bc\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 46e401989fbcde9d830dc6e3c42768999f153d44d270d4805c5beefb470bc1e82706aa7173b359763c5e15d146eca91a32a36f0a80802871933cc7f2ed15a5472988849a2d2f57543345b531538db57ab9bcbfbe787efb0a82e61baa505aad628df5f9e881dababb35bc2decff267eaed3d3671757ae1764ec5163b792b4db3a\nA = -590c16ea2cf7fa7f63b5cf74804333f22fd2d0e1da7d226da8425abad2b39a4672fcebcf5cc15d220b0ecfeec09665e682fff0140f16889f7a6ade9ec11aae3fa3a369b3fc133babe52e42b7a8bb9a24777521f4d9e0efe7d7977dced9e40784c24d2c6056b3b668ada7856da71af73d2dd33d2e481ddf40999d86a6e236d0d73f31a67c52cc8b38203bb2840c0b92c2612ffe5fdb6be87f9a787d70b3dd506f9a63d144db3417495f0a48523c812d14a89710d95bc6\nB = 5a2865cf2254710a1a51ee3056b0c1f6c5f77d22d7aa8f939e6f48ecec529a169e630c554bbe682a8c4de9ce4daca77a278d7e752cb678141ddefa75ba42e661885a82ab55d699414ffeb75802cb8f4e7583bec8a7ab58803b378bb60fd46f476ea490c9aaba568ec17f3a6afdd6f20ec54a512f7aaf62d2f941e35b4b72dea77095e863dcb38bcaf8777707c1dd437ef2ac6b6a8b2b832f80ad2a6d6f279c053d02058b1a657a1cf5b6b269e15d29087b0cfc0c2d4c3fbf32a167a3\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 1c9649f4540556ae82ffd71b2c71ea8588aeb845c50dab595db9f8faa01a26c809d30d8433b6c0add465e164cda2b6723c942ee87241eb7baf9944cae08babd8e22a0eaf35c09e9efdfb9f8bfa65d53ee6eb23fcbe1d12a66ae05e7592ed788b231b000f895d098a24febcfa4372d249575926a5faf966072f29a62a401ec51c\nA = -1bc9ae5fc2f6a3f1274584bac1e145f02c5e8c4779f4df15e98dd34344c988c1437ee4428485a09090d81b18606a6ea5c1b9136872ab5b37373fbffbb5b3fa8fbeca1e112b9f1643658c2f38b9548cd8f0f271779ce0acad403177057ea0a2af2e7435109879941fbf463488a2522b831b95c1cff21d2d816d70c25156369dbcf04a0e28e1d746afb8a77713703fefa512816fe73e203bb4c3428efe09b946b750199bd7a03d30feb90230c219a103ad4528cbe0de1e5f6\nB = -39cae179d955049f830867d4115d3bae25127c945b1fa0c16fa850e8fd77c1b3b9b7916b9983c1659b7cee77b7dc72abfff1c56681b7931c5e58cfe4f1bf0168ae32df0df8f652223885717a98f858a497b1a4be62a2215c39316c34451b0d957791f49139921d9ac8041899b8fdd5d3d443547a26ddf5748147e4c3e93f5043ede42f38a9baa628df65d3d6148ac2ce182056700f0f94029be05d3ea3a218b40f65a87b4baf097fce107c080de24880259f1046175db1297016af76d94\nM = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4\n\nModMul = 9fcf6a47addfa336557749821a88ccd2573a5ce2c3094a17d9a29b33e043bea165499e89fd2c939f17a670694aff05e9af46836b62c96e597c83681092d63ab9d6e22751aa8fd4b9ea94a90a373876ef0f6514304a495edb5ca1795c9ade7965c70f9aa92f8ea460ccb670e9a62c81e9c\nA = 71b93fbad39b1c2755f2051ff7d532d59c985756410d58aed3947d6ae737ace5aadc35e7e0d29c684b9d4bec9c0fa277996bb30230f70431cb7b905\nB = 167be8381a3392dd4df62e150025e13b388bf366922ba8632614928922cc290772135857d1b5234d51c27862cb1a055c1b86260b6ec\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 8e2ba940fc5165c6c5f7f4cb55cd89d1d5f59e90e78730bd66fb120a814514784879dc43ad4f355030ddb3486a59bc34b601474978a94ddbceafdc0ee23cb18708bdbd824d37cc32577802ac6057fef29a71f168e816309fc80cc46f251e7289c6a57fd222d5868263360af63dd73e7c8b1dd6b3f3b6939849580b9231940a4d\nA = 1220ac4bde4feca135268550ddc79d8b05ff72f483b39f77436f348c4f5360c22c598f7dfb76697bf6d2ae86c68e90748b8b729b25f932b2e5fd33f3b5\nB = -bfee56cd412318cd62e7b6cc49217345d3a94e7fbf6fa19053fa685efbc0f8b320b7e43883189396781c49371dffe7d126c032d1ae4b6\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 8e2ba940fc5165c6c5f7bcac0e449b64801e75134a390f120acc58cbee43888f50d07f7aa6dc2b33643c025cf745434d20eb1aeda8fcee5fa3fa5baf10d67c21390297857aa50bbcc4a29a6b10885f97fea60f1b88fc72512c111b938142ee8d67545efe386622162e8fd50418b09769b8c22efe54fdacd652580d609f0528bf\nA = -7bc53f6f2e78628678ebc8e35ae4905caeec61acca5c64fdf595689cf005bde2265cd43172802fc133dafd933d7b48def44256868d202727a4aa6c0cde66\nB = 74147c93e729707111d0d531b1c135453f3e59f63a7e082b43dceb8b16cc5debdb6d7c0ce0c00ec9b5ca51e7673e411c3cab34938124db6a\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 43c47d7e319c32a758360dd726a1d91e2cf5c57f73cdf9ad2040e61a9c282a2962d96d300e04288461eb1ed37df19e6b88f104a250f9885898740f6487b081515314e0a217df2d4345d3cf81eabb2bfb346b634b9c251624748f6e9407cb677aff4c53fcf42cc027de267e6ec011e14bc7f3bc6666f693d21\nA = -1e6ce0b44105047d0da0eca7b936980267db41d41319dd5315889fe8fa2329023d7cf54f71ee179b5bfedf442cdad1920d311966f7175cbb953bb42ee105393\nB = -23a330c7e06cdef4b6b121d15a9c0bc774eb5e432e72d04c5f03a0c588e55e010b61f57c03c51edb1211685d8dfd2a35393091fd0e3ad2304fb\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 768293c84c431b9c8dc6e538ca3f856c60ae5e1aaf42325865418b7bed16c7fc2589968319cf41cb370657c8edc7b969", + "de10e0566b64ec796470b630e22477e7aafb38e99b6012f100c9d23d5517d486e3cab1fc60c1568c0228c9b55d2d77d23b1351fe37ad4fbf9c07f29330a539de4a32709d043dfc9e21aa1a\nA = 6bbaeec78b6a41818b7eec42fa3be7d639dfd86fbace2bc14e0369dba6dd3f04ede8b808743d809f43f70f1146dfdb1d649546441919e27f1f7a9760da4a3b152\nB = 1199dc2f52868a0cf440f6666b576541c7aec1e9cee14c1d22010ab0f53fe8bbf3029c639ff78d89dce82de85fd8eda4e67395d435df60158623c5\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 8e2b90afbdafa02ce68d537ae807b4e7f3e05a66b20b84cff309941fc3150f99d083841ddaf6f19f5a76886ad5d853c73051a0457e95eeb0fe3776a084a027ee77d14f3825713a59622ea163a679cff904db33bf6ab23b06eb4b31f4e34fb122c8c170321164439db783e7bec1c265eed33f33bd9cb6d1611c00aa18a9b4b90d\nA = 1c4821515167f7073d4b7cfa318ead1da1131499c12497447846caa84176a9d4af576fe549fd8b0f77bf8dbebf6c395f84dffd40400101bf28b1dda0bbdcc5da255e\nB = -de60cd639044e863c6a49c73213dbc2ca84e4225aefa5f880e829f2d9cb48ae92e3f2680c462ac697dc34da38f65fcdc1b4d8c3c99e8cbe29660b539\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 33e8e8e193b4b99d8bb382c29c1fc5403190d7654f43cd77e28d1bf77bc3a728dde9de9a89c6522ebc7222d25f46833fd1753a44275b04485c77b675d816090280b3541ca61bfa33921a79f7286830131d6eba13acc46cc2c449b3a359f1cb49d67a4d0cc1245f3f8b59b1684aa0c3ff1c928b8e880a3375ed811dffc991fd1d\nA = -50ff3e00feeb2efc6df6387d6409a622b7a8297a717b8d94d0dc41c6ec6f29a8455c3580019349660b31dea1e4f66b74147de93535e671c853b604ba06a9b62d34646c\nB = 49ff858c7081392defc3ba12ea8869fd61188ff15d9339be72657b00530b851de53b1fcbe16034816e73251fe1ec97bcecd8bccc470373974287ca328af\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2c88dc40414969e8b614bf8db05fbc38fb2b7ce144d7e707f9f8eca40ae2309c1fc67e713a8da5fbb20e808ad20aeb369cb72a77fd285e38a7895ec0fc795ade4ef1f1680f3a3b3cee4569cc9d5e699984daab3385815d2e515ba5d67d21dd1defc12ca81bc8ea645f8f8d103b4a0a9cdc92eb50690c07a037df274bbd5217e4\nA = -167ee0fa8e5d8b569d7848b068df06f6baed80f6fa6a442f9d11d9712622b512249b92c7ccb821ac751fe4ec0a7a47e04ea5571c7cb45a7985749ecdd87f0c0faea01d232\nB = -2207fd8dbf2b8e9a5e3cc515479cde241dd3671803f9fbf7859459ac66705be055fa759c85631ed2a61139657eee7eb08fd963b49e33666e60b7e75dd26b5d\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 674885ca3ef617a53eaedb9564cf96bcde131760ac541a81f4b25c174a6fe1444c2c206f7171e343e1bb43f81610162994c497419e75aaa25b664c122ed2b27640b45bf646fc5da1703fbf1cc66e10a3c306eb69ae5f937081a1a18dfc8db376ea18f4c1c499109b0cf8806eb32cb1f28985da790047bd7b32c1f67bffb9761\nA = 413cbcbbb5851a4ae12555801f7f80ccd888bb82ef1b5c31b99e1901d7e0ab91ee489c84044bc21fa2010f11aac21d0531fac09feb482fda579cb9f224c3149dd6249b0225a\nB = 1b6bfea70f1d80350eeb45f9a5cebda954d72cf5cd27a299ef5a42e1ed0b50a541d1657b70e50b0cab69b22e31d0944fd735957b1ff764865d9385af302bb802b\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 8d74ba5fdc67733ced4d468f6eb6ec4c1ebd79c97682c1d4daa06105788ed9c5144992e555d903804d7ed0dd9b29ef2648568ab7ff462a03e0bceb5482485afc3b91448fcfeba435dc587db6f3a022428d37fa0e85392d0e48e7d4ed6b21253084e653da8175587b3b709e28426cddfec8d9dc582d4ac2f3d540305c0fe17327\nA = 17c0b7f0e2cdf316e4d32f040e26d41dbde1e6689d98f0652da1c380daf5dfeb6a511b72d82f1b32d3852e9aa2f594be10776a8fc89a8a35c160e8e41b42a06a342fa1c309fd82\nB = -d7b7701340c5a358455ca5fa314ad83860d9f765978ff652d7f542de2e123bb976930b8fe84b9608648324450d8ed2bac4e44f2fc71711ae813cd8793af8d3796e8\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 57e60f79b4e156ccec4c253e70df8d86e4aef326150d612a5ac4dc285761e88ede412d28d9dfa5a6f5c073d3c91a65ba9c86067d81f296935f0d0ebd2af82e7f6b5b336422429cc3b8427fd8d3f5a6fe936f4208362632093bdd3cec1aa8f4b176d260f605caf4a12cc011f3d1b76135ac2507346674e41673eb16c0f55d8010\nA = -4f1568c207a9ec970b5c26f068f3cc8019e8cb483525d251cd2919b368d072ac8f40017a19fc7437cf88e927c9e7d6f539ee84865f0af24be0d6d98fb33d74e3e0d28020c00bcd61\nB = 723db98a78f42aa45496f31cf78695583526d25e167da48ec310e447ad3540be2636813a2c2f7b8c622795ac451992e91bb8e43e5737f0dd95623282e729d815b08ed8\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 237eb5726e2c628a515104bafd44348dbf099569815784eca5d6a415d3c12421c8c70fee23d6d82f7b5b136b70ffed3b6d9e98cb47854e79239d96c26f2ec955e4ea8dabc29a1b0765c9b7af6ef09ca673d1ee21c680e4b8cfebf47bbc74c993d017ead6cb6f3319ce4de9e9765cdb3ed8fcc57a1b153327e1a6a965e5dfa89\nA = -1fd1f634685eb1470dd9080529a891253a28a0b31e15c662733e20d43fc4cd71f4cfe83c3774adf8293a0fc3bd806d0b31b61c6ed0b4414ccdb91e2994e22797e5771c63defcc0887f1\nB = -3ec0478afdf54c949a097ca411be41f931acb750ef4f0ce97d0f0fc77cf15970cfbe24b170aa332de04836b7a0e6c5d456814182d27c8310d5fb662a818bc421587d95fc5\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2f1d500443fc4f4b86e7ec93e4d0dfd3faabda35a6dd31445021928373be14c37fec369ce80ebcb77aff2151b7ea94d21592da1823ebfa0af196f286d7a69ea54799573bdcd4d09ca4f33b8a3a93b35de5ff7f65099d59367914f1c79440b471ced6773b0802bd8ca99cf531b62892eb1e78d67f8210592208859b0aa1754b14\nA = 572de2984fe2ed0d5ebb5bc3f62b197fd592795d91cb16b48a0c898991ee3e884e5870b92405f248036ef9b3898c5ee6100a09ede5a48bf7edf3a067e4fc77e7e6bf6a6e3d4f538e3d66f\nB = 12c379402b18a34dc8b80c0dcd25be16c99d6f76d5d64b6050b90910cce594bc022794640735710c7ded857ebd44fe5b2e51574a2296f7d7a61b59c0123051bf2ba4a168cf8f\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 4001c734e1391a88640007893f167eb79ef61e4717d5eb14b8d80c25ed59c753be63fc8e54bdaded22c9c7d3e49753eb49efa010439807dba0d90ec4f9b498aa97f109af542bb41922936223213ddedac4d0fad8f1446498f4228b758aafdf1d9692f59029c76ca2832125ba50e811cb95f2b982a7a4d87b4726e6dd8b1963fe\nA = 16792909716b581a936287d0a8550a1f3e840935f0f3ddca75aa32e3489269b078fd19a16f8d6b2326eebaf46da76e90890c0ead3b35689bfda8c1ead17a4f672588f982cfd3da2c2b9bdad9\nB = -95ab2c47f85001aa852d6999f29644a6a55f9e4e12bf905f911f90d29cd1e4fa4fc9d1a2aa6c215bcb5c5643561499aab8f2678fdc5fa9c6ec138aeb2d62f635c45f239e46b0fa\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 1bfad44b58d3f8bc987116d4cc7ac98f89f838a8712d81d726189e9e1469cf46fe04675dc0b82e6e556b02c350ef4e30ec6203c7f1df937ea80f435af7c10f48538fe7755ba78993f304e64ca0d783b0f46f61bd14fd3fd30768f233c59018ce911a94b495f58e", + "b96438e416ca3c7eba5b1bca9dea5a770c1d2d9f2f62f821e5\nA = -78a6a6ef40e443c52036e75f0b35938d632bd45aebf45a1fff5c2e1b6f601a57382b9a82c3e8b2984e643eb1570cd83f3a6be6daac567ddf9f37bd96785662bc3cfee6f47503d239c77781a8df\nB = 4920f870cf9f371050e64a419ebe07ac92dd3525b41e8ecf6939a267e1ba853d54862dfc95dd21b3526eb0a0a7a7f8fb67df2e9472dbec81e15cb13266257177c5f2b92fced4cea5d\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 6b0b84505907a5ca37abeff9a5ba169975792c69b5751d9845c0f09dea833fb679c8dfbf3895bc470529e0cc736c9b4a0d08b75d709a1d04525ae583c5ba082d3bca1355055c7bb674aa1b92689cfdec4dbac84a96e81c855280e417f60e7e4931ef4f428420c0b85d2cd11c1030a47788d6ee6af0a76b5364fcf23b270e9d4f\nA = -143d843e3b12431fa0d873815a757a214cf731c298db61ab13cb87fe78b0a6184bd1fdcfec0c7661b10775b4ee2c815dede0ed497977c9ec5154f7b24a8a786501ddb8dd257bea51b9fd9401ff760\nB = -25d4da7b64f439987eacbde66abadf0da7c1653c1c1c6d9b2092351fbc714a20d2d7ad8093209da371150b69b3602480595533ecc1f3c5005a8ead10732272246d8cdfbab87c49e65223\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 6bce40524278ce242b0b5292d27751a3dc414f962d9c1cacb45fa3ee693ac6890d2ff1647abe578c40ea8d4b326a2e0e2fa7cdec28fe2da089338b5fed91c4277cc5be37537eec2f17edbf48a45fbe38f15c58c3e733d408d001262dbd40c9d246c323e7978df4fb7207aa9270a12921743cee2a483e7e71b221b09a6b2c667a\nA = 402671b0cfe14655bc650bd35dd0c36ce7f65de274a0cc4b708c6f6c3e84c2125ab2430e702421904950b29aa8a03b049910305127890457cd0cc97a3e05df67f29d28b0452969986959df02f59d207\nB = 1648c29205f19fe4c646eb62e8ae9b65260c2cb8424a526423c6bc04ed55870cefef9b8ba808f8ed2e1ab170e2e411f68b934abb1a22776969f79f9420f8bcbef28417582942e26646af60a\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 40db38dcdc201648da555f1062bbbb92c632c29b66902eabf90d98dec69ab3f3b28e60cad1571e7246f4c9e6aa62ad26a6d0bc08598c7a8571fa830cae4c2875c5c95a59f3295f998681edba7749b7e38cbece8887a7823b4752165e1a897e638836d408f439f009d0fb6c196e83e83ca3289d2bd0f0eb36b721331e4f9f80fd\nA = 14361ace8ec5223bf0165b78913b77ef921b7089bb5e28891d120bd3db6513ddc90404a4e6cd027f9b51fbc02e80d376d59e1f2b043954199ef8218bf26cacdc5e749f668ad3b4ab35cd796f94c06307e6\nB = -851a39d8b0101fdb22ea9e367286e572dd132b8a77a6a14dd0e995131467aee898230f37dc6224e35bed2eaf459aae579181a161450bd7ebe6b62ea7154a8a0ab590ca4a6c2f05531c4e24650\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 4b085796665458b798f824d1c1a88c23ecca456fb88713b433228ca8735141a616633ccec4bc53ea4f6e0c74e4aab6fece2e4cc4c4efb479638cf54caf55d4addf75908076f5fb487ed00d540e5b984acb8f81cae3ef51db926a06382a288092b352793de721c23c371fd0ce7a789486b2e8b867d35f47b5daac2d339d22dbde\nA = -511565611538828ff7dbc45c273fe46f4f5105d41ccf5dd343b41e9dc579429e56a9cefc54657ef0422960d1375b72411a5cc93ffa323455e006e242580358d6cfb641f46b9c36fa777a613b17dd4a187454\nB = 4f22597947638b9a9e9b9b7c2a8d37f77259f1bb1c7db65003b6e1a1c807469c84c89a75b80bbe0324fc3aeefaedc6ad9c0d9e470dac9c30bc48f6abbbdce9547ad7624f0ce9ff3cb6be23e47bc7\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2b90a57349ea94ea818207fe15c164f9d3530c7cdffcae178557274552f79c4ab56acd78033a570bd6c3e45789704ef0b0ef586594fe4cae3ccfbf9ceef46e769589b084adcee3ef8345375b7103232465b991273df724964248737d5eccbac558e35e4190112571d3e7c291baa7aa8b1800121bd573b8419f627c0091e1bba8\nA = -170cc62ad57094d307ce1b317ae5e825c2f2e317ad6060437afa105501caea00dc9a86af8729e2f3c3a854387dc3ba368c0a84aab1a527ab34fe27b0a69bc71c728cca87be728457c65eea7d7538ef3aa282615\nB = -3d9da1377a88f647de57ade46dc7caf71b4f42bbfaa5e77f16cfcc90f00b5d3e9e9d82355104c7cd0db4c1dac0496be3aa35706cfc0a30a1329755faa439694e8e9b41fba8f1ebb46140818c7008e27\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 4cd4da762c7576d582572d3427abc4b4297f740705fc14a32b46347541b152d0d1e3a11f27213badcea1e2009e34a63350c7a59e4d43654b28298d2757d6b54c4d82f580e98de4230cd119ba350416452cd4b8adff29b9f35ae0c533f666cfed716838e2b91941dfbea8d6a978a369d5f27554ef411f15e5a89850655d7f3f5a\nA = 4f4a28af27b926d8ac347503d6ac0bfec388a6c0b38a577501c3ca4aa709c69601824ddeb5eba4d9e437a97f3e4477e1487d5ce7b4a35b90fb863657a5b2d901bb8c3c838db40b89b495ee9875e8eee607d7b8013\nB = 13ca192603bc8b2da29dae67159e4f8d32f351a503434ed9e4e24f74abb5908ef7da80781c71b1a5ce64fefd13a16cc1eab05a370bfba2a97e6cf90cfe98d3a487ba72dde0762c36c10e1da175f1c1b5fc\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 3812e9e835ae355fdf328b29ed8b86dc3f6895e379b8b5d65a5de41eab5fb20ad3e2290c8ca69f9500248ff883d9715f59d0db6257d13c5cd612211bb1fb99867161daffc77968bdffc1fe48bcde0fcce02ca93975b3cd9e93b56974ab4beb59582c3d0ef2a65957f701549f8bf858de0c5bc98af3e5722f1450de391876a2d9\nA = 14ca6101af00d67139b985ac9f149accc260336237dd2dee802b5cc6e506e217b74c1a007ec10c20012f071ddad34e7407012669109ec1f385566ff04cf1a1ab7562353c0af1ba1be0baaef920a188c60db27970f64d\nB = -94b683326e9de19e414f653aeb2cb4bd7b17e76a23de6a4d91c43d717a35e08f2155b444a9549dfd01a8aec4dc901ea9f629f16bafd2c84828b12d2f63dc154323eb2d54938895ec4c9efbcaaede274fd4ab\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 5ad7411cef0581b2e675d03b0ecb9969102a283eba5e779bdcbb7646d94e843083a07269c932d18b973b57abe54eaaad0aa76cf7b61f30505a263bc95aa063efb264ae829eb1d1d5f7d380a0b4db59839de9ae6230ba51901e71b3e3d59e8c34a79678e751c8b7ab139123bdb2f04d90a18ed81d2046ae86da1a73c8dae4fc4f\nA = -469f61cbff01f0e4124ba69a860ec6dbc75cd758dd8ac7cbfed97645b16488a329adee62d1a66e90ee4212569d56d58b61676262f49dcb68296bbe5d8e23853e3fefe8a304710cea568ca65c183531a992ec5b4d82e226\nB = 4a0d48e31cb8c24a3b2c9c95fd19edbe46823032ef4c97fe65d0a30d5c2cad7a4fbbe89e0ebc9940ed9f9ccb8ab18bac269759a9740a7985809d0f38259e680f0703febe7fa012d1ded47f0cace4a133f59a721\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2b2953981db406ebc544c39dfeb08a8b089064533221536c7fa2bf2a7a0d3a1192859b7dc0ea5036eeab5aa371e3e0070c3980433adb3e3a5202ff257bb546bcb9550423201a35501fd717ed4c0016eb3a675ed399340bac7f058a04e69c1774590fe747ffb9c27e78ba50fcee30ce533a1659fc49dc080a60f21357a6265d24\nA = -122621d97f42b65b060c84df3f0c0da097b5e240731b77a37bb9471e7e398b242db6f1b5e25062a9bed702860ccf6aaf386c1d6fcf60fc31b8c190d3486949c5772b9e621b863a7cbf29449ddd68b7e0c21e669492e58e94a\nB = -33978406dd30ec2b192c416e422428683deac210017cac9e4355e8446d6969295b0fbaa8cabc92c1fc0068da70efa047f938a419bac160ed6f794a9f69f53a88648c9725610d5f309b652f5462bd3011cf68ea859b\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099", + "c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2104dfef151526e072c09a4a277eb981a035379de3b1a55a88cb060681706f26131c388f5572c5646826b119c85ed450207f32733487e3c4e1e9d701a65058c4b4ef0cd1db090495643038229ed177b54695ac32110619038f1c1cece14faa693d88476e3d70329b0084d0ba5d547bbaa5b59ba1ce1fad5aa2f1c11a75bc7c0\nA = 7b79e6f1330fefffaf8521089c3348593e40ab7e8d4da3d4346571b43b12740958336580afd13619be3dc2d42eefd9e30599405da3e32e7f3a5655ece8b77a367059668021aa092460de75e627526da08e6206b0f8f539ef40e\nB = 156e234931907c0c0970c1fe6bd4b24225ed94d5f5b1be4693c8e141e9a6032425b4a47b6eac6265afbeb9d796eb230efa707d5ac4a73808225181cf814b319142e9d175ac461c75e6d479bb6bea53954bb981062eb16\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2a392c5fc96c29df2f5ae9eaf76e7d981dc1e2f3b47b43a98eaf556a9465ae8727c622188123c64658053ec50c25e54ac5c6c8bc279b134d326e911f14c873357647866eccb4f9038ed0cef5082c2058ebd71e1619f7c8f8f2fb80871ebbca3fbfb7845bd855d307d2efd853f1bfd467fbe030862f165e53a9cfa633d0d3fa23\nA = 1e0430e7cf15173d00592037e83e717c90d7dab4f54a5b2f0f5772762fb5f56bc0b2a53ec1bc3b960afc35e7b043f9d85d0af6c29288486af3e186e52bae6300b58917647231b40a12648cc8c020a797683a9bd7ff34eb6d41b928\nB = -e08372fc766eba6e0ef55a9149d700b503e2e3f978c8a397912e2735d5bcff69c461561ac0822c44160c7c1bbf722df421b74beada57462ac54a9bdcdb42d6a27b86413036ed2282abf62800fb2518a32a4a135bc948053\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2608f68632ef14dc3979725c8cf1a0db10a1651f17d91247edfae9935b53f6364d233b030eb99871a87b7bd876ab2cfd5a643387a7af9d337e81770db04a14f4f8dbda2cff604838c9af9a31e8dccf9277d453176589ba33abf77855b9501e63370b2e6cd22831e1e70ff1815302c0a026c70042957d08e74dfaff940a91a7b9\nA = -5d3568858c05a15bc9777af949eb01d33dfdba58439fb3f7af2ba792efe8e78b16d7fbc2a303a4c4c4be7c9d43f57405e88be54d6ab55268a4739945ef582921d2877019659dadbc76e0939f4b2cfbc91e5356ba2ed531526ed5b9b3\nB = 47f81f65ea1af04f702757c02a175a299b23cd8ad551fdb67020c50cbb4110b5371dc5790b12484e9ce647eeb24c0220a5e62aaec3461a9dcdaf1a22814b6f22d66372cc5ee31944bef33469f905458c172ec7871d9dc9c301\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 5735109bd21d31b5f54e9221bbed78c54cf387e39c13d31557e8173e173f786b2d2f1acf3966c3bf4552fe9bc802d0868a5a7632404cb91609a7a45fe0fb83fea8d83b0319666c1b0ac520169c15be708343359447f2fd37960c1e96d32799ac9394e839b391f59dd347acfb79bcc4e34e76490880d163ac97ee69e3a0a6e68f\nA = -175011349a0a1ceba11756bd528f2bd631c106e709aab223032d08d52d7d6724e8c5b055b6f97b48261f4860eae297badc1214cdae9b2500a7a47b4b777dd7b8f1006757754ff1143b637d2a3adc555f38eafbd5478cde0b04e5f46d3f0\nB = -2aa7f75d6801b04ea9f690aa0c5448906595fd28b53775059c01efe54b463f1d87c9fb4b39cb038e770f99bb995a2118b86ff8d004bd964e958c2af82becf362fb0b927c671cc3bd7185990419d26a827a2d81bbc0126e1029556\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 3b4ad19b75e1301d19b57ba9b68e0666c28c7c5c99df1d5fbbe0685dc1d3489ff39c919222719c5d8b7ce2d7ff967730d776a02b36a86064ed66a02011bab82eb575390f85f0104715f6e4954a1bb28518450182a8ef58af35d00e2fe417f07ba25dd9c85e00c3451082becd22e3aa0c9bcedaa96e6423c7df6c375b4c799c65\nA = 58e1ce4a9b512eb0632b02cf1207936d6707b802140540fbcbbdd712e5ac1426b4f36e74a9a9ddc812e572855d4fe4fca8a0de6644226f5698fb46a5f2a479dfc8b588aa8e02ddb15acdc79ed3d17143e290f1317274f425b869df54a4807\nB = 14e341cbb5f5a7f3b4dd864172b82ceed2887fcf20aae7d0598b3d8afafd2f10c27bc7456c1488abb570be3df04f43d892dc6a8dbe7621f55bccb0ee3acb1ade989a510b4e0cbe29b6b93968f323f0016d87944c908824d249769f8b\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 7fe0bbbccad6032069b1a335b3f2dac16089051cd9321f903181fad23be6853e2d209958e8c48e008be94a62c6206b34b4e994ca08b8f24a2df0e6394ea65b3b7aadb3bc43d04dc9d35a77e673c4476dedefd4568b4ade5d16f9d89486f3d5ed0566b1eb428cb0b688f10fe3901037744f278385754fca481f937cb630f60308\nA = 1cc0e3ed58090db55063c9ba11401636f89262d6ec096d361f448496e05181c5f7f2604333f26d511c13534618e90637adc807d622097f7eabfc03266135cb626e1bad20997e72da71bf2b3f65a4973dc27d2a594b1fd96b7bf7ec14b9e4b983\nB = -87871b2058d33cb67d83b6a56ab27839c6a6c771bd94e55f200a1257f2c737e39c4a0403fa410ea64e8f442d300df1c19c2f03d07fb74d94f86d26814fca23d4cd2cd3718252cf0cd8a0e36726f6e68827a1dab6bbb1d23b884381c702\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 35d7ac5cbc7e6c262ffa41be168b02a3bde9e112c512d1f68421d705ea34461ce3e0dafde67f44d44cf31d91b38d4d5f2fbf8c6c6a44ec3ed0298dd58f3d45c04346c11e57229dc3d2cdfea02c802732d9a811d7be5e81094d72172cd04caaa3c9d55a951c09f454f42add6e89e2d8a98e124aac86379df377606e7af9bc6baa\nA = -4ee01518f6581c560a186fa05c6f4bc26809c4822cc74a0bb74d5a6b0a368aa9bd0108f26113443422b8c589084ad49f919a9e7821d99127bb210670e732b7cdf610e464e300a39d3dfa7c82f90cf00ce329bc6763d7b1d4224a020095112fefa7\nB = 72dc8973f7af7122a05c90df190bbf1e39abca908c197590dc7ac41fd0712f48f838ca62a72a177a293ee6b2afa7a10c21e7993347c3df4f161a5641ff62ba123999bf1eabef29ec0d33ed0919818f4b7c35b5f41e654759fc9abdc0f80e7\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 5d83a9b34631dd6c63c05a0c012adf97b4d0f20f61907e1c2145330211e9a7e38128517b058e0a85e993c385068d1cec768deb814bea1323dbd333de091ad2cad72431f20c1e70ff7e1b119768ba44e14292c38b88dae7e55ac9e10ff98e9bcd5f0ac05af499196b4be0c6222d1a63227ee895fa6a8221a4a182a1323183cd7f\nA = -17b3e0c9288be15fda58c8fd228216bc466731d631218a7ddf1d2c9cc858c0219cb0757d3b680bca1b1964eb15031b5b9d761a8bcbd160db89be339067a2ea35e1ac3cfed701912a17ef9ea03999d92e3592e893183ddc05cbb98a656983b54590c72\nB = -269f96a4634eb37cf8a6608408128587ba45958405a29827d0d03d34816fcb1a2297f1319485439d3e8594532545086efbe4d21d31d30e2daf09b74fa8cb27df54e8f9f993630cd9a292c977eee70887158bd3fa3cfef321ef900a0598ac8cea\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 7fc1c65eade94d9de7440eb8dfaecf1004905135efd4f98257c3295b1e76ccf1e2ab6808d158d360b7419c6210c50efe960610973d9ae855c72ec0e81d423e5863c80b542ad455700d2d0dee5fc403dc01eab460c24687401cf6a3179642e59f2a30268df95fa80dcdac230702352bbf6b60acb9ff5d45c5b09a3403b954d173\nA = 7906bd8d3bebb1303c1df1fea0b2503b0abe9c69b4f4f5bd01eec9e314788cb7d44b93428adbcef570477e8ecac2a64822e481bdf520fc381e1bb0b2cdae2fe94e484cef5236dd524e4dc364b72f4c06d57f29dd3c5079e532b1ab1e71dd6a65b3362df\nB = 1479ef2807b9c23c094d0416f513894cc92e023b134f44a5333360dbbe98b8161ab899302f4fa11b470b97dca0c4e8ab7ae47e5fd0962834e6cc1763618193f4ee027f667368da580c623080de137b5869c3081128e6081b9d5e2dbafd791773242\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde", + "2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 730c04094b1ce944588e8291f7e6cf763c70b79cf362dc8a1bc63bb8790cd4cfe4eb51cf15a45a8464d69ddc3e1b9383cfbfd643f317108cd9ca6a6eaaea177c5c8b6747bbf40108cbc0437eb8f11bd2a0939da59b70c0c6129e2c249823897f2ee536b0427bc45035f121d2cbe7441c175899b97c490e6c3ca01539bcd05848\nA = 102cf23cc3b81785c73ac3613c816de47fd585c7d5f175185818dbb4bf0bd47d0dda9702bce97b29d66e48bfaae0fd07b47b40be2b48ed702ef21c54b10bb927f9d6b43604bec4f4b2796b44aa6b4e83f8bcd00f2fa3871dd901570e1a32888d8691454c40\nB = -cc5349a9c5280a933e87ca38ce458a711c71ffebb40bb1f7612b42b4684afc495e99c4a5f32eef1c9564c2b7612ea4cda7a0f5df6b3ec9026447dc565ca08563d46aec7ced9fc4cc5645960210d44cdc3944149051d569c9295dc50862f8f6d1f6cd1\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 1cfe1842a53d00e4619265e2fce7cb566ffbd912c9213925d01408a956af304eacb85e29fb6edb812a95e90769bf1c3d62b0cf6cd5bb8f8992391d2ad70f38a14fb9d1d1eb522aa7b7fd9f1b52790beebfc887193882377b7ce567d317d8432e1d9a908d6ccfe8d2de7de497d77b023b3959cc042ae30aefcc0229617fd2a146\nA = -5c3d24fdb193ed83f5f6a825c1716f98e3cde6b32e09659f253ca3fd2a39402b5bc3a6497ed7bc908838e93422559a13cf59156254bd3fe1e3b8600b2a777943cdb39b9d42c58043f1d587424425d3ef5f5538ea157112970ce3e09a87fbb5f7c96f1b5e65fa\nB = 675d9d2a05288b438ddcb330acbd59e4639375f3f14ac2d0e9e8b72de6ffc1d217ce62f997577f7eaddbe4603541b132cd41f2f2740363d9c331ef22df92029d143fc8495ed0152b918aed7ff22f564c7cd94fd3fe4178c90365ace43def8fe30ab05c0e\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 83ed1948276d689bb7fde814e67fcea72c4e3509c48873c3e7349a8fa1c08ae11ea4d814d8deb1021eb8b8ceec342cba5002a2ca45d5f340ae1aa500af4c7db120d0402c6cc8a840404be7221bbc46ffa10236043e5ce4415d3ef1355bde26d2d26eb7127326d4b8d671bb96a08e38a2c1dcc281830ac77202903a5e4777ff02\nA = -1be86e7c87827922d2e8a06e3cd6b64ac9a280c525749bcdbfac4856916321a964c9346d17465378251e6eada42dadf38bc9d7d87367bec94ebdc21af6b1302e520db08a64ba6b39920683725ef02b011a3e4ba46ef0eefadb98582cb911d0cbeae9c231b5e432c\nB = -352059faf97b433089a688c702b97adefd0c91d51a0395647f822c6762fee3287693e302fc5a5584a12c048dea1a320cb96fa70b5daff7c2ea21d249467d14c6bbee15a1e94c030e908342a939fbe8ae0de58cb6d6eae7758485e392ff6d5d64465b701692c\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 402525e19b6b68942253d1a51fd9b2ca36fc84cf938d80b3d52fd4302de142b9d93d1663e89340fff10c2b5efc8cd47fc3b5cc5ccd49a6ea3038ead6454bf190b7f88f52c56bcf00c6ad5b0f5dfb7615915ee8af137dd99cd3d21172ab772f36d291a6856a8e7912750139c09aa024b930a0a6b9eccc83c2c5c0ee2473ea32c\nA = 65e5db532ecae639bd56dd63045bca39b33b4d70b2db82ca3d0ee8ca436e671828cde80217b48eae7487fe110830589ab1be889f1e1463f3b0757d529b2f0cdd2ac92c35e8ec141885bbefb6040a3b5e00e64a541913a38fe05824a929f8c5a2c46568c61989c3ca7\nB = 1d9c73eef8373cbb1e8393feb26d55c33a245c33d7031c234abffb2f06a1601f7f3a79ef1e8664c51ce5dba5f5aaf3b9a9e42470d381219b4616ae93c7f6e64792d23bae523b6a224c1f714ebc82a11f9be42618922b8d2eb7b55e4d45572e68a19fb0ba72228b\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 7a9cdb5dcdfb6e04351057d731fddb9e85f41eb432f01c0d980673d294d05ba9b0180133a89930e74cfce78ed54991b494a19e7f80f310b85904784cebc5639bbc631e80751807868e7fe16719e8ffcd1f2cbd1b9f303c3ed488b647670be3080668b5fa0e53b6342c33c87f0ca1efe1ddb1c877bfe2556aeb61805b06f41343\nA = 1e412c3d66aea2c503f3aa5dbad368a61d969a2951c0094f9da32d2794e47f3bf4c481ae23636baabdebdcf0753d431426b1865e62de8eae7238a9245d62820ad7f17b5380d701f5db776cd4e1ddbdfd542901731ffcea5bcdc247fa9c83f7e08a9389e5a76d38be21bd\nB = -afd61df72361260484fade8b432713eb740df83a401d73492883a5139c918d5c911ff5dc00140637da1c6acfbab4b0bc8fc1f337243d90beeb1c2a083ad8069494c73a99372bd38712a5b5393c779ec1915e878600e0b48157bea44ca8e97c6099c4ab07fbda57d1\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 712580a1ffde78c8cf98ba71843c8130e835fee3afbb45e372d04c04cc388e403c9efac742611d7974bbae982c3aadfd1893f5da280afe0c1db1d81a9ed73b6ed9b7f05a20ce828316103259112d7754560d66733041e9470ae0d4dc95fd0484bfd56d66739f38ead7efa4051187ea41f7bea8fe5d958a29af41328246e2bc35\nA = -47c5755ca61ca8b7ea927f6fbe347f1362915548ab38c40f0418f4c9ba4ad520c3b2469d9ba3976669dec0b278461bae80eda53e9d11447512963e797f45460f74678acdd69fb9efe3897913b6568f8e03a6d90b4cb5bfb06af132bf118574b70e6bd2f6d6cb4d0089379d\nB = 5bda68c0a64218d3609d75eb4832d5468298f19498507d7d515f4c410f04dee535947571a5e75f1af7f94a5b3b05fb742fde23e7cf3f8b3dbee0a569e5a36d7a3d31a26c4a48a299044fd72339d2cee1a68966c851e76b93ae34130b75f4abe4f2260207d2254d23f56\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 4a1a514aa4d1ada84fa841d0b668930c904783fac521377a7d622201867d773ad23dbb667e0d4181616358f3cb088cd157c8e72bcd03db64647b37aa1813f870cbb0318ae0a3667f8e6c19f6e0706217646ce633f0cc8bf4e8f0f4d7329a8647252ca6d376416d545e73cb9a3cba40f8f9465d85d57c2481b84b6d95dd42d50a\nA = -1d68bddd8c3e6b78daa0acfc63a6f39e97f19527a43f6cdec47568d57b47f4e4b7ee88e4a28d683b569e406ecd2510351dba25f10b9f7c82d6da16d848bb970cedf7675e67937921bd334eec4bc8fde83d67aca57eec804ce22bb342167602fbff452d5f0f2a7f38b576e1e50\nB = -34d219765916a4c8ec843ebee9a7aa1162974d41cb4d6b60532513608452da9993749455d9701af6b7b6c7454d7f2fd5c344cc938baa5259301d4b56ae8d25b6f6510ae6bca114cae6791fa5a9551e8a405f5b1c0bbfc27138563b2d64f9a4d7a8f42a23bfacc3f1ec9393\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 3fe24e66e381eca525b24cf767215837019f44ed4fac6ab118d02cdbd658066505ee5b0feb7af51859992ecb97d727121e38873f748a61d70201cc43228a7732156a80dbe399e05764be19e37dc1b93222bcdcbc45b1a4817460f7021dcf1d70e632bc6a306628790201222bb522f4cc80adcc907463a539b02f74004d42adff\nA = 773454a43f495959dd55b8a064d70b1b1ffe45c084f5f9553582e24fb402b564de68e5379a8d9d02af101594e717a6c6db2e7173e557a64d2f28fd45c4e06041deda040705d99acacf8086830af19c7ab5e27f91738ffbd937dc27e5b7869bb6caa12c2d7930366ff75eadc570a\nB = 13d884a2396268f1a8186748a15722156a172a56dd3d8c77b9cb7001b6ee06720653507eba9bb9918f2f699cb37f3b5ae514f5180108a704647f19b0fc075826153edda66dc1105c1008ea8ec6f8c10057f8e8e479e1a1274edfed9ef719b30827a30f26da78820c3696d01aa\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 715bab8708e53f76d2ef2afbb845bdaaf978b54ce25f84dbbf9074f16d30a18733a02a4ba5d7b092fa6c25d3b9b0d8243c743910f1b7b785d9cb02343fc6d59eb0817bcff05646030ce4fbb2b9ff76781cb1af66b46553d365d02c61e677ae97defe92d057d4378dadf8cba9824b0022c086e0d78b5442bf3d3263ba22c643f7\nA = 168186208c734383d472374fbedc2d5d430e85690a48", + "81b740008623120a4f7f83b2cdf85dc28bfaae5870abcd7ff1bc782ef11c78a75c99d41f8aacb52fceeb5f10266dc65eb00b0868937340146d8850887686d54218badb97647a6d82c0c6650ca1f9078d73fc6222aab95c2967\nB = -9711e5b3965654bd9427f79c89a0b3f3cdec1c857f4451eec236c1f221bb6773e5dcc30e7381a18a813ac2b03ff4a4ba679aad41e0e5d7181d4627f682ca2dc8af9a8b4f878771446fb225a979ef9c7e641cac819c307c8dc50d9c1ebadf912ec7c844e416f95b546cf09391f9f\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2714b99dcde70d6c3be8b671d78abc155793f13105fd4b7c5d760a4c68ae89987311dabf2a9238d18299f983b8aca69a9ce398fdf2c9775d90b11b3dba17bcd8edf661efb6e9c50b4e37553cbecb54eb214fed1d0847287732810e550a4c86b51d4e5da1cb7722ce4317e69644620ad806d6d1c94e1e3fb4d87de6178a997453\nA = -75231ed37f1dfa4487c9fc79a6f7b36929fdca086e42ed41f79430b2dff521919236fe415ccce590e1d3b986e16dda866f3f0d29ac1adcf55d87fa5cb67dbf4693293188516e360bac513303769c42181483fbef7abcbc4fea1310c916396d29f37d9058a62aead94511aded7c4b8de8\nB = 5aadfe65df0e5b877fe45d42d7ca02882cb6c686d486374da5ece6f87771675153c84d74b6f40df1db567b7e1e3c60c41d21816f958f5576fd2ce2f84a8c3be4749dfc7e5561266b7c9698c7581292d0d813cb77955458d63bf94ce87472924c4ca79504d1ae9d5f025c7a2504156f\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 6613b1c8ccac0cb8fe2f59e76fef4dd05acf1f1b2bfc20aa3f193622ce3e9d4c7824ad544477553bc68f05f0b546e7c1ee87301e111af7929d1f40525291b88e211db7175f4e5c0953141914fcb4fb951dbf77442e7cb28fde495704f1b5141de1e50fbd0e359d0d86ad709c8f564c84dac81c7602717c269219ab1cf12e809c\nA = -1bc03897b02d1edb633e2c019e40c20c1d89a210b0733412aab675563fae8bd75dd7e65988cd8df4d9b343586e27f548becdde274f62dd421679554ed9eb127e527a69d69fa8b17aac0424dfa2a7692d1e63617ea45564b55f01a70325bca050862d583cdad96c4a2e123d0ed827348a745\nB = -3d5239dbe7bb3dcfd8027204eccf5e9444e68d322a0b0c535a203a1d0c054e7dc1e588bacb891388241462a5d2b43e6cce34ce46a23e6ef29670603d31001374dfa347dfcc794988e58945d0d2d17da6565cfea559203dec119fc357d396f65b296deb07686b0ad2d25a13fd4fad88d2c\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 3a7fc5680aae875b9241200b9f4112a82cd624ffd9044138ae3cd65200631ee9d7b918fbffadcad7e598791a9f0bef3e23005d6bc0048ba92461283492df3bce74c66e417b082ee052fd8f808d71f3ab18f9ffc40f8fb51ebbb936d09c26a3514bf868141f7cf238c1abb3d88e5d50dfc188902254f07d63fb8cb611ef8e4149\nA = 4a30f32d467b29dc83b40bca2fc4ccee5f08a64069cb87f20e63387b2219b12aa312400c4ca59608f50a71d2535cde40a6d248290793fe01693ca40b93a5cded2dcfbc9aeb36e187c9d650782d12bea917daadbc6525f266e074037803e4b2f300778ca8dcb304658cdb502c93c94a16c6261\nB = 1ca5e5218dade077fecb81d579e1c9290431b34df5ec84aefaaf233d68f17dcf60ee010db26320685af13a821b6daa9d73d8f3a30826c3ae7b2bc5e219cadcff826283cd7dddd04cea7a5e0585d6e7c9f23b27f14ff815fe53bcd75fe700b1b91671bddaba737fb43bfecd2a77e5b752a206\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 768d312175ce7d2601f30bb38339f046e4c2ba5c19ae5f7ca5a562cc2462c579fce9985e9e8afe2578db542c8d9e7693e0c74ba161334b249ce720d568e9c18f09c87cd701e6f2080b752362f2fe6252a1d0caaaf1fa18199776e4c6078d89d520b9c63db159d5fba7e0838811e68794b1413c248f3f7173ef29eff28f15b656\nA = 149353e91bdb70cdca8f06648388508511a64d05221305cad7187ea40d9ccef91fe17ceb1e79667bf66e8e6b7a57faa90a83bad119c02984a8f860bc1f23ffd33d4ad84896610301cd2e8e80a5ca7e8d3ee63e7dfa459793c9dbaef3569eb4f8a021c6a3d032a9c94d3f6b8278274d0088a98228\nB = -a7cbbb6a434e4b022d312ecd4a45fc7fc4d3aaca038cca0fc56e529fe7119ccdddc8e76d51a2fb862ad3d27a16ec8a51e5f66b9c7fdfbddcd05a0ddea14172339cee340c8c651eb653c6aab6551c99ae94f26116e15dc62f2c2e63305bbf84590fba1327ee721150d46464d7e22d45d53ffd44\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 763912f4b16549e6ccd60eaf7a0a1f64d9c3bc83e4a9b87e209a3959ba3cf609cf47183bc543f08e346b6e12b8bdd5d1c07c603f74b286ad432d58d7001299ec7a4dcdb56ca875dfc7ee5c75bcfe2aaba14959bf3facaebf8df92bc12937cfd4a4865b3dd74b243ff62ba256d110b01b4089730cf48efdc66fe272f9241014e\nA = -4df3899b40d51c83dacb442fb143835bcdb550136921df78800f0515a6cee77fe3236dadd2a0800b79ebdaaf8cf4aba5ebb60cdff3e4b4531ecd0903c1674a4559339123e9f09158080fc53c4c6ae72c961c8da2f357b7c05368157b4956e592c41b25642457651abfecb4fed5d9fc1fc3825b772d\nB = 450eff382e73f2f38bc3a4abecd5f8de478f80a6b99fb6252173c90d7099629afe859442bb1f796855ee9a2940f21d1f9dc44f462edd74b479e1f2926ff6faefeb55adbc6152b5c97967b1dc8c44dfb85b5e02e870d2920b75422c8a427e99e35e2a4be92cb0ddc04cb7f4044f716be97b36f045a\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 56ef57d56c6d1b94cf0fcdedd3611a8ee444c2e25522b9ad175587619598da341916b183be03b1e73be300f9969120d8f3a23750cd8c4ffdb87124a2139e8ff2c15d8dc944bc3c3a066aa16dbe6dba4a74925e16acdb2b2e83cd7fd5cedade6a7f7409a509c00dadc182b2860609cc9a375cb8bbdcc350bcb2c0df9b3bff882e\nA = -143caf995b7783b1316b5551978727f06512fe114b419c735b3381ec351275fb7fbd6ca88b848c3e8c9faedebd6d084cb8a231636f68f6803d14bafd90534609d4a4ac0fb953417be7fee4e4cfefa452c5ee5d1e1b97ee75f83cca8691a0efeaa8bcc1f1e0f18c0c5d6c7684c9da6c9495d31a32f40a5\nB = -3025fa05c55826c40089b12741b7d406f748cabf692bb0227519a124653160142633700e3c0676000943556f97551171d231c1a35f7b7d8f96b0366eb74942466ceb4660f09aecb2fb2ac050ef699eb05bd8834a2ba959ac71550b5c026b9093c8cbbb7c5fb9390a7818db682b7c11e58996c9d0add5\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 42f363c34c20c443c1ea7a1c54f98c6977b6671164a80308000533b2404a7f280adb1f3b98101cba25249131288f7ac68b0ae2572c7777e7381c1f4d05fd82188c4b1ed5636652e0bfca4d096bbf4189a9358b79f6b6333b99e5c4b7a940c2f7d1413bf9f47a2ef66b620b5e220b2c3dd7267452eb1b9d8d9cfb17bbfcdb6abb\nA = 499d05de867bda3118a8cb82b80ac91fc505e0fbc6c7dac5fb61713cb6e715f56a31ae8af4b400461d7ad1687a2631faecd90d7829f67d1b9e36ed7d55704b3f2aea65eac061172d698384daea710ed92cf1140cd4da427174bebd173c2ff1675b2407a84649b0a318602f33105006fe4d5ed8d0e015b99\nB = 17a426a12a0175bb46bf7a7e727eb5238af383cee6f4d5e2bd82b0d29b9fed35f3d8ec95cfdfcac49bee47b25d3b5f375a3340fa83f8dd9330a593a974d208debb7e567e59dbb7251b54e42dab2cd50fc63aab050a41bd88282373f8195c94c35f61bb48aa921f574cb4ff0984ccedc070efea8c46e5cf8\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2f03374e9596cb56cbbd89794090ca7a4b437f4c05fa38a09db60e5ca900b208fb85b52f71c29fd35e62c9f9529d7ffe46fcc54607ccb07f6f8e13fdd4ff1185033ba4fcefb1ed4bfc42c3ea9f05276767d8dc9b7b4aea4c8bc0ce84951d1f590cec0751f73667db19060e2bff64da30fc048a1f5700fe3f489920675cc3540a\nA = 1073531f678877ba854fd1e7f857659614c526847ffbe8ed131dc9f2ccf69e1f1e917bb44a7b905f7ff758f61c06dd59ee09567d9f0df2550fcb98b776ed1381ce052988aa08fc5153e31c621c6a51ca61b386e3a9163a5cd69608b3e200476a8ada35d906c41d044bafe71ef5c6f732935f15b53bf36f7ef8\nB = -d", + "e3563925474e5408e245184b57f328e265b6cb62eedcaba809d8f257eccc0a457eeb82c451f93af93ce9f36dd1aab386e7c02b356f31c2d170169dbe15e70cf5bb9073b35fe0e7c7fd7faa91c5b2b0740734f12eb741a9d9ac6dcf7cff59f6e16324ea39e1e07dc5b9daea27ac674dfe5d0a5790abaebde9\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 1aa22f9013bc1cdebbdfecedf710c1bcaa41c696a3d7dfc1c8c601fcfcc1c85c8cc24be7df2cf3c7311b3b17a4ef2dbce545dc467d2a92d371e02a196a9977cb9042b236acf99d8c0d34a1c4dd8792d3497cffbc87c397ccee5d01fc2c89ef051324a7061e423720d0a3821a36739797393bdf7a45b5fc600824a17043312bc\nA = -4fb2e3fde2a0c653104c077cc6459c9234f86cc2d7b317329b68289826d3e2b975f1a69bed1a53418a0dd86e1b2723f4c4c5a29d003161e667c2315ec24a36f8bb5f2eb0a94f261e791bb829db685cd0ec9e1e301dc140ea57cac1da228124ae029e2b8ab1fa3ab99c55a9ca94dc7b767162c0a24af851fbb984\nB = 63702537a07971e399aa9a1a0795db052d6c8185c79107216babe11d6d8d472b61e604cecf9eaa6d44a2fcdd1ef0b6b52226ea0c6902d929b09e16576e6d1a6921765b2134c5d23c69ed61f36ea9a5552e5819350366240693558fac7a9d09ecd3702076c8c758a4bf6843fa843dfd688bef3f73515db31bfc26\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 6acb23ea695d4b60cce53079390da3cb3a4bc3a6486c238c421f3bf6c93c027a0475f656c3e5435f0211e90458ae81772aa956ef284093020f7b58ccd9373f3fdd39fdf4adb8dd64590f4a7fc05238ba20017bdad07f5f9a6f076b71554a7741bdd8c98ec68f8fee88396cb1f47c64d6da4c228caa3dfc7a9a1c032a9ba4fedc\nA = -1b2496ef929bc673042996ae80f27c6bbd33fa7c20580240ef8fba985d1a6117d6e746989924e34f281e7d2509175d0773dd999bde16662e88fcef52978d19cc45fbae3997fa580a66171d398f4f0e7605d9f4aa4f728902cb886e6b6dc9f0161e7cf1ebac05a09c5a1bd69a92273280758173fd2c14550ec221275\nB = -28399206ae2820d26a5aa0bddc4903776611d08fc4cb34a22a8bdc2a19e9f8cdab94217f346a8070a4145f989e1dfb49cfd100267635af0e062872cc879c534ff138fca603b5d45a6860ea85b6de37cfca000c81fcda3d14ffe81da919b2a25214209b085bab9cb511889665fc845acbcd038711533da171d8308aa\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = c012c4d17ea4c95a360218adfc3363f6d89f5aa524aec70049ef94c2c05e59a66ce01e25588e164bf2412f9517b7740de53d037e71ec3a1d426f05b18b128c41a878da75421e8c8ef3ebd5effd40735c00818eeb1ec63182b44e817403c9f1f6c1a0155334be63a3a15109be6d45ac0d1b1ef5cc99e9b284b00c487d91e5472\nA = 796fba6276fb7129eef2d1572b305f63d7b8c49371cfb3b2c67b141071e66ccdb5e321fa2c1bcf624c77317e2aa135e1137dfa46a34c3ffefa2fa3e316be81f45614d422bf86fe4518c2fdb7e416bec199de033cb5fef7f193a80c0f0e6ee924a12c8f705f5ed3793ab770914924b45cf2578bdd09c701169f0a881e6\nB = 12cf934763127284e642ddc232b1c889cd86617307b6ad72a9fe0d48befd7c5c5370a0062dfbde2add256dc0af850813b22320ceeaeed347eb9319bf22320b2fcadeb51c4bb26a160f7459fc172c27a91d367d5a232d00cf7bb778fba83afb744177bf1ddf45446baa035fcd0065f9b493d92eda37e9138f4fecf3ec55\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 3de123bbd50c35805b943e76e97b7e664eb9feb99860750bf97e275029e836217375cc1910c13269ffbd0bd72bb82ca445ccc4b693742a96d19d3dc23f78e5ccbba46d9ff5975f239551c36403ad5fe86997536456c4a5ce54807c24e3b5317b1c7b2a1661aad85b63859d427f0703b460cf72b9acd3f87e2e69d7f8f15e972d\nA = 1d0433d84f1de082d2058475e0168ceb369013a67aa9417f066c29c28272a0b3f8be5ac7190ab78591ae72a1dc8ce628c683281a9ad563e134387b9258b9c96d2df288fc118a8cff068ee49d635343772c2fcc252facdfc93112358414e1734d6948b909b53e46263e9a0cbffa141ef77bc98e7fae8ae2bd85bd875aa7c1\nB = -a31a574d105305e47f4fc00ccea0cdf854556886b524901c22e6f3b59a42915932ab209a8d5da29ab70d1472dd5378d9c79a7447d17665f9d1f1edc1e545e417cb65415cb8a368075c16264f42555d26e83adc704b5c126c6129318a8f394af8bdbb32c8114470d11b2acfe806acdc7b96e1e348a32ff96a988de76d4623\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 770f0c3104c0f3395fabeb75ddfa2c21a111d23438463941239f7c63e4b6e6832b84508ebf3cde1d90cff0a2801beee05cd5118f9a726a987eb58def6780be899b473ea71c697557ff63a4c6db894e9438595acdd98abfb529d75bdf3c1d619d6165a9edb6aaab8ada50b61a3a84de654706a9aedb7321b0523558e8f18116fd\nA = -5fafbd498d610e9f29c38a5c6c262b71672fe9e9c84f0f071b549390353e4fd0101a059b7c547007e27df97761767302458f1936395142ce5776b0959fc5ea039429d64ac5d50c2ae0ee45d60c0c50b7ceb4ff9853d57c6e883f588017ffcaddf5a1aa3e23ab068877a114d9a2cf742f01f5f5d611424c8ec0d082f5c165b1\nB = 552155ef110c126afcb87dd20251220c7a43bd0215ecd22249a21c93583e120ba6f046c6fe03086ef3c97311c4d520110a450470a473d8633e3560d2cb44c25559af07516aff50d6d176e8782c06cd9aadd3354cc695c4ea8dbf85e01dad479c8e8438154351fd5fcc6fc7e9d2162ce2f0179247f756f0b9b34b54be74821c5\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2e9ed66317734668c4c354d720a011fc65bb67439b2ac9203dca65a8f567682be40cbad4f55a83e836f1fc135596b624e4327acb085a61b6398237fef5a6e6560b488d4a673b5ae7d734b896d9647d71087621cc81e94d58e01fc2cc2dc775f9ab1b6031840a672fb715b77bd636e3d87b4949ec7bd60721bec8f9907b7c072f\nA = -1a6b046d691830d33eecf2c53953676ed3f6fdd20c2252f6e915052ec28ad1fbf7a5f264acf87ef8ecd515ed921ce6b85017f3d8a8f1d14f269f31e3307c6f935ad468cf012a912b0650a15106fb949cbae7b36c9cd496538bb0646a7a28989dfadc719424519bfa43cd8833d3a748c758f813881d83c98f7cb2a63c2a4d06b8e\nB = -34f87db0f839af6e4c4bf146789db36b3d0bcebb9bad81db690ccc3a35070d8830c9745b2fe730a1f3a252612e7026bf9889169b57b8984a5479cc4cdd6844ee3e150a2e7bf7680eebbef30e0591c895cc8b2ca488d489554f2339e2f55598717ddd8ce444a060cc95cad9eb478491ee8d3b8358c3762a970224abdc1068af0bde\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 6455ff7c12bf3bc37120fe3f1302a9916a6ffdae6ee6a37fc23ca2f3a7ad910dc0e1027d4dc304a8eb4eccbcf3c87cf52a13dde472c07e2df2420c1d36bdd5e88c3d76e774ccd2ecaf6a0ef55b8c60231b1348a738f812a4fd9d0c158fd5a9fb19cc7cf9f000860d4cb6509271c8e43ae4193843324db02a029beb58ec2955ad\nA = 54ec203e2ababdb0348135c0679eca2a8e778ed46e53f195331a48d3828e5e40da804ecf95eed819ecefaeb9c5377cc1afb1fb220175990d347981353e7d90637adf8cbb16812af8a3783dd312d967a490f8efe3f23746929cf2a5a8df58e0b878367f6c5e4d3c086f947fc2bf70bfc3a0008a8bb1d7d83f002930640b6ed94c334\nB = 1311b88a05224e15f1465c8da26784dbaeae84f818e029301ea39a982f714c64312f9f02d094c401abb6a89e8537d64c178637364bd261f4a27beeaaa901cc7b3d4e36ebcd9453cda33d47a53c6dd1d121dfb83a222cfd16158eac23482c8abbfaca59e765f6c1fe871d884d281793eb19f6409dd6bbe4083bf762ef24c24f0127613\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 64104f6c06e563ec66de4442d35d88117f2535edf9e012897f44daab5a1b8a8696f84db7a68d64ae24a394debb993bf6734c9df542c7e473b2e497396ce39a064789d5d7b339b65766b002a18096e7fb9f312ea5997c2a85463fbd6fc18f25769ac2a2123ccb0e72f14b0608c4c22add72bda138b83f986e78d5c9da31b15b9d\nA = 145f580c2ebc6c0354ebdfdbb1d3d7fa17f0b55493b0b9a11b71001c840a967dc77f0206c3dde161b5a773a6b5fd9471fa08b205cb6f728e3afba44", + "0b55268d6a9542e234ec313d53583c580a391d8da5943f4a900b279ec9d8933f2cfbb260b74ab714a8b9a1af3190d914b6e42212df84f933a237728a5fd5473ce2e272eb82bc83e\nB = -c67f9b9295dd5844307b8fe3cb9c1875257258e4be6229ab097e148c0175ecd0de4d84fe03c8da6e27153c709c2526092b1abc73b5fb40f1d4da9e0f3d8d2fd5f8a4e6f3c30befd80e189b73fbd77e8547b34010d2aa57072db0f00537cf3ced95eb517b23e0c854b4becce128a575a31037c3a9e106a476d8b0277d26dcee435cebedc\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 11913c40d577f70a5346ff1cfdca492ff52b640eaf257510d311872c8df7ba9756973da5b9206c6e5254bcbbb4bcfdad5fc4594e41ee44e77f168e2d20a4b228480a9908b102dafddd039ba7f7619eed7057e8af3a72ee491a61dd049bd947e5b09a94ef94d5f336945f47104fddb8493ef22fb648ff5376b68e96c0555d74ca\nA = -5537630b7cfb8daf76d14e617f7b69f7b75b472801a9a818179d83ef2984d0abc8ea4214ed3d3d2bd785060e9c2819e861d0df760fc1daca8340e8a2c997c9ad201d6d2f12a82ae3883cf9f5c51ff1c25277c28175859a7b8e5b6cdec7cb3875071cbe415bb698b85cb19f617162587516f93c728ba8b2cfc19f238e2cfda115b8ec0431\nB = 597296cb27080f33a24241c1e98fdec32f7a4013a7340d367e4cf2a521cd462a2803109c27fcec353a30dd20053a1f744394fed75829e8396f8de434399bafd6cdb6e0ee81343f0cb99ef3087a7c69bd43bd722745a46cdff0c2c837fd87543c3c63df3896ac101a145b478dc224644996fc72460a89beb5741b91a42f2fbaf0d62c099b32\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 42f420adf5c6b32ce53fe23af4e392517e37013b8c3a7d035a93f6ff45142b0b0bd5525cde85f9b7bd9ce219bd3514617e89ef4d9279cb9a3e89e44f1994d72febd23ffbdb0a4f19cb76448199b31c5cc6d7ec1e46fdb67be1211c0ccd93c123d56ac0d9cd2ad11f0c58c713165003495b75b60665047ef80f6a393474cb727f\nA = -1c6ac9565d1950ae6c55025f76e0a040eed0462218e97aea87208ba879acedf413ffd5e63a92dd8658cf5f49d633ce7b126091a55701168ee4932db004dfe8c35c939887fae3a892b0b04d8eb74191bf8fdcf5566b4d3796a5d2596b1e750f64201057ae60aa705edd58aba4b48f6a2e511bf5007a6c44a27e3efd5bf2708f7046c1fff7864\nB = -244f2a90a57e5d066fe22f4d52f91b44882b8ef76d1dafc3387abcb224eda4a2100239e729bbc745237f8129d457e98eafb2ede2f3afb81e63520493da2a5730f1170b31fcac21259e90c894f8bc488c5e5dab2c2635bc7b1ff56c3685607f6fead73a09f83a7a168c4245729ce5b06e482d7d3d72eff33d14cfe2f32f72175484ffa292a9af6\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2239459025b257fd0b6659f54b8874f93f07f4d6240f8ad761c9da288cf1537d8bd001eced284bddf78edd611c7f28f1393c6fb879aab6e7df8eefd347d63628b1ae086148f488b01272f67ca19db71a2b284eb17e17aaf1e3e8f23ea253595de474d5cf47c16aecfae360eab7855868b8af361491f6ad96f893f9d3eb66d07d\nA = 558613de283911aea1ee21d6b926f531f778c5226e978ce329860682b5375fe5e5328ae27b00f504f2a2d24470d16c1edcb8e76b4d1a740e55538e79ac7da4b45c5299993513ec3bba7e7395dc829a00d4e228618dd348fbf838eaf0bd50f6c70253fb1c1c734a07d0813915be25d3163df13511f3675022cb85af7646c14ba5d13f615ded8e5\nB = 1f3c3c468146c29408d9207e15b25186d3b06b3fbf9556eff7ed7ef7788032d87ae1a4d2a0983902d4c70936c615d8c9ee26c89af8b58d60231ede54e859763237d5ac59af686300a3e92f456484ce77700557ddc0f93bb40e5d2e5117f2356ac7ffca26dcafb3ce7a5573e07ee97515b6b082fe75fcc9dccd76b4fd416e69a247fab2b30965d9be\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 7650985e7c6e5461268867dfa9782cd8154bd6a4bb5857d6555e9d9746ee79b37e44638940bf8d5e974911327f0e53bbcfda0739056bae2248015c35839f35e7e359e93d3a339e7af38c0cb43eac5b41e1406e34cdd4afd458a5d126f70b5d683415b490e0ad61269ffe7ea8972eda6addd447d97e60891e5099ee920e18f233\nA = 184845d3762ad1a9c925c51fabc7b9e15570a84a06ecef994910845d56869264273d75fbb84a31c97c27eb9779e8b39f6829638a78b266326b60546507f65128caaaf36d4e7f85939b75cfb3145e2b1bd8372531cda579f59efa0da9c95a8efc72faf326d35c660b4444627d328bedf50a919029dd164de051a4c0c924103e365cd640b9637d8244\nB = -977390f52af784b52c1d54e82131b072a1c308406e9b82587102e67c6f7145f0020952231a5f0ce9d130677bb5a7a37d5a06dc570a13a29673c8a9068f06242ac438806c37ec46136e7c1c1487ca2d330fc1f3c1f42ea51ba2805b74c44a61fb2fac109710dc3dae78a07057a753898d4e849b910f035bfd807178f0108812778345b256c7b59f8883\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 35d48c3e43070a10dac0e256afb83b219aacc0036f554bd998b9092ce3bf87bb5d3b00947f2c86fd4e7ab830502d15fb2d4e47ead087f5c779a9ba56e272ea86116e2c81345d379dda6b581e9c8f4df8ea56c78f04d4f7412d245e00ac645847af6ae97d5d2ab27e48cc878d8b510c2dc753f6ceb1b9e7bdd923e0e065a6c11e\nA = -76e575cc79d7f0c313a489b255e85d114f3933383cdfe75cfef649f639921eefb9b3b3184351fd0ad252c6e477e153ee586a0ff6da1e1b2bfd7e953e6dd778c849843fa5cc355b31f5529ca45aec81ba67a1e364d5a74a4656d266f7decdd47b2fc2d81d6c298afa2d1c39b5e8eed519a9997a14513537cdcddde0b5b41314476264d59b7d3f0e9a65\nB = 6b7faa437b4e8db8fba56c62eddb8a81e9090d1b6655a2185d656b2db0e85225992297381d653e707aa15f3017880b0f07abf3dc455cb09c4e551b3df3516c6db4ead79b88339fc33dda96bba76ff7c388363c36b67fd5dd0ee63f92f67549dd77e37e9902ae51cb58057579f03286fc48e3b7fba763fc5844c222e6a1eed9e1634d0bd034cff222bf147\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 445039f359b55eec647296fbff4f22beac09cad32cae79c13d591e314fafc2b77839816aa4f641250938865b0a2c30a10e23da71a6dff5985ebf3df4429fe64c327557b12d987ad9e9971f7c7b1e4ad01c94e1e5322dbcbc4707a959a401624619029558fd6f5b14564469b13146f9a2555916491e4d77caa70f51716b299135\nA = -18ddf976fec2090f7d1f4d41b8f875e56c813c04338f595d6e591b3eabf9e105be792f45354ee9beff997e6c0e8ec3fdc714c07b3466ad1a949b9d30da0115f5484c3b9e00c7cf0c117db57c3c6cd7434371c6d9ac7a5da1a0e2d705bacfc22f62785222d59bb5bcd3e3bf2df8e845953c6ddf1b546cb75b1698dc8e20bc611294ff288056723f1e46ec9\nB = -2cbaff39103570df7d85a5673b50fb8818434bbc19ab4e33bcc8289a4047d85de1b7029a5cda3976ab12e1d891b7efe3d5576bcb3713c597771f93532853290068761bea04200fcaf9b05d8553b960ef5e28064de89d9e5097d12b26af0b64beb40b33ff82a55af7c5838b44282917fd4342e2065942c724f3cca515d9142fb8e46652242e8f0ee5ae07b6cb\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 6727c0d0ecb4a375d0fd1bc52146da1242099d445ed9e87b1fad4daf8369fbeeec49027d88bd98efb425c1e3f73e412fb327680068ae57d4a53992f3759af0ac1b96a92f56c2cf552e6682d1fa90c3910bbc5c0b1754862ee13c5ebd62d5b98bfe8dbbf9bf53bf9ed0b967f3c9da24d4334b9f3f75314b429b05b8e27142623c\nA = 5cb6c49efc6767cf956885690ef740337aa71b90c1d4b9b0a9e4734de0c0c50f2358fd45aeedaca6e1dd0fb510bf097bf46513ee09f3343bbd1c11f507eb61d51ada40c5d6b730561756480063f60caf05141bec9a769c241d367cb92fa8e229ba2e471fc73f48812a25bfc7553c395ca77b80443ccaa82fbb7198f8c35c3b5a2fff977d8b2a29cf9358ee1\nB = 16ff229a0e67a410555dbd4b687f1470ec854ef67db73a902f2d19953c55071c4a26dc320baa8571586f1fd54fa490b0d87dc83e5bf20b78956084275518b307ce69aa4ca1079e3aa753d97fa1cff62e0b5f3b99d96a24e411fc3a3e375ea21b7b35a578a72df68d28286fd9a324c06930905f696424780083715f77961532bad061f3901ed276a9eb6e81ad4b4\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323", + "cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 6e9947beae4d934253e481d27e854a59c4047eeee4fdc7df7e174a8f045776109c148ba3721685195b8fb59263def88891c5953b5a0ae85fcdbf02abc76f4d3c0f5d9496327d063ce8b3ba875b4f119dcd8beefb3ac884c25955af61c35a69d0670c3c349564e5b84f7df4252d6d3b29d9a75f09e9ef79f0fa9f797bf75b8ccb\nA = 188785951a3befcab56128cb6fb9576bee2412e6cdd7dd1bf5643babae83c8011af99aada405e119c3be33653862440005be994bf37d3802cb6c73cc312824c56841004c8e871ffb560e93a1d222c93d63684e90a91394b9c8ba8cac27b414bf818ee0de7217bc2faf099783800485ce2e93612ce39fc7e2f1db708bf9bb032d92b66159073fecdb2e0257058f\nB = -8dddf094f30284c213577ceb7f1b2efb1e4213a548e6aa840f801cd6382fb6d4995908b7827078dc3f46fccdb9e071bb8531ea8971de0ddbb714d678bb71ba9d961e58cdd5f41b8472146ff9b814a5d1d6368bd94812f8d38f235f39aeb2421a57499fe7102c1ab167df7d33b32a6dc7c8eb8f4babdd6b6c929d1ebd9bf4774aa40cefbf136feda7b6e10ba4dbef1\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 3f4a8d90017dbe8e77205e65fa7a0875a1ace6f3f215c2974e47dbac779804143da3dbce92db391c2614c078997c7d1a15439ffb51a5787f5bbaf98a4dcef576a6317b9b92dd8141a8fadc05d3be7c150630668e620a4e07b4b00519f34e422610a160de112f1ab8adf09a9169ba95b60242c89196ac6e155021dd84b3054511\nA = -65ff4322f8e46e03aa6c1fd10a207a5e51db6991bdca232c0dbc9d73ba77fc485d881868be7b14c25b05bb59b7f5bb6c4b2a7d53f35d2d7af282a0423285c5de656429ab7d3af7d92837e41ca701f527845e98c2bfcb51647512e6abc6675cec2a7d34ce55ea4dcfe9e7a8397d45a7a3e73bdff06e303a8f04ab6285eeb1bb78b1455931cae203078eaae826a6e5\nB = 4d936b603eba3aeec3d3f1f9acff02a0ecc28a8ec64b6bfd9b153b1bbacf4f1e186d3deda8c1c81e759237921cec53251250e3e838f5063c4a1eb6cc93637f35aca10b965533d18b713617a312e74c446d63eccee93cc97e3723ab27357ae9b3cbfcb3e2bfc589a1bd582480e776198df047c3ad85f611ca6fa480c70aeb98af02f57d56dc9659b2a6bee222dc3e0566\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 8a7f3cde3230af1f1fc25e0c0e9ebeb69161d3864fa5a03e5d7f8c82d9940ded285df35c008f61cc151b4578e2677b2f2cff3236935de5bb1d113597eee448496fe29bb18343687f6e9f1c783863e949a0954de2993d47a03607423b458bfd18c844ab57e9e2a43930df159ce8564edb5a2a37a06425626502e3ff9363b73c79\nA = -100f2984dc1451fd7b71e5d290e4b7de2d26175a47b9bed524fae02bd5abf96faba06e955107329559bff3805689633a4a57275732bc42183acdc792cbf7b6b24dbdc8921b73c0308d0c0ce5d8aad75f7eb16352e67116e859b323deccfe5d9ffdd1f0265297bc9eede073146a06acc3c330458b07b8fd0bb652c7325cafdcfa165f69cd0de8b145d49ddd576fdde15\nB = -21ac4953e54347a56800d75f6feb6ad660b0442174cf3c5dcbcf6528e2b5da95a614d3a8399da14507df4b8eacaddcddd627b10ec2dc5fb8c43d96a38e6dff37189ba275afb9484df800587f4953e327af71dbd58780bd5885b4cdab15ea0f2864f961bbfa9bba6b2d9448443af87c0cf178990254c1ae6e19003b1621f3240a6e5d0a3be2deb5dd253f5e1f88dbb60b522\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 76f8b44df8d8547f8b3d8537393d2805c699eb37d19bd115bd5539adb6b6a00d004def3b7793d5c71e0ccd2b7e9fb87103c1a5f56a8f18ede1bfe1607a346297166596aa78dc584c7c32832e11b72fb4f2d40ae1591f341919bc0157080ee8febb7fee5461a918d2178fa407c37a8243e24206ce2c19c3addcc2b7c3c1912b6e\nA = 56f4d397530f5c90203df1ec799f82a0096888fd370d543e33b5a2c8042108bb75a86265204c40fa5a9a44965ad2fb41896b134ea56c79699a230f38c0e3fa4e5d346cda70e0253b9993c9da5642f4e645a0d96cb732f8f04c99a83d1f1360a385c6e1a972b89915489245ce58830788ce23b9e62d6b48a7ff9a486614d6979033f7914a0735d201c6f29e512374088db\nB = 10fe818f6af7a95cfefb0ea0726f9a3e0e7c30dc9785b1fdf6e2b810515448386c7efc656479794d389e109ef3efe37fa6124c5a7db3164268da0d98538606c57bd2f7df9482860e81f272a27c727d7d81a66fc1a9bc8c385cf02b7ca6bc7ec2d8d6ba1dc992caa216d02c9bf0fba8ee754af77567c6e275ac1b6b1b36b065760761300d156e40da8445712b8fb206c0df346a\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = f580f9d2438b22700c3ebb23d1dc296f3d33deae2d32dea51c7ed3a0ce7b06af11046bc1cc279bb744bc31e7f822c17ffcc5dcbbdabe213bf97bb85c7e19ee71a513bf59b25b3b5787e42e9f3ef6aa1acb8705d69924a107b4f88e0cf9276c2c7c47fa4bf56c4900b557aa5587418f0ddd899630ad3ff678b5b907c07247b2b\nA = 1017a4fdce8bf41ce804b7c9c836d85ff6ee899807e1736bf0357b015b701b9675297e5ebf588ac6c295feed3c6a367987e192be0d89523ac7d64b0b9576f311b5b2705c5398276a52f06085027480c2ca72884ad7be34967bcc6c8cb4ec4fb761e88c16866a2e284b40180eb14536810eeeb180ab701ec47ece62af65a0753f95ca657e7d04ebf3c3a7db02993da9089840\nB = -aeb03379fcd4e87cfd18957a72fce42e016951a72b673a9e81f666b3cb20d2bba81400ecc2b38601bc3270eac46a633a1a6b55c50f00e9d7fc8a20176b93e971cfaa4f41573b17b8ccc498f8a3230825afd0d7f102daee347a9d59cc0914ac8689c1d8b39ccef1f3def44054307a7cb7706535f0cf4007231ba21696424c3d5b42c8e85c278f7c2e8b7d1787effa601ad357eeff\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = be05efeee19cc91e30a9277a6551aaea63aa3861b63f6061efbb0b92296e09f4709529eb849d9f40406fc59c526a4697144cef9661b556040458940ffd6a87ed56cb073d2ee0e6d1f05936fddd1b9a8974a3088577847ddde6bbdfb3d69158d5b3899c13ec78fb5cb6aa7204efe308bbe0b52f18381fe838536707a8a27ba0d\nA = -669660e75eae9930dcbdb99c477c980869417ec9c0e8c4053f0bd8ae62d496daf7539f37af96fd1cfcf3149bc02b8182a46b413e3397b49d4b4d204491440eea65505cf5d33a8e797af08f3da41f5a0804214846bd95d730260c6545d51126278181719ddd396c55f119e84da71f0683eb6db8393b098b3a0c5999862644e073b4918b5c8aff17efe860744d85bc94b582d45c\nB = 6045f903a750b69b709cfd6a1c8ec9fc0d7da9c53a9d26fdb0ce9a17c6a0ed5ba633d6fc01f004f4a48cf247d61f7df609008ca5bdc8eafe06dcfa06bb67efa6a584b5a2f02768718a908978edd475a2d2926af2a6e523549a5cbecedc78323c5c295bc0b8d3e14053078492e82e339ea2c6301412a5dd7efc20da0aad0577a37d853eed820776e672bc6d23dc821b5855eabcceb18\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 705bf20b7d92e68a69019cfd721b27373c7ff22f911066907f556321371fba70dbcb9774d3a26ca43e44ab20c586a3c1546fc3152ce011be66e04a59c6631bc8bde18efb7bf1743b9ed75a7a6c5bf5a4117368b81b112a3cd4e1c44a621f534a11c426451ea5fde880939ee5bb28d9843730e284520a976cd9f60c94751050ec\nA = -17c1dbc1ad1d2d33dfe1af7b4cdc7b69fefec5a92656957e111aac292e44719c7c752ace33dc74a6568be38b576a5ba174bcba77a034af5fe101699c99ca39f8a3b0a20679e6d0180868a232fd8fc775089e185e5eb81585403f32619a2f4d857bb091a824a89de2e84529e5b0702b45771a5816c5a823d81ddc89f8a70cc3d3a0c6bd6d85e9d72b69d2713b61c46161f7f4700bf\nB = -2252b54c602456c5deb86a0f249f3982c3836b70a946f636b22fe00c6e3b91b94e19200a33087fe734ce9a3f92a6099ad03a95ca523b7edb9e1ed3464d38fb96c470464e1c54790cd48769677efc5e1d22f5be4c15288bc5ea1dc184a05fddd5e576b3b4962f37437b4f9709dcec374377db44c8ba1d8611c0c3ec35f9bba213eac59a047e78195ebbbeff941c7f862e8c80eafb72b1e8\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 7306e3172929c00c29ca1db360eb4ce82066f237e9cf6aae368d1f531620e9b61eb64f5b3e2b735a3b565587d7e955d052df94a20e4aaabe493dba2c18e85fcfb65df166cc48733632d165129b112598bf5e4c58dff662e558e5f71b25f36708d3ab6536b1cbdb5aa2ee56d9e019a9c3629185b188af909831629ffceab6", + "34fc\nA = 6b31ef80767a7693e7d0a9ecce54beaf5848120f036923d80b7a0245aa6a46135e32314f3b227268e0bfa1f45b4dce83bea890526c7ac3efdc8e485189ce2c51597c2864c2d3664584be23559c03670622a53edc2c17b3f1a92640078ec35189dd7953e55e4da0290ff1e2996d164d69f1bbe6f5285ae89209d611a7d760e413e23285066eab8e126c320bb6130a91d67ef26d4dabd\nB = 183f06828033287497322b05ac08f62dcc5fa67b7a10c6c5a319c9a1e642754230c6d9809dcfd2de4bb9e360d6e6e1180f6ec6e0d4c6185e34ed299b6171e653521d0f7b8975ed5e7d2c51d27f9784a4b6f9b5e97379fcdb42e4df981462cd5bb9d0501f93f217d954f6baf70343ec710065eacbd2b778430ddc36a7ef0515f29d5fe78d8708d8ffb6c3391c6f632cb1bacb4ec52972ce0a5\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 361ce44d153f4d251952c0b90681a19b7d2d8df7a6c5d459691a80c06107b2e818f93f30f8dad352d2dd87b01530d51fd1c67cede9b1a6167697098e41bdc5dc5e7a3c310116aed0c7b5fd99dfcdb3517c13daaba6ad10879f600eab846cdc110d392d9bdc0e8ab34b317840a725a7a12ceb48c75e8dfeffe2947aa85b2a5158\nA = 1e1f2e44bc7c79a00afc3b2570d5cd27ad5ec9f45aa94f63f2ec3fa6b69077480212a1cbde25ded7ab1c6cb1ec26d5905948e5c1d6d109bd5047b1e038666054606b42e880b609f6f00a219dcfb504d481d6fe709f4362940f6c4b6f2e05d243722cb32bee5508ec94eeebb53b5befa551d3ab5dff9cba3daebdbc97179e56cb778aefdda6a0c24265728ff9e59ca3c2d615398d97e66d\nB = -e018708df037aa2918850fabcad82731487fb812213b1c067d0688462a4d518e5ec7c4c84f2cb2017aa6bc960e2faabbe361ad8f66355366cae869d366f06d7cc32ea08dc51631e7f36a4c775611095d8aed06a0086d0a471749246d7157947a1eb5d5503f207723a7062382b3e45bb84c6f555e48f6d63aaa1c04fe13c0108507c0ced669a5296bcc16debf18e03c32eefd177bbc1dd2f19cd\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 3aeb3ff6e797d271fd2271499a740a91569f300d7392a7b5898084012a3c5ad379a57d5169e43089cd58fc7210314758d5368dabca2f0ec5cf6786801bc99b45cd60403c732d9f98936aed76da724bd3e7d4b622dc690778f11fb0310fd4cd980b220627f7a864e107f93a6259081c6581e5dddba4890508af8057c1af29a745\nA = -75e06b47f60edd23148c3736c9c125a617beea7c8fd47e662c9d9be883ae925b7801a0030df3f4bdd3c9fc386f18c4e002e5daf4a6f7fa27b2f71252c83d5f1695e50d62a10b99e1900987b342290decf681a064f789e11bc3fd75d64e2e78ace56e7491fbe0eddd6f9958a5f95775c920ad6c051ebe7750fa76891ab00f42c910550a42bbc1c1e5aea0ae13b7e6f916a5d228bd57e854f7\nB = 434c8e4767d0d7df2125def75a978bb1509a26bf8305cd03df748c6c12b6dc580a2c1ca9a4526eaf3936fbc4ec797d0733217a54ffc9e1d7c6ca04fb39679859d5bd3fa64cd0a09cf1a056094b9c20ddf1f00e134533ba9892c2ca7346ac8d0655250eb45df9f0b7983bbf71102c6f1a2d9497e7a45eea7b3095cac037b7aa755beeea8a6191da268780179a652d94a732a2a5c7b626c0de3145f4\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 734a429c91f5b0f06fd47725ded06222c0193dd407e9daf136696f203e153c9bf6df59016849284cef93fbd35edef2cd31c9b956fbe562d2a22100f177254144718ac7d22c99783fd523b642984794bd7beb0d0b363e28d3f3469ee332ee364faaafef25c1d4a11b5e517e44a412ba717a113ea9e1e8f2d6db8fad6f10d06950\nA = -18dcd213e9938fe4b6a64abee3b9867f65e47e5b0365d45a8dee14ddf787f34072ce32f38d4d48ccad236005a23c5fcdc02b72cf27001495663fc56f428072d3f1bf5e33ab2c5f9dd9facf122f7225ea03c2f67321530a642803f65a2e9428f32d0d974e68a25f705e4f8140568f7e4b132942b49f9ff53f04f241feaa29aa353925fcade33a0cc192fee2628c2111da1e652cace9d304d0f1d\nB = -2e5397658a5e6db9d30f09e93e67a30dc84b1e17c25786e041fca48ab710e1d0497ce615264f1abcb23d5aae8412b58430bd801775acdce06cd362438898697940712062b611c92ae6ad10da31784207c5e7b9362b20d7254da0df8caafe0736002dd466d76b1a03e91a8dbe8a71107abd5f07b00fcdca2017391c7c3263881a3d02a89b0e16a2a765a32d24ae6584cf44a88975c539402db9a301dca\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 427609751f28edb62c717bd98ddf999cfcf65128b652be1b5aac0dfe1bc0f7687c580ec70c8290455a9448c69dcb550c0cfdd109af561ece2ec8707c1d02e8097e780f32ddd932e706f81f68711acda0e7610f4dd0fd55f6ac7ca3a3184f655b0b29d2d62974739b43ded96b413b9e3f0033ca1edace24b6bb610bf06b5d940a\nA = 6576c31d48daaf7d6bc3658952c4ba18095f1a0d73726f6fe59381af45a2a6b592adc79fbc3b597e1eea711ab295cd991441fb5fc4ce5f047e571a7d949c709e0d31156184be4b8a6a49691ef93d7d3b120193f6ee82246aeb896b8b7b4c74c27c02cb39fe0335883a3f088a71ab42b947a0cd59dd2155c65a0274ec0836bb8c2fe394500724ef84d869bee40291363389e7012d672b1eab6696b\nB = 1ba2888f30be283b588cddf00eb3ae3c641e35fc0bb3a9fc85d7fac1e81052129f499afd3e8458d4cf893d51fe4a2bcddf70f28c8edef16c7bbfb791daedf1a8248faebe36953560498af652d1f1c7aa0e9a5a667d9c94f7d9525cbd5a82147d58b738dfbba5aa162858c2c66d0dd7d8db38d41a2261e6efc7d0c8b2dd2d6962be0fc796705cec8e87a13092e4a3febdda3d4dbed9d11a1d5f92d7dafcd6\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 533d6d8d7384e6e65569ba0daae0a8cffbec1d20e417a6edb42d401a59de0a91a7e6854db081ce33b76faa63f6d866993c245e69ddbe6c86d339f7107a4807856cbca23cee2bf5496388ae8fd8d7c78767d0775acd7bd6202dd75451b424034e2766185969b5663b638d539f718e50a9f752f406c224c000bf1ae1fdd60a2a82\nA = 111940235b144a42a13201a41a3f9e4ff02948f8e9127d9a3007906988a50b36d7622d1221155f2516812074a7888b1d8334a01c02ee33b3164d761d02b36729c299ce2455a462bf18471fca42e5b01615d53723c3fefa5aaf4a039a6caad35c348a0a4dd3f0204f084f35c0b93ab233c4066dc50c5fd3897a769a7c5bf309f7a9c30e905466c8394d509b79d62a69b58c73d8d3f1665ecd9a8a4dd5\nB = -e2633e43c38c0b4b8713c20bf4e2b8ccba680ecfc1139954fc42724277beadea438596942fea1094091671c2060dfccd0351b2fba8cbed35dc963cc18f8e8835052da884799d88ec1887712000a0726b17cbc4302421011d5be8d234440eecc363f09e2c04bc9cded3cbbac9a5bdf0b6d418822fdd90dead20e5bbbb3566ca94ab85f3a00d32842eee6521edd18b9aa6872340b2f47deb961f58bf231e01f9\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 33960d7ceac73f342d46275e04fed56563decf2fa4c0e9307c90288e911ac8782f8e1354fb051a9da8e2db83d7c710b5d2b611495e72ed42259ce783a7e7a8f601c07061ec749481d39a082f29dda1f9c7f444a33ae1c1055d37a677b848af371cd3bd41c851d31a07e144d7add66df39576b8200a8b918201630b3da8e664c3\nA = -402034484e499a8efd610200790d443c5d3be35d19d8808da85954d42dca3f24177de48f55fa2efd7e4f7f624d806a8d461c3bbe0b626fa1f3cad2145746464108b367b13f3537ff395262256bfccce5f0414e1f98b59ed29940171d46ebc4bfa1a27802cc30d9221cfbceeb92abdfa6e84ab4a54965568aa10ea631e82067ae358a1a93a3a3fe3a5ed5636a0c4cb373b4d49f46f8fbbaa665a19200b7\nB = 78ec7dbfa2b28e268619ba6db34a23adab25e7f8690aa9464a7d8fb7c6b87d5dd9d33d4c023bb665f2d96febf2638fc087ed30796fe7517fd58e4120c0d319688e67a32bbeaf62a987a9764be75384bd499b0e00a850f27e303f615031299c631844d10abc571f9f2a0f742cc0e8df2fe3c244bd825bf1d9134b2f1059e2a1b61985ae8daf9bfbd9eb24ba268ca58553891945ff1a314a78fdebb5444677ac081\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 3a1ea3fccd6f336e6d444d68af1753b83145131954c20f1e3c433a89eeb7e267425a34d91f67fd65191dce85769ece2fc7ab12d032f3e30f8509095ecc05148e47a85391b21a18257c338a6a3ca9816987abc8143fe443342b34afd8a52fff00dda2e42b1b39322bd38c6a1f711051f791d6cad2a47ebd423a9b933485fd5861\nA = -1869c53f86755aa350115a9f49d6248cedd42a339506b8ff59cb878b7745956f142fc4387", + "322c41f369773ed375b72665026771d4ed1b9ece08f84e4782d4c3b0177853cf9ac3a55f7e52f39c1b82aa42b30628a4fa6a838754ec6ff9809308f675e455bca6f44e298394888d85fee29d8a0c8e9cdb9aa08d68cd70e13a243b5804a3ec199f52ccd462ba6594d856602cf1d5efa509047633923d31f78da3\nB = -2023c544b6cdd8d971bbb345300f7a101f6dd44dede6bfb5f4e6b4eafb7a40728a3063f6d4bdd0f606ddecf062828cf889b2f632d0c9254c28f36dd974aef116b73cabeb2bba98635841c2b4d2aea833e35eb1db9fa9a9d33bf7b51c49a14907dbc6036b027a039192b47406bcc56bccf375fbdf40b82ac4b3c660a43d5a6eb656868d383cebd099d2a73506f675cf29649617fe06097a46de93c13d1e590ef2cc71\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 4331f18a94c169cf0253136bc4eb7480c9fa4401c18db1194371dd53e5f7b75f07ec2e1e1c4116a5d2a8b2cded4b22925b67a88af9b8479c6e821d58cec7ed9f780a4c41e729982cb33f69b87d01c11cb9a8f7952db1920b6eb2124fd5d820555a99327117d7e8e26d18e748fea3ebc17e1d07161fda57a21a70c7f4e251612c\nA = 5e7d4ef7d6ace6cb106e38d96085d3f3505983fd952498af3c1d9b2af61e4ba10e14961b339c6e64e11ac758d5fa18c3222138290866970d67d0a4f4e19f453503eb8dfb85b44d1050c86943e7c5d6faf7851bedf7d0cb6b13d2acee25372243591d37dd230907457fb440f83b62395f80f59a2d02b87134887406a78efd77614f3193e517f234434ab3be084f1484d3f2c1f68c67c0d6e863585a8a5ddd0be\nB = 114b6e6726433ea88a2ba965f0881beb3ff4d377526e4e099741f069abfaf29e129a1f5fd243c6599f725a389728f755f9cad767ca1d6ae5c8b3a32102e47af211e86d67574bddfa42b2cb466d968f38b47333b1b55211fd9a315acd5ef62cfd3e83c13ee9d3fa20a06b2292177961dddc7dc39abad9ea31ead1fedd3d699f651b656edceebb0bace11bebd0cfa581dad577b8b42f0a844bcd8c8227880876dd7b0aad1\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2468cdb1a26eaee34db3d2724e37f023c8a1788526b3dca99321b574685cc8303c609c85401a58fe6da181daf4111fe8c6d4b7428b1cd301cdb9bf8cb6f33140756c8b490d3b2e538ff294fd6471c4d17b9d9e4adeae0df088cb9daee18e825a368be57af4a096056b9e76b94c8d3b911b6a074ed41082926773a585007752ce\nA = 1e6a59efe0b14fa017c32ffd0962700fa9752242b06ffd0b604b9bfd125114d4e0909534ede704cdf1c9e88a6567f4a2989df752510d087d7b7afb515ad594627ece54b8a8e539074386121c9a3e1c12eb2641ded8719e56d42ef50e2f3b5d7d59f8a6f897174cc00a7449d2b91f33e9df07902a95479731a44fc4ebe8048c449bd515ef6cffed70ae78c832cd43491203a247fcfe0a403862266777947fc2542a\nB = -8a9d3646831dcc852fecc8e2335549e8baa2e2d82fcb90846ee82bcc715c716d4a9f62be29d5e1531db73c2186a4d2f118266de33d966b78f989600d772ffc55b1364117d6750cef67f4bae851e7e3f8fbdae7b79de7eab54cc1fee56e25d0632b2929e352c882ce78fd64dd0a1473e80b6572f0d4eb67f6bd6e45c7617314219d6f7de5e505a9b395096cd36650d23e8d57d6abfa9faaf0ddbff90d32865bf5ddddcaf28\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2909d3aef7a21244efc9b5b16626e260907ac11f3d00647f2170ba37197e47b9767030195c2f6d5eda717a83a152141bffed2e26777417ecd8e27aed8666698c2e85a414dddd52b07b52b0da7e08b3217fa6a331f84820d21086a4424974e1e8cfed3501eb054242a9f8bf0803a94981b7b81776eca6d07cd50c050dddf81d68\nA = -73ecc8a6a1507fb5dad40677dc6ec75f0d130ea704d1e87b00d2bd56a6be21714bb30202739170b8dd3605f0553ff57439051efea2a97def70a6d2cc3fa2b9ec27a00c1338bbd588513f0f320272b8933fdf6635e585d1e79203efb5c95a454fcd7f33aa2aeac08902107e9bfb29587ce8610d50cdb7f2033c5b726742fa9f7f20b4780cf9244e6abf6b812171a64b870c3ca4c9e898d4c15e9f5b0194ae736c3783\nB = 4049ae926bb52e862606842bbcb4a5148bd1063b6a56f331cf10000c524b4aaa80b3bd914cd697ebc98d68bd3c2bd5c87fac4ec68606c264c56e25b19d118dc9f2eca19bebca07269714f2955e107b3fbf85530b1fe99c42d33031958280b8e8abea5a918a41cc7e6980149ad68fbf1c0041798d2046d7f88a395348b295858c61c2f33d8512b6fe75aa8fbad62e2f9b0b7876ef95af8a7b7338a2d6b25ec6355c276fc6ce23\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 22407e4fe280ff5a10eaf46d8e1f5a1e77a07410cba4106466d703b11764c60124fa355733b47327e952a12869476306926cabbd797fc80b4a6dedfbec0b7718ee754d447825cc405a98b85f1e09ebb9294c4a4636aebfc61af4545b921cbe759d3f389beece3f29c2c7c07691a4c46a1a72ce418a239fdec80df48732627866\nA = -1e165ca7e1eabd2ad1264d5ed9c3d2b687f2db5b507a0e4d21d9e042cd46e93c2444c6aea8491b5caba2d8146bac656b7754b7b1ae0f6216029c7167fd3b1c3ba2e20469d386d8566ebbc05cb51bf1f1eb2cad9dc4fa454b07cc1bcdb9b8f5a43e354c4e0f4e62d52798f667080a0e0a15414391269fe8c92f06da74f6209a3b215adafa1eb6866f8b3e419468e2e5b4db0d0ada80514249320cecf034477977bcceb91\nB = -3f314681eaa4cb41a3feae8467f7d76b8b05939731fdfc943235aa4d67bdca30e64de541d17a8971e829bc0159384643672bdffbc93b3eaded7844d824604f46aa58b1f1b9d788106aff53438954af015a0387268266a6ba262e2fe7a4c51b5af6ff7f918674b7407ce8282f66e84fd2582edd809b465e4401c67e5faaa9e5748c06e3bb8ddb23fa649ccaf9657dbf79b937eb8959aae8d5bd9513c1e601c0e536cf60c4fc3802d\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 385ba217033463cd9cb882fe30373c2d8e8475dee54aba1ca9713a709f40844905c2544ad792784cc8eafbb412dd68de6f98522dfca1c3de8e3bf4cbd09bee4656c4341153b17c98f9ac09411d16ec9880835cae772bdd8eee51eaba7c02ca6a1034c2c5d2d48e7ae3eb0e22f59bf69537ab6f1e49e58a71c64b8934113eb069\nA = 5137226623f4ce4dc9b80a783777ef4e53ad3c2ec648264db472c517a96383ba1173e52c2659a97ce36341a11e832f4ad293b89696f91a051c35bb1db6182260d4a276d1a9b4be848c206899f87a361d318d38b4073a7470c5743b816cbbc3bc1b20dfd7971b11ad4e20d947e352d42760104a5a3cc590b985ee3b5e98c779e38d2581413a2208d31873f9644ec979602671c9da72fa6f66c603c1bb6d8e690dba8bf4933\nB = 13b45d4105e3f5e8e0ba36c812faeafccea2f1a30e2ce8ffad57ffe0dadeae3a23e813758f270423ecda3da083b42432eead7f04842db8865f9f1e2226a3d298ec1895ae69adc55d1d338c3fb787f0676664564eefe46ca95206e81678cf1a2f173c52d809b1e06641a9b467f191ea09fcdc597271eb43da1a9a856784972ce0eeedd49ad363dee882438f09863ba5af063925871c525c6c0ffdca428054e039e149a424c6d1b5b2b4\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 7865f718cb30026837ca006f5cd997c5b917726ac6d9bd8c3fb9eabda0854d528d6cfc10e4cd3f93f6848582690c6a83955072daefc6959d33192fcf42a111650e50776ba9ae43d3d26e0ef2c6b60c3871aec33eda8c56353903e7ae96592fbf350b88d2f56e03f7f327022a2aa9b7c484a000135b85bbaba6f8836cbfc81901\nA = 16978c06a03276fa2e0bea45740a98d55fccc9d27321fd0a5b8522298a2a90d391c06c5c59e7eca85efeb9b4c91d4a1e9178adf816d597311f004ef98d209b59a2d4b901fa14c57b7297861ee58b89c9b2e931e4ce5818dd4006f3c40168bb4d3dbbd059c1f1cc24ecdc64d37df16b8e8d0529247c06f905ca88a5d283ca1b9e6856fbe8115a326061905b369791772a47900974339722d19b3aac16a0bedd93e1e4e4289bb8\nB = -de6dad276dcc0a9e271ad523620ec570fe6e3b350b934932ebbe36dd571edcde968b6590be14326e0f6394c0a2172052ff8dbc3ff15d94fb6e36a098286333768a84fd0404dfa354173d01f98484fb20897c439c48952b7f1791209fed94e9e72bfb3df5f368d420d587ae8bf036db6700f77b130459e9de2a541ed885c69c5641defa9436a4f7a69d2848d0e5d1074f77fa688b6dcc4d4c7de25a3b1b040546ef7f418112127cff173b\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2d3dfd14e7ec60f842d1db83e29a0f6b052990fe8900887dc44476ed3948870c57e72e91e1941c476baa6aa86f76dd8ab6e6ea41707242c46d39b54215bebdb1f28e59d719fde18bea9994610214ea6", + "8ad9f2da24e1ad8a06f8bc698f8e76379ff332a2745af472d52a4b8e57d60280e19f93d5be669e0832824321e9ad8e76b\nA = -5144d5ca834f7bbb35d3fb95818c1f89ebe08efdffd35993a7691c05aa1b67f6a28e219b27fdcb66e516097c9ef5f00e4257c561b1f94c52c577471cfcd7a55314d3b0fa308b59449a36adc884c48ef5f34753bea746bd6fab2f20b86814c9fe50e8abaab742916313a50e3c390c67fda8e3729ee3329dc5e4b7d3107083aa3a07daf7952ebbcfea15fae7338cd0b114e9ab2f81dc2e80f90abff7a7ac59e3aecf76fab87633ec\nB = 48b927a46dbc4e23d714b256084fdc7cb9d4c96a988a71c956e0bf98785ebc9bf22b9d5c6ba0c419e60afbef7b96cc0c4a13e397aa2d2dd7995875d2ccb127169423455d138131199a263151f28d232ff4ae24e316907ace1fedd02a02cb5ff9c831de33e6702010fee2232bbe3c1c193ce792eadcad0c81e7d7c17e49168377b68690bc61f22dfddb17d82a3b993804726037cfac8aabe8548befc52a3c6c6baaec89a392133cd9c45b1b5\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 3f66970f600a9d09d73fd1ff813e977f539d69fe1784b8a2f99506d868418e4b47338ee0cbceed555f88824f98ffed39befb69e8907a5822ef7cd2a9950a070aec8fe4db9d68e1c0620f9eab4ab529c7e69466e325fe1c6c011bf7ab62bfd1a136597d7d5c47e8eb161ea048477bedc88fa30e4f7ddab2cfeec3fd0bb3fb61a3\nA = -1343c391be3f2b72c4b79d8d6091389c9602e97774b18eabeaae81fc0539336cd8c899341cf75fa758421c7f32eba9df474c934642003408b32db66cfa92e6e414b42b1d49c7e655ffb4c80f5bbff8d2774ee4f7198839680175e1ffec0428939653c6697eb3681d0f92634cab1cabc63f423d5a71d65fc7150aaeea74f9e0153923a1c65dee4a165e6a01a88655fbecd2db7697f4d2b49fca2508e2b8f84129785d36d88bcf59f4e\nB = -225a0a4afdde6f6450f28736c3ef6e67d67ec6206a63b11763bc6e69b03f1494b275ac504868caa6d56d684a12dc1098ab0d030583e73a2f45a42b8607c0f19031b9c5f07fb71919868911806d210d43aaaced5894e844881e89bab85a203af9ec3adb105e50b4250343ca50c26df14c46d73a22c2e4804d26d44ff0bbcc13d0dc7e326c9e4eb441f493c9743ae0eea0de045e05d19ac32d2379196a165e63ba640ca42e4861caa24c29cbfabc\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 54e95e86e87bc220c8f53f8485402327885be34e34063a1b81e52a23fc3056758cea1c039ac4e513f70ed9d394f5806fb771dca8e342368184e674e6296b9a705c6380bdaf11550cffc73f9f55b9385c85fb648f105f11138a3e1f9dc0a39a0f9755f8328701484d45784e3e4b2ebddb32c9d9132867c6513201116428b791cf\nA = 5f1239e0b5dbfefaba906bfd9003336489ffdf634333cec2484c582dbc19b66782ba40942d047c3749597ec4d89ef61b7803d33a9842f0c903461be37c679ca213aea894d36c1e12bbcaa1c679599d2adda9bd23e712dd0d0bd3f91d146e7a04f3e7ddec8b0db7e12377ab32ba241ed1e01da070c1f3ec85efd8387a7b9421453969ecba8cbdeeeaae6ddb098084bcd250601af780960c32f0a1ad7d7e61fb19f40dff1060c5f332830\nB = 1113f145de014bb6dd6ca05de159b97e9736c45bd3bbd8477f739daf79615fe329ce948cab9787838d7daf797218af5ba7925685ea341b802690bc9588ba3e916145cd3ae9d0c4a149637b890cf50fdfa8f89a62e508eec68f9332787733aacdd57ec1f359ff7fde76138d5b33d32e64cf7d252f2bcff14be3adb1afd8da9dc930f5261e6d715ac75752b29f083bb1de7b0b89ddba633b8137f3fd299a7f77abf79781a10d897e7bf2c958a097227\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 6e0160eaac8e1c31cd3cb6c5fb91ba086d033b4b69e41dfffce7569e61770f6629f23e12f0074c47c46653bbba94701ca798e1a242f7c4e25708d3acb5af6ea307b95cfa220f8879cb4cfff96b843d6eeed2b15c8f1bb21bb2b511cefbad0618d49d9ba33cade6da6ab3b846a6a24e35fb36d41201d3b85be831522b9bf509e0\nA = 14f4e24627c773527ed2243c0d1947395aba5c9cf95ae62a48827ffc1477614ad9c7aaea4b4fdd97e3272d3e220601565aebf87928c301656e9edb08d6e680de845615bb3a81c61ed043adb9d708ec1447f057087211673fa6ad8977166a2b4a8079a4f29d48e7fdd6875ccad05d2c219922b814589996cd9642ea2b798197407acd274da30d3ca008fefb40a25b38cb6042a581393283d6448cc69df9a5dc2b0777052566a8608a1010d7\nB = -b4188ebc5bf3ba31cf7c5e100e79806e92ff6f863c3d68a66aeb3ae8385f596dabe6f627f3812d0f2baea319d93ae00de41ab65e42eae7d396cc8fd0a2dfd35f303117fde4db5e8438df0c2b3b680dca538b42a7c844a9bf0d3697fc89ad0a73594627578dabdc214e0f4aa06b40987aed473e7f42d318bebf7392d9c898b4b8d73a94726aef65807b2ff746d4a9aa76303ed7b4fefbab34f5c87c2df82d20457f68289f7b96dbeab581294974e322c\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 8dd91f390c1f85f153f332de17e5de82979755d835398cdf3dbda1ee73c68f8e7565a964ae33fd5b1f1060572bb3af67eec79c4c3e2eb4de118d471f74351b80a5dcafc682bc3cfde642e611ac1d5bc2c49b308c30985b1161c4d78cf7621b503e2dfaceed886befc004f3a729b4a9bcbb8f13791d973bf38fb8101d6b7a4d4d\nA = -70e99398673324ee83495aa0aadfffd7bb9c94ee5251fff365124fabc50175d794fa84509f034c2b86d83607789338b0eebdbbf709a129a0ed0afd21c130d94b279c56f1c7c1eacfc6cd13f724a9352b2b37412242a47b23ec61ef0040a8855371aaf238003c45ab9d18a66cc7dab9653b93c323815e5404762d3f964d4654a6995af507bb2db2149eea59acd72af4d034217eaec0be5ba1d23890081a6a234e125572e3bcf68a6ea52d9437\nB = 661d8832671a4974b493e5d71e547cd46b36730f4017e50c5d1a7520fbb75f0314cbc2ac948744dd494d566ba580a2108106b120a797cfeb1fbfdefdab6bd6b2e073f90c77e814cafd0b7f79afeecd59778b1dfee3446fb32139b2311011576674f96f151f896b477c631237995e11e61e715dd8dd38e802af93124c66eee735c472972000cb4788b26752a630ba63b45e8ebbd979f0a4da5b359abd2905f0b7f3a21b1d381cd02ac08e284218ce41c907\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2b591d2c57f6a5484b43cd7ca247c48a1b38319e843257331c8807d499c7763de4eefed529e70d4c144e5e843ac00ee8d106d0d82163cfb7afe528a7daad8e7ed105942d1128a67e38d59325cffc0c3dab9185247e0082e3ccca82a900d917c9bd0f892d4b518a752f8e9d38eab2acaf3b3b59f15b0fe4cb9a3dabe6e0191493\nA = -1896f67485a740720e23e1642ef02742ce5f10a92e51af19e112cc99c0fbddb60d7190086c942d293d076b474d056e74ec9f0c42055d745a57ba370c51ab2b761d889b766cec909811e2b2fd11d6916b753ae00622f038a4bc55b813a5d06e6ac136e81689407de721ee852cd21ea989ea7c8cbd00b64614caf0974a62097b2eb865f46fdb0c1a2e4f2d839066b797e51392e5ebd14dd92630c070acb546dc7438631fef01594878643a4cf77f6\nB = -3a8e2f3b8378a2605f5affa21c4fadcc655f2f8357a3427d2cec0118e55fc2bbc25931259e294d91bde8dcbacd39e6cbc125683da7d0dcbbc67d7c5866f08e7c4732cd4384d9366868370ea40a75beb23b81306303da4a3e26ad357c5c743d0a4ae775a472afddf8f21cb4a1a3350bb6aa71037607c334a0c79468668d3e727cf1d0610e49f27780901c68aecf1d145953e45f5b090855be714cb39aba2efb0f7db2786b331dd9bb8843de8c73c95ab13b6b1\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2f53bdd643b5b22445e2af3667a93de52f8bc7bc151e196c0ab0bf3b4e4dc0e5dae9e507508711a9e3de52e2aeece6aff7fc8a1db65588de3272839390a35a847e29204d3b9b70e10352c88a10c86cd33e067fb530d20a3a5ffe67938c5a7a9218f1164f36a73324adef64da64d5fa5540d29a76a87ce010fb7d73a59b109280\nA = 75e31ab221c08b3bd73bed03f878bf7742f9b36a89bbfa7e90f9b05ec11edeb0140dcff6e9ad1d62cd7af34bb4284b3a52bf1b48a40f744b561d9ece056a9405ab15f508700b14914e4f427ea1df3093497410a0108066e9b259c1a26ea72082b3cf0e3a99ad054804da7bfa0200d93d65354b75e605b47a4e1e17ef851a37c59a95e1b5172801e6ecabf70f1e6e382740998fcfd8a297aaaba7d04b668e3d6eed40358247767323a8393ec359628\nB = 107aca18938a9cb244ad646a37a212859b3dda7518a5827aa2146b47bfb3bd08d772eb7a866e1f674aab7a1c74cfdc2bc6e9ad1a365686213655b2c7b1977855bcd42ccecb804bc01d92bd7d2667069d853f18a0f0661f028955e39f71ee82b9ce6a81dfb2951b33b123e71264e819bba4d0a8c53a1d99964ad9ffb58b7cb5cfcd3e30b1baf5aa5b3cbd20a0df7ec37563e2b32b4cba91bbf3bb6fd1cbfb2fe0f84d720efdf36e9645c7e9ec70442ea5174528", + "bb\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 32d16f7ae2632b5cec2e90c34d191599acd9a1b5f97845595988c1d0d4ceb9acfafbc4aeee9924ce55e109ec88c57610fddc664316e0f9a5e3ed56ea447111c0383ecdf117ab42351b80e72720a4b1d98d4c73f5235507c5b4f7849d5e9b527d054858c0436ac3d2de2704c4bc25de4cc702f5880d5ae34094766938bee555c8\nA = 133a439cf006c753c132a8559ea13c64f598c5f8bd5043b89d04d7ecbf0ec58b225551c8df8dcb341198fb0b487774867e5b68f9058f58b3cc98168fbed0d0ffa86bf74b4fb0d4235976fa86d52b8dc7e82df176d70892954223cc484ae58b6a60459a9a0803ab856ff9699789172b163615e322e193bd758016f634c83cf50403e416ae241d9b1e44add17c2a663771ac88cf8b9dd94622d80d879ae41f0f4e7a1a32a1ab164f981900fc159aa85d82\nB = -fef33e21c07dc26a47d692c3094205bf4efae6af32f1c0f46ee579c1a22746a3663d66f2919f46f973fe558c61264157d531e66bb9ea10b4b49d9f6ad3ad8762a6ea8169a9cfe01d3dd65518c2e6e58e8c88d1b2f42d207399d7326752560cd45d0ff571309301683770793fe3765c1337d14021d39ea6980934c5fefadb93047ef07c807d0ea5625ae0cefd098988d6eb7af993c062ba313e23176e7abdebcc6e566304a5f9e03da05bc1cc58dfbbc898a67a5941\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 20877c7f53fca97f8e484ba31f23dcf51ac0f4fe4c5121eec576e043c6ec5492725f1b9f9ecfa64195f71909500a69fab2e591377cc2120bd5f60d3fb3812f9e80b2f6c787e0081c1439dbea76b819ab44bf6bffe87dffd771a870e4f5502609249c5260f91175fb217a9eece4166540be877d564049389306e0d6b313706297\nA = -534042b0811c9afca04d20d83898e7653f91a73de1e4b516f3228c6d6d9b963c7f8f4c36e05383da90f4edd072a7eda382c47b84b46b4dfa16f269c2d9ad0fc53ed2ce51cd31e4e32d0c1ee21604d3c7eed2deb35cf8df6fe1c0740a1515e4c702a2074ad6c0fcd403603b4a4e2195d19b265958ae854ccb0b41cf22480389a053f71544cf594f6833f3e4d91fd3d9091df0978d04d3922ed72a4fa3579c5fff50eee812dfb2a334148227a0f5739f8ac6\nB = 6935a3444434b0b03d27545721e253e4281884da027246e46ddefb01fa7cf7a9a030581dfe618431a68ef6d79b03b34f3ed598e7c8ac030e2b4cc887dd31664604fb8afe4e71fbc3135d6d3b4e596044d6b615de7184ebf8dae8fd58506286ae4d3b797aea911eb59ada39dac756d0e9eb6a6c767ab77b9348929a00f8e311f639d19ed88c86eb91f0d4cfddd34e98130eb520fcd2b77507c24b6804d3d65d1b21e6f6d55d1f6e92bba0544829687a096be79eaad7d88\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 24823628d4fe9540103ce5f611f8a6ccf18788120280179a40c2636f30a13e5076503e8a4b6b6ffca21da5b0f9f0d85feb2ce10b51292ed069f35289ebf5130972d720d20dfb8e6ee80c3ac598570d38e57ba33dbd75f1b03eab7847d865c3e8e471ccaf302461a6136dd13b8d31c9f163799a3c24c7284b8826608a9543816d\nA = -1d476cc98529efe5b926aba3160b261723b009e9b880bdea04e9b5b03f173040ffafd1627b38be8e00840e85d7acd3abbae2f7a60b305256b920c2b25a8a4373ebbf1a0c69f6e74792cb0d849872500519b6d1c190da30c572e26b44590b7ffdb464a900fc38db013feecf909b43bea549e05f1b7e70d6ad879c613293cf61f0cecdba1a6565eff1bfcdf740bf553ffd5bb7d74f7e9537897184c527b990dea20387bab0dec3e32727786bb14975b23ff09f8\nB = -2b6e12c87ad91a2fa878b9245875209cbfef400e637b557c868ccbd6e94dae65f1ef8caab61f292d739b139e384137a747210c09ee6f3b2ceb6dd212e14525852b8c54215191e116b7097f6729f6426a8bebdff86cdc16effa08d932ab512d7265cc0f57303aa5e6fd2afe0a45180557935c230558d02c3030b38ca88de5fc75c1240d25a22fe32c4e5096aad0078d50989812d7dd0cbb02c736fa563efd32d14109c44297cdb3d4fa3b93a2e15bbb6eb678e93e943979c2\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 2c4bc23d0b4b1f79141be9149ee20cc9f1b58ee0a76d5f4205e0862492c18daa20171285d6ff0b600c358be487e78cb5450d151efcff8d53004eece94c5a37f49a15fb2b5f62a79568382cf0a4232407b139e1ec5a9595bee8435b4f138dd72fdc2946b03817e49864812b7b61f179bdd8389791178a95bb6311df0a5c60db2\nA = 5b0a181f07068af6e1e4b715d92c1b8391949a1e3cf0fe0aa49f3333c826f5582615d39ec28b1367804c1ef54f15fb83b3c578ef3ae957fc89ef22a343175df3ef2fd425f724ec1c3363aa000ef624d64c6d678a4cbd90b41cf7d69a7e03dd60c5d3470dbb75228b34d35469847772ff3d74b1a89a2c492c082d3ddb45ba4df6e3f228de6c64913b79679cbbbc36a2924e722c2c640d0c5a0e90ae86b5364dfbfae80df3d75823aa58ac6c1da78e988a11831bf\nB = 19567bbcf615b777b35fa7030db7da18126cd695ca7dda67f5146c97beeb20df24ba0fda4a4f03523a0d9b9f85d9acbdb5793ecf9c1f4ceac81299a1aa34417779175a4bddc0e95ac68309da51e4f115dad6fec33a75d0c5520692a38df64e8d684c9304f9e2e6ac6a66d2e16a03c19a30efcac712aed2b9ee774ea28af4f37c45609464289de3f9be379c733d711875216bc223f2f468a0c9b4a8277bfe49c590ebce2e027102537bddbf2856c3b6e9389c4d1f5390cb0f346\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 36e1e0b44e5afc35d1e19e88e75f030569eb99d326721ced9bd7416ea7367a98305354eeafd204f1f8a652a8442eb0823d2e6644e6320933ac481a3709777381dce8a7c165b23aebf31b2ea2745ce5b352acdf0707234c824da9e1af98bbedf80e940fba00c229539f310838bd625f1fc103f267265ac1243855622c5df72c17\nA = 1dba8bd9d1e6cdc117a5a01b5046353084946fdddf2696f831a942d9db4637a5ee76b84d4ba63156b8cbc72e40559a2fe9b8e2682d8ba1db0cea042bb86f8ed71f6609df52526c42e7494f6114bb62263d36784dd55d396018b8fa47fa49ca6e5c76ebb0b00e6c764e36cb3ec75e3af6a2c14dee01fab78070239638521743d04f184dae79d49a2bf209ddeb4cc72e0c94a93a47c107f5369070ad95ffce034c554fe2a8391e67f817c6cab5b88ae9748072da5c9c\nB = -849602ea3b79b33af2bd3ef9d1250c507d332e759d428902dbee054fdbcdcdc0a357a51d00aaafdacd696a15a64cbbdb7e1fdb347be5ddb1f609a4390a6f29f79ccdb51bd1f0547d0d9a2780517f8753a906428fd236f8ee1b433e57f2810d0ad51846304a5729f53a871d8b0e14355d24d3f092e50de4f044e2b8aa14cd8a51fbb2ff36b0b37defa7be768c56fbd4f5169d9d4698fb9072cbb0a037c219552728587d7c35f27456c02020f5f9374b6c53bcf8eeaa14be51899d3\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 77eb3cb5277ced02b72368e41f04a35796c2c6cc1273f109336fdfa745aba7c755b6ff3833e9b124d9c78584f6bfda1c94273522f020371107870c288592b7c23964320729d2308bac8813586e72078119852e1d7706d8e15c195486b8d94358736869b15d59c037ba4dc8032ceaa31eac3a9e3dc51ee17706a6956cff8537b8\nA = -6a0753edddef8b74f762bf802d7fe9b38638923ee2d81bfdda354d40df4422e6ac43724de1715c4088da2e68b63c10c90b236d7dcab39b9a0ecbce57628f4c2950c79cc88a89daa20d7a8679232c8ce5fa30525c56011570107697222e0eaee6871adced52ba01a3aea0ccc9901cb3a09eb4db2f93aba0083180bb41f3f9eaae00fb458381213dad01997e9b88f21b0a79ada1ec3837ac2b63611455fab6839363b796b105c3be6106ff284544bda2a32352bbce6ef8\nB = 542c5fde65111ec8a38d76d8c5735cee17329dc41cfd0f13bf47e6d0e0093a129f3449db380ee9a70ec1e44640839ff18b950c8fd89346cb4701ef753e6ef49dfd9bd27d9987e572bf8e68df399cf945813582fa1d33e07be938a7729efd9a5e7d730bf61c537770a0727f6bb9ea6add5aac9267bf910eac1b7d92ab4184734ef8b1d184c292b2b4295ec1bfd17b8a2a2e4d315a8b37b8ff9bf6a1e94a4772267195c5a7ea6f0a0c267337fb97a023f1b50ad697ea31451192cebcbb\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = 660a1f378a23fc3b47f693a347d90640fef43add9729d74546933f4b78a26968cc9a70ad6fe8d85bf28164881bf7a99e8b96683c6f4fb54162c144f99a27e3feb736f0d382d7e5b934cfa835c723191e5692b7672cf6918c4a7a93b24af00b1beaf1b80320b14cf2d1539e3376779872542406a5df961f765e59f3480e1cd40b\nA = -1cd74c052e62ee8156ba5d97f28aada75211979b1c5925ed015ea75f693a", + "04c4dd0a705f6a723ae7b79958884c96fc07f81fca064ce2affc70768923bfbca6049952eea3ae048425b7c6ad1611ed4b8b77f7605629b9d198a77a27f25eff2f82867845cc868edee4ae31afc5d022b2ffbf43c14fa01bef8d7cd9d0e58362a0ff9abbf250e43ea5065512cd707791ea4868e95d8fd2357b3b3aec1a06888ae940751ceab01cf9e49015d42371fac30d48ef5853b6894ca83\nB = -2ac904d3632e25a4d536097d80a157791a6aca6eb10246ea21f4cae07aafe907c6e4c726694e14ce12e376c02d326f4bfc02ed539a5b4615a3cf5c838ffa52124f9b843598a3821cf9f1fe94e7206d6a525fad1ef77e7e77162e8c6d3d860d4f568e8f81153dc47f167860cd52c1ca59b15f1eaac6b9023c8b375bb63b6adf6972af8ca62b39f044378b11c4a969f3939d9fed5cbe18c06749956c7acbf963f640a1e1ceab73fc4c77463ee8d1575d018f49bf0f08161ce4f88aaab5a70\nM = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb\n\nModMul = cbbeda9c467ca801ec66fce801c6765a20148787dc6becb199a15c58fae8d20c1d391a1d9d57e1c74bb412e1b8f271dc2cc53c3355c83f3e2f00f15eaf0df735160a48e2273fd1bd75533cf94c5175ce67e79fa6c1422996fae36ba288a658a7a5422a59d39dd81ddea50979e933efc02\nA = 7ea551efeccda23622a1a5029e5525f46d5ccb83c28ec9adb7a3e97c2b7d936238c483a4a9bc92fe0e21208d5703611e2795b91fd5019272d255eeb\nB = 19bd92c534f56dc4235dfb7efff6d941112d66acf81b079382c86fb10dc5473bb8adebfa53ea3fe6e4df8412e7807aed029694ca786\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = b18a9cd6a0a89578ea773fbfbf642e05935a995a38bbd54480ea3ecea1751370ef95ff5ad0e3203613f0ef6833237d549676a95b720848c5e9897cda82642a2f373951d5746b559bae2d98ac00fae26e5957c61ac1de95318b1b1aa6d5c64a6ceb6575f1b807060f9e2a241e378e6ebd72ade7d2df18d5353db7737caf52f888\nA = 13c68e450e9e091ae45863f6c1faed25906dcd90a43620b1a40e7a506e7a954256bab0225f3678e7ce6c4ba6e3a83c8f04a3491d9bf097adbd98fa6e78\nB = -ddef76382342178fa6636e62887fce6e19590065c766b047073329ea15fbba96f2cf088fa5a989f6ee3f6a513fbf66f621c6ea6ef2fe8\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = b18a9cd6a0a89578ea772021f58ce74cbdd8c44a09b3937b198adbd8e95e8e35541eca26438351bfdcd8600b4f9b71616e1f16cee707c712d40da9a440681f8c8647bc90ba4c68b08ce4cbca458bebd5110222f06b2ca980a2e9419e71064324e8c36289eff9c67f6d5d011e6db8538a54aeff8c20800b0949fa42c38fbabfa1\nA = -6d7e88715e9854b435876fc9bb2d25218a1451efb73ad9cc5f52b2bee929530e6618a858000b3f24fa5f47b5f461c84eca971e38cda6e1f475f6612ec32f\nB = 49eb76e4614ac7b0ed3f534811a4ea6da5ea24be925ffeaa38bb228fa117ed56ae976b590d6c9d9a7a8546d8a6ebe4bba771d6587ac44f09\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 44f8596fc06afdb72a6e4f876b70b8d5d734589f41089c510b0da60ade642fd79cf8e705f09910912624fa1f646da596c137f124ec1a327beccba62a44f228f3c0977fda2af631e249b2a4de17d170df07bd812c233a96d17e1e93910267682d24c5c485f99aeeddceb658a7db258a2fdf73eb0266d26b92e\nA = -122231b14c249820f0dae625342415f0c6e7f93787b4206b79e9ecaeb09623636730810c7936e17a1eece68edc7c97218efb17c069bc59bdb9681a79c910c4a\nB = -3cdaed858523fd55553ef85d018c1097d7b88f6c30060d1e77b84821ca20b5625723c7d4331ccad1a70371eacc7f7aa11220f83f1bf3595650b\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 6de7efcfbc1e8d2cb14cbe4465c4ef71f0d1d7e80a1d80d9ac2d0b161d45fc9d915c54e33131591e8daeaa11ce02404c9b8494added1bd83e344ad4de7c04f626315caa56fcc5ca2ddd4e1ff064a2957afeb5d280477bf1f1195c7294d89049024fe821dceb53c7d270a8b4653e2fc0a4d8a3863a854bc3794753a\nA = 47423c4fec1eb6779fd23e3d4070d0a7bf9a946f5610eb469876797a39c58577242daef8c34926f6974089fc595508d9c573d0a275cbeaf37172f10b8c849a493\nB = 18ad789cf09e9ea182eaf43b28b4f2540e533f0fccad325430b73101c00e440bb64b70ce0f2680184aa8caea2f6f6517e9b80285fea8b61887a41e\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = b18a906994d3247bf8a00f20e4b349a500159d086aa863772e71a68f91af9d19e4c021843f8bb6eeed1df708d55047dc8faf219e00d559517632dbd1cbf4bda61651b9644481d052903be1970f04bb4ee8faab9adbbf858324e6cf5aa9384ceba655a1a107210a9497552ba8a56d5e0e70b0c757baa71d1613683707357827f0\nA = 122773509ee608cd9ab3ff6763629a18eae41be64bcfb05122e0b3e112db48c64d2a5a515d96a042850c1c848ae5fd5f0ccc57b273d25bd8d68568cb00bb17b1589c\nB = -af398208c01ec9700e332f3e694894c7cc412a73bde8a79e08764ded92f0d58db8056883972c79a0c9e0ce810786cdaa3629baeb9e5c370a5a59d3ba\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 64ef5e7063a1d95226569a27218e35e93d870a19a43fba9889a2ca98ca5c573fa56ebd77f1403b3bcad17c1351803a809c245a97bbe32b45e21768f28c5b11ad542f5e687a17f7811df6c8735e1778e94d9313c19fa32a6703af7ccbd88b489c96632d10eebb580cde3b905f6345a2a2b86a871b4fab36fa4b0dab9a6c1c5096\nA = -7dbdc37a51b601417efdda2516aba15827a40ffc304c523a47c544d5c0bba6c1367a20d8a6268a5c3f723b1b68de57eceabbb00d44185ec4ba7ecdce5d80456f8cfe7e\nB = 641cf85fcb5fbacd6214be4b7b06fda1b80f4683c21c1d08311f6e23a15434b42d30a51912898a1c46b46c00aef7ab7663ecba683897825a4b07d2b7dd7\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 370f20360ac844bf4275f78b7fe71ba5db6f0bbabfbac3384c04b256eddaf04725d2d57b31afa48f047aade156c34441b4a41c0b2146790a2e15d13b584021ad55965588c6e55ed3b5cf5c36b780a27c5dfb72678d57528ab17ca2ac696aed3d9abb0ca448d9d5789fe37e632fa9709f3bb924c4ce34244d239a940dcddd9c77\nA = -1a0cc5b07271098a23f01b3c0d47cab8b294794b74a8b162ff3b313fcf85ea81fc99433cdf4450970311e1d5ff81e9ba27eb867073ed250aaa7795e44ba8d4000e879bf31\nB = -308f93984acb78c5dac2426d9bccc2e3ac361143807c7d34c24ef8f8db5e68a904ac8bfed1edf3cc90d21c87ae4d224b8c46fa42eea77797f94aa848160fef\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 4c8f466d1d9829aaca1a22fb6ca5bdba885606b9264933ac2b4c18e3afc0c406aa71ee7ff490fcaa804f457096e44576ff8096fb1d2b3c68450a8bc36d1a2797ab8b621ddc91d75e7d6ba01d86e959171fa428a5bb1f26766f94a553c94f6dcc2e0af90d7776ed3d9fb67e842e88f7d7342afd86e2f5d159db7304ae4d204a3f\nA = 57e894e37159cf3c161be9c97a946454e43bf09a7ae8e1437570a86c6b06f84005c1463d27d726afd2e25aebb1657eb78957a9a12c8749049d12007a81d766dbe008aad6d83\nB = 16dba5cf077403ff4af47438f5840f65fa4e058c5cab3cb730154ae0fcc982ea097c6d0e75bbd635e97314f33ec7e31f0e41cf285ecfafaf36382b33d5e83cd55\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 29d13ec304f26247a45ab6869720720fe019d6cf370b9e2df9a65828214aeb4f8b17969b8dd54339d08eb99bbc66720ed78ef79033fdce6da33501fa8588af86ec18be4c4ecfe01781f9d1379865100dbbc020b892e77027d1f04f8171ca51fb73129dd9a96568904eb4", + "4e19f56f842b223724a9ffe28826803185e4208f0ff0\nA = 135ebb133a0beb909101da896e3aad7e26ea72b23e60802e54cc6c58a07b1205e2ba1fef6eb86c420f011b70e3f725aaf9fd1873b6e1c1cc7005c7c09e55550414875cfe846357\nB = -e8cbf3feb7be7fd12b01d5bd024e47538f434b496613320ad71f48a8972f687992f97e4b69b5842d2d6a4176a5701327c40325e98b27e4c0f8fee5a457d92181e40\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 4309b728306535bafa6787dd79e58324b3f86eb5409d772018cce2159f75832b87909a672b8b4b14342b352e76ec5a6dd66737cb0a20b81c5ce222133bfddfea878b132b6f9fd557133973a0b44aa41a01d54ab565d6b9c62da67378a4058255047a95923daf5f0f7adff2a3f06074ab1facd986d7d26cb475ee818199a390b6\nA = -7a63e108bc9790ab687e0fb8a1cbe1e9ff876e7b5eccfbc136ba05fed93412dbc2ffb1ec49518e9fb867429cea1d7f82e2b159b75bd40eb8370e8a54bf0e0ac0ff24aa3662774bae\nB = 51ee025b2ee8abf9dc5ebf1a4600131c00ae4b6bff966dae5c49ab5b9017e6b1abd6434736df6daabb2bde254022783764c94e66743dc752c9040563df7016a1581fe7\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = b9ddcb9ab858d2229cbfab87d87236e8206cf5e1a042eb5ddde201d56e2695a3d0b2a42bda6a284fbd2a5b2c2b80446ce88c024137780c277ec80bfa6e9d15397cc5bac98e58c9130756ed0fde58d475a033fd94b1fe0ecc6fd91a8b42177abf3f77e87c0847a4244b9fd4980f3b42c7c955836bc994f2babfdf9c5b43315ca\nA = -1f971ee9a7c966d1e82166503681afc280fab255665b850645321f67da8934baba1226e9efb59e0ac4483c8724f63556a213f2224b993e4e082eefff0056f7aa8a3cf5b655e0f72ddd6\nB = -39309313b04bda1103ca6f56514026538b4a29ae258a2a66424abe2c652b959f5c1dc4755ea37ebbfe404839505c2807ebe069c9abb9150205fe35bc286ca12b64ac46133\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 47555924c31f040619681d4a12064790e981db2c7853efa17e4d20f741f33c56d80862caf86bfe0730870b6c0afa9caf66e15047e60256fec29469d1760d5e9b77d79a84fcf7a1dcd0168a59f870f1635eb033e0ae0ac17bdb73da803206d48cfc1da48507cb812bea540daa2393321ccb0d88b57abdbf3a3bb765692a2c2ebe\nA = 754d78d5608fe8c7ed8e26a174fa27833a24c48d23f0e702454b7eb578cb107da537dda11027dd6b41daad329e036794de562d7623bed8d9b0e909cb3fa38d4d21a95c5f4246e0b030a32\nB = 1839baa8b8fb6575832136f1d4632f72f36cdbbdcbd00f197fff3cdb88b851cbd74910ef6d43cfae9d3248e9c85662d7fb596ae45a460feaf308823f06345bc5fae8823230af\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 9b2f026b11d0674e9ec060fdb24b45fceade3070db4405b363d53df1219a02a664882819fe602f430636fc0bda935b14c55c8a0bbcc9b6683417e3ffe7f5d58fae229122ac6e42e76899254295dc5a08ed43c79120a5e5e4124b8fa6048ee90836bd2de51bbd2c6b9b53212e913cde871f11bf32f91b3a78575a006da36627f0\nA = 11402b3b1a45d67cde9730062e38aafe1d04fb1f8bb1975f25cd9098813efa2727cb229adf9490267bd437220d9ffa05bb993e45d2f889f140faed3ac3c7b53216455a830d6edceb02e8db92\nB = -d8e011f18bde068badedce8106f6602429fbcac4766334a0101b57fe94603203a4a8975fa499d8a68198aefd9e68f28e68914f920eea1083e37c67d59476bca9819a8bd628b89c\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 3a74066e7eebd9b63a1dd28548be60573c95f29816f3b3ceef68a5f6bb797d7eb0b0f4ee612dca794ff82f5d7461d995b9dcc09649e2587639ea017865328bb5deef17b5283691724e8aa331d75c635d5e19ebfd268fe5471714aaca8b48aeb846f241c1675e18d35f029b132f81128f19028b0a471b3f75a530321135e35fbc\nA = -6c5dca3fb7b85573d1c8899868940794e428171e207b5f9f89fce4b7159236c0755e2959d870754e902e9c40dc1fddeeff6364f898ec0dd669283e6d26a612d9af3c3ab04468707bb8a7827756\nB = 5446269bbeb613e69286f1012ff62ea767965533624542f3b5c866cfb569d6193aa603061701992cb4873ea8b766606da1b57d7b37cf52f52bf85b58309387200b0ed36164f30d52e\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 2a4e727ac67451ca9dcba648050a085196460e4aa4836c5652de863c3e2a76213e0f590de3aee8639304c54a9dcd5f7d5d3592f647e3d07d322708e1e26329f4a31d66c7f2e9d482f22cd9823074dd57d14040a4f00ac2af9677a2c98d58ee1e094b1a8c40092e77eae454638bc3655e77441d4f218c637f95c147776f5bdac1\nA = -19fa688008a12cae228c6ac4982ecbc88da248d7ec785bf2289dc9103bfa3a91eb1e5fd6afe9e0cc035d3312e9ba64028fa6a229db6d0eaf8af43d8c410be7c689c3e557137ebd60d3fa04edb60cf\nB = -3e8c87fba4a41c3a84874c987acee9f560b9f027338b584a775c1fcabb766700f758c4d451077a9427257334a569037b0bd006375f71223add62eca19b1e26b86dde0cc251e48d3b60ef\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 52e4a3f6892b425b935c6f9d1396d2034eb0331cbc5241e1d745a9619fa0cf0fc521585cb9d6b1034c5fbbbbecdc81c757f768c7a82f6ca291cf5afc98500c579f82ccf0be233066730f738c205c3c188f94b878c11268871ba42a5d950dc8a399887997cef2b6b68badec1ca641b88d1455e6d97a2841da49df7eeb766b7be6\nA = 67df01e34a26e8239c8edc7ddfccc3850f39864ed237d4dd67588efbeaaed1f884105508f69e20ff6a5cfae1516f6179ae6fb515a66ef0a7d633ba4218c30875287ecd0cfeb5bafafc492619942f97a\nB = 19f5076405b3c81519c0863d0c963d545b2834343e42bb3c779788cbb46d89be3f775b62f4114268a0ca0e6af6c0dd659607d40071dfe7f1ad0df9a5c53b741c04612158de396e9c96f7523\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 8ac1d96abd2cbcaa8f7e3267b716f675aebd23694d24c112d202653979636d4d47e27cc36f850355cfc5ca16b78cd1848944f8759fbf6b03fbb7eb347536a9328a5cbb778a6bcd983081374a3f543b1380add14a9468358009ec2baa7ecdf13e7260968eea74083459406e8889936b2fb98c8b9a3597e5f9ca10b76e1dd0337f\nA = 1c9ab23ea37f324544280d176cc02762db7a39935f1ede9695b53a3ee2db49d0485c6a3742a3b5cfb51f3c21711bf89ed05afd0886bbf61cbd57b23439a8a165484ee8e4c0e1c0ca2b6478776aa2897d87\nB = -e30d28dd01655b7a419d939e3e7530258a667420fc759bad585802c63fe5efbb309cb502babdad0afb208aff5ce5830071c5a974604c69ee47f76fd87e2460a5b03a57ef0185881502625886f\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 5df0700adbd880a5730d8c0637a362a9d42c64503c3b9784046b946c2459a619b5bf804a41c92ed6370bba730c7d39fb2e01558f7ec38511b0449d6e9db8df2cece4ed348782ff1582396ca8b3196474e7e5817f8c197c44d771923b6e286e41e7e23c33fcd8765e06793169999544a310f2e080ffe13640b85f21a18fa11928\nA = -5c01fc52e86f3a344180bac284d2376d1bd693f20a46479c77fa57077df62f83b1e81c94e577d1d6733d276f9cf70555b20e3afcb97534e4e0108a6cce87e9292d78b2d7367ff15fb33d2c3289d2a2913b58\nB = 6bbc39283be06382ea91ad6b1630b38f32385ec90019d2ded7ca6fdaa39defbe22585be0df9c0cf613f6f146c71f901adf525336f6573f7f43e661c44b7097f110d4551e8c75449da8fd39201ca0\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 2a01005f1f387c4d8d24a365708e2506b044f86dfc011262", + "d3577f7313a8f51ab943037361bed1858e021f8a46491a5c73284c666eb65cea1392a780219f13d7188721d7d4b975272293a5eef63480f30cc9618aa74bc51f4175246301a46fdbd34a6ec72d5974aa920be5f321a97b8f19c0ec56ba10eaf2e61f2b45f134b304\nA = -108bbd8824e8c16b81dfdd4dfee691e012e578cb9cc80cf050c0ec4cebf71a968732da36552979ffaccce6667e46c29144dab75132cb087681d5549dc5508f3719e129553fdc97f545d7ddb7d3a4fc575ea67c5\nB = -2ad4d4078c47a3c8f5f9b48e10d52d72349ecf0f54abc60bad63bbbf4d8efb185de90e5e1a686859e1c429e30977fca492aedbf084019e9ceb4490aa471776ed2e8a09151b37c5caed9ede66922b7ec\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = a1b1b2d33cb610f1b398e03f274ef39a583d13af14b79e6766859b9ca748237b481a3cfd5d490a073e82e3c53d3ff5cb6219b2b2f71927f27ab6f567547a22dd35fb5919e1ed2b6dfae4d536d6d44fa6216d94d26b33f52db06c4ecb29702588b73ebce87569639f786df4fcf569bb07d5379bf8b83743327248c2d71b5dec6a\nA = 5bc53b3895cff2bf7bf10e24fbdc43d17d277a982d5d92f17b9b5a2b9ed8b6104229292ef3997591e2e6a116fca21ad5d061ce438f33b7f7110293770f8313077152c7546cd522ef4054147edbe1878072b1043e6\nB = 1599b541c9809779df3ef40971e7a83f21564bd5d6596d51a3d96defa4dff41e83ca6247969a3dd9a746ab72ce21137f2d7ea015ac6b2ffa8a32997e8b821064d35afde3435b23e47cccafa74d5192535b\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 4fe8897417446c493725521c0ea5b2110f91a1b5ba236cbb6ff3f52b0036a49fc82274ca949ac2b592fa4bcc792114bf2f2a78a2cb44cb22c6fe7e4bee7981604de47f6da2ed1fc6a8eb32cd9b8aaca0f2feec76a2438126ae6f409645d897769a6d340308f82dbc6a98ac059fca6f903c5aecd668fa838b67300c654d4013e3\nA = 1717c6503d069103f10bb4b36427fbdd2371b30793e492e4161fe185b2e27469fef6a25566d6b46f6a7f97446315a22d1f1f662f912b17e71feb2c82411ed7eebb84d4f594deffee14934b75a845d83761f36141ecb7\nB = -8808f540521c20eefaa037fc5da782c891fdfc668b955eaa2e4edb592e027a964b4cfbc94c548d785d92992abe282d90dd137c4d76419926740ce138d567da7350d89f2e56772d8f5bcc9ca8d7076540fab3\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 8b9311808bef497d8a5d14f7d851567a196a051610246964917a1f9d4f4449357d2411ba9fd93983f6edd76b8a8e1501146b08b6e1fcdd97b6a41cf637b6ff0cff7a2d6351aa1ded93f8fc1cedc81879eef751bebfbd1559d5d0320595c79e3eb1db0951d7c67c663bc57a672faed9e14c7da6be6b0c6bcab3d4d515e51a0b5d\nA = -511312fce1849c3d177d42088e55d534f9f7096282916e16b041f66ea90e2cccddab5cec0ba8ebf0b047ccce72da349f420cc28ab19bc156c1cccdcf5216f19ea922698127f090e97444751dd58fe7a2c90197a9ab3d35\nB = 6a5cab5e322d5f651f798aebf43a62af772fa2cc379905e72d253c49be8193a07ae6164f21cf08baff906ef800e361e1cdf1604f454483e10c8b2bfdcce77c12b0320dea63f9ac0afbb86115b656d0198aa883f\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 665e16ba6cba87c646637a233ae04805a302ef4a10d79c5b65b146cbab8c9ccd491faa32937d0ee955dff7dd0ea3f79fa43c133021c8680490b91d9c1d8a8102ab709ada7508bd59042940b2bd3a4f8c195f781313e45fa8d3abda1f8e13b35811b638b2ab101d1caaa92188d2b75b2b10d596ab159583135b0d4d15fcd3d882\nA = -1375af024e9974cf8170801f4a709b4e5862ab7d18464077727bfc2581e557cada991e9484a1acf80182458158c44871e67e783f7573f214ee4ea1f1821a65068f2bbbed7575f03a4bba36b0fa8cb6dc58c73b100a6c4a6ce\nB = -2d64b6bd987d496a3c121e89f4b0c88b6ebc6e30fa9d47981b52862551f3b7251a3fc376db0f2d6daab6e6fc5ea8fa10b040d0dce334ee91d8cfa6db9648df907b199bb11b2b5c41c67d72b760c404b0451f70fccf\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 49e9709810d9f3fef159e5cb45211453e7a94878dfdece19af839b89c0e43b226d7cfd46859963c7ccc753350e74c2501131474e3b8e0edcda18583b0392ee15f1dedcb7144000fc7fa7eabcbc83d12983d2ade477b4687d75b723c1a98a951d21b2e8ed95735aaec77e00de288d16422fd259c665a08a34331cb99299ac11e2\nA = 4e550ba2fc2a44452f068860ce2a59230738a7a15f5de0aeb4d15bda8c61ee3003568dc5971e48343d402112d7a86860a7f08f5cdc0de21fb1aa064ee5df26fa23839b5ff6adaf64a4a18c07efb3582c2fc9612d2208fe99f8a\nB = 16f31365545772f276d8ac952506bf4033a884edf1ce583a63d8d9f6809e29d9cce3b3d227f839e6c09b459951465ab4570d2d36127c0f677fc0a63975801896f2fd17887ca16ff7f265e2e7adab1516ce56ee1ee9de1\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 89ca20a3fa109a65b9449edcc729fe97ed45a9bd69eeb31d4a566ec1787b24cb7a2c25b3f89b36fef1cb3645b17c69ac8ae243cdba35e17f5738b35278478bcc391add0b5ec42db9ec1eeffa63a3ecd2ac0338db57cde9d2eb9ca4bb1df84f1a62245c4e585c4f20f26c98fa1957df34409a99a18bb442ac14f0bd309266a35a\nA = 1fd8a096be30e4435ce8cc604ded337a3d9d2fbc9666d1893c38546c4e155315b536d1bc323c1e7be162bb0fcd58440915b053ca0d0896e99265241f2afd46605a2a7486e1394a07b23f3382cd190e943e596c747b6529b04bdb13\nB = -a3960a51af5ecaaa70146ce55d639005e9b6b9b58592441d5876fa71470ade6d1e2cdde17bb80532551bee0dbbb71a0cb24dc8a129c1f6e28920055d87e9c66be27fc4b425737f36add7d72e39bc83aabee5534637e2e22\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 654d9c55d4a62976670a5ecac3a6165734a65f1edcc1ca81a8c444dbc98c3409ac8c4f6fbb92f122045fef8b7971a276c7dc4eaba21f7be7495394053d4f9bb14b63fc02c8a55ad8fa9bb9aa26aca5c47968ea1b7646ec606f53606d5529ded83639984683b8a020e8ded4b2d9f668ceadeaa8160245b36a819db14e58cf2bf1\nA = -67abdbc70db183b8c25b0664805ada269922556bf15aa80a47d31f215e216673b8d59edfa10a74f3f09d066055c3b9abd5434ce95eba91dd51576adcfbc7e2556df95fd6642a3b7e0486a635ed5699eb7fb285589c887c8659a2b7db\nB = 6ad3e854ea57aafb8980f1e99ab9cda24f183dbbc513e1fc92d4e239077816843f47927bac28e41d3f31c9ef134b72c09dcf14e2e9677a430d43002ae70c577d9958341243030fe58a800a068d6b01fd377e61844f0d434dfd\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 74bb23f7b0cde7924ee52e58bc0680f151e6898cc1bd4a2eaaa05faf218b419a19ebf85b0219f924a26002f9251b83506684af659e5b680e05138432ba227977f38a479ad9d1f3cf68a86ea214645fc4bd1a032f995307e9c9ee432e816fd852655ef20214e24522c17799ef41d1eebc6e097b9792757f7fc43124c609ef9696\nA = -19d3e6fd6de9092cbea55d65154208a0c93ae409c3ee35569cf774b8c8b7b1c9dfdd52e9f408e14ea3153073ed8d92746474e524a903a45a882fe46af92b033f2c41eacdd7e3c1ff661dcc5349ed6bd1aa845eb1762f27593708aa185c7\nB = -3d466d29e8c0008ee6f402551e3d62fe044787bc9f243db9252ea97da9bb75f5be416def97f13cbb008fee77f2eeda672bccce1f36fbcd26e1f1299619535da0a3fa3ffa0c6fee82a494efd7407cc770cf46ed1b8b143f42790a2\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 197eaeb8221b431d5fed3d701a175abc146a9fedf8060e8e611a54f8da2fb27d2fee4539ddce1f3481e6a64435f09a2d5012540d6069900a332461471b22192fb87b63221c7822d3f2fcc35cc38feb6b3e49b5b0fceb52b0ccbdb4e1fd7b0f3eef3d582a6ae194c249ebc52f215b568712b3e50bb8e01c64b114955ebac2da48\nA = 7bd216d", + "0acd4ee392258a7341cd56bfb0968492fe75da0c9d935713a6ac883525a4a520b5b7940b05e3f5e0c40372cb11b7ca193e93f0d3883fe5840e66346aff0f38829322bbc1f0a0e63ce5e528ba5b13596ad7ca19d20b2a7c9bea4214\nB = 1ed4805e53630b886cd733e5281f6d2699b3c79da615f4056120165cc63858ed2ddfcfd0af0c5fc54662aad90f26c55dcf70a30d04ce05bdf61028730b900587716e690dc0c6e02419622ab8c115078b92315e7c7a5ffe38c4a404a2\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 40f69f2d1660eeb6e1840164817621dc95eb930875333bc3f62a644ca5910c1080505de0d54fc9fb6404a61bb2c03b3981e558abf9e86f2047c3928599b529ef3d91c7ccd13c1d69431fb9ea3f02b001427cf519d9fd8182219ad904f47b3785fa05ed24cb0ceafd537311633a2e26c27e61be92eefb28a49d7f583cb6e072c2\nA = 155fb75044fc54a6ba6c46972e2f97531861b8d6afbc358db456bac33a44bb0545deea2fc83023c08b7be473eb68accf5b65b3c5d6af88bc6d8ce722c80d5d1527e475905226b01ab9d7b5a6557250cf8be935339db330df2dff92f2e88e80da\nB = -8c6016966a2cdea4b2d8625aa367e1d079638870f1b61e6b3c3a1e6281ece41018d2ce93684d1f0088d021107fb595390664c11435c6c0a7b93c2c6895217a89c469a37d3250dfa457b928ba6119b5c9ca5f2d47b36e60e4325bcb4383\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 9b9e6e1727326fea099eeb008a36539f3d47e3882b77d6089032b99c6cd36ad79fa75b7c19d1509b3ff022ef781b6a8c16fa6881f9ee2c4e00a4dbc93a49829622f4ce6ba9c55639656102d81167ab8a5e1fcf14d71caa60be732f1fbc71250256520c7c5a4579c3fdafc39356a2bbf2c7ecc526dacc0293c7578424c939ab6e\nA = -54cc11ea9806ef27911ba721f19e2ccb111045711d301863792f0cfac798758f0a29111e3a0f84d294a79721067f50858767abf507cc10ec9ea3eb27a91f06e7f6b7b4be7001b548cb7fb734166bad6739935081bdf6d35d58ef56180d377e5fda\nB = 7263e8b9a6f5387f44c55af64b64160efe97ec8a8159e723ca8977bc17c861e22041ea227c9c9bb467faaacfe352b03cc620eceecabb6db2db108b49c69752bd0cc61a5e998ac2f404ad052a51286ccbcfaa214ea8ec14cd9a2a6db56c3d9\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = a18a7498ac9194f600cea3d66615595c27a3efa7ea196ba12a80b5f608f85fa72afc366d23f5ca98452dd190b8f86031a9dc097f94a217b29fa676a6042a3aed2355cc8e767d464a8adb888491c8cb82dbec8f117f57c4a07b41e7e6f6cbd7dc25418603b1d1d865dd2140a649c9d52019ef39dbb6809d1b28b3c1ae64fc6813\nA = -1b663403c73e4a9003467ed12766f16354f79073ce89b66066857d19f3b42791eb360004d23e02874254bc6db54662717739eced153944c4776f334576746c5c4145b21a23caa2b2a137498554c7b749efcaf3393c5457b2bb87ee2ca3bef5f191107\nB = -21d12aad97a5c6e639a2ea0a82b1292aebd418567718014465a22b9ac5c8c927963a2a4530c41d5a7a6c14805e56a7092c8716e4767b54a393d8552c5d3c366b39fb3b8667c60e6075e9293bc938e407c53afdd1174843b76aed187f56bb4be5\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 1983576ed73d4d87d8b94cd3f70c149c0273e966176b85fbbbb7b3202e2c843bf1f8f4546ad7a4916ea4c731a22bd337b6177fcd2da8bd301f3af9bdcad800449b57986e7cbcbc7eb313d6512b2894c0cbb6cd753a870860a49d6a682c20b5e883b8c4839b3321aede51bfc42bca163a924191feaf05e196d8dcb7fdd9941a60\nA = 576759af0f02406e8dafa330babe9473d9d970bf371ceab30d2f98f4470f669e042e1708e2677d52cb9f99deb9b53f30727d16c389bb63e71e923475314b615762c7612269b5ad7bcb5108068bb5159cb8dbb8d08de2bd4fa4d9db6cf6e3f5997b9b416\nB = 1a4e34794747cf4aa626e964b839ac497b1357090ff63088f9fd4399312df894e41b395d17b8ca1806baec6115b1476912ca9c4309f00a46d5f7a52c8f640075422af06d6d6d796359132f4955072ce90e61b40c992a155b2bc31c262e753aa7d00\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 3448648ff9f7425937b6faa54551ce14dd15566e5d41b2bdb1a8db62037459235a5b9546d289cc2295b0ed584fab2e1a798bc25a0c114238f61ad3381a5b441cb67f92cbf66007c980db3351adb9cfd2cfc769b5b9b0bd1701425ce1ee8d4b9f438ce1207fa850aaa1d3d1f970aef874c2b2499a150d29c2ceb7bac375009b77\nA = 1fb54cec882c274b98913e76342a9b8e631bf1d381fd8a4f7e0eaef475642ab3f5da70ca2e38741bd0182a959e5e985f1e0e7d737beb8c725c9b5ea22f7ec25b6e564809601e8405a5b1362e7792791f55ab64a57c03a99a8518d7f65feb0e21be619a6a95\nB = -8180d172d3afe00e0423245f47591d5f750f20d2cedd8ba6ab6f9aa24f74498a96c9001a0124c4f98dbd402b63e71eaa3a7af8b0d2fa417fb1d45f64e10030232b9155169153496aa202745a432e547002954eedda7cc9c1ca76811bd902b192f1a1d\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = ae0fd585408a99643271eef575285a6261a4c4a92c1956b1ab436d3cacc8d4cffc07044e57b357ffa43bfa9aaea57824319579c5c3e2fe4dd48bc818178beb5fc1ed60afa08828657d00bb88894c975378b1dfb452a5b88fc3c1d81099644a998a47a497c8a2b12c444fd2a088f47576b7f4fa40f34a208fbc3348ce33e59150\nA = -7dc7dfb753c0bc3ab4d07d5aa78664a7f57d64be4d4780ea81e3efc967fbf1bd1390248bbe259da32108ad96bd8b39f2c9f118bfdc96bd06147f812af831288bb687e4e1742dcd1dbf2b7adc41afa28d07dfb8df8bb2da5359e66330f5c65964096a96b31dd8\nB = 756f3e407a3ae698f103fa37759e90554f38378a9b8eb38581e0970ec8f9c00f8392612c61aca5fd37d1063b78c19e3109f35c0684ce523c634190b3164ef06959cc42e2b77e1bb2fd50eb59c3dccdb6090beb809ecb0ca30457a5c5948328eb218e219d\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = a2aa4550e855623a8ed488bb63db8fa4ac374c1ae953781aac590f78a364fc33380ca2806445fca5bb9ca2fc7ec4db5819dcd5769e3b746286c49a7c80149e7fe276d095929e2cac6ae57e8102f7d4c96261ca44cb6f1601f429528495b6c3169e15f9babc5be696074d45559d5abdac42393094c450d6a4a45bbf60ed7847da\nA = -16d0aea9c752b2e6e4e13f7ab1f0a2c1776874967b0dfeeef7e00f8d9edd1e11d2aa702be45fffc284c47811c51dcee184a134b8f6d1874026eb51e2ec80c94837af4602cac3efde556ebfff578fcc56c00de99a43638ab68387ec087ee269ca64233eb5b1762ae\nB = -3c6b60b0ce4b13a5d6d9ccd67c76ec6b71b94ea7205e408eea099c7ced2f3a462954741d353d0af850b10ffede8ce0bf80b6893288413674504829793d7ae0cba53b163e3f26cd99beb0a9ad540f6d2cd5097beac604b1694a9a2f4c48b28338f9d6a63e75b\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 8a1a8fcb68c53846b3edae33ec070ef5cdcc1346ab3a98a116344e6d2810e2e3f60f0fe435fe7ff257c7ef4c122b3c34c776f4912a9621b6949308e2cfe2e0827536c7464371ce804bd7cac1d76c5bf8b4a6fd4ed56b65434c3fcf0ac7be543fe2d09ac01c564d7b9b463740dcdfa9068d4d8e33f29297ab452e6ec55c263de\nA = 7c4878334ccd9e20cb11a643b206626ea5d0b20973f18535cd8f0fc2f0325a67d3558e4cc9cceed0d88c6d2215c220b8d0ce230fd701502b02081e3f6548e58e02bc2e79e4991f8ef188a84b0a367758b4e534b72cd87de7f82a26de14fafd162a50b359574812cda\nB = 117d8b1d2a3e2049e6edbb9494c68a97145ac3e658aeaa05e8ecec4b090d5f467cde34e05fa7f5fbfa32f1d9dad70955f22130c358468eb371555fdf57a40e1df398c166a22a9df2e1f4e18590b00856b4f880f6629f1a4296056dc66a29b6f0f25490c6a8209b\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 2cd3de06953acb87b773b8bb28172b24adb283d6adada676f5f4548990827635c5", + "1506c85670767828dc5b4b91b45a7ab89a700d70bdba4e0355da32b52c173305767721d18dd2cb6c55f890611e7abc854277a453c7500efc4cd4fb8e6c9bb7a73fe5c77045e715fd35d415b3496f7463ec902cbdc18f9f6f67c33fd78c3210\nA = 1a20ad042f46330df937b879c72ef00dcf39fb85b59186b8e7a9d40723288677ff6ab2b9bce95f34f2de37887c8a9cdcaf231254bd00c7e25b6042695d7dfc05a11765120d1dbce29dc74f35aa1492ba0c5ee65114d9a246b57dcc2eb2ea4a310be98383fb934121db20\nB = -f8ec67323cff9d53499ceb3afd44b28f0538c39dae8c965ea27d645b430c2f8a4965eadc8ed864f2549eb636ec558419be71f986f4c5783d0dd5253738b876d9034735bd13b18fc670438387f84848308d9357ec2aa4f6a453bdd36ff08d54a6800bb41df416b17d\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 1aebe2bc35eb2e449bda63513b1bfb55988cc8e6ec8b3c8fed5ce4dcf53b95f1b438c41e3b2348412b35e1f734edba30273935b03d16efaede429960442a01849c352349e23b4af88de4d01e9ddb53ae900418d49a84b7fadd2669261a574557c4fbd782f8e8f400895f6a6c9679b72983ce01bcfdb641f5067c94694e9eb80\nA = -5f97994c39265b5389526e3847876a10aa3699e3c3762a127d1a9f892180cce68ca6139a6f71b235da26c287bd3e1aaa1436746d983c23c3105c33ed2e06baa1e880f1744d81a80b98ee1f16220940d721a92118a9b949d4da7d1477db8f5b357b3ceb7df34eb5f62078cf\nB = 4bb4f8f4f4c8e63238e8774ed61a7eeafb3fe9a6e19cffa648defe82f4846e3378c892d223957564fcce79596151658a726031a6921cdca0adf0f5325d858c048a6b94312ebfd19b803eefcb93bbfaaddef120ec3b8c366b6d978524d5c74218da77e4c3b5ebbc66cf8\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 5d64678a32c163874d1c81824d628a1051bce3b55c37055acc47a8630d3fee648df5d319e50b4c56f465bbf696433409b89c07e442425d3018a059ec757d77b3a40d516ca3148010036b003721ec9c999665915a3c442d95ec3c01c232feb201be08c88fa3c6b0769e3da30f1d73b66f98e31f4306bf4e23de78e74743b224ab\nA = -178d81e419f0473c426e24428caf25d61b648bbf963f7fb753ae15e5ea3706b53b00bfc8fe917ac9fd6c7096518584566ff71e6d35197f9aa25107a235678cf9ff8ae1501c1d5a15d2a27d39d066e169745e1e8c808209bcede0d732423d0c9cfbea322ba3201ebefc5315c0d\nB = -27ed464895b65d9518923fde5caaac0c72aad0d1b38fcb7827d6ad4e0c8dc09e119b8b98183f0ef8d5d1133f3f108e951caee035bed0d48bbeee6d1ddbff5864bc192b84eb8a500cefd223972ed51c7f720d1736646825f95f2f10ce6ad47a267bdd8c80f65d644df158d7\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 52dfb6bcbbc5cff46942d76ba45301cbff76e9b894703a6a7fd1af29d615336372d147c3932589affe5c6533f28d3e6a57ce2d3cd7448bbd81e09a13266ea31630cf044f654b87ec3fa3294eb65873964110fd42d86e78d128bead5f117cac98145051552cc3a86c193d738b973f866d068a8994a49df3fc7c7314fbd9805e80\nA = 797c67ebdc083f3c8b3ddf9847b7f3c2a39e35ce2119f746ec87fd5d86671d8fcf2b4f6d440c43e93f45019032e629879799eb58adea729d43d2e40ede6485143bd35979609a12faae7e4393879c40c0511c886c66a24454e4f9912bea944eaa417c9942f09ddfb227feb14e4b4\nB = 1a599d1cd0ab3614f50b71b93c999942bd3d4cbfe7900122d5083151c71d9e0c299bd927095c5c3291418424a7c12947389bd4e0a3c2fdf67b3f512094ec0ce5b52695e527de2b3804dca2edaeb1ea4b487911053272ea926cf2fb3386dc4b1dc268b808bbcf4eaedd21168ca\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 99bb9082e4537426c61f3b813f8c97675c44ba9ca418960ca6e2464cf61ad4eabb01ba00798463567ed3d829d3f14201c740f19fca623b1e9b57b534a65df0f070a2130489afae89b91003cee432fab11426c4d13b7721e6f9db1bbaf0adc0064b33e4b9f4b795511a0744b52f93e3db7bc9c0a991e4e122c463ff344fe14cba\nA = 187a8144a0045a92dcad94f0bae7285309ec8fac7dc864b08914e5a4dc3b1a6bb9212161a18c22682ace16a4bf3c03dbaef088b09844902a3255fd6adc0b7c6397dda86d6ab67204d8061c36ca20fd4bb348202037b249f6c110c31580148db46dc5b1bfffa38a683a27054c35326b\nB = -e93ff16817b725016279a32dac247961ae9bb00af890fb49c4fd8cf5e815cf98b58cfa1e3735095e6034c9a2f2b5d8030ab30e2271abb45b347d755cd9ab5ab5ce37950380cb306bbec42b6b8056793a0955bcaeb23e2d6a9548684030566eca2d34c458f224c8e337cb8e3c252\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 631f53d02c031f592b3dfaeed106160488c08e0672083ff195b22a2c0b006f11165a245acad6f35dfb15a871a9a2b45c544111f71f86c920b42fdb6551e56c55199e6173c00e27c9f47256349a80236bcfd3acd1730f823031ff9ef594725cb9429ea183a7fb2e03124ebdd98d435313e43819d995c4fe81fdd4ba718aeade94\nA = -72e20f1aa2b5f2c4218fb9e11ced3f45a218f4c83a2017d97d0cfbbf227c9082cd43f939c8909e52c8795cfaa75d80392d3649dd85ddc35bf1cc54ba389bed9e9dcf867da1c05eda080274beb6b868b54fc85e12ae127dcbfffeb043f9d59333d0ab3374c24971e1bc7269450b418c8b\nB = 61cb021a3a957703d14061c21d3b0fc19598e19a17df9d6f2418c76d4d37b3f62bd4037aeeb1eda37f83df44c440f5e49924cc72ec5b153856c6b621350ec89d98859d9d1ec7ac4f0c418c6599674322e7d618c5ca588d5a873d5af356d4771c6cd375f5dbbbc69f50b982b8c4d1ec\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 4654a62d9491f28599a976288cd2068d8e3228da12f645413a92f482efc66d1737495cd4a4c733f147eb5414a2ef6266a116ce264491a3463c9df1b030d83b315f76f3bef8cbccb5c538478a65092547b91e991e6be91ce4549c3a6e34aa7b466e63eb3b88054f6714083695c616a078ed54e1ae46e00f3593af845fcd0ff51a\nA = -1a342c154aad619e567fd32e7053aef8d98335a4fa0e35bf06acd7998c43d821de1076dc1fb67dfa1156d7ff30203ec736384a9aa7f5f08cfb302eb3a2a7179b2664094c2cc0df73fa05bf2af24a62b8e394fc76014dd83b434df26f8a67a624884a0b9b4f08f33e9828ae64f5d0c8cdc2b\nB = -2c57e15889c3dc9c94361c17585d506933a72fa954ce44dda9f5e33408552ebf49cae87bd0be35197f887fc6c7deca1452a4345eb67d19bd2e7d3dcf651667a8900388e4d5ec71e9433e3b01d2b3d91bb94d0fc3c51c70793f978e4b5ef93a9c6356c0b2f7accb9e4eb457a2174b50dc6\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 6124d9ce4de2880ae3811836235d6d89a1a4b710f1d5a517153ed7729dfb5b56b0ac10a4bbc811db9b26465f03cda355701f9f28c5257fe288743cc0789cc54a8661f46e36eec357580b00a84f1d4c8e3d689bbc18242f1cac30a87cb7a47ea06f80d7c5633cde4c8cd8a1a7e27acdc3a2aacd608cce9e2efe7864d41a56ceb8\nA = 7b48a9663d914e0225d7275e965d866ee6649d7267474d5336d28d54027ffe8572f4aa26230dc7abe9957d211e6c2c8f3185cae962b878cfdfaaf6cfe32058c299247f372ae170a1f7cf71380787f6e90995da9ca5a4be8ab1ddfa8e6e5dc65b6f168b9b8e29e0257e0eec853a6e1911b1afa\nB = 1fc4dc77f4a18d4406a4ba536e500aff68d133c6e7725717ae6537b527c6f40f93202a2292522fe7d04e0ef804d1a7013b04cd3d88462fba31534770b56d2e5672e8a6ec7a723186024c40b4717defd1433b9967bd692ef81d5d4e39ba10a3223d250ab6e71d5d253dd0a732ed386ad57e54\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 6443de73e1c826c90aa36fd7ec5d0c3324c42058b1c35d3adeda1685470d363732d23cceb08c3f973034c24fe65506bd33dc45d7d617a53048dcc103d3d1b4fd0534586c2fb7489ff5ffb98303bb068fc14b1bb6bb43f763dca2c891095e613bb7b6920163aa6cbce8cd93d9d39f4512b6e0b28d361ae11cf76037eab4cbc819\nA = 13f739846ed2c3aa0a1923168cbb46f4f0a2f3942ba57bfa5c426cb4d4b3d80d9530405a31bda329a1814c560d54defa3e03fc4f808606a598607783d539dbb1338d5bc0c2e272a7ff6ee6f93e1665d6f5a0ade30308fa047d", + "b086646c763106cb875e014e2c18ff8837e4d4d86861b85a5b7197\nB = -ba019333046f76325fa9f258006a7c10d27e89f6d482b95c79296c07a65b8e3bff4a9c9fa7e5d0038da129390ac851f8c0651dcf655a3d4164a731cd20a701895c12a906c732906038a8e459aaeb293fda21346964a6d53fa3e370ebf43c7ec8f66229405095c6a509d0fa15dcf45de8d0e901\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = d3a6fdf4a26993edd175de9a0f012e1eb15a5a1c4dd2741dfc6d0f9177cd5645508b8ab09c7fb34066ba893c38144c7f2ecadfc2b0d15728b407e5db4fcbbaf1871580426400433f14dceac43d28f03376e791b7ad01a112981f29ff4b66102305f0ecc4fd134c2cdc79a5e9d9f085bfcb7e6c187980e68b6c7639c12e8d200\nA = -464cb16fdd395e32fdc613c63ab4768f8cf72a5b74a0a5b0cc581ee4aad1972cd97db7966d3124e30c9a1c80d85c46da2d36eecd7c3bba5866f9eab4d0fa55b2d440a311654466432c681372a80a7896c9163c12314ac51f652aad68fd9012dc63fae6c7673c5da8faafcfa1b4ed5550f2baede5cc\nB = 40389ba4d2f5fc152308c9e8a8c36258c770fb2d03e6189b96c4f8dee97ccbe426cc14595c8482e9e22486b61fc570f0e7aeddad2f4e3a480d4b75d14294a3b912928da5692043bd98ab88ece87a9bbd973ec82f990c0ae6091245318c2810187d69c38fa80e835300ed06c0723fe475f3fb22de6\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 8a0f9eff3a210912828fd7b5f2d72479cc9ccdcfd3e8d21739e301de02dd5c257c7ce4bee2def06c9d0c90d5a86bc45fa9f31e456d353775916b3d5684759e4500f99ca1f91f6767a5e2f4b735ae4b756d56c358a06447fa2c2ccf0ce667be4ed143e9e1dc627a561d92ae53a62477270a7944482cbf671138bd2a85fce92b08\nA = -1da555639228fc6ead68049d836d60a4927ee77472fa0ffd3c787d55b6067012560f5b1c2ef8bbf6119345dc6419444c675c1c9cd50602a93ba3718a5b3e1a30bc108d796998b24474cdad19bc2960b295fee97e03f2ca7589a3daf35bd28eb37a67b5d2cb35a30998d5f8622bd7e6b7d3fddd1ae9670\nB = -291fea1ae6dd1c66c62ae3a3d22904f4b4adb2a48cb795d50074095345d661a033f67b20c5d7231236dab871892deaa9458c235c342bc81457cca3f014a75f5124ff4da005dcc1108e75527528e5cc9c051a97fc6cd202bb9166f9e72e366bdd77c965a70592e5684fcaaf2e03421a2025ca190fe158\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 50f4d25875150bab63e4162265a632109d6b4743f9d6b55306858034732a4895ffb3720286acceff287c38320ee9945dcd0a1bbe5ae1456b7f36337cb7d22b679a6821a450765471257d52b6ab7d59a763e75e9e64581a93aa54761f6a760866d6baf186cdf4ad2b1a6af26a3e76cdc261d1f07b0a7122c8ffdef595812e7208\nA = 78a1609a7f08c93c9bf9090ca7c93459aef815719b5dde5f217567a9f68ceca05594f6ab17a4666ce1c0c4434e0f4f38ca1f33e501d6958a10da47211cc011da219d4373d2bec4b7c6477b1ab3b00b6c45279212db39bcc11d1e7ba49916c4271adca7eea531adad509ae119348f374ef1203c5af8bc019\nB = 152b46095d3f8db5e6e1a9e3f35c085da00e52764b261c3aa775ecfcd38572d2e86bab2f4bf29c2de4fd2fb6f35f66e8685714634e1be980773526bdbf9c43b1335c5d59f4dffe1a1fe2495ff9b7a3fae3e53e7c3208968e1ad1dd1dc8cf2e2415cc76dfe5df9e2e1eb63f7c7687d539706502d56247728\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 5a3ad8d6f1b0763b77f5d40169ff0013de638b459e401f50f4cfb505565c8a4465e28ca1bf988071701dbf52ac456e01e170788ebd2b7cccb50dbfe1a65a89a8aee18b3c11986c9d6e6571f964f376f322e10a1ddd9310bbb40f14b0680385c40975aba43153970237c535c6b0e2cbf6bec918a8fa26cb2f69e98d77215c23a6\nA = 1d5c14b0b51cf31e9d97b7c49cd26097d40454978663f8a74095fcbf9c63e533708befb1a467f94cf599a41220ce13493a273fc30c49275412c5205db712d5e1832b39e65c150c3a4b251e2aab853e4ecb4f00ee5ce6982ef9215775a33565bde3ddbd932665aae506941d3ee31b3f9e4ffc0651f1fb4a5c6d\nB = -93cae5dd84584a2a3d88028d6d4cec4146cc5e350b4d92c52ba2393ab69fc1dba96e244f98e2f93f31230904169641aff30dfbdd3dc5fb1f3489d63aae1efd29335345a79ded546e42f2ee4a70ed932699fad17a771ba65fe6e689664bdd1135219aaa905c962d39531eba3e82c3425c24041e17858cbbcf2\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 61211c706730a1b98c628b3c8cb070a42e2ccf9fc6302bb1c2960fb165087f210e9d93416ad9fa21634a05dd0723cc23b8d2a846ab7c3bc402999138433725e737102094db5792249b4b5b1514a416b80c804ecfb04653c5ab18b0a34d8777f6c2955ac66fef62c9ec2819f0e3c075920f951f86b32e02bc43239d9218580067\nA = -46c8c68f492d8f7ac7834f89bc76098146432c59b3301d4eb70d9861a6e24c7c9073f910108c7b35538a79de10640291b54e5755359baf47482b97af56475211573576e9412ee017dcf961a090a6ffb5cd995992ab68e3fe60b6186f7595bd9b8acf8695c4f7359cb2ac709f032fb993d16a74822b4935536453\nB = 46953f424d988fd20700ea08880e7e09ac22d60cfc294bd4aefe637408a3cacfcd0ea6822a679b68b665d6bebed3506d25edc83cc7154b83e22953f9d91157cebd219cd5177fede28c63a15710d0f92bd9e542a7586855bbe57a94c520408fc920b3f8d65b194af2b2a580c90db1cdb27ec26ba929de4573c6eb\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 50a063fff02f2cdc68edccc23976f4b3db99641073c85709626292b9475b9a988fb8509a6223f0a517dbae0cf7cd39dcf1e8ae75196d9f5008c661d8b5153cbdb9520c71068e4719820bffda4c393032edabacf99339e0cbafddb6042ef887b8c498e87e16b62417934015172e63e7457242b864a47aa10e203f47320f03c0e5\nA = -1740e8be7b4775725516d37ba643fc64203f3a61e6b0164d112af56666ad97afb0059c2c4981fa81d72264f8669db4e50e11865907655b1f669c88f5935cacf1b12c1db63cc84507af12cf0210f990994055d04d93f148f213e3d4fdcfe9dc42117c059897697914e3e3fa8fdbf0eebbbb9c3b9fdaa7efa0c9d5c93\nB = -226308f8fbb35b5f9d129c0f6a2bd3e5c272a408bf32020905acc6d02d7e506191e76a3a2ac47cf7a63e6306b256f489ca5cdf76c7c3eede175ee4a7acedf922955e92599647b69d463cc14f2b178b88cd471b8a1c1512caa66b6d5fd8840b98b8d070e6593136e98cce9643e006b714388768920a79944be36624f\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 747cba0d1cde75dfcc0b2af9072c5027986b3e3917845870c73c452858ba21d6d1615eb71ae1b5a03ca44e22845d5432b368541b52a4bb02498668e8b99dfa2eb90ec1948d90564e6ebc388ee9816e329e1d8da0d3e2b12d901d47e22e8a1fabc37408be0f89e7a4ab0f30a03f7e2ed817006809e69c21104d0efe548165f64c\nA = 5fa76e37aaf0eb3d34d4f4c590e02b6c63fc62b1d4c9e172cb0dd82409df87ecb43a1680a2764f62d13a5e919db2db08feaf98d5cb92a859dd42bca1047ff57b8fe5974fb3ac11ba2c0d8e2203750f30650db4b2cbd31d07fe18c4df84a0dfdb30f9e528932c097e89d8f8be6ff029dd970a7d2c2551529455b9131e7\nB = 111199f91b3749f8cecfe90e9b9b6951472cb701beb39d63068c064cbb2a1e1d30736026f781836a52ad0d828be6c20303c6c0bd03ad664dbf6044a5bfb67fc20a049fd37c62ab0795d836487b883768ef7c8f427eb98e5ab6621fece77b4955822f8efd190c417ced398c221215b50e9532a869eceeb605fa1c936554\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 646cdb3ed472a7b4599f02329054846a8da173000eee7533240ade4dba82ee3d7a6a92baa3783c19dbd3f76fce6b5bdd83f1f229b1c71a6faa18602e368f1b0b9f8c62bd8c854844af85c2081924c9a153e27853b2a48147950fb614028e090e2198e613631c95e565c2b9b64a43237fd4052089f9d1dd2c00525dd35fa946ca\nA = 1c8438247c0ca376f508ccef7933724df512f9e0877596f7f4ea73dcd824809bbc472749833b537eec01ab23656e9758da22ab8a4aaca1aab3fe8d2cffa6672ca0c44ac029c2ca6c3e71780c28c31b5f154c8dee782f6ba009a69d83b1a3a03a2d6275bb8bc3932a1170470", + "fb7e405ae081f4770b535edf49f73a12ba589\nB = -e365c8edbca8dcc4cc11986a5a901e4ed0adbe89b0ab70a53aaf5821862432a1320cf1850b515177b630e12692cb025e3aa43e9acee0d8ad5e48bb15e9a3f34cbfd39d285127b52dde58751f572ae68ad98692899ab12d35e33652c4426ec60c5029e51f7e32ec3d2031032aa7b6b2b63f84fb0023c81d031773f3652cd6\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 7a3e22f4a3f7ae7512ed73a07abb5ce291bc90bad507a5ccc0c17185804b9d231b0ae2e72bf270dbd60170f34b240f716529a449abea0b3d98ea2890a4ce3d9e2214819aefd070e00201e9f271de925c4ba59651e55174c97a13a30197e46997c6c2b152548111aa98df120a617c54b71f8eb8b0c8b4dbd5251f5509fdb8a1a8\nA = -78a99d206b4f095847e9a21de273aa6c47034c9afd4c081a8e93c2d75f4ae5b090921ff5108c863785c413e2f7b4a361506fb66b7561b8b1c5cd537e90274bddaa4e91ce74ad81c6dfbfe1a34a631dbe455d74ed9d041a9183da3bc469bdb214d2ffe893f89c3ae30f8ab99c3aac4d2fe864b891fbf4f537745fddcc60504e\nB = 5c41274e9590c1ea44c113ce505931758f2cef80ba3b10440941ec9aa2ac984b29868bece2922eaa225555dde84a8334f1caede99091165151a39538e5b7390e81df757f521236314239c213e9b874e396a022f04629c09bfaf929a0e9fe0b0c7386b0541446f6a2570491067f64e662d8611c4fd6d1c78a9f3ae69f34d14fc\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 7fd27b6549494c9bc860146a3e8ceee785ca03faa94b0ce0a964844e7871e813414cf3f111da49fed1ede5e71e5539f34173d41f9a17ed129016bb9b04c86487f5def9fe350fd4dffc67b6e181e3cb26378ea15ff9b9ebdf1fc86c072c82ecd8bcdc241301daf1b774af5f90f37e45e6126c5da7dd3753a1e5b366038af6ae31\nA = -1930548d105661dc25a5ee303b61b559c4bc1f2e28b2c40cf3e25f98dfe01a7dcca0f3dead6463b55a5b2e0440a651cc9e08e125535e081c742bb3b2f8955ae897909cfca683a4822896d8a4a7073c29a80571445c6a0d53d2efe4a30a79d2fb5d08c0f95b735a1cab17ba40d71b054c9270ba6bc870e58591fb1bf9dc9b7ee8f\nB = -3e2a4c1509494f94406e3843c9446edaf0a6060144637234c6d9ce84d70fac54ed163d77d210bf557bbea0404922c8aebec67a0475a3c7b74bfa2f226403ce987c705c712bb8eb0934c2b390a173c3836378fe71a6939e48d187b27cc7236ac115309fbeabd9ffd0396fb7fcd6d46a1dc683606c757ddc3212f5d2ff3f2e450fc7\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 2078bb5c82a394c30a287aedcfdc5271eb3246be05954181ae4f86ad2880ce674640ecd55c2ee3f4e89e2762139586516a28558481303e3071cc9ccb9a538f887553bf5726f3849fc41ab027fb1c680ce7dee3982587ec71b3760e5da6956d6894ad8c4526d8de953c0e681ecd44883a21f0abef1544fe601743efd3e5eadb8e\nA = 40b4ba1e977825b7accb941fe0c0a49936a8a47429dfff53502fc0680d705b9fa0efe003eea3ff0b649998fdbae8d0831bea7f34159aa4c7add6bc7cd56fea97d25fb9a6a10f4572c26d792b76c18ada19b0ba06b6142c420dbb40d66be669b7c51d8cd2a5022fe1a8aef7b60965c0176eee69c32ca5023782c5410adc1b15dbdc7\nB = 1bb2f18d7c8d306bf80ae1901115c8dc3d286baf537b812ce06d6872b61e5bd44f3c53d7f31ca8461b3628b255f85338cc325856fda5a6248b7c476532c1bcdf9713dff9932a50e52a9441aff96092d3fb0fd76046a8d88288d0cd55741083a1bdb20fc6e9c20e82490273354bd826bfe001322dde9a15763f2c0e6ffd2cf60019aea\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = ef21dcee9eadceaeab13287d6e3c9741811f6ea9d5bd111799ae05260b1de2ffbc192818fa45dd7befc3baf6840e3b9d24cecbcb2cb1c3d653c4aec6531b941d926fb6692f548cf81526acd0b6b0289d70dd11ba50ca8de6e174f502eddf47e57440142c7f74f594a9abcb48ce1873df057b132ccce8b364de3edf411089d28\nA = 19d0109e0c47ad45f57b8bb8519265a4390534d2ea07f969d84ad33556518b6234d40d1631be3c3cce6d59b7be14750aed114008458f50a6a84ff75b4ee7e4b826ddcb2d2293842ed29e4e484260a92199c5c66367c402bdff0f1a8057127c6ffe452498bb352802e0005e6cb084663bcfa82783a3d72f3a2a341b8075983892e86756\nB = -81fce71491eda139ed996f6a289dde8635a3a257ad6756e844c768e66746011fd797658184fb44b0e3f3c5600c56238ac7687b5be42529d5c9b97c3ce10f3219e1e451bb2dfbbb44cae0828ef894eff3b52b8dba4c115c3b471984441045f2c2db426cf5f86949d5bb7662cd40bb3b3172a19ca3fb6858315d688f13c17550e700cd5dc\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 8a5f90344071790373044193cc4fd92116248aacf05ce639b6aac4461ec3ccb0805ff9876ef44fa71088c295db14fc820f7ae2c0aeeffca055f8f7238c6c90db706d02f2cc43b4960abe3ca4b6dec8bba55327b958e75c60c5d1f43fcf9136f12481c267481a725eecc403a16aa6221346df680560ff316a63ec8b51dc37aad6\nA = -7a54e7ca04b9a22e2b986e72e634317ffa20f6f4ee90353d559db3f3c1bc6b3b92ac6b364f6c5929090373962b49b59cb5d87554387761164982955470cb45dd00c4a8982dbaae3a1ffe700e8903a4a8e4a21eff9d00fa496d475e0e1a205be267499dacecd31551f8a9d437f37dacfdf5a2754f0876a3e02509b78674e7ea2169c43f29\nB = 652001f073d63ddd526abc957bbb48ca74154c8f9698b988178b3313dcde9acbb19ea11a935184fcbcc31e0117d8d2ec695ac56b5a71614a12cf90f21c8882187428755b6a5f11c314ac8b952ced0f65db0987f0f87e20b82a811599f4160e65c7418af7f33604e7b8952b70581e3e02dafa025cecda970d04383ee552abc620dfb9c5df9a\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 67f903e0e5623258826b681506f3e94cc0b086e262bafaa1395294aefc9f6b6323410a44427010d5e8d8288993973ad9939199b85cf02ae0a09dfb69801536a3fa6af5ac373add7efd25ba5fee6d8f040e97056f9f6fbb45795c0bac94c51ffeaf496710b00bc9ddd8e445261d976168771060c9bd9d83838a84ee9428f59d6f\nA = -19c695ee3a4ada840a7e3626e61047c5081867b15843ee9a6506ce45540d23ad25ff23b72f988bf26ab8b98363d9a2997773604f43fa732f59a4b16ddf3a45acdbc7976a1fce01b3dd55559c20acfbb7501730f794bc45fc09b1f035d60413bbcf32a83fd3c41599049a674f165ac5283c42aef213d777ae47eea960f7727f5758146efe5bf\nB = -210697d47beb73f45207340a183a729a1e78d84bdde1c7d8f80bc84559c4aa4572ab0e6927ea175acc7a268d05616201cb235e610d1012500c8ba9351a37bd68b4ec42227bea55cef5ba7d12ffb180873ab9d33d09e6e969df99fca728dc12dda6903169acbad38388fa9b001edb09056a2ee2aecfab0468822bca14a4bcdd3a4122290ec5ce1\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 5fbaff0ffcfb2330283fe59611ef51cf045bc2690e31f2ad3265046fedaa990b5d5060b3c38f17bbe8b2696e527fd77ead8650d329c2e0c1f3b2f5bec4dd85641022f3e0ae6f66ce98cde1a785bb52eca796ae45c33142e8264621ab447cafe988de926544e1a7036710128c42fe8b574f7ad69d830894237d95a55d1bc7f5ec\nA = 482db04e35f9fc1d87b42bc5efe25a049ed924f816e1b0f9c8ebe34bc771e67e26d6057563fd5d5320681e1207c0b0f4b7df547cd6d5be6a2e0f2bfb088f990b0303d0ef263cf45681e0e9a1147c29f2ca5251faa633ca53f6e0b109ba69bbe20c58a76a22789243d1acf128dcc936602e832a20a2bfbfedf963bc1027650f483814d7f5e6905\nB = 105aaf563d4c1d436c6a4552770a527776f40bbb844b7701313c5ada95180160e7cd4b7175ddb943e5a22c910585dfc184b52935f06b12c84b6431395f28af2eb9ccfa66b2ee8f40fd44d753c6a83d67a6f3fe3658fecc7fb2f4a8f357c5d244422e48a33d0e2971059695a59d0d39b235d5194e919facbae7623ffc92d771532b6b0cf771912c24\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = a9d204c1a497f350fa1300cbaf682c947eaeba8b3aa0450c1db9120852a2edd2a0249dedef3b3746298ee42834d869e9f765ce987a2aa4712a1f35ed10d0f7ba9cdef938b073c3a526e5bf45f3510c94ff1fb84bc77b08e2a", + "a50f5cc75e2f4da37a8a711f8aed5e92f7e486877229cb4ff2a4d0755029972323c0b51a14fd1e5\nA = 13fd3d7cc9d6d6821d2f2b1c40c8e070bfa85b994ee8f3e0baab544dc71328a1a57b7ee57392ab6d24bd85f9ea0f2a312148fc4f4b22c589e9a265d97e73c7a5b420bee180409ec179c438a67abf37eba61ac76197f3c9ea5edf2d4b8aab91e9bb1a432ef1f214c043664a51ceed1f2854880dd458ca253f09d6f6acafafec310774a672d07147b1\nB = -8c90ecd56d6c7cb129d1c9c26e94cf919c5747450542cab52281d11d8fbfcf9ea797b29588340d146cc40e77dce007b68c0c24356d4b75513b75eccbef6e22a5b88417cb6c516578d17d871e7d0957c09795f9a0f19b811db75d61c27e1827fa2773846857fec020f98444e307d3e52af501114b962ea705cb0cdf815109054abd00810dcc270d7bd3\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 57aef35a3f5388c810f576dbc30d4e4e5a39248b319b7766311157179d8bc1d7ef019cdd8c2c0175a8424abe7b33565afc0128724fa38f0900140b6f96bda2e78d7c803124cec8c2f2d6649afde4030c76cd33394fb386342d1ce97a4ecd180872134fd4e22667a687915bb4fda21f7e0bc9100ed8cd3a6668ed3a235d7b15a8\nA = -673bb11795d9d20a1e4ce8ae71d041705990463964505befce5949f895fa31c92d53f91fbc110df4e789b3f3f01f184c55df92927b8b680cc92864466ce5590ed2e98901cfb78b32ea79bf68b57a14cddb53209e08a7f430fee23f4a1475fd2640a515f8b609e98c760b4301747ecb61f1e6209b07455f1c8a7bb4e20c269e17937f39c6a2fb7b2990\nB = 46beea6005cf96a2acb16f37e357bc8975f4dad502fc3aefb4666344dde456c0ee7ea43ec493b6aecbc7aecc7d4cd107aa09e874ff564f5d59d7e12047b048c1da1faea36a7e2d02d0567bc4db41b54a75110626d13597db698fffd577a5810286ea8bf50625296ee8070419345fa269a354ca2eb47fa3108387f6a4b2c0ea3e779908a14469106eefc14\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 5cdb7c451b2950c9d87638857407276959142958b06241b2010a9f93625f9106f065798f79ce5c534b9e5a31fbcbfc63cd200fc1cf10217096aa0194acb9043ccf7ced30d9f0bf66e0dfe27ee2ecc40bcd8de66fe2ed6f8cb0d874ff7b5fe71951412731fe4e19c34bee64c9312577b9e7b2ac08ed15aea753a6cd3e286192ec\nA = -1eee9d5d3854db52f9b43698e05d6a0f1d1f8df5f32884a775b25110309c46ec5c7e112eb64b2d7f948868bb9670068779b0a78bfc7e17860ee02692ec6790222b4384b9bd7db5abf29c46261c10d95f503b821a4694c45553e0dbaaa977892b916cb8990ac9ec29ab5c3d63ed77138fa1e95f395b3b233d039ab5daecb0296203166e9386d1071c61cb1\nB = -34587c2bf3473a2c5d7f3399d5ba2bb09be8105a0b9f3d8737d67b03d8b91b1c869f4e223d6246abd36d99d84052ae5894e58288a614a0da8d69f1aa57428632c2b059ba99315ea2f68ee210e65a741e94125ee4a723a7828bcc410aa2dae06ea8ed6cd23f66ccca7e85d2e071055787f230ee405e50d1519377cfe0cab4e5f97b6cb893b01134813a7c2c6c\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 95d0b209654de56bd7d6f74afaabed2cbb3247f449d80511d2d3c689f84c9b79587d78abdf0eb37f1b89f1f8dc8a83f7f9fac2c8cda1fd3fd64e16f5597b7f0a1df6da6db9e828ce7be0e876012bd52f5a74ca73ff8ca4611dd9f342bf77b485305ac28a1f8ac7538169f2bf3e4ff4dc5fdb9dedb97fa743fd8ac8791b8e288a\nA = 7821d4b65d529c30b8747e184e450cefb11b5ac5dc77905e6fcd3df64336661c82ea68d588ba616d23df485ff0658fb3376d5276027a40b392f47219edc5ecbf510cf0c5b431b02c65e5f432092f941d32ac5f71ce3496e403c7637f63a23b91e3326d01d2d32e99e0ab265108dc5e7919d3983839b3c7541848dbcd420a594e850e587f1846951852ed76d\nB = 1adf5c428f2a95c27a943637758d5dcd7ca36592fcb9d52ac0b7d27adddad5804e3edef257aa51c716801ad0c731e13c5dd000f11b5ff1b69c198f236695c1b2f99c0afffb5d084f80fdc534de3b0df4597404b50c7e784c3c55dfc9753c414d145eb0ca4d07e2f65b63f3eef8d391250a5500ef64d9bf963d7250d6906694e7670f92e3d5a7930f0f85964a21a\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 46914b197b84fa99addeaf55dd803182083a7ae34d6d4d3a55d6272af40a600563cc8d9f6b48110d0521b8b99751235bd5a340b1743497ef1cc459dccf5d6da970c4c3103c978ad2d513298f1fb3e68b24a9c7b0795f47d8f7f6ca9caaab9a9d80f15982599d764f8738217f9158517806fded5f3552fef8b7dcd2e725ee04d5\nA = 1c9f5f2a0d72806dcca92dac1450a50cba05b5dd571c2b3b988d33528d90ecc83444e3ea8df80802c30fbd5a6ec2ad9969be73aba6dd27e0dd2c842b95371d7547768916c0cb036964d041284cd323c8073095b2a8cb8797add5cd80f03595de9d18af8df7dee0d250ea7048faa47ae0131ba3f350d82864dc95e5829b88eeaf2681433dd4d58b2c6f70426af3\nB = -aa1e1b3cfd5ca0facc75e46d872584d55144620f849ab05931210b4e1526f12679bbd9cf00efdbd8863970e2abe8fc9fa7bbd21afa9e364e3c9e32f51fe66844fea4bab7f3b1bd278fd803f6bdbd0d296321e67751a0b894da338ab431871adf1514269ba05e0cea5558cd5691920fbc18237914f3dbe4b253f774e5dc1dc57023c080a3b90a004b809d237658ca1\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = ada55d93c533716ebd8c16e23603071950aa714deb942ebbf77206753d2676a7aaf61673c03a4db69d67faf6273828594d85e3c8cbf38460fa2af603fe9c1b6ce104854e7281757b26589f079da80685aec153fc5fd1a223004cdf30247f8398b8e92899857dd199d5d5c32412bedbf9d55f20e52895fc1dbd04c84cabfe1264\nA = -7d22392a8da1966e6cc5ef50d7409c614f8c8f8e5791778f68a00b4a056d0002707933043d05e48347bbd4d0dc1b6ca32a1aa4bab9992e7e620263283eb68d97af13b90a29c1b7dce39ec0b8a63878e8d65aebfb3bff4e67129e3b3725f999f1ec9ae92007911f2cdf738499661c5b6c9bf27712d0f29e871b17318e95c3d14b2e472cf9e466bea91fb71a493b2d\nB = 40279eefe59f954aa8c51c9c214fa07707b1d095f697ca40edb820401a45c472d1d7bb413eeddb64c14ce6144b4863fe9337ae4ae8698db92facacd6a56f3b33129c5b608eafa29e9d92dea620113051b926b80b75f320d7ca3d2ab597168c68774e68c47670458f5ef2ffd4604f20bffcc7817eb09c9057fd9989a6786a7e067ebe6724a89e7d1580f94ee4ed502cd4\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 4dcae9def5467526b0ff071003e56f5537852cc0bde9d86eaed2c15e36e6429c68c061e12d321bad12e29626b5013c28f118ee59624ae2f35d2c53bfd89e6afdb6db79f0321ad5c55cab03e6a1a97ff7bd58c760d0e9fd7507de987ed2f94f9c79569fe7f03652cd53c67ebc6bd3c9e6c5672891a9d2ee11b300ed3b19753c0f\nA = -127f5ca6924851faa2340c4c8f425b1dcf41b313c5c2910e5eff8ef2faaeaa43305de2b3a65a75fe54c00fb30c0ce3e8007db1ea222521190ff1de6d0cf2e777ed61ce8211dc167bf115a77890d0bd1ca786e967a04f077c89939ce484bbb1c560f669aacf7756a4338d97cbd7f09a376d2dfd4d632bb451f52c03c05762f050ebbf112f8dc5acdd9b631292fd7073b\nB = -3bc5e9c352c46449a9155b7ce5478c771293599cd2dda58a962010f1f21d094aa6bee03f9311545e8dc6213f6aa73c08b55bcdf4d1d84fecb9eda35c83eae5fedee75b2d15a003f8a82b2b788ea19f7460fdd8f447d973c950b3b250a3022c19ff312ccdc86b6ab50c4ba627b15968c8a66d306bbdae8e88fe28c1853fdfb3fde92353f46b5bc448ae42306a4c91202f03d\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 62a812e35f46e04b3afa7d26c8fd4eb168b6b64cdc839ebd0a46bf2a3a712af8e97380cdf0bfa8a274f7b73e887bb4cc73c6104a176d425aaf5352f14ee51ba549a6926bd8d059b8e3826b174385d4635b0c36df75a4e7da44c34e51eb82322b34ae00e8c712eb75b3882822bce5a2f2f5fd74355319ebe1973284c690bed2af\nA = 71c57b08127a956f0c17fd3c639bd1923ba19bfdb83c0cb9dd78e62b8fe4b7e0019cd0a6b73a334c622118f96fd6d91c1e06d4dcef8a3d0d6bf8f5beb6389226c50d14d3947ce9f24f7e0e6a7befad2e4e92dc9ed8fbb9811d908c03ac074b2a5c67b67831a350c4d548ac70810bb5617d261a045e53cdc48117b9fe86d35950d0a181b73c8cfd35edd31af031178523b\nB = 1cda2a51a707f8c4d2cbff6337c3f63519705614c26a489b545b1faf366b705af1d953701b568a684856fd3186c035f878788f7e5db", + "ea16b5e7b6e767cf611452a4272abf2a9c5e72b7251a1ebea5098c60cc5bf649cb70980b97d48580967ffe2913309b6b78cc12d91025ae403928851902dcdaaa60f5b323a1302a5ce114cbe174e3eb3c2fb5eafc44076396c23d53b028d\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = a9213cd809d41b6bbfc2123bb84860788ce22d5b91f8e24fb616efc286a218ae9652b42912a58bf8ce596a1b48e4c72f27e52c36be1940f7d2138eb895ee36bbb917a59f73e0b6c3266bf4759ffe2ffaee3f6179492658e0778bb43c4df4bfa1a46300c9da496033142ae2c1e33333fd7e82c5a14686b255e224c51aecc2a590\nA = 1cf4e2d5924510a5fd06ff4eeb94a740e430613277149993004b8de1a2b96ada54b05365f305e896df5fdffd3d7bcb54f9a9dba9689e5ad498012f7a684d083c31d7017aaaee720bbd42382e526a35d2add21d9369f7faa41dbcfe3dae426948a402635771a977e19d5c353ec7c1abd279975f2effc0b7bc19990154b723f2f8c29e606581ab9d3966702f68d8bb8065e9d8\nB = -cdab60f9b8e1add4c54427b638ec5f76b30654d3649b500f833b2943bf6cd5d8647549657a8ff999eaffe413ed87e06267b97bfc1b77637b57f29039235548a7569fe6d4bb16ae9c6cfd38c0b8c73aa60797d0d69b03d5a98314f7f7ee25df8b896ecdfc782cf8057f038b6c3e79c99df52f839fd4eff302ddd1256e51eb31cee24585782a0439da3db2eee79a58f889d8847fe2\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 4dde3d63aeeee47441a7e733bcccbd4f2e495ca3c746468e9855177f7672d5d82e51da8e268ac24e8971d802e25d842a16a6b8d76b8e46a7724108c02d38a4830453408ca5ced7093676a1db4bf4c94b9b7a9531ab7c26f8de520bafe4431a55a5f5d8c7576427a0f5bf2081b998b82da2e8e959f2ec4d5141b55e40bf6ddeef\nA = -5770ea0a75ff451fc2c86d428f2569884b2c88cb6d9d407cc22b191849d389f57a5765b83adcea21c350b37bc6d750d4859f547da22ea8a3698a5cb6154b946331ae2ca18e7eaace951dcd49405bf8d8a716f7762eb242b8bf5e4c53a662c906c3be89e53ddf7a706ee2406c7d0ac17b54ff259c1bd5a092325938832763ac4caf0232e80a016cd1994441808d8db7e546de3f\nB = 7e4246ad4af268695a51912053ab6628969af4fcaf7f1e97dd977984a1604e8c9fe6b920f39a764c27d89f75986a4bbc122f92ccd1860f24677cf346474fd9441f572f769daf834e6a00cbc027e15d6aa7ec2030becad41e1068740cde82abed768de7e2cfd325848f6063e2186faa76982b9ca73ef22434a28bd2e3a5ac477af50f258140bff938d3fa02fb904a8ee0ef3c1f6fed7\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 3d8bde8d0625fc46dec46fc657c49c8ab12a988cec4ec1c24e6f4d8ff94514c8d8fee4a08399c6bd23fb6464a38bb5f249591456c283325e343cc289c85df0ff2c1707a6e407ff7a24383b66ab603b75e2dc3835ffe9274eafea148f20764b8ca30cbe483c1cefd51f82dfb93d7793b3ec19a57f2ba03d884f345bcc3188fe28\nA = -1680dd51d8be6069c86ae157922d55df3b58ee6f53738677bcf7332d6e7ef304ecc7ff7c5a5e1f525459d77202f3e815c68f17f9a6bf358654a92f9f9acb252ed8e9e6a849da7491f26d0e33900541ab67ce966d042607258b4382b8108729a703b429babc34496528f198a7e0f814db80fad4900fbccdfb64908febf5e09805d3a3049c0f164f0bcdaaa9bbb06df8f05309be83c\nB = -2c6c6b3c89f6e1d1cdd9abd1a9706e4f642a25738aebbc97cbd60e1f4ad79b419dd54bd14f2bd147b1d8e9bfcf92faccee61a43dbd1a2c084bf06a2ca476b3d169fa2c99794fc827b7f4dd010c0534e7cdd03d00456033ae0203b78a7ed229afcec2d1cb96892eb18898bf53584dde56b4316b3bc5186d97e3a9edcd059d7fe14561eefe4881beb8519c1cb7c3ba22cd2e13d874aab77e\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 5b4fbf0445807c8feec7efa3c2bf8dd86b1070638f3c87f1e173ee980412a28847b263a266506e70381aae919ae05d306d3a67a6c1e72c8ccf1c27d6296526e87f0f436c98fd1391f83440b58fadd4fb1905a484bfe8f516661e7176a268660387fe6a7266ef02e5fad91ffa69247bb11cfc1b5c3a88c76b7923a26f8a31ece4\nA = 65fe4d55bfcbba2bbfbdae831aef3dc8c8746e1d04cea174c1d336974d81d026f562225b4a297b1c3b044ccc5dc9c830a805a399bf26c0369b52ab0dd2c0ad19e723fcf9f5de2990ebe5a1266653195a2aefd9a392fd3da8c22c523a362f195babbbf5329018e3b454221b3e77cd0dee79f612f86332b1d104aeae7d8d84ad06b107715bb76bce20220d1340ecfc666b2bfce812814\nB = 12f775dbabf1c112523feab443f6e95d773e8220d66fd87bb7fc702588136a048e17ab6845a9c784dca275cfa445d007e8d8383740b156df7048650f89c5ef1a84148488fc405898f9e326cb8052f626c8881abeb70f3a0f52dd83e3ae0cb82d178cbfe8c393449caa2a87e7c8e2901a87e276b49b6d012f3cbb65641add3694fed3e3177777e78fe375f3a3b378091bb8d2998286562faef\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 4f0af7cb0c4e82d0e6589b24b55528818bf2164d41f58505a2b302a8f677df146f8077945dad3790c323e19b37e3379eb95de8abdadfbe4417f8bf8da643768a622ad4898513fdbc72d3b1d2791ec9ff40634678faf0e17d6e0851f08c39405907db85b74937ac403a9a3a1004013c7bd95a585728010689fcaf63b2031bc8c0\nA = 156dcadeca94985ea8bc0d1378daf1e85ecc4c7f8b6d6c7a5cb9f9ac368a97c07e381004023bc575691c082b5e9e13a02fe813a55e76196e4ad4b0f9b1e089bb71a0d5c94254b66e3e645fea25d69bbc5af266e730482a60105306d664f0ddecbd76d54e7235979aa2d806b809b3468078b5d90aa22cbd2c441198d4a52f6259972cf3d02003dc39dafdf3581638e56d08c5181d36e9e4\nB = -9a54586072d093939ad86df11fcd3337ad7e9e478dcbefb2b89d7555883fe8565abcd5b0a9c88ab135ce5327b2a326db645bc7c0e3ce24f902544675ff9d946abf30302f123aeed0f4e28edc72758ffa760277caaf4817a3ae8615784c81896d2404e2cf47c06b09085cd0ad1ec46cfc1f04d0272eac29e774b30f19939d08c036b185983c93ba15d1d27aebe4a357b9f6a298acca3940d2730\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 7c3ac09486a6fb518b98a9bc8a8b382bf2293e2c1154470ff7961212430fe2dd28697e49256b1ad8add082ee27b6ecc016b120e971665be801b720069d30c0a8c6ea4795613017e8883e5c0d0e68f982c328379d7a0afb7825c553e087b33e9d78f90e0b95a6597076b8ec2c1d375e2143bb778c318ca0680a64072cf9a4fc08\nA = -71d8e7ef13d63b4f417c01ec1241020a8ff4c9b2db531500984fd3e45d22b2bd581894c8a248ed7cc345e70a5698407df8f0e4ac71ed2c0d42122a4f92279346f463aed899253206786928a0eb7c37f2e51e1cde7f97cf9288d85c3ed7f49e62af0bf9abf062d2c6544d83b9d3438b3881e0d07b1fa0f2a4446fd43ab3b4f81fa2cdaff199c87965e298943c68cc15f2f3f3225efad68b73\nB = 64d52de221f102af62ab1e9526935b005c81658f8fefa019bc58e641023fa785798ed0dff8f7f999dbcc2ecfa47d5314ac6676c82170d6f2b18122c17c1e1ec1b9b54e333a184a46ad35b2150c8165f0de19a24b98327715e5a641c1b6d3ff9d247c89c8749e775e6fcf5f967c6eb5e73523d4f1ec12db7321b14398f26201a364e1371f0ac922781ee252c6d2b3c657ef259ab73cb7992a370598\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = cd08b388ffd41d0aa29a3dbde74106c57b18d325be8f446a2d9ae95fa4144037dbd41eccd50fa34096984cb11bce555c117c5568d76a8f79d308ce11043fe2413d37d6aa60c366af6c1da93d525e4b2d79fc82c0a53ed62fbf72c919db8a3ae11f5ff8057d7501f5f6dfc9ae461c308d21919d0de9e31b759d1d8e3526fee58\nA = -12e58708c30c93383cfe6e99ee3c5caf1900a7e610605706e77d8f428fd59db2884f5021d7a382cb18b75ed22528961cf43be1c700c581ceac3877e83eabd860583e6e94f3f2989c179ee5047c82b53d37054c9cb7ae08be60a91b10d49510e9f0b90ddf89f93790c3e18cccad5a9d223c605a6c567550e2b4950e184fd97dd68bf30681d3f9c585365de2cadf36a43f5a5305dae555396dd50\nB = -26ea5079ba7ed137a14d00d413d6f818e911cc183c88764de4d91d7a9b4cc7af3fad703142dc7905992eb8bf489f6d8231bdb25603ddf3c31fda8bd9bc4d78835f9ddc1e6445037f05125cb1ccd92eea2e927297e5eb915d5d965a25e5d58feb8d79a890e6036c80ee91e7469d9eb672d7a8db68905d06f5981fc40bf486575a067d35cf14ceee3ccb79b72871bf8f52b92e4910ab17e5e59ab3ae6f9\nM = ", + "b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 34714506322dccb91308c403c267f1ec75f80faf3cc4272dff4a84c13eb1e6133af6681387006c61e7e087046b64e7ae74eea8a3c0564a7c1f381e1c940d92b2c766fffdaa7318d07dbeb877943a73b50517b49e5117778b8a60212284fb92f29a9f5304f8f537e88acf8afaf01fdf64773f988cfa9551d6884baa70587ab76a\nA = 638b7c549ed14256956bad532945ef9e11a50313172965386635a2fc7db79deb0cb5c157e9854117c17f1509d505d01a0e138d2e510dfcca45b4f7ec968b5214a6699b61b8ac68adf64d5394f50d577a154c013612090e2045462160d1f552592197d7da78e03491ae284dc9faf643805f2674af8652bae93ff230fc3eaa833dc62781e5f74d0f0b90290d51d481b0a94ae6e972197c6e84ad7ae\nB = 141f62297ee88ad527fd1e0e09d9ab5dd80e17b32f34a674a27b00d719839701664ccca1b00da2613396cf633b0bdc4482ad3a0c3e209eaea7c22f33706ae44155f527c9ca4e341e651760d1c39f65d5e99e649d013730d2502b6b65adb8a73e6bc734b7d879b430798dcd53fa6c0badd57896cb566d9f1e0a7b3a9161e9808e762ca819330ce9319dbe7f49bd663a9f57ac53d65c6851dc7bc4ee66e08f\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 7adf54c77eaea2a1743bc5011ace45b7651846e77f90402297f117d8b1c0377f93f49e92a2457f3d3debec3022a96c74c166d01b2279553ef518ec0e612bd7b382529184640c55b89255b2679da9cf370913351592de39f804f1724de36db90c045fa644e8ff20627f67d6afd4546f00d7af093f668629f9a06c07fab5654ac8\nA = 19c491d5b55aa25f2e18cfb7fda18ed4b020e3f63244eb9f6c4dfa86eb8a70875cc898e305a7acdd3eee081300edb3e4c837940bbc1927f5ed9f651e46581639e133515457464e9c451390828e5e7e00a688daaea74620363706cb69e02717489ba9ad05774c424c18e295278caf4df4ced80b4cbd20cd631df43f2e16ec0334564d9dc03dfbc7111e4252504fb449d5a25cb13630b7c0c565a82ea9\nB = -c3f765349639beb80f888d9c8b7b335ab46b55064ce2a88180c80ad280c6b7314df52b7e73095dfd82896e24604854a48121353aa1de663eff07882771803010005905896357cd5a56a59f0db0045f1aa2c0b5626e132c169abc64b9893f95932f54c1d8cc25f215a9ef6e4cfdd6dba85f6faefeca81793b2258ae1d1427e81e458482aab87f6563abf435be69a05b195d1eda90146a8cc92748ca6f798b10\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 32ba5fc81a7747c3d812cf036bc0edc49f08824d53b91a65a6d41edfb1651d99c11ccb4c074d7f04e652276ae3fdc8d6eedb72c6e46cbb1f7f4070dc9d179ce3e21a3826f7dd2c27943a8d26b192d7f5c4aee9ba0647e406133e3e89c262d37cf468aa3ab8c5dd1b8900dd06cd600abc6d372d9408497d9e20c86a9a6a4ad9d1\nA = -73958019a5a52357b9c1d954c9b14f51ddaced32a4d7b7c95730697cf90029564118ea168d23a54381f7bbd6718a6b662e4c87410e48ac53b7767148582b0bd6a3d35f488e7fcf2b128e0a58b5d468dedabde4d624f4a82e808dd7b175af0d3658c6df1ac0da6495bc9a8dc012f8de55c2003da9b2d478e1a089fab776d99026684026968fc309dae46a6ef2412039a8207c3084f96b4e38e4fa01d131\nB = 4330fdf00bc6d13ffc267073b68aea7419ebef257d63f8f244accb9ee46edd04fe5481292de69d377ba6b6304804ba7ec0a063b42339e6e37867261b9945ec705d3a0029c6f499420e02a773476546993b3c5e1efc2417f51afcec7145a9c2625496865c11636e285d4c8b053ffe66887333c51a712fe9c8ea57606103fd689dc88f1fe37dbc33ae4e92067c5bf51b53e2f8205164c800e5abd677c73949b00ef\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 69b850a99b471003a56931f7856da357a2254ac50ed81dfae019c9b722b95af16047a0d5422cf7ab66ccd898e85caf0e03e74cc8a5a413661e5da483b3f0363e63a7031bb30626c8f73d6e99e290071094b7fe5bbaf4d303192e59acb5e53fc7cdee78576b51595d9f7a25ccf3c7f8889de68b9deec167778ca27ac9d4c71c3e\nA = -1976b3bbbf92acbfddbc05b5d9e7b62a7666b239c1e6270db7ec6dc2929bad1024e745b897840853d14cd815aabb01aed580e1cc66ce37f9d1cc4c9bef8ddd35d28285faa29f2003d2a4623ead7d73302ea9f380f16b3fc06b7c2b8bb4ce4c8b03bfb6056a61c620e4decc6048cdda5e2d3ed8a13b779b8829e2bbab91e9f6b0304b1c08bf8fd85e0f3cd7ee72255e5342e077ababdbb545d7f809bdf8145\nB = -2cab554f7a5d21c499a1025f61e6c81ab0fc68a874bf60470cfac57425a451365be62c380ddd31f6e202f29769e2b6106868da7c81522e03fa6f0704522a5f8bfadbd007bac65595e149f6c585d7fc022db016bab32819049e7547bf85d4232a7fe19084907c528e7eb0434f2e5a375ad9b7d463821bef2f6a721a635252576c176ba42519bfa5d97d0e47facb4426aea0d755507dac81ccf1537b1003ddbb0727f6\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 2ce33adf34f2249f8a2d2e073976cb4c78b71414e027657fcefd56fceb022a06c1969dfafd519eb9e2542662c7647102f5c528734dd005fca666be57b46234123bc3db286cfce07bcbb399eb6764daf2b9aafbc2898a5ff43ddfae849c7549289640edc4ab7c4b9fcf5e159623e5497f509ad6f0270a41fd864c9437302ce380\nA = 509f5d5b160e923b4fdd72f4d522a713d780daa4bfd10ddbd62b26497a2e7925c495afc2abf0ecfcb7980e588f96c4078bde51c7b2c19d86d15bbdad5de72fec2e0a284dd693ce0902b40e54af87ac5a5df38ae6d1d882ea6299fbe6910121ebfebd06b454ec5f855bf3e7cd544a4b0d9a764428662e824e2a6185723534f5e6ad829734347d240c48c2c0f8bd6be6ae8a495a9e383fbc7402a4096b8c2c214\nB = 1a3b7f55307031609afc974857a6cc75821e73a1a9535bd6b8e141437c3fd4a6871c904e22c5d9289df7525ac69a0341d3620bcfc5f04b38ae540e26beadbce0002a8a8bfd0f6a270007e4c52aec2fab11fb2a831b9886997256e4b7e7ad3b0ec64c0f31fb0d637869143712291f5073a5756466d7c82c31e08e09683478229bccdedc2cabb7e426af9025185d8dd5124e08afa4e981236180e0a390004adb7918de6ba\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = a81fcf9a18ce476a839c896cc5d9b639fb1d74610e2f618c25310147b57cd77806c2aab90be7be4ed10f0122baf9b862b141ee8e4be5e0c23ea776267f14c31e50b119bdd33f2b41f6a4c43d35bf6f095864593e0d8c0f1fd4656d8371af844d197308bbff14e5a28b7181eb6e6a2b31ead7361e287f3b4550ab0484bf7baaac\nA = 19f1ce60ca50bfdf8e02313f1c9a45496720a2ce467f1e8bdedbb32525d762878b61476989c7f6ae8dd29c983ea596e521bd4cbf74dba4d505dd9ea5df423474fa9725d5b65f1575d26ead95725e2a59a6c8a5397ebd6b54123e42bca44781b84c014b8e5d2c1a86cf34d764b242baaad5be285cec72ba8ace808058a0226c04f95eb2b53a828d0ac41e6b40e5a4c4092788d9f7e988752f175f075d545f421205\nB = -b115a1101d97664759538d22154de4b000c008e551e2ab10ad05f12274b10a4cbfee762d232df5188fa1161f37ba61d146e8b95fa715d98e016da8beb0600de65216cecf8b8816f6e7e73e2a2bfa7d0bac74b517b906bbc43357fca69de9cb5507bd95205515b97b3a4d6842f3d7b09606cce1c7436c462f49dd05e915d04ab6fe2748ccaf025bd5d19749cc468d228ba43452ccc479c146ac6d781717bb9966bf3835dec\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 1473f092540ae30de595666beb33e430cbec42d7a28d4f7982e62f58025cdb617cfc33f1e5ab93d2ebefd7345561b81271bdc50bfbb0db6381dc0ea023ff7c72605da26dc7da2b5664d2ad7967426ca97b3745f82528964bb68e70087e14dcf2d71d30fa0d1f7b3f10b19b357e7053fdf22bccc5188c6919eff1e5c402b750a4\nA = -68f280cecc512d51ae534f30aa198cf7b170c346c1159fa9cf158d0127d43e50a8d4704ec54b8b4295dd7f51c6771cb5767fe0c975414cbe6d2bb58ae66a095e8832d5f443498b1ade1f5bf249da58595ebd878677b34e3b4c99ba6124e2b71d86a8d99727a16746469de51b0a61d9d981459a6cebe206cd36a09f00ffce7f532e2c31999847ba000b9e01a4b84f454544b6362a5c093b9abe9d583716f4534f2de4\nB = 5b79684387f18d7de6eec3a63d737490dc2a46c0616ec16388dca2be60adcda11ae13063ede3fec177171a51dbef430f8c4b3f6d297b9d6c020fc44e3ffab891d0d751d033fda813861bc067c181118dc613335ce89c5960f952e5fd28bc72c41b7b6e374ec29b837f1e00271cab646c794579d315260921dbc3b984b86d98b8f8816aca4f16de506", + "57e4102f34d9e29ec3a03e0da06e70f69952339bf2ec4a7e74daca82239\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 5e4b3f4aea7115d592bde9bf7c6594fee77372ffb19f7745b4de878a4024f81e8290c77d2915424df20004a7abb64c214104a3123e7c8f230c159ccb99bd937521b433dcfb065b186a685fc40f9166bad9380a02e297ffd6a307ce8d2c8f2f1330447a9c06c327b74f3cfc2e98f3351a8b385bae855941228969d1c29e9da3e4\nA = -11c1d396693139df5bd91825c119d1241c3f57b7ce95b46472dd82081738cdeb0868d18eb7c8ee7808016b3311f982adebd5a2e5f4e201ec4a34f3037d260fe580e771222de5a1a67947a4552cc03c5c59f9e60e25063a702ad3c3aa43f061a22567f938a91f1dd697c3e3978fa11ab1d65030bf327f8049bda745658bdd4ba8f3e34b060c6a2c6c5a8be54c7cb5f6b106f54a37d2be9f674f7747744d4350b3acdf373\nB = -25a65b6acda692ba3330d70dbc3ea4dfe208c0df358c50b7872245a909c5ac19ec568b1a1340e1a094f5b8e7d1e3b7e04bb4df002558aefd4540135d62d75bd5ce959128c1300b9d98429d7369610866d98b22c345e531f2beb80b042b6ad48da077043401a82e223e9e529e7407bfa466dd2680973006d047d837c26a60cabc36a7ef538f603ba19f8e923f168ebfc3834df8f77a559c9e0342e33df245f551bb242e5a66e5904\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 47872b544fa0425981ae17bb450ea346135e6ed7a9de0572ae14a6e85e8319f27cfab778cdd8cb5f93b417d9c66ae0fb7bcc6652620f7f3f74acc2bc9f2c090129fa8315aeec9ca7adc5356484474ee803883ba4695d7bc47c87eec508d16a15150cf3f757c4713de71366e958d6af045b2d282b6ce96976692c80b1e0b6f846\nA = 7e8f55c040862f12d8cc6e506608eeca65ce38e9e8ab18ef7007e3cf0f1c9a0696795bd10f8e1e1f55bb4f4f3a35c2e0ad18289e250571ccc26a961f730346efb1e29fb143ed97cf72deaab19834fa2e98e9c12ae4cd23b9c5ecef4a04c439f7d42e110b30caedc4334372ca24cfe4171ef1430528f7b57bbc823fd606fbd30915c5817e6c57c967c4c404a0847b1455da17effeebbec3f9357358e00001239aae209228f\nB = 1cc00b95f6bd3abfa697400c98110725a7e109aa9b8cbbe9ae16327c4fc8e5bc93afc7a94da32e98e85e4fd5eb545192c73007d97a4e84ba64fe187ef61d17f0941e165c9fe64c7b8054e24dad30f92b50d1f526b4bb031e6b1b9058be24884b170a145212273c51692b71bc57ee53176d8702b975bb6ba96284b462da2ce38e12d86b342c7f4d3cd489fbce88a309c7df1121d7bbbaab6814cd1e54953e5cc46813ead98f02360372\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 5d193b085e57c3f1e825cf3b36c8bdc936c603136bb782a244b04a79fa713dc7b08436b85ca3b483d2e100a012d6430679b30c8e4101c8f08ca0f9010dc0f27fb37be842054dfdd99362e03a7f55ae58db7b47f694bd35d91a58975ae1f255c41617e773f91c2640f768bc702a213f073682dc761e056b34c57edd85585fe04\nA = 1bb1c759ea94b61a1721ef5680f42af30fa31444b27591a03b7c9bf5b90845ab965339f463a78bddedcd62fa21197c32d6850c61bae195f86e1c7a23e7a20dc618c59ce3a1c6ea6306c0b01b11a36d0fadf8214c36a133d689438021ce7c78b20c85256ec607360cce14f139513d9f3ea6eab067b1ffd0935d7c43419b93ecfadf2c5a902b7c39a69bdc023173bdad574adc77706c1a666d66f69578a5bffdc7cd6eee28ad8a\nB = -e8072c49cea603d48f20276df188fd2fb28f8721d578220cef7db1e56379c04a6b372e56a047cbe59ea84ad026adc5d0aa930011db63bf4959f15781e060e0240dfac0e2a2c26be12a21e5650d12140bb49a2a8e0f6a86e4b1eb79d9b8aab3202bfd339096529170cfe3e0c18263128686bd9305e92a3c43e1523f97d8a6a2707773e3d441da162a79089c9ea1e094cd5a23474121188013c8c287965a5e77599f6a7d64174b06cc165e\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = aa79c899c2b9518857c9e4f96523a44607c3f6a97d1f40d6474ec79deb2feadd955fe92d789df4d362c828084559fab56b5e33a971abc5449208d31671c7e220c5945886e33ed1d804c059a8e439a92524a785076f9730732bc5a152aeffb5b9ecf3a7e4b55983016355c4c29827496fd4d7e6532c270cb9ef263573e4c63074\nA = -41b326c2b86e7ac14a2050bff67bb5bf9697f02594789c4a2b3e8455df4522546278d0620f28a680f6a88ab545de5829305485422f4e70a5ebf0ad15508dfe3f16ac556436d8fe8a8cde83ead549d88e0bb24dee52ebbb49159ae71589d918d3fac8011cfc3afad613ea09173856b7b79b55a2e43e0f7cd21eb9122d5f6a1fc5408414f5aafcff863b870c67b740256d317a0c58af9a81d8025a086a1f3d79f7408d4bfa06b9dc\nB = 4730f03c389f9bdd92fd864177e06140c9dcc02d01fe7d37b51d44de140696f116d11bb67adf7db797edeb7c304386a7f5e37bfac46a5462a6d4c49b1bc034c2e0dfa56f14bbd2a4bfaf86bbad4f6d0dfa13c782fe680847d4b43373d7137f5c2ebe4ad58c695a7d4c407bfd888ce04abaaec60a3fd33db10eaba6b6acf0e16cb61d1beb9212c2b07921bfb5595ef1eb389200b356eafe8b5288d8f0e2cf252b38301de65190d56bfadf57f\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 23f9850dccd2af799f18268c3a2918a69019513c55268faf2477c50677fce277d8ce58a0cc06dfe389170faf5f0ae13ffc4954c746eebae66efc14eaef2c2ac9001f3c7ef7e32fdc31dd725b6a8093e33daa6d19808908e0c2d3e7c1c58e0fe9ed92f4d7cf3cc222393ca4f95feab5d34fe29116410a1882dff7cd92acb87590\nA = -10a75953e5fb9903411869a2949f8f04144d6e2d61f95704ff55a02f40c4f283add405353a68bf7d6acc1b8cce738f0c6f9271a538b4c688dbeface58eef0a0a1d491a9e66958750db97bd01466edfd245cef03bb6a3acb81acc63c38538e7f15deefd15afc422a8641c357c31a069258dc0ebb63f06094ed8fe7d4d420246b40302361967c81f0a9ca542fd1de01967514ff2565de7ae3b4a200d63feaa22fb99a251cad66624df4\nB = -351242b6e6d0122f7120deb8357c3bcf25d221a15f83579883bfb4dc2e6099e6b7b95fd08f6e573d93354b0676f7bc9fad563d6eb0f3567ef43efe3d874b9c7733e4fe1ef491043e1f80aab6094cc9b9c236570972233ea74e8779a6eecda23a65d08d878850cab6005159265893dc0f66920a12c26dfb421ec326a1ac09e9ab8085825c31aba488af02cd51f96b205c50e692dbf2d844ff0a989c3ba9f1c2bc7f2e7dd9458a72d310eb28d490\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 69c7fa326630d7de69249807cd8bc55c9315acac26fed3caa3c8a9c6b51ee96a7dd0b3bacd5cc13c15f199e268c5eb91d1ec36c085f83b437b9906caa6e39ed7bf09778610b621426cc8d36d96f541d0bfcc7693525d33e0c2ecd77ccfe80289a11155b37c7ea7791b5c2be3f9b954e230c19d746575afe9a1a3a9677d23c5bb\nA = 7cb78ca8e5d903096630744c85975719c16333e2e44931956d8c45b001d35ed4e184dec88c9e2167d2f338fe6f25540a144cc419590a4ac7caedea3bbbc565365d3357baa62fdccef2c5ea616614e0bff60e81916eb4abde0c9725b1bf6869e8b1e11f6d0d08fd712bc68003e55ed462ad4946f7f982e663f65d45c07c659d9620d5139d2b3332a68d33aec36e21716a3b75f44272a19f860e6ab3864f06def9a5ddeed340ac0733353\nB = 16d5b074e008fdd30e73ea95cb5fb87de806319388b3a44f33c94d38be0e6f1a92103dbdfb3d23b6e1d19bdb29ac14833003e9482cb7524d0d7b4c377f4911e3372f2cea6f84c938d84e3994e80f0d68e7e385ca29e02f70294c921dce7cd3829c5854ce51d1f4fcf7dba910b51b48a3f53cb1f187182435f21f6981cf8440f9c8287a9749c92c0304cc2bc91eef32d8e6526be802de8aa16684e8854cb0b67d9f7ea00f6f0145d14e3c251f70881\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 72192604b2f3f68b9ed3e261120ea52b06a05869f6abd21828ce8abadb3a71c360a14947bc738e5d1d530b9636d796f785bb44508477eefa80c4b77d4e8e35463e15ea2a48c682d3288c5abeb66181e4bed7d5b4e0db20fdf5ed68513aa5ae7e0978ec1c4646368f206636ec90e808817bd1d03acf9adb9ba57dc153873fec11\nA = 1112d291463b28ef45e879412e6607a3e20d50dba5044e71883bb3cdfe9bc694a577fd7d896dfb836a171f3a4d8fd025d3a979b43e41baafaf7b535d9050e47f4880828640e952435648960bbb74a3c25dd90bccb3fedd254dfc0f031d0e8a468e93bb69f771ed35f1653cffea1a763491fdf6efa21aefc287cb611f5ea0085f64cc3705c784f87ce00846901833d01a3c45ce047d822ba390b538f0a24720", + "155409f60ca0d90e13991aa1\nB = -d553fa2dff0265cd9d083ad097af87a99af3d8d93a9f4c07440a28a427082004ae5c81d22bda1dd2429f540de8df175c1b4d0d50f0227489ba570b28baa35055df951d05b584ae6b051a135d7eb2a501b2441f82c135a8ec0eb81d379b96ef8f2fd526ee62293bcb934c76ef8083727a4b28bbfc9f515ebcc2bb7ed9594a106e137ce94e9105b2e2f4776aa9c6abdf426a181181fece3251c3ef4f8eecb634e6bd47c5878663fd51c74a66b92713fb7\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 459e19faf105ab17ff794927aff86196b3cc3461e69cada53ab8c8c81e2b1820408421ea1af6ae10257e8cd9dc16386906410761fed62cf9ddcf0da2a92800d99563fbb9cb1ab0ba46a17cb9dee3f2b68992c2b832a5932e4533fbd5c4487d870f3fb5d7a1c358f4aef02993360915a9e9cfde234df5f51c761d84568400b618\nA = -7a964c62e38e4124cd2bad727138dd12a086a2bf01c095b078ce2f81288d3c8435ccce0c8e00229184091130989434bcd107a3a0787a2f5f4b0e8c23b1cee9a8f39ea279fb6081efb6c3df1704fae9e87d63ac6eac4c6687b3551ab7ddac5ca0541e12047d04c2fc760fda0916cd2b585a90d25880fcc1bde8f0a1a413969938d42e8b3b5f73118798e85b901c2e15860e29e2ee8b1c95336b97dc10a21f5300e0352adb60b40a8a99333380\nB = 743ff4d91ea3e0f9c4f72e5daecb4fb00b15b86e30bacebbe4384324523d14e22abe29b00573733f594d652a88d98c987f8db08b27b4dc68577784fde02dd410ebdbfaad9e9afc6a22a8cbb13a780222bd212fc61e38faf409e940fba35ed909e6938e83b0fdf5b5e3ce138604823e788efc3aa0df924554fb70fd2faf8249e17a827c5d85942005b328bed97e5ea1f1810219d77f2fe121ce66518e37c84d64aebda3c397684212384deebd520a776b95\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 183950095d9424b0ed09985aafbbd2e5d64bf541a56b68b42ea8cf9b2c051615ee7bb6c0687ca6fb0036888fbc927cb7aeb303750871442ff2c0087a95f4efad568f48b03bd2b9a9ac26af8c259a3fa97cd2af7e3d8f36148c26785489cda6c00a21e7eca219d1f41b2e82ba8e2c1cd752eb08a2fd50c6f9077f3096e2eba05e\nA = -1d2fc778cf44c6992d1f3a056860eeb12f969358cadb087dcaebf5f96bec42bc0aa98672260adf1732da057e9e0d22081e33f5fa71f248cf89dd361036ad58692637cdfff584a191279f178242ec0ad397efc52e99462f496caa0f3133c4238aaa877fa7094662f080eb284c4cbeb992a368c2d157ac5c8c9160c167716406190fa39ce0abcdac52c8020969b87a4f84bc09a51f7b2ca288c93b1aac64e19623a7d9e69976a31074f637e4c82aa\nB = -2f188f1245b75cd21d052ec76edeb5881944a143fee31c67370fab0420a748f3f1957bb8332ffefdeabd0ca806169629f130c86c99bab490a9668fd8200f4a9b1704c589e75b5c8c855f133d50b2ce06191875e2872b36c78438d6032d53004c047f49e4cb81e19fa84da16d053e6cbc7c8eec0b9129a8831eba690e0542ca3fefd204258624e92844c8b7bcdccab986475a47c8b22e89079ea6580ef8f496099cc24dc2911dcb1921d1451e2163b55bbb7db\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = a02c38d5df9ff7055ff84122342ccdf6ed7f7d54fe8227af091371f5ae62844645586adaae99c11f4ccd828103a81471bac72dc20625962e41d603e760591bb3569a21f45bf062b86b5fd1c617a4769a4d767a0ee14d104084c12ae875316a8f2be7adec0104381dc02c20b5851efdf7d4bef0d68076975e0ada3e58e101e8b4\nA = 5daf37d616da184acb278a75fda4e4fa49e544eadcf373c054b203a309ba198233f2285a1b55dc92e05d0213b26c82e261d8383a845813077b2e1b5f4553400f09410987c8dd21d4383e0f05747d0482d1a89f160a5220b22c78393873564fc5b1e4d5627ef3d4a05612709f301381df35606e99560fba07a917d7ea7413110fb5a8290e114d5200cfecb00b6c53b2ee29911bcb2fb2930eadba0ab9dfaf46443370307d9c3b61a329f0b8b8cbe7d\nB = 1d9539fdb1afabeb9be6e774dc7c7cc4bb4fd63af7abb557a5fc80a3fd23a4600de3c7fae89b91f3d441b61d3e24b2fd3d7803cd71620e7313917b4afb89ef5171a3d8a68c3c74aa3dfc8058d555eac429dfb6db40a9e0c25aacd2050418d6f32bf21cbb76981269dcd5883178d4b69a931a0338b93022a2ed0f78f3d8877989cc406f19d6d082ea344309318c56be7946412ea0867c78418ec32b9fa3a61017c10939c9345021133116933a3d1eb86a3ef16424\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 5fca287abf1f487e0ec18c230860eed4a2e550228b1500b1e33bcd6675646b5afe505b55073129f22352dc2b113c584ea1b98808214b6916933e90e036b129b61657cdea9026e1fa087ee300e055ae8f94ffca933a2d70453ed220468a5a3cf1a65d81eca11cf570d7d038722397f487af60531f24a5f069671354882c8bd2c1\nA = 1d9fe15171dce97475f4ad329fc8fb5469fb2b8086e4b01eddb6ceffe5324cfbd28d791705848569739b6758ca7e7d7d49adf0c11d891b0a5879ca870d1ca5ff475513322ff218cd26024f97623bb8a53084594e1fd64154e1db702522883fcf4c0d677a7fe90096fc76dc3800816996308d8f0be2dbf3b879f8a000c0ac534511437e2ce2d7ebcf42fd1698a829eb846b3afa581c24d5bf97abc6e247f110f4e872a2474e3acca6c8c0d518104c3375\nB = -dc0da8f7adb8e9f7b0e3f293cf623528dc8e9668317910417e52301c50c62e7d30e77ec7e38d6817d1f5a93e851f8560f642f23a0b9f836812d27b1b41c0867088a3108332b8711047560052ea30c8840f03a25c65b227a175d8f340095823788adb5bdf2b7ebb801e20f6b6435e154f78d17b8fc4373aecee56ec7b8f5686a7d22c8571797fde85cec884d45ddc4b1f2cc47ebf56a879bf286f349a0edfb531168b733d43de3b86b49eacb10b06a432c96c63440b\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 6222c1a14c6390d73944cead58eae5e7a6c19d19e4563c36cf624f5b61d99991bed7dbf6a0723abc56469eedfb1f7982987c2c7af6191178cf0933ed5f191b8117c9d726cdfa8b82a2fb25ca5436023f5860aff5fd482c611f134569ae87395dd99e5e9d400b5ab1e3064210ded096411654518110ea45899f4be2516e35a229\nA = -7f6766be6c6ca9bd1fd7ea1f80bfe68693f7ee4b5ba2946846839060d6028eabbb9079a165c1a07eb6a01239f3f14095225b8617753a1cc3d9c1e69b516d8705cfda396f4f0d05b0944a0f08b478d261e968c06918914ba87c8e7b7adef5cc2a875917d00585571542af219bd726e502b7f3f0bdf0cb1dfc6796be2e22e8ffb5b8bfac7e15e991022974e75d3a5eba214ab8a1aab2fcfcdbc6ded2abf834d1899d2e3ff94bad9c696aece045212531773f\nB = 49c6f869745983cae44d33cb7ba141234905441ca53172abd1a2dd8bfeeac4b236605cd2dc5b04ff9aa13de84872145b935b85479136065d2d57fd15fbd97480c25c6354636c17ffbca33c9319d65e82523e39fab49321380a130fc160857a451a69b1d0509d5718a9cff8b49c2d677c1f66bf77333d2511f58d3eb2fb47b3c162cc9be8b012d8df70278f0e21123a69724a1f126369a236d54da026ebe222c513f24b577707b5ab4b90ab0e22b4e38ceb4181d4ca101\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 9e9cc8c5342dc6d6daf55fc9aa9f79ec18592e8b9724a66881c379245c91f06a7df50a6ba0964603a6dac97e77a55d06efff17c93d5faf107fe65788d0f56483915f6ea0f1ccbda7656eb58fc032b5771600beafdc12c2076110a9b9670bd0754ff6a72c5d6e1a9e4e42c688e1cc96d7aecd815bdf5dcb16fcd1be1275ce7282\nA = -11635fe16dafce21efb1c599305e9a16eb5651187cbf054cd9d911c13e8eafbb738013e212f9c2b3662ea15ac9bd82b5751d43a38e4475d2310945a812262309094ae9cf59e0e9f3d02c92d8ab01f5733a20f051054a240bcbe3a7b6bb3f7c434229f631c4af239d33bd3ce30a372a480fdb49b2716091d26071aef372b8bd8ee8eb7f2965a372a836000b3737d2a833a39230e721e4844e16031ad69cd45ced60a64510c1248fd776611934d8d2a913d965e\nB = -3bb2cde9d3fda96fd7e6b24645f8e00b43affb223f2b5c3f4b7cfee905ddd6703a9d6c01f1f099ad1174da215a645ca4707d8156e762e2a253d7cfddd05ca19823ada9d33924013f677cfe4d86bde025391e0aaf91c6b776a9cf8a09dcad7cea59ee7aea1cf5f5bfe67c9d4456332d1f98e5310db9a0230381e1867a8f75b8757283f911f1a5e0d4afe5d544afa8d86637f9c9d87428fdcf8b4eb8f477e617960948253b24565b2f23081c47e211cd3c788a92732a49077f\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 30dc89bad4b449d1df9ea9b8f9d40b323c7", + "1d7e1133bc44d33bdb87c38cddedf83bb849e83436e4c92a06546fcf3e24ce6cc89d2e97a48aff2c7e3703da1b167a112f662a89742355e11e131e41052f1b379753cfa32cb0efa3a07465a258c585cd68c86bc9a473f5262c86c50992aeccbb9725b69ea8b3a7ebd2b6a24db52dc\nA = 60463fae1e9354559160d55a453c12d75775a53d1606d1fd16bef7e4ad1c78f9568954112f9280c46781180951534c5372dd5aaff3f33ac9c2e0ce4934d7009aad2ab5d6a5e5a141a36846e8925c7a28d116c68fb78aa9a687ec9bef173c1b69e0d7261f96eacacf237e1fe5874e5d553985b0fe7692ce8f2a5feab9ad9a2ad9c4bbf050b73b8030ebc36b94af8c6ecb67f8c94607d80cf600efd4ce4aa006f9b1832da8a1fdf8a564be0b4369149e8639e1714\nB = 15bfc50290b771ad147695a4c6701c47f2e8aec0657a4ef999eb45685200981b0ab5f8abc143d64878b85e9548651a1afd0913e3b14d11d3a26ab9793596801662a67b0062fdc8888feb029266f71d170518b6a4a040f59996bd4f257f221e830d0faaa9688aaa6afbc1f9b40d25097eab9d71d80aabc085f3a07e48bcfb37119aa00de60be55fd07d5b1281adf7b98bb589cdf2026252edf2f075ee176e23afa6b1f924c9fcf3c34c76752e833278a2e6b62017b88b77eece5\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 8b506c9bfb75ab7ab420ae6c9b371ef035fab512188d9df76f0b31831573b44cb08266186a04d20cc761d61b6df3e33ecb86c269205c2c79ae6aa4d3ebacac8ec71d9bce1d7ab146530b131c9038041c6ce8152a6f1c09b9bec8eea4462dda0f08d75edf296eacbcefd62a0c197ed30f799343268bf6edfee4995958db7e0420\nA = 11c16713fbf8bc9696782cb5a88174cddbe68a04e8fe93dd074aab33dcd85f92baa178b2f3b8817be0cecb802cfd3ebb06734c9d399a1f090e3a8a2110aebbba0e920427bcda74bf11700b945985bd532286d44a1a615cf7c501412e454edd647f8371cb8149474557a0d47cbb782f460de7a3cc28991491ea0fc510286711b882987b09341c079565414f2c930e7c3c3a3e3e0f1d786260a7f45c70e0fa20dfc63849906af61707cfdf5a9b7a4291a1c1586d16b8\nB = -cf5638af39c6da3757a09a92e0bd54f852742682dc91c71dcdc6e72f7825a0979a1ead2e158479ce5565d22472dc3853e6bf7ba43296a5e0e0a355f0703cecc02ec79da83e3e9de10a6eccb858dedf7d4c400c27486a5b8cb34d787cde6a5fd271e83a6cf66057838fe30db1f30663cdfc22ef5d002b0b5a05831228ea200f95382a58d0d8aba36523d9b5cb7506f193131916f3ab66ac9552c26cd0c2ab1c449eaeb8fde752f4f3c3f9b060cc1f8a1e37c4fe5ec306674b66158\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 347706abeb168205cef9b0b8c6b9d6449ac501af7dfbdfbd41a20a6a47872cbd7d4cd32f7b0805ecf1573d534418b7cce98181e079d5061b02639fdf0161cea5314dbbb2ef39ec841f695281f3c7de45f33664e0dd1658f645adc1dd225f781a3fb1634517c556403587b2aecd56dceca9ec19b930cead2b1d303aa056d28bc7\nA = -5e1c869e5dbcc684c245d5c69093bfeaadf388cbf928d33a8ae2148a2b5145937e4f654c5f6a36de1124bad1de8bcc9067fe1f9a44fc6ffe55ce7ed5cd0dbb6337b0e1e96bac1eb2a3606dd97b0bdb975ea59448be50191cc7ea36481ca9fc85c1c3e1c97378dbcd6b355622046888df2ab3d18d805f4d31d464f62a8e630e955beeeb5e00c70242b8f8df708705abbeb95dea3561756298b5f3f7fe16e965294eeeea4546f5e8bacf9d6b4f2136d2e206a87dad1f47\nB = 70225f0cadd328be36ece2172c836405db3fe80ef99ec74fca25406b73a537adf5073f2b550abfc4c0fcc2c2850dace0da9a266768cb4d5ff7fc6c1c248ad74f47592101b61ef96c1302924381abbd96cf49f50c44bf7e0551721a8ae85abdf9925548d13b8c5d1a27be8a40d0f43eec3136bc3035057b75aea779b4262cc66e6bc68da93c218f1920979291105d4b02117d66deb92c3e511aa588b27130202acc9f69521957f79c7e731bbd5461552b9b6b24240dd71ac449be9777\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = a2cb238f326d47f95869e2dcb295eba819a443dcc7c2785461389b58327742702f4c86e47af129f1fd4611cda93631f9333c358a29121d58286333083d13e66f30a9533b77ba3e26089e7eff7baf19bef8054af4e24735525908864ea9c4756b42a69c897003cab7b63cfd9a5927ed562e29845308eb2a55e7f8f03c87a5b7ce\nA = -1aa7ae6f56c38b654b281525b9da953ef366c2b9cffd3042105ed428dc7e5f2f2d53ef90b468bb471753606cc7a3775d86bcd2f4d5119cdde3c487cd39bf31752c5ba297e529c1b8121487e0e1de702156d0166ccaf51888a24fe7b48624eefaec855e2200929c21858676ec9bf4ceed0a832b69efd5065af544e49a3d209b85a77b0953652cbf0aa897527c52c9a98de9ae4c827f762e251478c88d410123625ea52b3478b52f6b9987d42009ae427763357ab53195772\nB = -226630b6fcdb5e274a25066ae2ca2c803549dbb935a97c0d7f6ab2c971d74cf6acd265c9d6815a6b2dd23dcb3c23b390fe8b1bed92b8c64c76c0ce62d5e7ddd7ce445bab0ca905dcfd0f128e5f4ffe966f3903d7ff1c61fe174e373cfe35a6d83249ec40b4a354d46fa1c90682efe468e895ea3da710838c262e8a47752dc6e7a79fe20051f51180173b58e0aa37b22eb8efee5b6dc264459ce4d135f430cb15afbf8c53f0de894bd2aca1f7ea32b4209a22a075f7b3b18e86f778a9e47\nM = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48\n\nModMul = 9ea62ef634\nA = 55cc58c9d8\nB = 6b49179821\nM = f753311ac9\n\nModMul = e9ab3a2aa60edd30108\nA = 5134a36c2bad180dd5bf\nB = 2ba6485656d041690666\nM = 9b9cc4409e86c8b0fbbf\n\nModMul = 621f9b797e866028b7bd1ff828bf29\nA = a202338dffe171c99434d84f3\nB = fb71eee7045b3e3ab5dd809dd\nM = b3e6e8d53b7249df670e3c59c55d33\n\nModMul = 808d463d06b7b7f98e3cb2783e2196c349d62672\nA = c669426a92d3cb5b316e2b5b9\nB = ccaea3874008dcc92450d8b2f\nM = b04dd2bb325baed1940cd000e8cb2d786009ccd5\n\nModMul = 872164b92b9426b237858c4cdafe1694f96b0e0e4c19e894a0\nA = c3255cb24a813e27c3dc410f0\nB = b144f39e7c2d33605ba7bee16\nM = f3639f4dfb782f3107eb402fabb5fc878903acb5e02e129077\n\nModMul = 6124d7d171\nA = 235b938139\nB = 3a56a22a28\nM = 83eb4af4e5\n\nModMul = 9c006f56095d442ba98c\nA = 207e14237c42e3764e5e\nB = 8a495a26872432fa8e33\nM = d0cf2b8ae5c67d6736b9\n\nModMul = 97387cfaef652932a230c82de59cac\nA = 82ae0fc5e943af5bb8c4adebb\nB = db1279be12d59ba3a9c036a61\nM = aa36dc1d13390169cd54d711eb511b\n\nModMul = 32ee73c98da657464c6fed4274df20b099689e00\nA = 9baf08248ee24bcb17714e420\nB = a7f0428147bfe098666180749\nM = ce0bc198331c9ed1d21f0d498326e8185d3d602d\n\nModMul = a8b3fc0b53df3b92753edecd6fbcc5f4840dad3a44da704e34\nA = b36249e259b303e453757721c\nB = f0c1db50670d92abd93bdc84b\nM = b05cf978bf2dc7e093d7d164e46d547219c480382df32b33d9\n\nModMul = 2663b741ff\nA = 58c8e7f7f6\nB = c84681fc87\nM = e0a50dcb45\n\nModMul = 21af3c0b42328f41b81e\nA = 1f79f5b5bf78c9700d\nB = 5bd1734ba0f0e59c2a25\nM = 9ff3fdfb5c089244f327\n\nModMul = cbc280b5106c2c36cb31ad7e7c986c\nA = cadf6482b769e83ce7f7277dd\nB = f9862a06da1a9c89547b76c61\nM = cc36144c88139ce921d2fd1740bc4b\n\nModMul = 3813f2fabe016e19fd8e70687ff473651a5fbb4b\nA = 9c51a5bacb5d9f055a9ac2962\nB = bfed5625b21b4e82d1f105a0b\nM = a47977acad7c5deeb683ccd265cb30cb193f22a9\n\nModMul = 76ff291a02715fc87ebfb3e99153c04e53358dbd7beae43478\nA = 997c4a7b537d9500d73a205a4\nB = c679ce666af284a459ae5a26e\nM = d0d0fd4922953941acad8beb65c00603b19eb44fb8ca51e3c9\n\nModMul = 1a90c92fdb\nA = 94fa7bb475\nB = 564b0a3339\nM = a1501bdc75\n\nModMul = 5e7ae5470686bad7996a\nA = c725797912c6c5f30d94\nB = 3a7f4c99ee3f5fa9582c\nM = cc50c8b7408f09a74973\n\nModMul = 72a15b13bcd1b63747342a6be8f0f2\nA = c33357af48a2df569e3c11ce6\nB = a4b4c5c14d7796adab54b6cae\nM = e22a0fdca62a37f4c8a61c96a429b9\n\nModMul = 31e179bfbf65b0695dde36a4fb72d131830dcdd6\nA = ce8d3adab8cbf15c332c0b289\nB = 9333f94eeb7d7a86b82becc51\nM = a532a76bd5cff409b580d54d12ef75ad8179b381\n\nModMul = 8f4b8a585415adff3a7bc35fa88891ba31e4a82672c664fb14\nA = 9a2b56a54bd0727ab4be57ff2\nB = edf1781b4296567990773005a\nM = c5a7c3b97ba00d6f174a019c6d37eda52036c528f351bef0f1\n\nModMul = 917bcdb402\nA = 55c7dbd314\nB = 997b29ef79\nM = af5b4cbd0f\n\nModMul = 660c4bb2b771f523a4fd\nA = 43fe52461d5139620a11\nB = 1f8ec4b67de1db54ddda\nM = d0458e215b7e6903d96f\n\nModMul = 7aeff02c143e4426fcbcf32bd1277b\nA = a2671586369a990dde7829f36\nB = c7ff67937c900daccc0ab1d8c\nM = 8ad9c1d4d3cce681d1ae27c27982df\n\nModMul = 4b153d57433f0f7276674d3484e9bd0d25227d07\nA = aea36cf51dd2ce06c66b7a407\nB = 80c9fe5bb0afd2bf8b3644f96\nM = 8cc22a67ed7e5a7a2322aaa09ec2be94998494f9\n\nModMul = 7f8447dd983b113f04c6288f9539e53a2e9cddbca8b2fefcc0\nA = f67636b03821c8f13f21217a5\nB = 8473a29f4ae33f", + "36a0d2c6dc0\nM = b829af37b557c3ddbb5257c8b19144b90708a45a274d6655f5\n\nModMul = 17fe4644a2\nA = 912611576f\nB = 7a10d36b80\nM = c5fa605133\n\nModMul = 8159b23d4fd697b4fd35\nA = be2d646e76494439e60\nB = 60fa770d05ebc69772b2\nM = a6e7c940cd749925a85b\n\nModMul = 7c412dad5c9fff91357bf181caf2bf\nA = 80f476ed5acae75b34ed54c52\nB = fb818e2bdab3b5f4bd84db3d0\nM = d0339f7ee41337d8462d1a9c207d1d\n\nModMul = 70432c749da4ade2c38237545ebfe6c4c6a92f6b\nA = ee9c92de52210e61adaa6eb4a\nB = 8ab55a85b1abab62d33e75fe3\nM = cd3faa6de4cb62fece4c3f94492d457834a6a041\n\nModMul = 9fef1c18778a8691c5e71c0b5208e82778e9bfb632da0b7e28\nA = bd162c90bed25e84dd5b6b77c\nB = d887ee03020c5df356f091db6\nM = a2c2d45fe9decd93a0ca3edab8fee46d27ba23fad9b5294d5f\n\nModMul = 958951bd0f\nA = 12bd0d3375\nB = 668bb65b4e\nM = 9c617dfaad\n\nModMul = 8a109ebc9cbf86613e43\nA = a3e7019f1bbc35689a77\nB = 3189ecd3fd4ffd0229ef\nM = ddadc50600dff2abc1af\n\nModMul = 2b4d9f85a398c852b3a0cc82524619\nA = c244fd157267f707319ba6c6d\nB = 8a07018a748992429bbdbf326\nM = bf3813fb54f749ea5627f59ce30e07\n\nModMul = 28cab7d574e6dc56a6a622f8a7523cbb8dcc5e0f\nA = c9909dcfd3a59a3cfa538b267\nB = 8bbf89cd5a4e24adc2d8c646b\nM = c8f02682b9d480ea98faaca53b747ced33ed0419\n\nModMul = 69b2dfb3f1d8dbb13e9e479f38edcc427d5968acb7751a226a\nA = 8019266c548982a520ab48eff\nB = d33c3e3b13576dcdb3ffaa796\nM = e6255103732475604df7c6f7ef7e6b49a8ef9e2b0c717925a1\n\nModMul = 3eaa4c99fd\nA = 6fc42faa85\nB = dd0b4e318e\nM = fd7f22301b\n\nModMul = 56b6b811ced3433755cb\nA = 145573d17cb0c996c69\nB = 9d3297d5ccc184896822\nM = dcfb3b383506239e83e1\n\nModMul = 34315b6bc6d3690c28060485ae331f\nA = b963a26973894cfb42fcb2d22\nB = e8523304bbcdff1a0ed4141bb\nM = d7a379aeac7d8cf94f19e7924d35d1\n\nModMul = 2ec9466e8b3357496f07e37ba24d36a237883846\nA = a75f3904e564997695b6707eb\nB = f9f47bd779834dc1f5fba0654\nM = b3ae5abed45d09c4dc5abcadc3ac9abebe1949ed\n\nModMul = 88b4d86b2c1e1bd780e8d2499c2221e05fab4f9b7047c2a044\nA = a38eceb9c551f0e69a544072c\nB = d5f8e7c2d534b2b8985bfd213\nM = ff81809b84fb8eed3508ad891d3d8208249d8a902a12d6acf7\n\nModMul = 172f2e2e22\nA = 1584ff1055\nB = 2e0aee014d\nM = b904cb0bc9\n\nModMul = 122c10d3200270b9eaa1\nA = 86fd189e62a6dc1e4ba0\nB = 5235635f7b0336f5f235\nM = c93da97d0e95fb63dc4d\n\nModMul = 3e461e10ac4eb749512097fbf76616\nA = cf4ce10cbca07164f3812f89c\nB = b7e4639c233fbb0f923fb5104\nM = 949647857e1406871593fad5c30101\n\nModMul = 88117b59d9fed79dd6aaf083ee938215a995a221\nA = 94c888795567d434123d441a7\nB = c60ca79e61a352e34e0f78bee\nM = d2553a7c5dccd639a3927697a2e1af03845f2f25\n\nModMul = bc5f0076a8c2f6cc8f4e61540d2d6f6d6b13b775b363dcd71c\nA = c170eaddca5295d6ec6272dc2\nB = f94a5685ced7661df2efbd34e\nM = fa6bc46aa05033af72aa42793e9174af2e3ba38992f33572fd\n\nModMul = 1110cdbe5b\nA = 5db02b38f3\nB = 3369537903\nM = a8863f7979\n\nModMul = 90fcc5f3a346d3d4ea4c\nA = b93373680ea0feeb31d8\nB = 37f9dfaf0e180be64bd5\nM = d595cc29237d1c19e2db\n\nModMul = 8623a9997e514cf3c1d06c33c14053\nA = b396f5ede6212f1fdfc7e7b77\nB = 81a1ddc18306f2d2e84030148\nM = a6be32a91b34857842255ef8b1aafd\n\nModMul = 63f8f0254df06356f5cab8941b77619ad58025ed\nA = 806b2627b08d987438f920bae\nB = 83297039f4aa8efc1a185fea3\nM = bb8a7e7c19be02c25cf5682a0eee655fcd5b69a5\n\nModMul = 697238dbe3d395e81f20c9fcc8db30c234a1f75f3b2bc27438\nA = 930b04224bc097ac1d8bae8be\nB = b79496a80e45212c4663e5b64\nM = 8ff7e19d967d317c255380411898d73e3786269f09079f19f1\n\nModMul = cd93b5b8b1\nA = 47a51b2d5a\nB = 86d6ba5155\nM = efb0ad3643\n\nModMul = 2037821ea789118bde0a\nA = a92215dcae19be637ff\nB = 93b9a3664a406737958f\nM = 9df360b69ed26f610253\n\nModMul = 3bf11785d28ceb668dc55b870faf7b\nA = bc8758854dc48e057cb6210de\nB = f03ca689620a77ecd8a6f0de3\nM = f3ff0747d6e5f34a0ba4200f579259\n\nModMul = 7b30b44f75ed12f54136858ce4fe77d00e0952cf\nA = 993cd09f3e46423a8ba2053df\nB = feabee384158032dd013dc08d\nM = cd0b21388cb2033b1e792ec4078334df70b6c8f9\n\nModMul = 8ce1e17972f1a9d2e9437d0c5219354728a5f31337808d7650\nA = 90e5d18b017118177ffb080da\nB = f8e7e09032574f6c66e623ec8\nM = da795e6ef63ff7dc4baef5c327022ccf65d44e3c4e24823f11\n\nModMul = 8fcd412054\nA = 2e7f9b1a\nB = 6283de2c9a\nM = 9bff560ae7\n\nModMul = 57d0d3b79f1e2f3632fc\nA = 2f8cc403de5af54cfa39\nB = 3b798c3ead52878dfb2f\nM = 805e6cbde400d4b4bc9b\n\nModMul = 23331614e88633af879201f568c359\nA = f21f19da4b20980979a645dac\nB = ea752050b79883dcd69222536\nM = aed3faf4c88f7c4afe257c5ed90599\n\nModMul = 56dcf9ae1c787e773774df3c8762babb4675a212\nA = 9accf901fa599da05fa6ab5ff\nB = f7f6b9b1d7bae06237532e39f\nM = b5bcd776bb2eb0805ade3c8b47e883962d3cbdf5\n\nModMul = 61d0ee0786963906a028a1df01f836841ab6d39d88ca2717c0\nA = 8e57680f213d088ff1a1e7db3\nB = afebecc9943b0093f87022940\nM = b6201f68a45265d7e9183c3255feb4c110c05dadbcb13881bb\n\nModMul = 143ae78a29\nA = 334abb952a\nB = 74203e7a50\nM = c9535a9505\n\nModMul = 897a2b57e69f5a1469ea\nA = 1ec8ca0ea4fed52bdbbf\nB = 3a6273cab05e478a57b8\nM = dcb33163a8ea42c1ae6d\n\nModMul = 4a2c10e90e2d37111db79a44d3e31b\nA = a90e7bbd63fc4af6de83029ee\nB = cf09c3dd50b41afc7045e057b\nM = 8ab85d47e4270116a64f97dc4f0f15\n\nModMul = 70f94276c9d85fd3f71edfaad6051456f754da85\nA = fa3e9ff6e1aa1fb78e51711cb\nB = b115ed197c50b7ec4040ca255\nM = ad63f69ef1346e7549ba71c13b24b279f53bc9bd\n\nModMul = 861e7ef401866f815b983ba18a612913ecc20a67016d79cfac\nA = fc41a9ce06e882942f751be7a\nB = 881c05a51d1ba8134d126a48e\nM = b12200b39526c33b70e8aa23ebc400dea0d4d8fe42be103d5f\n\nModMul = 4e0051898a\nA = 2a06523f70\nB = 651b5044f0\nM = 9da4eb09b5\n\nModMul = cc8274c88d6affc3742f\nA = 9ccf0133f9628532f4f6\nB = c1d80907057be7a67b01\nM = d6e76e362da831f32685\n\nModMul = 568f15bed5c4405be9dd04673a9c46\nA = dd6029c3196feb6da7f0f4a48\nB = a5f6745f2cb64913d1d3236d8\nM = f62f02c9b9ca8993e3be9a02b444bf\n\nModMul = a629452d5ed19df040eca26eaca37d82c0fb1d8f\nA = 963c51a9415b03e85ccb09f25\nB = b1cffe333afe44311cb968ffe\nM = ab2128698d498e8d75455033cfbbf4487535773f\n\nModMul = 814030123025d287aaa8b826792999d72f2d589e0c7f7f3dbf\nA = c3b33f391e78bee97ceddf313\nB = a9136f3af450fdeb245eff425\nM = b6aa9c517eaecb70781e597b907583bbb569e970d229235a35\n\nModMul = 8735bd486d\nA = 563e15c52a\nB = 31293264e1\nM = 92f4b193df\n\nModMul = a541f69ca163b288dd0e\nA = a608b48c1dcaa18424b2\nB = 891b0b296e911068b00c\nM = d4140921f4b2c84f1eb1\n\nModMul = adc1b7cf65967b013d046866b4ed9d\nA = e97941448f65060cf63ecd486\nB = ca68936f76cb87a8fbdd37311\nM = ebbca2482fb82eeca2866057cf1179\n\nModMul = 44aa9f0dd58d4510a7364e130698b34eda23a632\nA = c11f83f01bb964ffac93a2e30\nB = e05ee40eea39f4538d735193d\nM = b5e8b511738979dc740a6a1f7291cf4561787be7\n\nModMul = 8b16b82f064f471983c7154abc9f9ba355111bacb90400372a\nA = acff8da571e1c96810bf95707\nB = cdd23e5504cc26d0c34a62b06\nM = f38902a99190ae0b5ef26849a6e943d651925666fea271fee7\n\nModMul = 193f453197\nA = 8cb3078675\nB = a8fb003a87\nM = b60ff22f4b\n\nModMul = 849c26c8cf5cae426a80\nA = 5d1e3d2b4d038a0a34be\nB = 34f70325565bf0523314\nM = cbc189f9a732cad8f425\n\nModMul = 9a4e64ff530c53a4c6c5b6b5021920\nA = f53b81723cf74f520a61e614e\nB = 9d8ac2e6b839143fdd079a2ff\nM = a115375435151798f3644bede9d863\n\nModMul = aac303a4623e80158af1cb3331965cc8e3184edd\nA = cce0a88606ff962fdc37e72c9\nB = 9840a500a2051625c517104db\nM = b99dafdbd91ec3c05791031df5e193c03d6a441d\n\nModMul = a31401dfa761bbe82b66b5f094151865b18a4ba75bb9b3dedf\nA = e6f48c027284856aaf3b96425\nB = b4c326f72a6a22fd4b93ba5b3\nM = e57d9608ac6e5b129b2c014958bfc59137f63838b1ba88a4ab\n\nModMul = 8b0929adbf\nA = 61fdf77ac0\nB = 8892f05400\nM = f12b3766eb\n\nModMul = 91b57f353307b173679d\nA = 33f8e73752072b4b5cfa\nB = b4c730f79f4f2c07945d\nM = d41be1d8d2e5753e3ae9\n\nModMul = af04c564adfeb120bc4770bc8c650c\nA = af151333b3d4cd1d29fd801db\nB = 9ccaac44ff91be11b30bdcdd0\nM = e0bd6e70d5f5ce08fbbfd48d43101f\n\nModMul = 1b8d623796a5065d9e993a53a9587a0fdbea1bbd\nA = a2fd08df2d4eab0cd6d29e213\nB = 92c9d26ae7c215b52199ee28b\nM = cd529f4cfa46f3bd3e7fadf167fdc02f6f881da3\n\nModMul = 4a8573dd8dc50a4fa39f3579d3869745eb8c1153ca508deefd\nA = 855f941d085305725da617f5d\nB = 8f09b7d2c36e0340523da5421\nM = fd8caa05edeaa81beefa01957eed97a981ab34bdeb6d8c704b\n\nModMul = 2d278e089\nA = 59d20a1716\nB = 8e2a58bc75\nM = b3d61ef699\n\nModMul = 2f937ce359d0f6cedd1\nA = 1019d11d26040ffd5b1d\nB = 7cdb6252087423d43e08\nM = e8f537323004447e669f\n\nModMul = 6567332e25af83089f7458786ab0ca\nA = bf9565e9f8a098894447b58fb\nB = fc867626f268c24cc0ab7bf8b\nM = 930f39183353363dcd822933a438ef\n\nModMul = 3692e73ad1d91ddc19cad3808eba2c5fc88e2bf9\nA = d0a42ce512629f0ffd233a9aa\nB = 97f6d3c4c655c7353a62d6ac4\nM = eac2ea84851f880214b8f40f881a2", + "e56a6ba6f2d\n\nModMul = 81df390c9e51b30bd639db15adb464c7cb1d011cb5e260be58\nA = c237eb242c40960861c938c08\nB = ab2f481f0d768eebd90d2574b\nM = 8697d7a28a5f42c9a7b31949b8b568f861142f44fe66c6cd3f\n\nModMul = c952f9aef\nA = 81973bbcb3\nB = 28ddee3bf7\nM = c4a40993c9\n\nModMul = 241dd53d93f7bdbbb2ee\nA = 2136eda4495c45c9f96c\nB = e74c4baa8ca3f6b7cd5b\nM = fff4594e7a5f0a1d3e15\n\nModMul = 5f861ed8b0aa835761613e6c869cfd\nA = bfc5c1572086079f5f5d18d1b\nB = 95902e14923c8010b7e905178\nM = a819c6c109d623f9b845aa23712c9b\n\nModMul = 5b8ab089c4e4c6804e48a2bc1d218718b3a32598\nA = fbe65d3852224a812c432672a\nB = d57a3f38da966d2471d70a048\nM = b9e6a626d3ad026d14248fc90c882bedd64a1f13\n\nModMul = 761438baf5b02dc095b7040e082da7b167c2b9ace956284ed\nA = fd91701ed2151f8e994bf4ee1\nB = 88b66e735b76972bccd9db182\nM = 8008b2d1274456aa68dc627b1ec3e1762c6ed2d660c64a1a55\n\nModMul = cb743c97a1\nA = 9c69ca9b60\nB = 7488f48f5\nM = d67040ed0d\n\nModMul = 931b2bee1bc30725a31\nA = 650f567b544ce02303d4\nB = 5858da30dd1fae88a675\nM = 91ce30234bb29fb9e833\n\nModMul = 5b4f262cec958a20390b5e568ccdaf\nA = f7e240e8a077e8e87506db2f1\nB = f8653fe64e3bd414782f51634\nM = fdb8225eefc1620648737d31dfe1f7\n\nModMul = 4c011d1ddfa30c901793cc6ce74db47584cebbd1\nA = eda8e9a9ea3cdae17bd50b1b4\nB = 992e8ef4a45593e4ceff67876\nM = 95e2f120cfcefbada1058af6c8853cbebedd5763\n\nModMul = 6e99aa5b8107399848cf24fbd88ed6350efb68d737e505b466\nA = ca6c51ba2f410d09bf71d60fe\nB = 8bdfa8fe5ef3b2ad02bc63c4d\nM = 84daecf412b8c50ad6dfdb546c3eb783dcc6f32003eda914bb\n\nModMul = 536175913582e73c1002083cb0cfce5471d4193a5b717881e60abfe927c829d\nA = 9b474b6f7d7f11dfbeb7a0724694f2daf9ccbaf2ec13269b5ae3329e8df95f7833baa68324509dcddfb5afa1d14f2dafc55e2c225475f16fb396beecc7a66dee\nB = d74a5081f00af2361c3537642c06cd47aae7e366741c9b4785e185af8b328acf3e2ed71e3b9a4b6fd49d956eef76740b3c6ec5850a90e7e444dfeaa7214c5eca\nM = 5efaeebe212752b28b5441a5d0b2600190504467c6359e9ab26320ee72cffcb\n\nModMul = 6161cceee2b74e7965a926fdf5344ddf8cc41994d72154a8b6014c18cf71634\nA = e7d6b74a1af0834aaf93e09a6488340b661449ba2bbc73d775e7d828163813ddbcd82719351879a6d67ab6b518011e1db43a3d620d1f24403917691d15ed6f90\nB = 3ecc8fd3103fe52a7e73ec4be4e60b69584bd886a030f017b482bde9d4b0b964ba8471cb32b3e9bd49864d9028a22d6b6b46be0451bb4222c3987b74a509f8fc\nM = 7c3e3b8b1a6110da82674aaf88c288cef4cfddf22e7c9b75640fd67fa5fad59\n\nModMul = 2acd55bdcccd55882eff0bb262bb62f78bff8e932aefc9d32f54d5d4e9b8bd76\nA = c221d1f0d1b7efe7e078dd01bed773f8876fa324b3fe91985d47d343e7f3878b457dae2f9ae68971245278a1d23cb541c56b94dd9ac43a9fbe28a46efc627651\nB = 49f94c19ff7ce990637c3d2019ed66f7e6dbb1442b04a4593cc480521b991cb1b878f8c31903240f89e34336d9e6785433617e729b71adcbef622a683357e035\nM = 43760c71742e9cf22cae6fc262c008b7f1b97a78c8063957b74aa4cd370c1eeb\n\nModMul = 504c11e38284a30e3647c1ddfaed94503d833bcecdff05e749422ad1d9442540\nA = 3fbabe2d65f443e7db0a6f332330ecc4d1d40e14fcb510499552020405cafcf10a50a5ee47cf60fd8c22a22b3f753b4167c213851f32109babe4b5c298d6c4cf\nB = 62e5b0f887dcb1f1794bae7dad46a066f810cf5f82a1eea99207b5f0fb0ae9084c5e62cc97b2672b1cf4cc1400a19bdcb093c97404876b584a6482931e7ba9b7\nM = d79fab3eb31189268b2a0689cafdaa0826f07d432591e8aa8bd3c7cdce1470a7\n\nModMul = 13a6431c57ddf0ed3979412ba8454a0dd9a2694a0dd76453aae63366c46e41db\nA = 7e1fd0bd9ab0aa75b264475604aea09f24239f94847ce2549d43b71890c0549938d167adebc7890d3c492b5874da7bf18d895ccaf1803b9776820598928b407c\nB = 5e54e5185bc86f16177f1354a57d36ac2980def141b389e4bfda134fae7c158009ccc61ef66281905128b6297f876662104ead2315024f129c56eaa387f80b4d\nM = 182572149b860615dd853f37f7d51a35e85f5e4a4249a60fde58dc68e0dd7401\n\nModMul = 145a44566bd75103083b7556a822ea6008ed3a6a1bf135b68fcf87a294c09b4\nA = a195e4315caa8cc0707063c7359c28139d4dfffb57eb726156336e13227ad9766ea1fc99152893ebb194fecfc153d47cb927a633217328f05e4d8782aeb89d04\nB = a97ae97dc7e9a224cab94ecedc08d0cbf7a012dc5209b1e1e8b5b843fcf61e65db3457d6085545a633be47b742e8237cc716357ff5bce9b00e23671ec1d049a8\nM = 29b060ee2aef7e43e02163d279ce49259127198adf462d13aa195c7dccf573a1\n\nModMul = b00740cef7791692d45f5a7110f3eeb260638f19f87c9245436fc0422de90658\nA = e6b97c11ad44fd451d168d65d1691d2220db8c3b6c8436d59f4c1366aac52558d0d6b61f5d6966460a4a31085fac711e5a09af5563d938963555d4730982eb0\nB = 6805eab5a4da534f07def6d2c320a6cbdfe4831fc2163dfcef740607b3181d8647bfae8f8c16237c1c1c5d14b9e3417132f81b3a7db4b7fc11927aab30dca590\nM = f975a94fa62b4c0e68df5c3ac5917d18927c0a6d9cf39c26f6ed97a81cedf227\n\nModMul = dc04b6ba2eb1e34ea8942a50d1d0c5479dd22109895796ffdc9cd32b53d4764\nA = 7fd3310af09a67e0684dcd8e3b4b651c7c13c2f6a0a47b59a7f5cd8bd80854d1d4fe02eaa61843d6bb2b87f99d8ec4842864681eaf056538ffff610c231e1d\nB = 15f1661c59ee9f93400073e18a91503a93d47537d2da5cf5e4bc69ccc87b07bed171a95f1c5eaa9c7d7ab207ab3f1f7634c5d16e706969e869364207f61d84bf\nM = 22e2856f4c2b6c01448d4aef74aaaee3a14e9660b5b277200f2e67464ecadfab\n\nModMul = 19299c9e960ce15087e9fbd66f95cafe82546431b92d70db1de87c3425c1bef2\nA = 8e3abb1f24e1f91496db99be9409f57f67cfb6e0e33d603a2a31e1309f1d0bbdc413c3e4fbb5e3d923f683afa9942b9b9fad6a6e558b2297889fff47ccef7d23\nB = dbdf5940dcd68127d476badbd5a2f3018aa4d8db79f81337ddfcb108637110b934e946d3284ec09d5255605ad72424f1894238ee4f7964dffc27fad838532321\nM = ab6b4e3d3909512f5d1d62a30c1ab8dd5e584cadbce9dffd12fe203f8936ee93\n\nModMul = 4f88ad4e30e6e8e38cba0452d98d4a3547c680f16308692e33e5577772658764\nA = 5137697bf48982edd869e4a42f3cb858bf65ad5b25d1c0e8b75d054460d0944ecb5a6924721c5728964d84231c7ae808f556837aefb23fe3ad36aec9f5f60f20\nB = c79554304620f8116b9a8bb56f6a23620e9fd504f7163f732e1e6367d25c6ff98cb01d16faf3e018dec6a067d1204a6aa95470598ce757bcfbc3ab4f5d8ec88\nM = 9ba20dd78923d8ef82897ac46a509cf22c9b7986a4facf42e5416bfe3576a735\n\nModMul = 985a4d2a7431e09fcad03e6a3f926582dbc0aedc588f17aa5db40c2d3566233\nA = 908bff40440aaeee6c90b6312dc017c3bdae884a9074e02b26f01be1f018390e01f0d111f99a06c16e20538df8000d4066cd4bb3628da88a3a5cc240cfac719f\nB = 6ebfe9fe53909876784f9d6e5dcca4cfa9463fbd8426c5bb8890ae84c2fad119615fe1e1f2ee5fa544a5ac713ed1da8c1e04f282f1f1b9fba4b4c4bd9db20538\nM = c66842e0a11ed6ad1e8f192ea97f5f244536cfc5234c7fdae1ff905123c72793\n\nModMul = 133d7b31537b627da2c042217cd28625437c28c3e06258427d9a4384046a1f4\nA = afb695e3e40347f60a500e01fba4df1c1f2fd4ed79e3f65913d82369f79d80db6b3978e6351c70c148f572b9c0c2b1efeefa605251b3156d9b66d240467e550f\nB = 8855046dcf50f80f278227d5260b9be53ca2e4a1cfe1afce4d35b11d0fa17a36a8bee8126e13bbb318d476becad5a935e9d160fa481e1437b292bdc169dc7d45\nM = 3eae4f0d6c7e1fb9de1a4c160404a8767783c7f839fe27a543f5c389c679d47\n\nModMul = 7f4576a315bad5c7fbb1616e8b26c5b34ca6f701b9b1adf0485fec181c41dee9\nA = bc2baf0153a4598f6b5f488c43b2546cadfaca2c1931b919f98ba71835a8fe78886da1fea25b194e60ed6f9e0ad23c988b64af9278155c1722dcf4983a1566c2\nB = d8374d91fd3c523ecdd6bdd265c9a8958dd222f9f0e25454fd683bd86d7900a273b56f1f47e033c46527e32c721094ce6bc927d25fac05d7fa6db4d7a6773c94\nM = 9975d8e7f2a4d9d1ff8d442b93ff269a83fee43a18bbfa8c2ccd7ca5fac3a8d3\n\nModMul = 57ebfb39605d4fa6ef5fd03bd8e4fd685664297c29b7ad75a40b133e15fc5ae9\nA = efed8e442154b1eb6c75775cc23e01fa65c9c361e222da123d07daad3039f305e7102edff23b65c333f0caae4f7929857c3169f4ae47c9f0fd920c38eb42bf2f\nB = db05415ea90269a74b0919ff772c148c0eeb2ff9dea76a6e73e82eb86bc76fb42308b55ef83a769a91d23b7840d5d2f5129f15279dfab7cd8d63778acf202f26\nM = 7704390c4b1da86d51ff817003e5451d601a5352296e339e5da219ec5a330479\n\nModMul = 40b6b0d44cf8a5ca7f4fd03dd6e1e2a11f74f3911dcd8727e57db8d65cd490d\nA = 6500f3cf686eec4e1f243616ac0ea8e8d11ddbade490b86baf231e7b2fd55968ee14b6bb7badf8c898874099831976af46bcbfbfaea10d49aa803c6e51238e2\nB = 1fac744fa1e26e789639e049679d0e2eb57336279f09555e10210e7143199a3df5fbf5294edc386ac762fa3a3b0b4bc28945adf21a8af747a29018bf76d3710a\nM = 5c0781a87b84ecb4362b09c623d511de53c085671dd4f08e9a551685b55ddfd1\n\nModMul = 6b778ae9822221e6a8376379e0032d7edb14d7b5e32a7310897b54d1d5626113\nA = c4a5737a9496129a136753f8c2e52bbd2660f2d3fafe4ed702900b01c14e506d13e3bbeab19b357e5ba9fce8a4fc3dcc469406a16248d6fb53862781fd9d55e4\nB = 444e5a673eeb37fd3b4f6b6f5133b0f46c2ea532e1953da4a0e144407a8e2534c5ff40cc9af7756e5aff9df57d938fcedaffb868dcf4e458b36f506ed7fe0ce5\nM = 7f5978c0c066132a9bdcb00727bb802b72777b9e8e4265f76b80cfdc3a788817\n\nModMul = 5c717e5dd25abe60f761d6f9326ed056416add4c1384682d87b7ff12e112f855\nA = 4351965a421c75c5b4c251861e53316a300ed7983e27e17f9308420f0d2cb11e9c476294fcd9042a525bc1a044bb442d1d9f853c", + "9e07245170e0e2711010cd1c\nB = 4e1046647c362c8f9c414be54075b4e9d151c6fa0c3da40d90e6042625947ca2c9f20cfbcfdab8666dac5a15f6cda9d47b09f654131fc5addc07e382c9639323\nM = a6c789884c66c7f028099e0367b3ed86871277bf070c541ee12fc02fcb6181d7\n\nModMul = 4452688244f542125168853f1d444f96ab0f82903bb12a97e59f0db633edfd6\nA = 9fd1cc81981bff977244c044146918057ad06d3cc26edfb8fb4118ee02b959d45555f9507ffeb23c3688e29ccdfe5f583fa3761f6727573542bee8ab5f5b600d\nB = 856e6a03b5c93fc19deea51b3bfe42c810c5bcf9ffbd08e2625eb209baf6a4e24943a3c090d89c1f70aea9f0128e511fe92e03715d917168c1e1ca77a3a8731f\nM = 2c245d407a78903ef2b279ddbe32106e6333b6f44cabf87b8641b047c79ea06b\n\nModMul = 375f8474ee47df6b9a038512002e56cddd374d69c69719d8d369232c64a839e2\nA = add40f1dd6d4a2414b17f0c628eed9a8f082f3ad1f34ec41935fa86b34d4505b22ea80c062386a9ed63f95c67e55c686f837bddf8f4da791f98b08c02f32d4b2\nB = dab1caaa11d5a208b7a6b7a1d6482a4859daaba5e3a77b1b1020e8ae62a664953dfddd0b47d40526e7a3c6a5363c6d41dd9f529fd8b58d5d31bb67e745cb71b3\nM = 4f506313a4f49873a405f2e5a6e9cfae9cd5e9f67b5ef900153366570e28a955\n\nModMul = 36fb0733a26902f0f8f11625305a3c94fcdfffe294eb6ccba110aa628a314df\nA = 52ee1498bd6a1677db801ae2eab4951345a1fcf8fe7d38e3f28dbc27fae508d87c9958e02a375ff4891b88ee916b96331e7cc082615faa028f6d541b5ce37876\nB = 9343cfa074f50c20e8472f8f7c4a7d330aa30ee417ed8027a4c956e84cc5cb31d5411c14796d9325fceef79a51b5d8a4c89182ca273ab633e6a7b22a27352300\nM = 9d7c334aa33634f9f313b71b42476a3b627a6c5bb8ac1d07a8d732d5c087bd9\n\nModMul = 4a377267508eb045e00cea66a417112dac07545304bbeac6315625275b7cbfad\nA = 19616a82b75b08499d4b1f869df2db8f71398672f3f97ffc6177a4a5aa913605ce8a6ab5f778cac508f0b3f2aa680b01ccdc57c0fdd6cd678a2ff2dcd7f01f3c\nB = a5643a9a9fe3be4134082daae4ee7dfd85d9452beee856fd939d3be9788b6bebcf3571c67ec481ff9b20f70d23e82e2171b1d0ddf0a9435b40115d32aedb6811\nM = ea0477e7f1a02cb6c21171066f3dab69d4e24429043b0f049de660fc80e51937\n\nModMul = 7952dfdb91252658430e365adeefd9093740de92cfc9dd3d92294f2dab6ca0b6\nA = 8e6cd7639b7c134b53e6ae6ac5f51268da83ed09e8e96d65e4bb130dcdbbab9e48226ddba6efe93faa510bde8ee92f2a641774c4272b5a2f88024b77a2cfa110\nB = fe4e8109a49b16b96871e384564cc096277dad4e1bbca8e5feb33f140a4fb800c8f3096b1bc7042bccf249aede88e6055c0db609f94e214b1251eda494be724b\nM = aa46853682af960824140c35d145a6dcff6283b2c59994b30ecf9b8def41a025\n\nModMul = 1aacec7f7e66b0cf4eb2dfda9d8d3fbf4eb8e928cbbc967d13e3e38612f0346d\nA = b0fd7a936b0908ba6fa797e4b855d673ff85d665ef3a345e560e2c0049becf5c25b6c0068dd617ab47a8fd151939ea0631f86806ddd40e557933c0e880fcdd0b\nB = 105c87fe2b1bf0be5405ca0d530beda1780f0045e892d7810f8a8abbe890f0a19de66497cba55bf38e190c52992467c22a320c38a4bd167f774ed812f1271d5a\nM = ac4f0a2b22df691331ded955a5d0e7d1910d7920a59d4a87636b2635397b7335\n\nModMul = 2c25d180156fa7d2fc20c9bd6d9ff0b111c9ad76ada0784e2f8fa0bd06413f66\nA = 2aa4a0a73df11f4e60956619d0b35eaef45730d619f9b920298e6d369b9861f6411de28a34af038f288d7a3d6a35b10c8082b8ad0fb275a8f67c6832ac46ba9\nB = fae1d50b72feb25da2581829409391bf289cd9f730c99d265b5b2d63889381cde4adbf85c3998c2478f2866526b8f64605d75765edd09b78ea45337207d173\nM = 65c9d79a09a820adbc9beb152bef387c1439147ed50cef872d36a69f1c7d5fe1\n\nModMul = 56ec8624fc199e7b4e68358f88f1a99f1d4d02577b8c6f7e28e4ccfdd981f995\nA = b0a0f9d05d144d2ef257c1e63a7127a3b8e0d8b64ff8f6447618560593574b5c5da6258b274efc28da0defd988bef1efca0f481f809665a78954b36741d668bd\nB = 10901b9dbf0016cbcc671da75a75b7a6ec6a66dd17b53a97344864b08f037098537380bfb0137b6becfc36a75206686d16bc4eb8fd54299494374e3f383d9b10\nM = 73882376ca850c125ce9f20c291e550ee48f0eb0d571109ab08c22d6719496e9\n\nModMul = acceebe131aa34ff21b3235f045bccc8a8f762dca20c1dd1ef6eb461ea971c6c\nA = a7714b249eb0f0cbe3e6fa0b04e895fcf14c404876197defafc6b57026ae7e5e993fc47c1819581adc03860ce07f2b7877a3f6d0912c0cbc659f5f6170a1cb2b\nB = b7278ecd154ef5243ad973ead291ea186acb63e09977e644a6a9fde195d1a33993fc47c1819581adc03860ce07f2b7877a3f6d0912c0cbc659f5f6170a1cb2b\nM = c52ae49e1a4b21ec392b76844ad559653b7b9f67a58b3bba6c2ce250017eab09\n\nModMul = 62b5b04dc84bb4ee04934c03ef361bc6e59b42144dc117b9f7771525c67c3688\nA = 2b65f491caf0b5cd9c66c859fbcadaec7213e6b848884638791b1620d6e4bc9dde087af0e7329d3b15a45df2d43ebde61b053ad7f63917aa922d58b4f3222620\nB = c1bfcdb34b0766be980540dc3256b9ee4158310fad2c43cf24bfafca08ee185647043f5842a9d9eda224449259341b7c50998086434528d47661bf5762a7ab5f\nM = f73398c32191b436d14a0b76c6069b1d61395568753c832dd0c707780a232dc9\n\nModMul = 5613c8fb0721bd3f605089def48fb2c38a4862bb387886c1edc1bc37d10f0e15\nA = a3d8b12a2c8f4021ca045a4e4903687dea63ee7e88893b1911aea77efbff00f8f5c7884cbafc71f59fa2636195c2ebee61edbf642923f34d87ba5eb49b06a7ee\nB = 3231829c81b26dcac432b502ce22e126ab564922b1e9818cd3da46edc5ce7df026d0e515809c97bcfdb9666581efbfd364437ba9959dfad099f90472f97c69ec\nM = df8344fa848d1066afe4f8d985cff65441751677dcf3a4e99b40365fc3c978e9\n\nModMul = 30325f7ccbc2c69e11d739ad7132a947c53377aa902ec70b152f3a75e050c244\nA = e4ba620125f58a63fe12fbd3eccdea477d56b120c76d5d1421bebd74e8686b4093f8169070453ccc04b63b173568385313a1d9c841a4aa82a61cb84d4286a941\nB = e87aaa990307855f8e5f2e5509d2ce31dd4b13bb7199cf5fa0593e350326e222efc33a26c69245565d6ebb5a484cfef7d2558f22dea8054d07831d536803d0dd\nM = 43d57108eb0ab9bebaa8ce137628ea825951c6accb9acb7f1e991c93b8563897\n\nModMul = 1975db7b72434ad32c9aee412645f6670b7f4af1f8a424a5031c559d3e18dce6\nA = bd64b1db27fa7da4c92a4ee092f58a2a53ed0f12d009fe13b36d5fd585defe778fafea4a60e8fe567d03e9ba3b72b189e22504ae8ca6aad7c2ac0f44abca2f6\nB = b487d8116198560d6c5b08c7ce63b0acc0c98e6f2a8d709cf4e3a409edd55f64d72fc27a70dc341e280ff5a1b09fe131773d466cb31991d2db23a2a86d225c80\nM = 39d57af763eabe569dac1a103e169e6e3b4375168e41e5c3b961b6e743915923\n\nModMul = 3bbb5bde9e3e240694326571360090e1fc0a4ea7b2311c1e0bd3961f6c159385\nA = 4181ee3bf9a98bcd49eaea243a179cddbf160981efc720685c7be1dfeb5aa552685a2cd46f340e1e1da893b3b460692fa2eaf6c100f24a14f239e45123242d53\nB = 77cd04d86dd5da322af78be54246dd6b7af490d903db1db03cbccde535570b81c6053a84110c07f097540ffe7510320024b7bafb77e9e239761def76092e1d59\nM = f3b9833a303eb540cf8b6cbc3cf16394b1634ef517be57684e42d364d8bec3e5\n\nModMul = 2d8174211f0367233b3a8df7c5bf0066d6aa792be7cdc5e850a477454d5c829f\nA = 1c08cec52d96136fbd9078b7b8db36ab63b86e19dd3dba7b2e3190ff566180e89dfee9423fa4e99be2187eda6aedfa86b9a45eb1e4655257315ae6a280f0a6ee\nB = a8b4bc9647d8df9b7c76cc6d0f2248cdbc41f5da9c061f9864aa8415c9557582cada456cf23cc32d47d1fc1caf19d36b398019aac4734e10f55ce3cad419e5e7\nM = 7eacffe21f88413af94155a2a8e37f70a431a59653738afda04a1bec72d0d9ed\n\n# Regression tests for CVE-2016-7055.\n\nModMul = ccd6f75b5f24b7c5ce2ce755fa89c2450c6a7d96ce8c8791e659eab84577a7695e3b2caa7c980fb23f60634233e9798499c28b0338c1f1a326d0ca89fd41f2fd88b759f317889832966b551a950043ec7a4b6152d3e2cbfb40e88458e70ab783b96f12d271f828d5b39e198ccaf8665411d85026282dbead5d24cd01b6c8a8e9\nA = 7878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878\nB = 095d72c08c097ba488c5e439c655a192eafb6380073d8c2664668eddb4060744e16e57fb4edb9ae10a0cefcdc28a894f689a128379db279d48a2e20849d685939b7803bcf46cebf5c533fb0dd35b080593de5472e3fe5db951b8bff9b4cb8f039cc638a5ee8cdd703719f8000e6a9f63beed5f2fcd52ff293ea05a251bb4ab81\nM = d78af684e71db0c39cff4e64fb9db567132cb9c50cc98009feb820b26f2ded9b91b9b5e2b83ae0ae4eb4e0523ca726bfbe969b89fd754f674ce99118c3f2d1c5d81fdc7c54e02b60262b241d53c040e99e45826eca37a804668e690e1afc1ca42c9a15d84d4954425f0b7642fc0bd9d7b24e2618d2dcc9b729d944badacfddaf\n\nModMul = ccd6f75b5f24b7c5ce2ce755fa89c2450c6a7d96ce8c8791e659eab84577a7695e3b2caa7c980fb23f60634233e9798499c28b0338c1f1a326d0ca89fd41f2fd88b759f317889832966b551a950043ec7a4b6152d3e2cbfb40e88458e70ab783b96f12d271f828d5b39e198ccaf8665411d85026282dbead5d24cd01b6c8a8e9\nA = 095d72c08c097ba488c5e439c655a192eafb6380073d8c2664668eddb4060744e16e57fb4edb9ae10a0cefcdc28a894f689a128379db279d48a2e20849d685939b7803bcf46cebf5c533fb0dd35b080593de5472e3fe5db951b8bff9b4cb8f039cc638a5ee8cdd703719f8000e6a9f63beed5f2fcd52ff293ea05a251bb4ab81\nB = 7878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878", + "787878787878787878787878787878787878787878787878787878\nM = d78af684e71db0c39cff4e64fb9db567132cb9c50cc98009feb820b26f2ded9b91b9b5e2b83ae0ae4eb4e0523ca726bfbe969b89fd754f674ce99118c3f2d1c5d81fdc7c54e02b60262b241d53c040e99e45826eca37a804668e690e1afc1ca42c9a15d84d4954425f0b7642fc0bd9d7b24e2618d2dcc9b729d944badacfddaf\n\n\n# ModSquare tests.\n#\n# These test vectors satisfy A * A = ModSquare (mod M) and 0 <= ModSquare < M.\n\n# Regression test for CVE-2017-3732.\nModSquare = fffffffdfffffd01000009000002f6fffdf403000312000402f3fff5f602fe080a0005fdfafffa00010001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000002000002fefffff7fffffd07000109fdfffef3fffdfd06000405ff00fdfbfffe00010001\nA = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff00000000\nM = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff\n\n\n# ModExp tests.\n#\n# These test vectors satisfy A ^ E = ModExp (mod M) and 0 <= ModExp < M.\n\nModExp = 00\nA = -01\nE = 01\nM = 01\n\nModExp = 01\nA = -02\nE = 01\nM = 03\n\nModExp = 01\nA = -01\nE = 02\nM = 03\n\nModExp = 01\nA = -02\nE = 02\nM = 03\n\nModExp = 00\nA = -03\nE = 02\nM = 03\n\nModExp = 02\nA = -04\nE = 01\nM = 03\n\nModExp = 01\nA = -04\nE = 02\nM = 03\n\n# Regression test for carry propagation bug in sqr8x_reduction.\nModExp = 19324b647d967d644b3219\nA = 050505050505\nE = 02\nM = 414141414141414141414127414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\nModExp = 208f8aa0\nA = 86b49\nE = 2\nM = 30d26ecb\n\nModExp = 27308229\nA = 17591bb\nE = 6\nM = 30d26ecb\n\nModExp = 2bdf498f\nA = 21292626\nE = d\nM = 30d26ecb\n\nModExp = 11317167\nA = 4a655df24\nE = 10\nM = 30d26ecb\n\nModExp = 2e1b88e\nA = da6b761a86\nE = 35\nM = 30d26ecb\n\nModExp = 20a12ec3\nA = ea811\nE = 2\nM = 23bc042f\n\nModExp = c42ced\nA = 1011a6a\nE = 4\nM = 23bc042f\n\nModExp = 4637d79\nA = 28d9a601\nE = 8\nM = 23bc042f\n\nModExp = 20e5669b\nA = 72fe6bc20\nE = 11\nM = 23bc042f\n\nModExp = 142ab9e3\nA = 9a07b9363c\nE = 29\nM = 23bc042f\n\nModExp = 14c64646\nA = 822df\nE = 3\nM = 30915765\n\nModExp = 160e35a2\nA = 15ea542\nE = 5\nM = 30915765\n\nModExp = 2f23a488\nA = 34d2e02e\nE = e\nM = 30915765\n\nModExp = 28e67f93\nA = 636a32703\nE = 14\nM = 30915765\n\nModExp = 29bfeaa5\nA = c8646998e6\nE = 2c\nM = 30915765\n\nModExp = 30959e22\nA = 81dad\nE = 3\nM = 326dd68d\n\nModExp = 1a1da4fa\nA = 116adb9\nE = 5\nM = 326dd68d\n\nModExp = 272bf0d8\nA = 2d21ef08\nE = 8\nM = 326dd68d\n\nModExp = 29f5054b\nA = 76989850a\nE = 16\nM = 326dd68d\n\nModExp = e6c7b77\nA = b88ee70d2a\nE = 3e\nM = 326dd68d\n\nModExp = 369605e1\nA = cf26f\nE = 2\nM = 3ce082eb\n\nModExp = 168a3c5d\nA = 1f82caf\nE = 5\nM = 3ce082eb\n\nModExp = 125c4bb8\nA = 2e9c4c07\nE = 9\nM = 3ce082eb\n\nModExp = 1c5fe761\nA = 523ab37f1\nE = 14\nM = 3ce082eb\n\nModExp = 21703009\nA = dc832165e8\nE = 20\nM = 3ce082eb\n\nModExp = 1228d1e\nA = a5555\nE = 3\nM = 24665b27\n\nModExp = 5226af4\nA = 1077bd6\nE = 4\nM = 24665b27\n\nModExp = 1b14eac1\nA = 2db3a834\nE = f\nM = 24665b27\n\nModExp = 161727bc\nA = 6bd962cb6\nE = 19\nM = 24665b27\n\nModExp = 10d61d0d\nA = c10caed407\nE = 28\nM = 24665b27\n\nModExp = 233da406\nA = b125f\nE = 3\nM = 33509981\n\nModExp = 24032799\nA = 1656b7c\nE = 6\nM = 33509981\n\nModExp = 129ecebe\nA = 2e671504\nE = a\nM = 33509981\n\nModExp = 20c20bac\nA = 4d7a2de44\nE = 1f\nM = 33509981\n\nModExp = 2e3ce9d3\nA = c53b3def4d\nE = 31\nM = 33509981\n\nModExp = 12fadfd6\nA = b4cf8\nE = 2\nM = 36e9d4ae\n\nModExp = 457ac85\nA = 1b1c7e9\nE = 7\nM = 36e9d4ae\n\nModExp = 31debef4\nA = 3a973028\nE = d\nM = 36e9d4ae\n\nModExp = 2333ad93\nA = 552b97c45\nE = 11\nM = 36e9d4ae\n\nModExp = 99ba1fb\nA = 8bfb949cbb\nE = 28\nM = 36e9d4ae\n\nModExp = 27b691de\nA = 93492\nE = 3\nM = 298fdb16\n\nModExp = 3c2b70f\nA = 14e7b0d\nE = 4\nM = 298fdb16\n\nModExp = 1486cda7\nA = 29acff81\nE = c\nM = 298fdb16\n\nModExp = 11725275\nA = 507489205\nE = 13\nM = 298fdb16\n\nModExp = 24d14627\nA = e71c55606d\nE = 35\nM = 298fdb16\n\nModExp = 222b8d14\nA = 9b1a0\nE = 3\nM = 3db59d12\n\nModExp = 3b8bd47d\nA = 13f4e8d\nE = 7\nM = 3db59d12\n\nModExp = 17e72356\nA = 334774ce\nE = a\nM = 3db59d12\n\nModExp = 306447ca\nA = 47079ddd2\nE = 12\nM = 3db59d12\n\nModExp = 90bef3b\nA = a75d62616d\nE = 37\nM = 3db59d12\n\nModExp = 1\nA = cddd44f47e84b3276cc36a5c0d742cc703e61c4756168601fbb1b6eb598c161019562344dd56ab6f603d920a12c360b285e6496a3605a2f8d691c3598233ee9366b5f2692554893bdeb67b7bdaf35ab7273ac593145e26bed82c70ba5793bf4bc5cac4c80b01785d1496beede493806e4f4aa89fd8d41de80dd6d0a3e2742678\nE = 0\nM = c95943186c7567fe8cd1bb4f07e7c659475fd9f38217571af20dfe7e4666d86286bc5b2bb013197f9b1c452c69a95bb7e450cf6e45d46e452282d5d2826978e06c52c7ca204869e8d1b1fac4911e3aef92c7b2d7551ebd8c6fe0365fad49e275cc2949a124385cadc4ace24671c4fe86a849de07c6fafacb312f55e9f3c79dcb\n\nModExp = 0\nA = 0\nE = 8de689aef79eba6b20d7debb8d146541348df2f259dff6c3bfabf5517c8caf0473866a03ddbd03fc354bb00beda35e67f342d684896bf8dbb79238a6929692b1a87f58a2dcba596fe1a0514e3019baffe1b580fc810bd9774c00ab0f37af78619b30f273e3bfb95daac34e74566f84bb8809be7650dec75a20be61b4f904ed4e\nM = c95943186c7567fe8cd1bb4f07e7c659475fd9f38217571af20dfe7e4666d86286bc5b2bb013197f9b1c452c69a95bb7e450cf6e45d46e452282d5d2826978e06c52c7ca204869e8d1b1fac4911e3aef92c7b2d7551ebd8c6fe0365fad49e275cc2949a124385cadc4ace24671c4fe86a849de07c6fafacb312f55e9f3c79dcb\n\nModExp = 5150fb769d5c5d341aaf56639a7bcc77c415fe46439938a2190283409692f29cd080bfe3433005d98d24718a03a3553c8560c5e9c8ed0f53b8945eb18290e1c1a83d919302510f66dd89b58acc2de79ad54b8a30d3e1019d4d222556beefca0821b094ecf104b5e4cfce69d2d520d2abf54f3e393d25ed3d27e8c2e3ca2e5ff9\nA = ead8c5a451541c50cab74de530c89376d9a55c723e0cac3c84b25f0093c08a2961e49ab48966361c42c9f99111587252d98395b76788400d75c66ef208ea2767a28d6f8dc3a859f39c95765d57f139e7fc14f47c908c62df051e7216d379f52028843b4d82ef49133cce8fe671ae179423ac8da5be43b01caaf425cd969300cd\nE = 8de689aef79eba6b20d7debb8d146541348df2f259dff6c3bfabf5517c8caf", + "0473866a03ddbd03fc354bb00beda35e67f342d684896bf8dbb79238a6929692b1a87f58a2dcba596fe1a0514e3019baffe1b580fc810bd9774c00ab0f37af78619b30f273e3bfb95daac34e74566f84bb8809be7650dec75a20be61b4f904ed4e\nM = c95943186c7567fe8cd1bb4f07e7c659475fd9f38217571af20dfe7e4666d86286bc5b2bb013197f9b1c452c69a95bb7e450cf6e45d46e452282d5d2826978e06c52c7ca204869e8d1b1fac4911e3aef92c7b2d7551ebd8c6fe0365fad49e275cc2949a124385cadc4ace24671c4fe86a849de07c6fafacb312f55e9f3c79dcb\n\nModExp = 1\nA = 935561297d1d90255aef891e2e30aa09935409de3d4a5abc340ac9a9b7dce33e9f5ce407f3a67ec30e0dc30481070823f8542463e46828d9cafb672a506d6753688cbad3d2761079f770c726c0b957071a30876c4d448e884b647833befbcd6b582787bf769d63cf55e68c7b869a0b86374f8920516cf5d528f348b6057450a1\nE = 0\nM = dcc24236a1bb94c71d9ec162a6aa4697b932717e82b667cad08b6bd1bbcbddf7cd167b7458de2b0b780486b39574e749d6405f9ede774a021d6b547271523e9e84a6fdd3a98315607ccf93356f54daa9c75e1e311e1672d0dc163be13f9ed6762f7dd301f5b0a1bb2398b608f40ac357ae34fc8a87d4fef3b961cbdb806d9061\n\nModExp = 0\nA = 0\nE = bb552be12c02ae8b9e90c8beb5689ffefe3378d2c30f12a6d14496250ecce30317c642857535a741642c3df689a8d71a276d247ed482b07b50135357da6143ac2f5c74f6c739c5ff6ada21e1ab35439f6445a1019d6b607950bffb0357c6009a2bfc88cd7f4f883dc591d4eb45b1d787e85aba5c10ee4fe05ea47bf556aec94d\nM = dcc24236a1bb94c71d9ec162a6aa4697b932717e82b667cad08b6bd1bbcbddf7cd167b7458de2b0b780486b39574e749d6405f9ede774a021d6b547271523e9e84a6fdd3a98315607ccf93356f54daa9c75e1e311e1672d0dc163be13f9ed6762f7dd301f5b0a1bb2398b608f40ac357ae34fc8a87d4fef3b961cbdb806d9061\n\nModExp = bbad67352704a6321809f742826bf3d1c31c0ad057bf81432abeb30dc9913c896c03e69eb1cde6b78ffcb320c4625bd38ef23a08d6c64dc86aec951b72d74b097e209ce63092959894614e3865a6153ec0ff6fda639e44071a33763f6b18edc1c22094c3f844f04a86d414c4cb618e9812991c61289360c7ba60f190f75038d0\nA = 855144760f2be2f2038d8ff628f03a902ae2e07736f2695ec980f84a1781665ab65e2b4e53d31856f431a32fd58d8a7727acee54cc54a62161b035c0293714ca294e2161ea4a48660bf084b885f504ad23ea338030460310bd19186be9030ab5136f09fe6a9223962bce385aaaf9c39fe6ed6d005fa96163fe15cdfa08fc914d\nE = bb552be12c02ae8b9e90c8beb5689ffefe3378d2c30f12a6d14496250ecce30317c642857535a741642c3df689a8d71a276d247ed482b07b50135357da6143ac2f5c74f6c739c5ff6ada21e1ab35439f6445a1019d6b607950bffb0357c6009a2bfc88cd7f4f883dc591d4eb45b1d787e85aba5c10ee4fe05ea47bf556aec94d\nM = dcc24236a1bb94c71d9ec162a6aa4697b932717e82b667cad08b6bd1bbcbddf7cd167b7458de2b0b780486b39574e749d6405f9ede774a021d6b547271523e9e84a6fdd3a98315607ccf93356f54daa9c75e1e311e1672d0dc163be13f9ed6762f7dd301f5b0a1bb2398b608f40ac357ae34fc8a87d4fef3b961cbdb806d9061\n\nModExp = 1\nA = 9d92629c1ab181c50c31619e8acd0d235a1f5fc7a0bef4d4fd54b4f1968d45921f8522efe88e69c6c14c576c564592b9feb00d1554b88b038934eaf4a8ce81a2582732387490181ef158360c8b2d9ccb326ffe043f776a50cb8202837f08ca743b562eefa007150ab7012c341b16248478d4775c02ad71ea13d5e82b71e2d600\nE = 0\nM = cd607549668469b792f495c141e500871880b0611c8004293a561ec7f9ab6561f8a9b90872742386adafb5cd1890e8204ae12aec529cca0a9e382c96439137f09de9973b12c8492c62847e107deabb7dd946ffbb9d0ac73b462c481092bd65326a17f21d8d6527c47a5dba50aaa20c7048b8788a49eb3ea5f29bd5cfce24eb3b\n\nModExp = 0\nA = 0\nE = 9f43dcb641f3ecf4dbc97450f2bdf3b7ec6a2f3e8e96bb1df2bf34b8d2d78e1a9018d04d960ffd0e932cfc60d3b9b923e3f9f29b3f3d61cae3a9f7245078143475c7fcb896ff200f7d94c4f2708bb42750e37c185a31c876814e4f06a00771707654e1da2fb69c16b6500b16385e3b933e2276ad3569977473f699b1c7926c3b\nM = cd607549668469b792f495c141e500871880b0611c8004293a561ec7f9ab6561f8a9b90872742386adafb5cd1890e8204ae12aec529cca0a9e382c96439137f09de9973b12c8492c62847e107deabb7dd946ffbb9d0ac73b462c481092bd65326a17f21d8d6527c47a5dba50aaa20c7048b8788a49eb3ea5f29bd5cfce24eb3b\n\nModExp = 24eaead5b57883c2f454928f8edd470a344bfe07a953194f7d635d705ef13ddfc64140c8ad6f363d4c828e7c7891a6b6d4df37335de4552c319dafd1c06d1f743240082a3535df4da1475d3eea3fead20e40815fd5a0876c881c162ab65a1eda494280c258901ca953d1d039a998bf0e9aa09273bbef4865f3054663b72d75ff\nA = a31618b4532f53729ba22efb2221432fab1dbb70853d6a1159b42fd19fc949965c709b209de106a652aa422d88922ce51dae47f7f6deaf0055202e13db79ee84fc3d3c6f4c003ef96597c49d6895fa53c22ac9e4819f7048146b5272f6279424fdb389819a0b251c823c76f4bebf4f1246de455aafe82a0d34454f5039e90839\nE = 9f43dcb641f3ecf4dbc97450f2bdf3b7ec6a2f3e8e96bb1df2bf34b8d2d78e1a9018d04d960ffd0e932cfc60d3b9b923e3f9f29b3f3d61cae3a9f7245078143475c7fcb896ff200f7d94c4f2708bb42750e37c185a31c876814e4f06a00771707654e1da2fb69c16b6500b16385e3b933e2276ad3569977473f699b1c7926c3b\nM = cd607549668469b792f495c141e500871880b0611c8004293a561ec7f9ab6561f8a9b90872742386adafb5cd1890e8204ae12aec529cca0a9e382c96439137f09de9973b12c8492c62847e107deabb7dd946ffbb9d0ac73b462c481092bd65326a17f21d8d6527c47a5dba50aaa20c7048b8788a49eb3ea5f29bd5cfce24eb3b\n\nModExp = 1\nA = a8558e7f455b27c0c46d7d0862eb409cdefbeca945e0284b5bf425b7ac0f3d316bc365594cc1639decffc621214d61479bc75135120d4ac09ea8b742ad7ec1822091b62b1c6f564fe5e2f4f5b7def92cbaaa9a898549207ab01b91c2324fbd306a87f7d6379b6fb6493c5fca76729767f136120da9c90bdc7d364f7d242d5acc\nE = 0\nM = 88f3c87ac5e3272a21b8a858da640d6939fb8113a95412c38663a0f352686d69a5d7927e60b484b9fcb8ef12978fe25ff2ebc9b61c5450e04222ef20ba3cbbdc5ec45581ce0f58e10be7bb9de7fa08752303a7a1db23b2ac9c6692ec63bf09ecd6639e06c5491ba568ea886620d71da32d329615f0e1443a75d09ae35b8a2d7f\n\nModExp = 0\nA = 0\nE = a5524b41dfc6b570df1d8f6633ac7777c1131abe3a99c6166b0d29d3b8883c41b00a0c53cdd6f42820bf05c810b6ec53e77a8c1b9344ea0c91d4f410a2f204c369f3db33bf8c88217fc2cf802a9d9bce8119242d8e781875b85431be170076498c0963574ee423551aec9557e2fc672ab1ab5d0cbb1c400535df9481e7934d8f\nM = 88f3c87ac5e3272a21b8a858da640d6939fb8113a95412c38663a0f352686d69a5d7927e60b484b9fcb8ef12978fe25ff2ebc9b61c5450e04222ef20ba3cbbdc5ec45581ce0f58e10be7bb9de7fa08752303a7a1db23b2ac9c6692ec63bf09ecd6639e06c5491ba568ea886620d71da32d329615f0e1443a75d09ae35b8a2d7f\n\nModExp = 292f0b39ca0f1c850b1a00cffd2d54924fcd5fc7e7504c9d593e6c0ff74760b1f4bdd81679fe06c50248336f3108c593fa111072ee87d0fcc89a63243a1dc89044503663eee9bc18f51c3e0193d9108303e12ac90ff78f6ec752a4386af09c42db524a7cbe9a3d4fcccd56c34d283bcc9debc17158b5fe8df0c1888a9841bf8f\nA = b4fde2908745ff92cc5826a27dcfdda09e8fffee681844fa4c7f1354d946d5d84e0e0c7a4a4cb20943d9c73dd707ca47d796945d6f6b55933b615e2c522f5dfc33e0652917b4809bab86f4fa56b32b746c177764895492d0a6a699812b2827fe701d40ef7effd78ea8efe1cac15ff74a295a09614bf04cae1a5017872ba22efe\nE = a5524b41dfc6b570df1d8f6633ac7777c1131abe3a99c6166b0d29d3b8883c41b00a0c53cdd6f42820bf05c810b6ec53e77a8c1b9344ea0c91d4f410a2f204c369f3db33bf8c88217fc2cf802a9d9bce8119242d8e781875b85431be170076498c0963574ee423551aec9557e2fc672ab1ab5d0cbb1c400535df9481e7934d8f\nM = 88f3c87ac5e3272a21b8a858da640d6939fb8113a95412c38663a0f352686d69a5d7927e60b484b9fcb8ef12978fe25ff2ebc9b61c5450e04222ef20ba3cbbdc5ec45581ce0f58e10be7bb9de7fa08752303a7a1db23b2ac9c6692ec63bf09ecd6639e06c5491ba568ea886620d71da32d329615f0e1443a75d09ae35b8a2d7f\n\nModExp = 1\nA = e2845c572b46496ac158a731f612fd40ef626fa7134755c25b1b7614f4d7b29164e6142ddb7985e4c7ebc575855ff901e95927fe98a5aea2ad3a4720c75782323bea1518b2c57790f44efd9411be4e95b3896bad1e73c59658290b309e5a7eb5ef8be08125063e57336b80f17eacee88966d12bbaaa15a25929c82e027cf696f\nE = 0\nM = cf0dee80177869a532f0c6c3a0bda3aad79bdb6b70b6c227b32d75c26e394a90c1f2a6c2bb841ba9f6556b15654a79d8b1dd0c90709a093497bf40be0807cdbb378a74de5893c25067224d3ea8d37387ed6c4a981138853cb89caa9ce6cd0f6a1e95de24d558e90960f93844db4d01e372650350d45a9d34a36042b4d4b9e78d\n\nModExp = 0\nA = 0\nE = a55703a72ca3f6074b939ed3d748196a684a3c8e411c2b39a9beb98993b6eb7ea3fa16f41bc5b5c3710b91c0fc74a8072793052f872f61695db3a2df872eaa427a110f1a8d568c85d58bd350d0df8eced7a10be80f7567360c1a8047b9c44aa2967cd0d9dd2caea2c1492358c2db4f0214da343fdf2e34272865dc5c63be2ae4\nM = cf0dee80177869a532f0c6c3a0bda3aad79bdb6b70b6c227b32d75c26e394a90c1f2a6c2bb841ba9f6556b15654a79d8b1dd0c90709a093497bf40be0807cdbb378a74de5893c25067224d3ea8d37387ed6c4a981138853cb89caa9ce6cd0f6a1e95de24d558e90960f93844db4d01e372650350d45a9d34a36042b4d4b9e78d\n\nModExp = c90e4c69df92e26549b016950b59080947f5403430698e128477782480dd70be96bed2b9042dd8c708eb432e02710555b97af11ce6fa9b53395022851c32d1f53f04237fb0763563b440ca6e81a50d909d907d9c26b7d3c420dbf88f7dadd488666848135f8cdc608dcfb0691989289fb54379c2e84c262f9765f68c012ca1b9", + "\nA = 882ea1b9b6c79a3b1bdfd284658cb6227ad825e0178cab713c7413c2ec34f03cfaec470c4f5c521f5e9899a2123878ff0f5b36a4196c08ad1b04d03746c4bfb5d126f5eefbfe172627d6732710a8ac8890cedbd4fdef69a19f2b3253a5aa0e5dd5484f72d59b17bdd1dad3db209a3ab839368ed3975069685911d7b35e41a9e6\nE = a55703a72ca3f6074b939ed3d748196a684a3c8e411c2b39a9beb98993b6eb7ea3fa16f41bc5b5c3710b91c0fc74a8072793052f872f61695db3a2df872eaa427a110f1a8d568c85d58bd350d0df8eced7a10be80f7567360c1a8047b9c44aa2967cd0d9dd2caea2c1492358c2db4f0214da343fdf2e34272865dc5c63be2ae4\nM = cf0dee80177869a532f0c6c3a0bda3aad79bdb6b70b6c227b32d75c26e394a90c1f2a6c2bb841ba9f6556b15654a79d8b1dd0c90709a093497bf40be0807cdbb378a74de5893c25067224d3ea8d37387ed6c4a981138853cb89caa9ce6cd0f6a1e95de24d558e90960f93844db4d01e372650350d45a9d34a36042b4d4b9e78d\n\nModExp = 1\nA = d7a99e65b8af86b1c51d851f0447e43cd4f343cb0ada7236283e69aa7ebd383826acc9809e5dbc4002d0f2430022cb026458189db3805ce2de1142a31ba71a6c064ab51f0059eb4b931b8bcbaef023c38d57aa5f3e14f5df77e547fc028702071b58bd57338be1e1e4f98d3553484e4de359cefa29c5f58d3fa5d823f389dbef\nE = 0\nM = 8315dacf124bd473c578946347e83d1b20c750a7d9533d6215591be40bc78bcca77821f8c8f95375bbd6372515ada63d22bed2fa49bd6fabb0040c538d08db25b09d2fda02a93ab086cd1c27df93c37ee9c6a0527d089179b8f92b5dc3acf5ef1c75906fb80b03f5c2442a7a4088640f66376575ecfa4c697c1a571397ee5a0d\n\nModExp = 0\nA = 0\nE = 95793fe33696f53e37498b2b65aaf27079e27acf1da97dda2c3e0803e8a02139f574e04ee03f7d1ddd029f528e3f3644515ad6f10f0beac2767f23d9cd8a8b9b6c6e376e36b64a0ae2711d7d31a5a75011641935b503110edbefe9f0ff2da27b5c5f6bb8cc151fdc86f67191bb99160c6cacc86ca368d5bdfafd3f3ff5161b1e\nM = 8315dacf124bd473c578946347e83d1b20c750a7d9533d6215591be40bc78bcca77821f8c8f95375bbd6372515ada63d22bed2fa49bd6fabb0040c538d08db25b09d2fda02a93ab086cd1c27df93c37ee9c6a0527d089179b8f92b5dc3acf5ef1c75906fb80b03f5c2442a7a4088640f66376575ecfa4c697c1a571397ee5a0d\n\nModExp = 186c50ae259aa0fd31859cbcfea534e626a254de33956d5d719334bb32e7cf37cf199a21f079a5b90497228994d05efe19ccd8c769cd81f896286e8ae557cacd1630a928c629ecdfece29ab3697794aa707734e007318fa7029b050bb09ebbe6986187c6ca843f55266d275620b3f0fec0ad5f847ce8b314d929d128b33a249e\nA = 9d5e345793faddca9867f23eeddf6816c1e837f7a2cf96fa077212514acb6be87ac01a237d8f2f1d07d27a8ddd1b0ae0d97e1bda4f205a89435017284cdedea3e407b1b940d6f52112b6359b3e86e4c83074b17c210ae2c8856b42b169b4a7a6dfa65b368a7959496cf9bb1ee93d019dbd79101830e3f5ed08604ab90890b914\nE = 95793fe33696f53e37498b2b65aaf27079e27acf1da97dda2c3e0803e8a02139f574e04ee03f7d1ddd029f528e3f3644515ad6f10f0beac2767f23d9cd8a8b9b6c6e376e36b64a0ae2711d7d31a5a75011641935b503110edbefe9f0ff2da27b5c5f6bb8cc151fdc86f67191bb99160c6cacc86ca368d5bdfafd3f3ff5161b1e\nM = 8315dacf124bd473c578946347e83d1b20c750a7d9533d6215591be40bc78bcca77821f8c8f95375bbd6372515ada63d22bed2fa49bd6fabb0040c538d08db25b09d2fda02a93ab086cd1c27df93c37ee9c6a0527d089179b8f92b5dc3acf5ef1c75906fb80b03f5c2442a7a4088640f66376575ecfa4c697c1a571397ee5a0d\n\nModExp = 1\nA = e6a079bdf7b0638d50b183475e9ddfd5cbdebfb29f5fae8e9be402a0bd36085737b556492ea7fb4b1000ae9ce59db66098129b757cfb29224275fdaa46b8b7eb18a93ca7d3e446dc38c734b683d7ba7927b008d993aab01f44239d3c76be76d1503908e9b5e73b36c43ae0771368b01f39c042693bd92c4fc50810f059e1b332\nE = 0\nM = 81dd561d5d5327fc5ed7c9236b5fb21ef713c6d5e36264ba65ccc801b8eb107b714aad65bb503bb1f4721c0a6f97e5ab89300f049f42a4616ae43d29c089c286687484d18629c1be1b5befbdd0b3cfc86b1d28add89df4cc5e68dac3f56f2490a9068ca9c634ec258c030ec5023baa9133fd2af32fd1112895f9da549d410247\n\nModExp = 0\nA = 0\nE = f0460c5ca9b3a5c2d1b93c201d020dc43e1c81d1daba432e2cd310902da23eb81a5172b0b357484eb8fa2c04c270893b8198c8ad35453405dadaf05195b3aeb5ec0ccacecb4b6227ca43b27b97e240a4148a472670ed60f304302f757495fd4a91af0fe09800db0c3043a6ae213bee6703ad80523ca433d99ca0eab1e0b7c929\nM = 81dd561d5d5327fc5ed7c9236b5fb21ef713c6d5e36264ba65ccc801b8eb107b714aad65bb503bb1f4721c0a6f97e5ab89300f049f42a4616ae43d29c089c286687484d18629c1be1b5befbdd0b3cfc86b1d28add89df4cc5e68dac3f56f2490a9068ca9c634ec258c030ec5023baa9133fd2af32fd1112895f9da549d410247\n\nModExp = 60719701a2dc0bcde281a93ce0b8421d1a718adee43c1b5d9fe9e697a48ab3db4f9f33c73cff305ab6b6c300c149b05c6b289dce4580860dc56bc59de81ac074ecebdc65aa3ca040b44e5b3c80ddba1658d78b9abbc4c77e5f171f5582e70ab4438a8e1e2f062d618c4ad09c70c73b5b5fbc9f8f0bbdf1d530a933b705f85af8\nA = e1b400cd3b1f2f1c6b437adfdb970d2c8108f1b39bdbb13582179552011c6c97cba6bff2c463212b7f62776aa3e3aff9f175990e79395e819c144350b0a23d61638d500ecc97726b098e1af334aece23a851c718612442c04eb7b3805a24cc8f5b90042145eb5e5d6a408092832b6bbeb8a621419a9282fb5c075f41c7f1fdc1\nE = f0460c5ca9b3a5c2d1b93c201d020dc43e1c81d1daba432e2cd310902da23eb81a5172b0b357484eb8fa2c04c270893b8198c8ad35453405dadaf05195b3aeb5ec0ccacecb4b6227ca43b27b97e240a4148a472670ed60f304302f757495fd4a91af0fe09800db0c3043a6ae213bee6703ad80523ca433d99ca0eab1e0b7c929\nM = 81dd561d5d5327fc5ed7c9236b5fb21ef713c6d5e36264ba65ccc801b8eb107b714aad65bb503bb1f4721c0a6f97e5ab89300f049f42a4616ae43d29c089c286687484d18629c1be1b5befbdd0b3cfc86b1d28add89df4cc5e68dac3f56f2490a9068ca9c634ec258c030ec5023baa9133fd2af32fd1112895f9da549d410247\n\nModExp = 1\nA = 9dd1e6f2d3ff24096b54e0ebf0f10e283e484a1cbafc0431adda1296ed97692f3ba99440fd4f67c96dd8bab850e1123361c99362df9ea205ff8e90d1b329459f54730992d5a360e46fcc5f5a909e691abb9a06613d6991bd7c2aa609f0d7b441d7ded0c07b8c394327672d38a905efb2d76aa3be5bb14d0c002aa37e287aee79\nE = 0\nM = fda6f9d8588e3614f5a68ce867a5619f6ddbb8d64450ff402e1c4f1a08b518f79dca21e5983c207c5b7324c16895a1e9f1282fc6cf60b0645f6b02b652ed5b129e67c939e854ab492dec30ea878c3edde10a4b7d1d14c57100c6cbcc5fc085a0d7308715ed132fb917251919c727487fedb66500d5610b0014a43419acfbb92f\n\nModExp = 0\nA = 0\nE = 8622c37631e428402343dccf8ed09d47b3f4201e95058910289a62707c3ce0b7113c390056cc4796cc9893e471b12cb3f63f900f3356ffd25c8b2fed6f6a7fba2c684eb241ca706c76cecbf72473d8a58c02338e40714b5610465cc319f0a529a7aa3898d9e638b247abd1380c6e8f7fa210c9f1a1a2164db6db83a6bba79436\nM = fda6f9d8588e3614f5a68ce867a5619f6ddbb8d64450ff402e1c4f1a08b518f79dca21e5983c207c5b7324c16895a1e9f1282fc6cf60b0645f6b02b652ed5b129e67c939e854ab492dec30ea878c3edde10a4b7d1d14c57100c6cbcc5fc085a0d7308715ed132fb917251919c727487fedb66500d5610b0014a43419acfbb92f\n\nModExp = 86fb0b8dc161c41de2adb0f3ddcc8ad49c1efd729a52793a3ac987d4011c9c1dadb18657dca718df75c8ddcc49d60f152c46ab85ae9076ee7bfd405679a7da3a5195a1bbfd7d2b998c7b135ea91f8c445cbafe1276fa502c2a85477716829a2e0d24ba02623405a3654bed8f355bc7ccdb67c3f9a01e249e358b60d7699498a9\nA = 816610e6018ca47074d55750dd16a281019dbf95dc752605794cbb8ea8d75775317ce685737859728320b529fb3b4414b40bf3a93d08d8994a21ae54682cc1c357eb529837a7b0129a0843eebd9341c9bee3a8ae30475bdbff517e885a0c9f2b6a680643bd981efb53bf9dd49f3dc3cb757e117895fb34b1b4336d9bf8384558\nE = 8622c37631e428402343dccf8ed09d47b3f4201e95058910289a62707c3ce0b7113c390056cc4796cc9893e471b12cb3f63f900f3356ffd25c8b2fed6f6a7fba2c684eb241ca706c76cecbf72473d8a58c02338e40714b5610465cc319f0a529a7aa3898d9e638b247abd1380c6e8f7fa210c9f1a1a2164db6db83a6bba79436\nM = fda6f9d8588e3614f5a68ce867a5619f6ddbb8d64450ff402e1c4f1a08b518f79dca21e5983c207c5b7324c16895a1e9f1282fc6cf60b0645f6b02b652ed5b129e67c939e854ab492dec30ea878c3edde10a4b7d1d14c57100c6cbcc5fc085a0d7308715ed132fb917251919c727487fedb66500d5610b0014a43419acfbb92f\n\nModExp = 1\nA = 9edfce4691f46eadaa2043c7b1092b831ed50f3429f0bca02f985c0b77c686d951be84d772ae4b55f08935bed6e3206c8441574f215736b5c1c1b7595b3b789b55cf56db83741b10144d6767ba2b97b23a5e83504c60e06ab22834b0145655aa0463108317a379cbfc8a93de8a66925a999b8b02bf88dd85fb9898cefe9c95c8\nE = 0\nM = dcb68f6aa530ae9b31d078e2e82670adcc98228e7cf1aa59f81e66426ef14b1591b833d889463564c75b5fd5551ea295a0da581dd80f62c7008ff0f26a1c9f4f756431d48198af157149be8698336b306b0a8b8635d3fc2c4c2194ecc4d2af31ca1892917cc2e621d702eaaeed0d9a0c3dca575451eb8bc5487e313988cae745\n\nModExp = 0\nA = 0\nE = a3be10ef04535fca6784e5dbf3733d677dedd50fabbc3a860496628950b4747a328c2ce0d903cbe1e700f0af30f59fb917202257815097a2b516df5d0a82642faeffdfc3b7883766c78fc4be5901ebef891a9ca27f3bcf00960729e659bb3fddd54a19ce628e95ab86e4c7a168588bc9f67b05dd21a583acd8dc36e615945648\nM = dcb68f6aa530ae9b31d078e2e82670adcc98228e7cf1aa59f81e66426ef14b1591b833d889463564c75b5fd5551ea295a0da581dd80f62c7008ff0f26a1c9f4f756431d48198af157149be8698336b306b0a8b8635d3fc2c4c2194ecc4d2af31ca1", + "892917cc2e621d702eaaeed0d9a0c3dca575451eb8bc5487e313988cae745\n\nModExp = 442866609915aa6f1bae9dfb59e721e1b63f42c0f75fbf0a88344120fbbd7aacf15208fb7c9d8bb8477d553cbd826d7e685ad764a8423e81c2131c040ee83a03cab8d5ce50866a941b48c78e9f1330794d908562d4141cfbf26e8c80c69551339eec41e37e2b37b54330f7bd75748f8d26d56ab9eb3b0c127540484c6445a7fa\nA = 8ff65e2cbcbcd8697cc3ce9a26855d6422ac7eb4e66500648c08be697e005cc3c854a54cfab91d43489cd60be8b516a9b3c9688e5e009a1689c6b164a133859a5464ef422c86344fef42cc477c9df27768377c126a066d1b62f593b7f6d6e906feaee16addb7cfbfc043d741b7dc81a87c17f167b7b8ef1b1fb3dfd1eb14102d\nE = a3be10ef04535fca6784e5dbf3733d677dedd50fabbc3a860496628950b4747a328c2ce0d903cbe1e700f0af30f59fb917202257815097a2b516df5d0a82642faeffdfc3b7883766c78fc4be5901ebef891a9ca27f3bcf00960729e659bb3fddd54a19ce628e95ab86e4c7a168588bc9f67b05dd21a583acd8dc36e615945648\nM = dcb68f6aa530ae9b31d078e2e82670adcc98228e7cf1aa59f81e66426ef14b1591b833d889463564c75b5fd5551ea295a0da581dd80f62c7008ff0f26a1c9f4f756431d48198af157149be8698336b306b0a8b8635d3fc2c4c2194ecc4d2af31ca1892917cc2e621d702eaaeed0d9a0c3dca575451eb8bc5487e313988cae745\n\nModExp = 1\nA = fe9f77f7d0475e00ec964c0effb9b8e079c32e376ce77a9c40ce4018c3df44a77b4f294d9565502b2b79accb30cb58dda6d15e1543b6d4a53296543ed11c7f51baab60283ef03fae37dfeacb431392487ec2839551a933895c4dbf18844f7b375d3e6f558d3c39993cea1bbf7fb743a6a07bd3753c03eb7298811476d7f3ff1d\nE = 0\nM = e7a96cf6fa930f73c8bdc2726bbba246001a9d27f39cc2b978c99dc6f15af0e8aaf26b565302f1112e607e2df4066948baba931b89cd9bbdea2072e05b9a4968fdf282c43d997987c3a3a0434e925a679ac81f316b7a7b724b79be3d6888b66f4512759bf66cfaaa88b9513dd27a44aaea75437268a014c4eb50ba2e50093511\n\nModExp = 0\nA = 0\nE = a0bc148ed50a9b54036bb8fa1f214979052ebd47db8b347af3bb03b806bb457b468ba34781f8a25f289a7a90af4903dc14809a166df2f4c3527de2ea6911cb1afb9071a4afbb522a7d50634d66fd584c73f32d05217dc9f7f16394c68a692a953492ca85f89cc11da95fd8cac6231647923ced48a1b3b0ee68c010286d452836\nM = e7a96cf6fa930f73c8bdc2726bbba246001a9d27f39cc2b978c99dc6f15af0e8aaf26b565302f1112e607e2df4066948baba931b89cd9bbdea2072e05b9a4968fdf282c43d997987c3a3a0434e925a679ac81f316b7a7b724b79be3d6888b66f4512759bf66cfaaa88b9513dd27a44aaea75437268a014c4eb50ba2e50093511\n\nModExp = 91fd879d02f95a9f40fcd1037726f73892caf84e9b43b4aa4126d9062a0d22c464e7af2fbd91aa849612d99d9519b724a7fb1cb018fffdcff321d883ab2519953c9f174f09dd8f13ac87339887385966eb4a94842276637b2c36c0a5036b1d3bbea438bc6efd4b4851c7ec06879d60694df894717569bcd31c4b13d80df6cbca\nA = cdec5edc1cb3ea974342b85aabc0f9385cf877ca328747d40dd4d297623ad69ab6582653faeed5aef225208305135cfbee32e066cb43e18afacea3a32acc8aabbc49617ac33e741651924ae56dd6aa044a12a1ea50fef573b5befb2f4b21b9cf83ab2aaa6fd153580a0761666ade8fb94f202a3c3dc4f33297eabb4564374168\nE = a0bc148ed50a9b54036bb8fa1f214979052ebd47db8b347af3bb03b806bb457b468ba34781f8a25f289a7a90af4903dc14809a166df2f4c3527de2ea6911cb1afb9071a4afbb522a7d50634d66fd584c73f32d05217dc9f7f16394c68a692a953492ca85f89cc11da95fd8cac6231647923ced48a1b3b0ee68c010286d452836\nM = e7a96cf6fa930f73c8bdc2726bbba246001a9d27f39cc2b978c99dc6f15af0e8aaf26b565302f1112e607e2df4066948baba931b89cd9bbdea2072e05b9a4968fdf282c43d997987c3a3a0434e925a679ac81f316b7a7b724b79be3d6888b66f4512759bf66cfaaa88b9513dd27a44aaea75437268a014c4eb50ba2e50093511\n\n# Craft inputs whose Montgomery representation is 1, i.e., shorter than M, in\n# order to test the const time precomputation scattering/gathering.\n\nModExp = 9442d2eca2905ad796383947b14ddfcc341f5be8fec079135c36f6f0d9b8b2212f43e08bf29c46167ff0fe16b247cd365df4417d96cc31c94db1cf44b73b0ee3ebcc4920d9b0d003b68e49c1df91e61bc7758a8a1d2d6192ff4e1590b1a792f8be3a1b83db3ad9667d14398d873faf5d885ec3a2bef955026fae6dbf64daea2b\nA = 3a4b4c57e62c5e9d1a9065191f8268fed9d5f6f424d071acef66f0662b8210f4c029ed991512e40c9c912043c816d2c4c5b53fa0e5c253e16808aad4225130dafbbb89fd4f30cdfc1c2f2179b636a7ddc4be579795820b4b9377637bd8a21a0ef5a90d0e0f865321eee23d9be2a3b7320b4012d02941b892df2c40bdc85c1898\nE = a2c56ea1362511cac0301918e15a9afe7d37edd438a5c3538d258ea01f0a6df758de07111e868b3ad8fc89b629b4955d78a1b3af902be1806410ddde25ccc6a196ba5949395c1ad5d8725b18815dc1cd5ac1c7dd17773f571e3f2e628255af14476e0494be23a4a4dfd18e23142f33d7a59c236fec61660e360d9676a747c69f\nM = ede35a3a7afac817d413373a2032abbc067b1493f709ae6e1282ee5469743391d891b904938857168802b7872d3cd7ac18ab249a9e540a86f970b1d0f310a4cc29df1cc9d4063d98c554f1a32f4ca5eba3523cdfb142e0fc609907c7a92bb0187009d97ec471db3545f42dd5fd29c07b7816085d09477ba31fcf90084660116d\n\nModExp = a7f5844fa9e7202d4b70ee252c9846e63d3d091b0387768ded872cec53458e19df0d9b4960226e269b8ca5dd4c4eda423a67b6dbb48235c08c12c6c7c78db47287756d3ed9cecb9232f7d18d5d80b9676cb68ba4a290c97e220beb1a069976b5e6022a4c1e5ddbeec86b62dda24ffea1deda37695c9f61a8817218e6370c0679\nA = 7d6d0cc947ceb949cdc4e9e1044f5deca5bb05a491041e0d85bc4b92a0944a57c72845fad91e59010c61ad1712bd2f612d53a846a044632262a9f2e3373b062fde2484e0c165ff947f2469f743ab6e2e5e13c640fc4029b1c9213eb8473c674e7f9e95a4a5c5636d4656c1e696962340d77b322daba47d6fc894f2a2cd9e0afc\nE = b78012afe806e2344d004c739c97324256850980ac97d88c4ed9a838517639ca112e235978d21a176c33f5a68703aba0f2a05501bbe3fc8d49a000fbf530cdb431581dfaf8683cb15a2aee5e239cbc542827100da3b47babf4a16ca7c588aff9912e674abb449e0b767a15e415f4e7f2bbd6380d7131da3df8d49b13bfd35ce3\nM = b72d5c55bd2998472f1965e75a51be6155c1ba04656da8f66bcb34db36a7b1db66a89d1d05b1bde10206acf85be7b474ab689220faf1bb52ab39d8dc00512dd4e26df1179c11b973e1274db85a88c7cc2a17113abdffe58cb930ddc5f3ccc4d68b4e65c913730509f7ce5656e8bbaba9b1be177ab9f766678f018fea05da9cdf\n\nModExp = 465ff295786a88496828fdc763e9292d557957544e9322b7996807b87fdbfa7a11614bffeec557ca831c4824c8e4ca3b1a1c7f3f4f95ec3fd6a86b73bb13d78b73af2b3c7e76954d0cc03bcb0cd606867ebb3765a8b3d0108cbe4f343a14016be9c33f6d200f0dc547e7d6b02bfab1e79dcdf9c9835a814cc6c855a12ebeb66d\nA = 89ad02bea3e9ab839a6e23f20122409daba52c68e1e893034b30d321c0305434a6af940015e3fa5ca9c35230da34beeb1ed4fbce6c1da3a8bfe3f3ae172276c1d1723b47ee61e6f8fcfdafad102d6f7ee2a79f510c7edb93096205a40a6c9e665b88b18f39a979e2e61286d939952a6f02fe8148b7515bb25f4252337cb6e60d\nE = cbd6ac628cc7afa3c61bee9c22a06a395087ec1811fe9681b55216700c435996c815e7cec8aaa90016dd2382d0306a5414630124e14f3d396a4ba02ee17851bf720f1607ff813e4bbddf01338983db12f59bd6371a738eee3eeb716f21051d6174d2d6c77602942b9edaac18d4b3a723096c0d00dd23a8a605c585022f311560\nM = fa7a3e40364c8a8d0f14f0213a3f3e035222ca0ea19d46d10ba41580e5dd2805c8a133f3856d7d5d97f922ea540e5eb0d10ad04dfdbb74f518f58da0099a6fc2b3f3def92985176e07fc78aff2faebccca10a429794e5f15ff92f75fe90f527c60ddea8093a9078c703c372ca09f7aeb27ade02f3595308c61dd9c44e62fd101\n\nModExp = cf08bf00261402102e9fe03f3074471dcf0e9b3c96d4d1503f099f24ec85e1901b023e9e048c1ad042244f5f70b38b25a99f4c0a7b57d5844bb0d0137367f45f4ce2cc7746105b77414768cb97648dc5721149aed2d4c682408cc0d50d26dd0bd77e848911f8625c727cac5f32e63bcb548f41a57d718d772f23983a42f603bd\nA = a419646a6631c2c69b18f7aa65011825eb31692eecaee9d74f92d92203811b68e9764bda31a1585bdf69b6273fc6f9f508c395ac081336506525dad88473512f08a205621ac8b16e9864c7a7c5a4f17435de00d0b32badec6ce4897e3e1076c562b6d9523f63d0b2079eaa416cb090471657763f24931d955d1fa2720c80a9c9\nE = d5a6f4a1842aaee39805356dc8d0d678ee03b2c81277345beccb2742f899132feb43271f95968a01ae68aa8277201851992dc0aa7a71c90aae71b124d873ee264ea400fb131be0fc6c4ce8c04c45f6bdaca89ac743635caf6158983d257e21cef6800d7f990e912ba21bbfb8fb779afa4abd19e07e7e07eee9908493d1ca502c\nM = e739689b6cc6def1d45fb1a2ab551643beeb303f4aaa4da47ee5e4948510f8445b4c40e99ae8354dede60b2ba6694e93bc4d573b7e8adf871b7a9a9636eb7d70f2e49328e2d7978143b177cee8374ef01bd1ee2d95862765883f5e7971668b53ef0ff41b6539faf63c397522b0bdce916388e72e26c8d3d2e58dadeb9eb5d479\n\nModExp = 827e6312ec3b14600203bb83f5b277ded197b2967363630ef673240df05edd3ba8ab2b11c86251a612206569c6c33952b31e264f129909bfe723bd0ee1624b36cfcfaa893a6ec8b5a1f7de79f83e79b459a3350f89f412ad1cfd6bc4c2a7a29272c783d6ecceeb1398fa17041835643f4debef9b5e87b098d104bb8912dddf7c\nA = b8e49c637829021d32db3a39a0c1e58cdd4c6e4eda7e8e9293be379e9c2e2d184f929d278598a81ae231cfedcf69cce4a6e31cda3c8ac14d753a7311f2436e29795f0dfb60259a0f61a997918ff984aa2284b43a9d64c974059e9682adfffd018305835f74eda8c75fe4877d811c1620f654ec9f7f32d1af5ce59115e2f41785\nE = 80e0febf369d234bf1aaad4f82df2e2ff02882c3184781f6ccdf4f7cd93b6887af86830", + "077c84dfb02109ada05b40970b1c65228b0c19030bd6361c3537fee22a8155c03b4e7007ca006c6daa3659518d05bb81ea0079456d0ef6116df248dffdb0c935f321f5a1034deefd5a9414a0652aa6548de33325b474b9e5a8507a082\nM = d5eb1d14af842a9973274f7463d90cf0ccff19c47d710edbae184478d4f29b02693ed7958bd487054327b9e6d8879e24c9af7730b92f323eeac05558da6c1b952e5dbf13de236050a77628bb5325fe0d14cc5773bf73338759d5ab43c212b414581280f1cee250007e53791b800b61c90de0328acd7bc43fbdda48158939392d\n\nModExp = 4a1efd29c7e78549f5cd4deed1454b37462c7810ee6a8a2493b764dfa479be13b314cf9ff98259517d61865567ef499a511630c0038c97914625df181c6fe07892f329f98b344a78d751e9471483eebaa7977371bf97bb25187ae7e93a9227d6c124ccb4644423c961a11ae59c4354f89d5a95164c23d9aa256e289e9cc0858e\nA = bd86c9211fa6a47a06e5016c46cb8a99e34a043a29e22f8c3196fa7197c26b38927b8d9bc0ddc11a5fa4bcc44deb69dbf37cbe7ebc9a2fad6c74e09ab5a9dd929fa04ab4319b6caad1035739be78ba631fb0748d9e53944836d37ccda6e6a62823c696d8f31139ccd7f2f86b22fa026ecf433cfb1271a3539ac4f1c83aaac059\nE = c40b9972006d28a84c2769a86e526a2b274f73afc7c5c6a2742166757f61b5f5fdbb228afa157af62af989ffe966f232bba9e6beef5403d1690ade31a6410f7f349a35bc4267a129afd647993df7d45cc0e1a1ba4678d7f1b6e8a344d8ff7037679e1f4db25a454e4246f6b55c416567fcfa188e8a3865115851d9edf0aa8902\nM = cf424d7af75ce7eef90cad75ae55ca8810cc7b4703fdb5bce701e7bac07e0c371cae06df2aa8facb55a0faa6793e4d2bd9d7969703743b9be170be82792aeea55e2bc0f7ab7617b276486bf474dee2f4556aab595ff3ef115139cfe5e21ccd4ee05c0e1cf901bd85df86cc17195a783b0be836d00bee82ce064077f9191188f9\n\nModExp = 3137a3049fd4ad2e26d870f5c998cf11bfe82101884a82e85e43facd0928cd7434a2e346ca124619769fa141bbe92ad6f36b99231032ddaec3b349a410f82b5ca36f45e56e5fb85dc63d32053dc90805d3f1854ab385281a71a57726bf97158494e7476057214ca7379ab8b70f5bdc15f70bdad3adf33c3a1f9cd1b6bbbad556\nA = 39a1dc6a4c3f14d9c350ee968d5ce139ef725952c967a2d1bedf48ace22091283525be03807e2e263d2640be77f0525247bcd07149bba50568cec5a082c87d72962cf9e43bcb5cdb1e7e9a650fb53e0ec2fad37f09a9f036c0d7dfa528fef846769f80a9a60854910ca1b4ee05dba82ed2ee018348d6b3e52a764b8ffae61e0\nE = deaee3a3f80c9f684ed7110c0653847ccc7be5ff6d982fd4b49f59b5dd35f7210b1077babbcedbc127df35cd469dc6e569a0f84e58149b5605c94b09fd7f0b098d02b4a04631328b3fae39e6c2fce25334225cab71829abdb9507cb903701559660f2c08c3b743336119d1260a0db27054cad3f28bc1b04b2289baa58fb33965\nM = 938388927d06ed3bb1286c0f06d3054cb0ee16dc7a0bbbf13a45293c09a5f40f1d611b2e1a1b0ec2ef109b508e27af4274954905cae52034f8740a744153b4d22059f0dd262ea51785522098ecacced6da07709ee6b5acc8c4e99331379a7c3de7f4e2d1431e43b19570140955b7bcba118dfbaa552cbfa2be531e8f781166ed\n\nModExp = c15ae334455d9f4d1030cd33e734726a27c63624c2afc576238cce5e0498298a4a0c93090a0d19568b41290303c4b558f3d9dd74f9cde8798710f68569ea0d6fd971ce67ec5b54495031de3d8842b8b49288725bee5c9f72b99054d64986ccd4e18d70d5f33943f08cd694eff538f84438ea993ebaba0910c95b3a694f213510\nA = def633b955a917569df3ba8517455eef0655e7a35985edda27097a063e0d82c7c3a76dc36c5d8a71ba9d540790ddd0ea514aaed98925f9a1808eb288d387aaf9605a9ef8a333ebee7ad7057bca012efd619d5867f02266f65976ef4b16da17468426ac4f99b3e8921707e01b4de20f6f9a068e6a19d872079a27f3a44449db83\nE = a465c47b0d15d48e01bb8b1d8e3b3253e11515f6874dbed6c25818adf1a8fd927124d5593beb367f685c11e46f18415be73ccdf16fa2e93a600b728163d21d232849e5278c3749d903edad3f1c4535a2f55a2ab65e7ebc64888bd2a0527e876ecf38cec3ab1980d08138709fad8eb88ae65d960adc3f0f8e92f784fe96fcb693\nM = e43cb9ac1446154356cdc31ec771c79b0e461e22d95185bbe1a279c0945e3af07903a0cb54d553380716fcdcafb4b7cf5dc6da481dc74a8c583d75ff6c1f8e429182d200246ebc473bb56e173787987c1b7fb2dd23f5b2e438a97bc4a1df628bc044fdd1e80c0cf37030adb7b04784dab827d0dcd64f0dbf37c980612570ce11\n\nModExp = 75c3f79ab7c991b98e65505342a8a563cfb08b5d3ccf8664c7db1de50256b1d17ebf7096dc98c7bb5d7f027a894ae5cbb14dee04d5d445e775ad7e239acc82673b0ac2d819a69c83864f34e73d9a636f05de8279619a067b4c90ad038db5910447e03841d2034635018f08cbcd21efa00994247763a249082594128112f95232\nA = 34def7d76f6f158a359fd12759fb889cdf6af0a24830dc3e84283a1ab4e9b2647a6a36b86482f829b2cdf3e3d6028f9a884b1f64f7262315446bea8b0231828e2f3d990fb103c17f820b39e4b8427c85643ceeca8f5dc8f191d1255768300e859bd7d88c770319ef38269660d221cb3bc061389b6fc0783485ef042b1c7d6fef\nE = c6c46453dd5aac6b37277a446b1d0c69cbe476eeff55b3ac35edb89ba97116b0e7783660f2c7b31b2a2d6c4709d0ab45d01a838100694b0777c9c9c14c959b07c437c73a5eabb7402f1001e802d797a2e7707285834fb6440a1c2f727f7bb84ddb2a49312d32fa0ce620c43872655cb5c394749c9e75d7fa25be00efe50d47d6\nM = fbbab6698a9142095c46b38a732592e4366c1838b84bf40f8c8fc7b630f73380a0d09765562365798f8c8030ed1b6728329d8bb06e882c35a1d59bfe84146a9db2afe42a414014e247390281c782fce806d62adb54778d2bcb49555459429d6ed446af5359657667f6aa19e8e3e0e24ab2bc312b2d90b5cb1ce6f2f15af15d9d\n\nModExp = ba16d7f3f6e162ce248490d164a13c00e7720d8a667e2d3ebeb13f1663e15ef5408d5b56cbc7bc793a8ca787cc50f8e15e0e9d4ee764531d04a9114eea556bb3e206ed7d85267151a056b6e68fbf35e03f2cf829708ffe1de13e95ecfe365aff1eea36340ffcd3892dee659fb1ecbe50f5080e54737c10f9c1ba638b14ef537e\nA = 9025e6183706105e948b1b0edf922f9011b9e11887d70adb00b26f272b9e76a38f3099084d9cccf12d04b1a99c0f654f8b9ed90c6dff9478c60bf05d58d734ab60eaefa14a22230ec60c90dc1f0704b61eef0bef345785ae0e6a9af7db069cf6bd2b4e0fe58a0ade83c7e46a04b9fe1d24cb9b65c6f80de713e61d70eae5b286\nE = d7e6df5d755284929b986cd9b61c9c2c8843f24c711fbdbae1a468edcae159400943725570726cdc92b3ea94f9f206729516fdda83e31d815b0c7720e7598a91d992273e3bd8ac413b441d8f1dfe5aa7c3bf3ef573adc38292676217467731e6cf440a59611b8110af88d3e62f60209b513b01fbb69a097458ad02096b5e38f0\nM = e4e784aa1fa88625a43ba0185a153a929663920be7fe674a4d33c943d3b898cff051482e7050a070cede53be5e89f31515772c7aea637576f99f82708f89d9e244f6ad3a24a02cbe5c0ff7bcf2dad5491f53db7c3f2698a7c41b44f086652f17bb05fe4c5c0a92433c34086b49d7e1825b28bab6c5a9bd0bc95b53d659afa0d7\n\n\n# RSAZ 512-bit.\n#\n# These are regression tests for code which historically reached the RSAZ-512\n# code. That has since been removed, but the test vectors remain. Note that the\n# lengths of the inputs, especially the *bit* length of |M|, matter a lot.\n\n# Control: No relationship between A and M except that A < M and they're the same number of limbs.\nModExp = 7f34c1cd63377bc3abf2bb5b2d1bf5f06454e1e8040fe19a72245ce9731cbee1bf9e84532300776c8021ed4f3a8de508d85b4cf320bd82065a013754857b50c4\nA = 8e4e67da6ff890643d0599387955996ef6f0c2045eb9944576ddb965ca64cdb6247727ce128ef178d4a84e5a56d2e67eb0fe389ecbf691f9244ae80f4c11b364\nE = be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1\nM = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491\n\n# Same as above except A is negative.\nModExp = 71fa6a4c8ae75368eda8cc6282c26afa69e2af12a97fb9444f16b7dd6c99e0a5d6034cab4248cae4357346b211039f4a2bc4c5a20a297372094162417af703cd\nA = -8e4e67da6ff890643d0599387955996ef6f0c2045eb9944576ddb965ca64cdb6247727ce128ef178d4a84e5a56d2e67eb0fe389ecbf691f9244ae80f4c11b364\nE = be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1\nM = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491\n\n# A == M - 1 == -1 (mod M) and the exponent is odd so A ^ E (mod M) == A.\nModExp = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725490\nA = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725490\nE = be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1\nM = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491\n\n# Same inputs as above except A is negative. Note that A mod M with a \"correct top\" isn't the right length for RSAZ.\nModExp = 1\nA = -f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725490\nE = be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1\nM = f12f2c19ee1ec", + "f2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491\n\n# A == M, so A == 0 (mod M) so A ^ E (mod M) == 0. Note that A mod M with a \"correct top\" isn't the right length for RSAZ.\nModExp = 0\nA = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491\nE = be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1\nM = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491\n\n# A is negative, and A (mod M) is the right length for RSAZ.\nModExp = 8d76eb0f8c7bc3160cc8bb0e0c3590fbed26c5932f5f525b48045c0bd46dda287ba5483f97c851fb7c12c2e858ee7a4a4d1af745cbfb3eb311fa54bea12cde25\nA = -80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nE = be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1\nM = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491\n\n\n# RSAZ 1024-bit.\n# Note that the lengths of the inputs, especially the *bit* length of |M|, matter a lot.\n\n# Control: No relationship between A and M except that A < M and they're the same number of limbs.\nModExp = 8984f8c16044f9c0ad7bd72347af90f58e6e003acda92b76e3c7c4a56ea8e918409d8e9b34884d4c89d0b17cb40fe898f2627c084a0f1698e46beccbf6f48eecc281e11ea9e5135adba460ddae157f2c655b5f589ce29b254d43a960a71cede8a08dbb86be4dac22458da232fb1ec2470856827302ed772c9ddafa408c931aa7\nA = 21158da5fe20356825e72b3f5384ec57720d22f727b27ce2f945c8ee311db781add73bf8fae96b775c909bd22fca75c44c2b0584284a5bb1c07f8eefcd6b0a44047a02b185df34f897f11d4fb9a86c9eb841b4cb8d0383441fdc5af3ef385b5e8380f605d73ed41bb42eb2c2a5704d6034b3ad058dafffce83dbbfb6295daaf8\nE = ecdebd112b3b5788669449dcddbd479a203ee9ab72a9bb9c406b97623513bf0ab9a22f1f23634d269e16bfd6d3b64202b71fc355057411967b6ac70f8d9cef0a4e06819a9a18cc06bbe438243fa9759303d98be8a65dc1cb13595ee9b99f138554425d50f6fbc025d8ffa3eaea828d6f3b82a3584146bafde34da257995f0575\nM = ff3a3e023db3bba929ca4ededbace13d0d1264387b5ef62734e177eaf47a78af56b58aacc8ac5d46f5b066bafb95d93d4442bb948653613eec76837b4ffb7991cb080b6c8b403fb09bc817d026e283ee47ab2fc9af274b12f626eda2fe02004a8e27b9ed7d3b614e8955c7e7c2c0700edd079455237c4475fbd41857e206e4b7\n\n# Same as above except A is negative.\nModExp = 75b54540dd6ec1e87c4e77bb93fd50477ea463fdadb5cab05119b34585d18f971617fc1194240ffa6bdfb53e4785f0a451e03f8c3c444aa6080a96af5906eaa508862a4de15b2c55c023b6f278cd04c1e24fd0711244afeda8e3444256e51261ed99fe66beedb52c43c825b4c7a1adc7d4b111e2208ecd495df91e175573ca10\nA = -21158da5fe20356825e72b3f5384ec57720d22f727b27ce2f945c8ee311db781add73bf8fae96b775c909bd22fca75c44c2b0584284a5bb1c07f8eefcd6b0a44047a02b185df34f897f11d4fb9a86c9eb841b4cb8d0383441fdc5af3ef385b5e8380f605d73ed41bb42eb2c2a5704d6034b3ad058dafffce83dbbfb6295daaf8\nE = ecdebd112b3b5788669449dcddbd479a203ee9ab72a9bb9c406b97623513bf0ab9a22f1f23634d269e16bfd6d3b64202b71fc355057411967b6ac70f8d9cef0a4e06819a9a18cc06bbe438243fa9759303d98be8a65dc1cb13595ee9b99f138554425d50f6fbc025d8ffa3eaea828d6f3b82a3584146bafde34da257995f0575\nM = ff3a3e023db3bba929ca4ededbace13d0d1264387b5ef62734e177eaf47a78af56b58aacc8ac5d46f5b066bafb95d93d4442bb948653613eec76837b4ffb7991cb080b6c8b403fb09bc817d026e283ee47ab2fc9af274b12f626eda2fe02004a8e27b9ed7d3b614e8955c7e7c2c0700edd079455237c4475fbd41857e206e4b7\n\n# A == M - 1 == -1 (mod M) and the exponent is odd so A ^ E (mod M) == A.\nModExp = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d964\nA = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d964\nE = 61803d4973ae68cfb2ba6770dbed70d36760fa42c01a16d1482eacf0d01adf7a917bc86ece58a73b920295c1291b90f49167ef856ecad149330e1fd49ec71392fb62d47270b53e6d4f3c8f044b80a5736753364896932abc6d872c4c5e135d1edb200597a93ceb262ff6c99079177cd10808b9ed20c8cd7352d80ac7f6963103\nM = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d965\n\n# Same inputs as above except A is negative. Note that A mod M with a \"correct top\" isn't the right length for RSAZ.\nModExp = 1\nA = -b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d964\nE = 61803d4973ae68cfb2ba6770dbed70d36760fa42c01a16d1482eacf0d01adf7a917bc86ece58a73b920295c1291b90f49167ef856ecad149330e1fd49ec71392fb62d47270b53e6d4f3c8f044b80a5736753364896932abc6d872c4c5e135d1edb200597a93ceb262ff6c99079177cd10808b9ed20c8cd7352d80ac7f6963103\nM = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d965\n\n# A == M, so A == 0 (mod M) so A ^ E (mod M) == 0. Note that A mod M with a \"correct top\" isn't the right length for RSAZ.\nModExp = 0\nA = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d965\nE = 61803d4973ae68cfb2ba6770dbed70d36760fa42c01a16d1482eacf0d01adf7a917bc86ece58a73b920295c1291b90f49167ef856ecad149330e1fd49ec71392fb62d47270b53e6d4f3c8f044b80a5736753364896932abc6d872c4c5e135d1edb200597a93ceb262ff6c99079177cd10808b9ed20c8cd7352d80ac7f6963103\nM = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d965\n\n# A is negative, and A (mod M) is the right length for RSAZ.\nModExp = 9cf810b9e89d5cbc4b79ae64e123ea06d92965e2bab077df97a1b906dc2e1ddcf96a9c4ed14e2cd96309b829ea9cc2a74a7d4b43c5f34d792a7c583201427754b8f78b783608070a84b61f18913e3ced7f7f530972de7764667c54e29d756eea38a93cd1703c676a4587231b0ebfeadddf908e2877a7a84b5bfc370ecf0d158d\nA = -8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nE = 61803d4973ae68cfb2ba6770dbed70d36760fa42c01a16d1482eacf0d01adf7a917bc86ece58a73b920295c1291b90f49167ef856ecad149330e1fd49ec71392fb62d47270b53e6d4f3c8f044b80a5736753364896932abc6d872c4c5e135d1edb200597a93ceb262ff6c99079177cd10808b9ed20c8cd7352d80ac7f6963103\nM = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d965\n\n\n# Exp tests.\n#\n# These test vectors satisfy A ^ E = Exp.\n\nExp = aa6d7ac431\nA = d0e07\nE = 2\n\nExp = 12d416b110dbb4e467ff0c89a22122f4da8240\nA = 1a18cf6\nE = 6\n\nExp = 49a3b33e23d84f1ce0d5d83f5dcb651d50cf3920f0143da2310d0512a90a06cd8f38977df8a756c30883de38df092000\nA = 2a3acbd2\nE = d\n\nExp = 5b4a0d5a956f885f275712b194459980f24708bfb6393d71bd37dce852ce455724f5ee5030775fb86b4295edc98afaafc097e4d82a97c0078ec0eac763db16549c5145c4cf2d3124f88cf9a5c71da0625afb99b26801786fe49a778415dc025954021753d08691947a208b613f0be5c1\nA = 54b", + "3ae461\nE = 1a\n\nExp = a0ea5f6a4de49beb8fb7f0dab280d6a32c5a3814c9a5153a7944cec0a9028497846a8a89044348721a0bb5f0c3ded3e980574ea321b0cdb0ead4f4e93841ea7478a7f15d9729b646a8165813a0750e8124f5465dda9b105e1bbeff18fd09c09a2e26610d9176d253b877c3a8908a6be521cbe1e472a7a1b7820e4e890f8f28aacd34609c686e76e15b01bd9324a71290812724ea564d11c874a6765b262c3e57d479da0287a76026a1e8fe53da0b02405da1d379eaa30fc65f\nA = fccec0f6df\nE = 25\n\n\n# ModSqrt tests.\n#\n# These test vectors satisfy ModSqrt * ModSqrt = A (mod P) with P a prime.\n# ModSqrt is in [0, (P-1)/2].\n\nModSqrt = 1\nA = 1\nP = 2\n\nModSqrt = 1\nA = 1\nP = 2\n\nModSqrt = 1\nA = 1\nP = 2\n\nModSqrt = 1\nA = -1\nP = 2\n\nModSqrt = 1\nA = -1\nP = 2\n\nModSqrt = 0\nA = 0\nP = 3\n\nModSqrt = 0\nA = -3\nP = 3\n\nModSqrt = 0\nA = -3\nP = 3\n\nModSqrt = 0\nA = 0\nP = 3\n\nModSqrt = 0\nA = 0\nP = 3\n\nModSqrt = 0\nA = 0\nP = 5\n\nModSqrt = 1\nA = -4\nP = 5\n\nModSqrt = 0\nA = -5\nP = 5\n\nModSqrt = 2\nA = 4\nP = 5\n\nModSqrt = 0\nA = -5\nP = 5\n\nModSqrt = 3\nA = -5\nP = 7\n\nModSqrt = 0\nA = 0\nP = 7\n\nModSqrt = 0\nA = 0\nP = 7\n\nModSqrt = 2\nA = 4\nP = 7\n\nModSqrt = 3\nA = -5\nP = 7\n\nModSqrt = 4\nA = 10\nP = b\n\nModSqrt = 0\nA = 0\nP = b\n\nModSqrt = 3\nA = -2\nP = b\n\nModSqrt = 3\nA = -2\nP = b\n\nModSqrt = 2\nA = 4\nP = b\n\nModSqrt = 2\nA = 1e\nP = d\n\nModSqrt = 2\nA = 1e\nP = d\n\nModSqrt = 0\nA = -d\nP = d\n\nModSqrt = 0\nA = -d\nP = d\n\nModSqrt = 3\nA = 9\nP = d\n\nModSqrt = 8\nA = d\nP = 11\n\nModSqrt = 6\nA = df\nP = 11\n\nModSqrt = 4\nA = 10\nP = 11\n\nModSqrt = 5\nA = 90\nP = 11\n\nModSqrt = 3\nA = 80\nP = 11\n\nModSqrt = 9\nA = -e\nP = 13\n\nModSqrt = 7\nA = 7d\nP = 13\n\nModSqrt = 6\nA = 37\nP = 13\n\nModSqrt = 1\nA = 1\nP = 13\n\nModSqrt = 8\nA = 1a\nP = 13\n\nModSqrt = 54d4cf0fafe265056a29016778cea6b712bc66a132fb5e6b6865e9b49e4c97ec\nA = 599c10484b22d0b5a115268c7538ca99b3253a311a4ab1ca11c3665b0bec393a1167d1ad94fb84cb2c7ad7e2c933e8f613bdd08fe1f1aa4a9b0b9de0c8a7c9d4\nP = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1\n\nModSqrt = 38a7365a15365e911286c1be2a7afe76ef390234d76269e04dee17313f6ea54d\nA = 1c4aabb4d8369710131c664ecf2849e963c1bc31d66e0b939bacf99a870c71f24ed71bdddcf566f3908271fee43fc1ebb51eac7e3153efae641b49d2e796a12a\nP = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1\n\nModSqrt = 35ab18a560dece04725667f640ca61d1d59f14d191f94c79f58531acd097d444\nA = 685168ae855d60eba220d803f5296459b30a289580668db9ed51bca51cc2d453a937e13819ae34f7a9a143ac96d17420c53919167e46279b562b550be1cd9abc\nP = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1\n\nModSqrt = 288370029e87024175e5bec0eab0929179f42e16995e7f6194eefc61061e54f4\nA = 2a14ab77c045bdc48220ba9c463e1a4b4049cb01edb53be0937767eb2ec19b7d719855052281250a36a0b76d9a5d967d0756e1ded7a052f7056191ad66bcfc9\nP = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1\n\nModSqrt = 32255cf01dc943577ec2bcb221b98491d7a1130d046d6c68e95fedff643ce3a4\nA = e26f6dd46a513a1dd3fb14b71be1d4c9e9d79eda1cde10ea4d1eb8abfd4d5857572205e247184dd0cbefa37b5c0bf680ba2bd28c5741f725cfe2aae37419baf\nP = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1\n\nModSqrt = 5172345e801ada63fbc4782e32583cc3b4fea88b9e6dfd542f3542f8538ade66\nA = 40dafa8342b302bb04b1f3ddb3b9015a8fc1b597857c115b40631c7be9e22de89358fca23b331596ee5ff304dad7811e6d8e8822f7aa533c9e7c882634ea550\nP = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3\n\nModSqrt = 4dcf63c423bf0e39aca2293d57f6792d023db649d6719fe936446904b9f7e60d\nA = 5bcdb514bbe84261e169203e8017909b60c9bb330400c766ee01b0189378e70e61867a164a12643ddc9e94b61e09e5b158cbe85be228a3cc48f95a552958b8f2\nP = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3\n\nModSqrt = cf77c5c2d12a500b75cbfb1f3e66ee75d886b9365cf4f8b4d1bd18a6be0f387\nA = 4652ddc2ea7b460d8ec3c9059b8f9b5dae6cac55b51f2ad86fcb336b25235737965cc515e2ff0b54835015b7ebeeda6fadd986471d8cb424d309fc353d1e269\nP = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3\n\nModSqrt = 1e0549e4c5a26023e9d24fd8c67419960746f82b1ecd113bdac66f570a475d87\nA = 5f4a6d450ab1390d96ab1deaa0ba18f897cb63daf0c9e1ef6c08e804c26b5e842f6c08f13db5d4a6e88f07af2a3cb04fa06fc3e59c410b9356f025ed81acc74\nP = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3\n\nModSqrt = 144481a781d831c1ca046ca9e322d79ad4d2c6dd9f780bea9d1ced9cd20b7b23\nA = 4c254fabca441017132b9eacd4ca40a336db3e5c09715773fa07af095989a91cc968ff07a9ff56ed06b0ce0c5269f7b2ab68564ecab9f4467a7e96b6cc6b21b7\nP = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3\n\nModSqrt = 216fecc7667f488a3d2d102a38b46b4860ab858300b8638af4f34e1103fd73ba\nA = 17878f8048227573a9d70f53c0e76ff13fe9f56e9c984c92514d3d13dec23c816661f0618d21371b80dfd885cb59551bdf80046f65f22ea9b89c78645a6e455a\nP = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95\n\nModSqrt = 458e5e789ccd2417174f7e30bb31914b9656bd8cf2b9f5a9752a8737a67707bc\nA = 5c7d39a4bb04e69201aa519f80ee7e62ea14ca55e13656d1da3f45367e2fb2d061aa2940708d02ac67d35cd2ccf54a1bf95bcbc759779e692cfdcbb3aa1a05b\nP = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95\n\nModSqrt = 543125a16c2bb8b8f8a2c39c497e5224ec77533602d7dbe24002e32dcbd2ef1a\nA = 3413afae333b2ad9ff45c7f3c7e5934b3127e8b1a55225958ee6ccf42423e81559bf070ad3f3353b78c0ffd41475af49f59d268ef78bdae879f5155e8d1cc07\nP = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95\n\nModSqrt = 10e16859c67bdb2eaab52a7c847dbf37162eda258a9f6262ebacfe4cbbbc1080\nA = 21ce7905894faf220bdf4a82a2d855994ca2dc9feaecaa53c7f146e1f49934215695e9bb46ba370b7005a90c399674caa8969eb442e7914d90f749774d7fd194\nP = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95\n\nModSqrt = 32a00586adc6f6cc2b1a04e1be0ab569fde235e1436c38b6af92bc5ebd60bc1c\nA = 350da4fd8cf03c12f7dd6ac6d3ab801a3413964083e374662aaf878d6838b97d4feb9e52cd307a25b113e101661a865463ee2480c626aa4e2ec437d72e7bae4c\nP = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95\n\nModSqrt = 971f75bc7afa8b4b50f1d4b05e52deac7d4836a08d30546f29649bf1ca6a247\nA = 655ed4c5d8d0afb4f9360372ee1ef1303898d2423e585108a3303faedb55064d2ef25666ed4c4d71fe6063fea1f3142b435714b0e30b339dd791d347c884654\nP = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7\n\nModSqrt = 48fa882b7cb6a29de9e3769f72eb67f1efd4d2af56f0c7e410c610efcbce2065\nA = 14f3503f33b243800eac1defaab33e04c01e80163fb3efd03860970cc016832431ca4fc6d1b760f4f40166b0b8b3c40dbebc81460cc10890172243770338f090\nP = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7\n\nModSqrt = 236fd7e397ea7f8bc2a288eb7236ca41936fa702b7dccca56c8852e147511f7d\nA = 1bbd0980feac854782813bcde4da85e8a054549a1b515e065da4236528035e756882e29e762cf60453e375cca9dc6ff637f9558bf86646e3b928f68f82af7efe\nP = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7\n\nModSqrt = 693f0cbe8c81b0afde0cd2f83e53795dcae6b0cc4ba930ab5c752400d787f14\nA = 7b20f9664b23907e152ab8c9a907f72e8670c1c38ab4cd1411ea7c2159c09aa131afe068929b8e6ad1409b74c04975180d1cd0a9fa74e923c3fd451e8da2c34\nP = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7\n\nModSqrt = 4a086c50b0bad576501ddb6280743b2c9d247841eb7f14d90561432ff7dca6f0\nA = 4367431ec0cd0d7626538b93a090c30fe0c97c18ca03b97ddae304b619112b5b4d02bf0f041fa3fd673f9ef2ceb07eb2079d11c56dd903b1a87e8252a97b8079\nP = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7\n\nModSqrt = 18f8433fa468d8065157708f1f1e53b8e31d39c6011fbc2bad93de1b5548e19c\nA = 739c032bb4139c199c40f548d37234298772e4ccb9d3ba28412b60ad23b4c465b0787e2382f1c5a4a87af2d20eb978b7dcbe73f2112249477d15c8a85e54a79\nP = adcd56924f73836ebe4dccfe006ad3b1e5076562cd11b161642cab7af2284659\n\nModSqrt = 49e3c8eef5e067cabd51a7c01384ce05ab8f4342f655559d8a689eb7b20e0106\nA = 18400c2cc3e06b99b4e39c77b9af5ff0e9c683f1708321afa4cd5b6988d13b36b1d9eb4379b7902d9ceb40c03f814b2b6a01b90509bbb4532f13ab1571c4d04a\nP = adcd56924f73836ebe4dccfe006ad3b1e5076562cd11b161642cab7af2284659\n\nModSqrt = 35548c530745f440329325cc8a5fbd90c16a7f0788879a4869bc4d4f73acda0e\nA = 181a3c5ab02566e7166c4d6d2f2bd4a8ecc25991a98d270bde80cf4332766a7068b14240bf5f5dcd45e90ef252596da3eb05b11d68b2063f7b3a825742593ca9\nP = adcd56924f73836ebe4dccfe006ad3b1e5076562cd11b161642cab7af2284659\n\nModSqrt = 1ab7046e6af061ade5f9719008fa4d989007e2a579a134a5b9f19ec410984096\nA = 1008a03e211fab0d45856377079bc96b0776c2d4c0175661f3493246cea2ab0a02a706c85314fb707ad9906bedb2cfd577d62092ae08ff21d7b949373ea954c7\nP = adcd56924f73836ebe4dccfe", + "006ad3b1e5076562cd11b161642cab7af2284659\n\nModSqrt = 2be9e3e7515960d90f115b89f60dedc173a73ce163b4036e85b7b6a76fd90852\nA = 392053a9f0100540a8e1a0c353e922068a84dad3a4a8e8962fbc0bee2b6a06e20d08ade16eb1409a16acfcac3db5c43c421505e07035ca308b15c4a6db0864c0\nP = adcd56924f73836ebe4dccfe006ad3b1e5076562cd11b161642cab7af2284659\n\nModSqrt = 5b301bb93bdcf050183107e36258b53b4805918114ea1c2227b0911d5b4dc077\nA = 55e55e5f94dc3d7aabc921f6469d85fa2e1e92a87347c57afad5872306ae69f9fb99297d1e3e793dd9e8632244208154de5da7114fd876383bf1422f7ece024\nP = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb\n\nModSqrt = 2df9609e2f5a5156c3260461b2ee52eacdef00bd8b091479813143a6c5283f71\nA = 2099325b7f12fe77353ddf3f2b2c5ef77b49671b150af954cf84e9675e3ecde3e057084641a633d19533b4712ab49924c8b5c31d591abcc88291f51253fa2a7\nP = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb\n\nModSqrt = dfab751710e9008e25e422d1199d6fbec4dc7fba35b4da9d225a746eb4126a0\nA = c006af53d4737fb293584df6ffe2e4cb3fd8dc77fb7c1f13b97bb9c249e3ee5fb9feff7488265b3093906c08a4946f142ac7b491937d24bfba6413366ce371d\nP = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb\n\nModSqrt = 26bc030008d6c60a09fb0e16093a649fcb40c6c21a8e2da2353ba4b07c4f85d5\nA = 1eaabcfad2ed349ac9356e6f4da0b301266ddde811cb0f817aba8f5c10fb8b8ba9d0ef2dd386b668f16eac296118fdb8cb7afe1b865648c81c2fa3cf21f2711b\nP = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb\n\nModSqrt = 35051b1482ec2578f3dc0000a422cb5111e43c37f1ac20b1844d3de2128c4556\nA = 315ff9de178681116f2a5fa78eebf4818e1d680435eacdfaf9d0e5c4fc01fc034b352c82fd52c81ca30d68864952dacc99d08269c9dd7ca99ccf22da98c3840\nP = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb\n\nModSqrt = a5474252885cacf004c460a7793ff0b0a2187bb1a9ed700ae3470199faef71f\nA = 19856fc1351c4b02abf573bb2fc6ff92355fa369d62bb8f2260fa772fb1693f509a56cad661930abcac049dd70f4b16bed4a4c172e73e772504c9990ce7f92f\nP = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d\n\nModSqrt = 12daf4722387ecf47de1b0b6b110a062dc5ea2685bc9dbde66b8d15622985029\nA = fb8479787069116abc42abfd7dc0c24d2ad04fe0c04b42a6dff714af715d17e0fd77855f950f264542b06d48e8818de813ddb7975798b7debefcdaa5ff86beb\nP = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d\n\nModSqrt = 397996ed5c0ac6ad32e43c337e9de421b87774cc162bf7ac7bbedf4a9029255e\nA = 5aa04353321bd2de92481be740357f979da464b53aa39111fdbb734cf7af6b3857d1baa08d3a126a3dd34a2fbae2bf2b84e900686c1d31505b390185acef5fe5\nP = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d\n\nModSqrt = 2cf4b844a54ba359dc592ef1b49f43fcfeae84d1087edfefdd0b9174b43c0a3c\nA = 365a8650510bcfd8fa87432f167cf487234c215857403b9270b5eebeafa48cd6da47fd60dc311b94d1d72baad0447c31f0b212d755f46c256e16e5e015e6546e\nP = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d\n\nModSqrt = 9277c73043ff767c3fa606f0cd66b9d854a600c8c18287f191ce277758c3f31\nA = 62cec3901626d03e8df66299a87c54b1f7a55cafc99f0b6bba1b5d51a3d2b7d2171c9135a9d8a5346d436e0136b12e515e703e3cd84ecfe154eb94c6772a6d72\nP = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d\n\nModSqrt = 4189e5a90c1b1abdc1c7c05b3587e6f362e06f927b6cf5f0d271aab3d6f90765\nA = 336b8d0f9dac842c696bc020f49c6aa023842c16f2052eb02f17959006554ca0012042c80c72590f21c6bf5a3714c9cb552aa69730e33db93a56a909b273f39\nP = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f\n\nModSqrt = 36ccd38cb5a6bd8a73bca55936a2227c503664422c2296faf7e2b1c6a375a43a\nA = fecfd60a376befbe48d2c4f6d070d716d2f403cd5daefbce62b720df44deb605162c8f20f49fd7ec30d4f8e70d803d45b3a44b5d912baa3410d991165d7c507\nP = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f\n\nModSqrt = 198fc8569be172dc9b71023ed3d42d2ba94bae4099643f6517ab03f540527fdb\nA = 65bebdb00a96fc814ec44b81f98b59fba3c30203928fa5214c51e0a97091645280c947b005847f239758482b9bfc45b066fde340d1fe32fc9c1bf02e1b2d0ec\nP = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f\n\nModSqrt = 21b7f74c30ded681d6138cf8e6fd798f32a049e94138e982f1845df3dc9e686f\nA = 9a30b791c1ba4f394b4e3dcd5837e474237f4fe8987b255c098a47b2c14c598ec69d2beae444dd4fe9c4ede8173d2b187677cc706a3c28f3b81627d8a5fb6fd\nP = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f\n\nModSqrt = a1d52989f12f204d3d2167d9b1e6c8a6174c0c786a979a5952383b7b8bd186\nA = 2eee37cf06228a387788188e650bc6d8a2ff402931443f69156a29155eca07dcb45f3aac238d92943c0c25c896098716baa433f25bd696a142f5a69d5d937e81\nP = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f\n\n\n# NotModSquare tests.\n#\n# These test vectors are such that NotModSquare is not a square modulo P.\n\nNotModSquare = 03\nP = 07\n\nNotModSquare = 05\nP = 07\n\nNotModSquare = 06\nP = 07\n\nNotModSquare = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951e\nP = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f\n\n\n# ModInv tests.\n#\n# These test vectors satisfy ModInv * A = 1 (mod M) and 0 <= ModInv < M.\n\nModInv = 00\nA = 00\nM = 01\n\nModInv = 00\nA = 01\nM = 01\n\nModInv = 00\nA = 02\nM = 01\n\nModInv = 00\nA = 03\nM = 01\n", +}; +static const size_t kLen33 = 832395; + +static const char *kData34[] = { + "# Tests from NIST CAVP 186-4 ECDSA2VS Test Vectors, Signature Generation Test\n# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3ecdsatestvectors.zip\n#\n# NIST's files provide message and digest pairs. Since this is a low-level test,\n# the digests have been extracted. P-521 test vectors were fixed to have the\n# right number of leading zeros.\n\nCurve = P-224\nPrivate = 16797b5c0c7ed5461e2ff1b88e6eafa03c0f46bf072000dfc830d615\nX = 605495756e6e88f1d07ae5f98787af9b4da8a641d1a9492a12174eab\nY = f5cc733b17decc806ef1df861a42505d0af9ef7c3df3959b8dfc6669\nDigest = 07eb2a50bf70eee87467600614a490e7600437d077ec651a27e65e67\nK = d9a5a7328117f48b4b8dd8c17dae722e756b3ff64bd29a527137eec0\nR = 2fc2cff8cdd4866b1d74e45b07d333af46b7af0888049d0fdbc7b0d6\nS = 8d9cc4c8ea93e0fd9d6431b9a1fd99b88f281793396321b11dac41eb\n\nCurve = P-224\nPrivate = cf020a1ff36c28511191482ed1e5259c60d383606c581948c3fbe2c5\nX = fa21f85b99d3dc18c6d53351fbcb1e2d029c00fa7d1663a3dd94695e\nY = e9e79578f8988b168edff1a8b34a5ed9598cc20acd1f0aed36715d88\nDigest = bde0fbb390fb05d0b75df5bd0d0a4ea29516125f19830e3b0c93b641\nK = c780d047454824af98677cf310117e5f9e99627d02414f136aed8e83\nR = 45145f06b566ec9fd0fee1b6c6551a4535c7a3bbfc0fede45f4f5038\nS = 7302dff12545b069cf27df49b26e4781270585463656f2834917c3ca\n\nCurve = P-224\nPrivate = dde6f173fa9f307d206ce46b4f02851ebce9638a989330249fd30b73\nX = fc21a99b060afb0d9dbf3250ea3c4da10be94ce627a65874d8e4a630\nY = e8373ab7190890326aac4aacca3eba89e15d1086a05434dd033fd3f3\nDigest = c2c03fe07e10538f6a38d5831b5dda9ce7478b3ed31323d60617dc95\nK = 6629366a156840477df4875cfba4f8faa809e394893e1f5525326d07\nR = 41f8e2b1ae5add7c24da8725a067585a3ad6d5a9ed9580beb226f23a\nS = a5d71bff02dce997305dd337128046f36714398f4ef6647599712fae\n\nCurve = P-224\nPrivate = aeee9071248f077590ac647794b678ad371f8e0f1e14e9fbff49671e\nX = fad0a34991bbf89982ad9cf89337b4bd2565f84d5bdd004289fc1cc3\nY = 5d8b6764f28c8163a12855a5c266efeb9388df4994b85a8b4f1bd3bc\nDigest = 5d52747226f37a5afcd94d1b95867c0111bcb34402dad12bee76c1b7\nK = 1d35d027cd5a569e25c5768c48ed0c2b127c0f99cb4e52ea094fe689\nR = 2258184ef9f0fa698735379972ce9adf034af76017668bfcdab978de\nS = 866fb8e505dea6c909c2c9143ec869d1bac2282cf12366130ff2146c\n\nCurve = P-224\nPrivate = 29c204b2954e1406a015020f9d6b3d7c00658298feb2d17440b2c1a4\nX = 0e0fc15e775a75d45f872e5021b554cc0579da19125e1a49299c7630\nY = cb64fe462d025ae2a1394746bdbf8251f7ca5a1d6bb13e0edf6b7b09\nDigest = a1ab56bd011b7e6c7e066f25333d08cf81ac0d9c1abfa09f004ab52f\nK = 39547c10bb947d69f6c3af701f2528e011a1e80a6d04cc5a37466c02\nR = 86622c376d326cdf679bcabf8eb034bf49f0c188f3fc3afd0006325d\nS = 26613d3b33c70e635d7a998f254a5b15d2a3642bf321e8cff08f1e84\n\nCurve = P-224\nPrivate = 8986a97b24be042a1547642f19678de4e281a68f1e794e343dabb131\nX = 2c070e68e8478341938f3d5026a1fe01e778cdffbebbdd7a4cd29209\nY = cde21c9c7c6590ba300715a7adac278385a5175b6b4ea749c4b6a681\nDigest = 8ef4d8a368fad480bac518d625e97206adcafa87c52aef3d179cbfa9\nK = 509712f9c0f3370f6a09154159975945f0107dd1cee7327c68eaa90b\nR = 57afda5139b180de96373c3d649700682e37efd56ae182335f081013\nS = eb6cd58650cfb26dfdf21de32fa17464a6efc46830eedc16977342e6\n\nCurve = P-224\nPrivate = d9aa95e14cb34980cfddadddfa92bde1310acaff249f73ff5b09a974\nX = 3a0d4b8e5fad1ea1abb8d3fb742cd45cd0b76d136e5bbb33206ad120\nY = c90ac83276b2fa3757b0f226cd7360a313bc96fd8329c76a7306cc7d\nDigest = 28fabbac167f3d6a20c2f5a4bcee527c96be04bdd2c596f09d8fbab7\nK = 1f1739af68a3cee7c5f09e9e09d6485d9cd64cc4085bc2bc89795aaf\nR = 09bbdd003532d025d7c3204c00747cd52ecdfbc7ce3dde8ffbea23e1\nS = 1e745e80948779a5cc8dc5cb193beebb550ec9c2647f4948bf58ba7d\n\nCurve = P-224\nPrivate = 380fb6154ad3d2e755a17df1f047f84712d4ec9e47d34d4054ea29a8\nX = 4772c27cca3348b1801ae87b01cb564c8cf9b81c23cc74468a907927\nY = de9d253935b09617a1655c42d385bf48504e06fa386f5fa533a21dcb\nDigest = 50dd74b5af40978e809cee3eb41195402ebb5056e4437f753f9a9d0d\nK = 14dbdffa326ba2f3d64f79ff966d9ee6c1aba0d51e9a8e59f5686dc1\nR = ff6d52a09ca4c3b82da0440864d6717e1be0b50b6dcf5e1d74c0ff56\nS = 09490be77bc834c1efaa23410dcbf800e6fae40d62a737214c5a4418\n\nCurve = P-224\nPrivate = 6b98ec50d6b7f7ebc3a2183ff9388f75e924243827ddded8721186e2\nX = 1f249911b125348e6e0a473479105cc4b8cfb4fa32d897810fc69ffe\nY = a17db03b9877d1b6328329061ea67aec5a38a884362e9e5b7d7642dc\nDigest = 9fee01807ab6c43a794abf6dcd6118915252ca7d3a31a1ff96b88a8d\nK = ab3a41fedc77d1f96f3103cc7dce215bf45054a755cf101735fef503\nR = 70ccc0824542e296d17a79320d422f1edcf9253840dafe4427033f40\nS = e3823699c355b61ab1894be3371765fae2b720405a7ce5e790ca8c00\n\nCurve = P-224\nPrivate = 8dda0ef4170bf73077d685e7709f6f747ced08eb4cde98ef06ab7bd7\nX = 7df67b960ee7a2cb62b22932457360ab1e046c1ec84b91ae65642003\nY = c764ca9fc1b0cc2233fa57bdcfedaab0131fb7b5f557d6ca57f4afe0\nDigest = c349032f84384b913bd5d19b9211ddce221d66a45e8a051878254117\nK = 9ef6ebd178a76402968bc8ec8b257174a04fb5e2d65c1ab34ab039b9\nR = eef9e8428105704133e0f19636c89e570485e577786df2b09f99602a\nS = 8c01f0162891e4b9536243cb86a6e5c177323cca09777366caf2693c\n\nCurve = P-224\nPrivate = 3dbe18cd88fa49febfcb60f0369a67b2379a466d906ac46a8b8d522b\nX = b10150fd797eb870d377f1dbfa197f7d0f0ad29965af573ec13cc42a\nY = 17b63ccefbe27fb2a1139e5757b1082aeaa564f478c23a8f631eed5c\nDigest = 63fe0d82cf5edf972e97316666a0914432e420f80b4f78ceb92afd1d\nK = 385803b262ee2ee875838b3a645a745d2e199ae112ef73a25d68d15f\nR = 1d293b697f297af77872582eb7f543dc250ec79ad453300d264a3b70\nS = 517a91b89c4859fcc10834242e710c5f0fed90ac938aa5ccdb7c66de\n\nCurve = P-224\nPrivate = c906b667f38c5135ea96c95722c713dbd125d61156a546f49ddaadc6\nX = 3c9b4ef1748a1925578658d3af51995b989ad760790157b25fe09826\nY = 55648f4ff4edfb899e9a13bd8d20f5c24b35dc6a6a4e42ed5983b4a0\nDigest = 9b44ee16e576c50c0b6b37ac1437bf8f013a745615012451e54a12f2\nK = b04d78d8ac40fefadb99f389a06d93f6b5b72198c1be02dbff6195f0\nR = 4bdd3c84647bad93dcaffd1b54eb87fc61a5704b19d7e6d756d11ad0\nS = fdd81e5dca54158514f44ba2330271eff4c618330328451e2d93b9fb\n\nCurve = P-224\nPrivate = 3456745fbd51eac9b8095cd687b112f93d1b58352dbe02c66bb9b0cc\nX = f0acdfbc75a748a4a0ac55281754b5c4a364b7d61c5390b334daae10\nY = 86587a6768f235bf523fbfc6e062c7401ac2b0242cfe4e5fb34f4057\nDigest = 3c89c15dee194b3223e7b53a8a5845d4873a12a2f1581d5413359828\nK = 854b20c61bcdf7a89959dbf0985880bb14b628f01c65ef4f6446f1c1\nR = a2601fbb9fe89f39814735febb349143baa934170ffb91c6448a7823\nS = bf90f9305616020a0e34ef30803fc15fa97dffc0948452bbf6cb5f66\n\nCurve = P-224\nPrivate = 2c522af64baaca7b7a08044312f5e265ec6e09b2272f462cc705e4c3\nX = 5fad3c047074b5de1960247d0cc216b4e3fb7f3b9cd960575c8479fc\nY = e4fc9c7f05ff0b040eb171fdd2a1dfe2572c564c2003a08c3179a422\nDigest = 2b7faf36fdf0e393ddeb9fc875dd99f670e3d538fd0462395ea06c8f\nK = 9267763383f8db55eed5b1ca8f4937dc2e0ca6175066dc3d4a4586af\nR = 422e2e9fe535eb62f11f5f8ce87cf2e9ec65e61c06737cf6a0019ae6\nS = 116cfcf0965b7bc63aecade71d189d7e98a0434b124f2afbe3ccf0a9\n\nCurve = P-224\nPrivate = 3eff7d07edda14e8beba397accfee060dbe2a41587a703bbe0a0b912\nX = 6dd84f4d66f362844e41a7913c40b4aad5fa9ba56bb44c2d2ed9efac\nY = 15f65ebcdf2fd9f8035385a330bdabec0f1cd9cc7bc31d2fadbe7cda\nDigest = 5b24b6157c0d1edf3a40c22a0745d23bdb59379e5e5e776ed040288d\nK = 7bb48839d7717bab1fdde89bf4f7b4509d1c2c12510925e13655dead\nR = 127051d85326049115f307af2bc426f6c2d08f4774a0b496fb6982b1\nS = 6857e84418c1d1179333b4e5307e92abade0b74f7521ad78044bf597\n\nCurve = P-224\nPrivate = 888fc992893bdd8aa02c80768832605d020b81ae0b25474154ec89aa\nX = 4c741e4d20103670b7161ae72271082155838418084335338ac38fa4\nY = db7919151ac28587b72bad7ab180ec8e95ab9e2c8d81d9b9d7e2e383\nDigest = 00c6fc53c1986d19a8a8b580ee553dc1240745d760647d1c0adf442c133c7f56\nK = 06f7a56007825433c4c61153df1a135eee2f38ec687b492ed40d9c90\nR = 0909c9b9cae8d2790e29db6afdb45c04f5b072c4c20410c7dc9b6772\nS = 298f4fcae1fe271da1e0345d11d07a1fca43f58af4c113b909eedea0\n\nCurve = P-224\nPrivate = 5b5a3e186e7d5b9b0fbdfc74a05e0a3d85dc4be4c87269190c839972\nX = 897089f4ef05b943eeac06589f0e09ccc571a6add3eb1610a2fc830f\nY = 62ba3f6b3e6f0f062058b93e6f25b6041246c5be13584a41cae7e244\nDigest = fb5dd3b8d280fe7c4838f01b2a5c28493ed3084f46b40642600ba39e43fbff7b\nK = 5b6f7eca2bcc5899fce41b8169d48cd57cf0c4a1b66a30a150072676\nR = f12c9985d454ffbc899ebbbb6cf43e3debcac7f19029f8f2f35cce31\nS = 12fcb848adbd8b1b4c72b2b54a04d936e4a5f480ae2a3ea2e3c1baae\n\nCurve = P-224\nPrivate = f60b3a4d4e31c7005a3d2d0f91cb096d016a8ddb5ab10ecb2a549170\nX = 40a4ab1e6a9f84b4dedb81795e6a7124d1cfdfd", + "7ec64c5d4b9e32666\nY = 83aa32a3c2fc068e62626f2dafce5d7f050e826e5c145cd2d13d1b27\nDigest = f4083aebe08c9bdb8c08ff844ffc207f80fa4406fb73bdbc1c6020f71281bdae\nK = c31150420dfb38ba8347e29add189ec3e38c14b0c541497fb90bf395\nR = bf6c6daa89b21211ea2c9f45192d91603378d46b1a5057962dafaf12\nS = cb6b237950e0f0369323055cd1f643528c7a64616f75b11c4ddd63c7\n\nCurve = P-224\nPrivate = c8fc474d3b1cba5981348de5aef0839e376f9f18e7588f1eed7c8c85\nX = 66f49457ed15f67ed4042195856f052fe774077f61cebcb9efddc365\nY = 3a6e3f3423eec7308a69eb1b0416d67cc3b84d24f251d7cbdb45c079\nDigest = cb017b280093879c4b114b52ea670f14e97b661074abccc8539a23280fe136b4\nK = 5e5405ae9ab6164bb476c1bb021ec78480e0488736e4f8222920fbd9\nR = 7b7beaf9f696ca1a8051527478c4c075ab45aa4768937886dbf38618\nS = 93d4cf110a37c5a6f15c4e6024822118539e860dee2f60b8c3f462f6\n\nCurve = P-224\nPrivate = 04ef5d2a45341e2ace9af8a6ebd25f6cde45453f55b7a724eb6c21f6\nX = 8d642868e4d0f55ee62a2052e6b806b566d2ac79dbde7939fe725773\nY = 79505a57cd56904d2523b3e1281e9021167657d38aeb7d42fc8ec849\nDigest = 5f1d77f456d7ed30acad33795b50733d54226e57df4281a43d3821d0762f12fe\nK = ec60ea6f3d6b74d102e5574182566b7e79a69699a307fee70a2d0d22\nR = 2fd7fcbb7832c97ce325301dd338b279a9e28b8933284d49c6eabcf6\nS = 550b2f1efc312805a6ed8f252e692d8ee19eaa5bcd5d0cda63a1a3f0\n\nCurve = P-224\nPrivate = 35d4bbe77d149812339e85c79483cb270bdac56bbf30b5ef3d1f4d39\nX = 7924b1d7f5920cce98e25094e40f2eb3eb80d70b17e14b3d36c3671c\nY = 26c5af35f71e61858582b7cc2b41790597c53ee514ffdf7a289d108c\nDigest = cce0671ca07521fdaa81eced1dc37282bd9a6dbbaeb8cd00d13d4cf75cef044c\nK = 751869c1d0e79eb30aae8fbfb6d97bfa332123fd6b6c72c9cd3c1796\nR = 26bb1b92b0f01e94eba5fa429271371db527ce857abba13bd1103f64\nS = 836aba9c63e1252c2b2d72a21e6a41b82241ebe32647e7f814652bcb\n\nCurve = P-224\nPrivate = 2c291a393281b75264c9b8817af684fa86a1cdc900822f74039dc5d6\nX = 18cb5826ad60e6696bf07655032a3749f6577ca36da3ccd6e66a137c\nY = 194e14820fe02d784fd1363ff7a30399518309765bd3f4412d646da2\nDigest = 4ee903b828f54f35adab0bfec06eb064abde530d8ed0384730aa23e8e9664801\nK = e2a860416229dfd3f5a5cc92344ca015093a543943a0d8f73bf2b2fd\nR = 00e300c1ef4a8c4ca5da6413856f8981db49de29bdf03f32ffc3ceab\nS = f250f18a51ba5f63e1584097841099fa6ae4e98ee458c061d1d5aed7\n\nCurve = P-224\nPrivate = 831ea25dbeda33d272a1382c5def0e83929170ab06a629eed6ee244b\nX = 076518e393940d42dfd09819409d66966d8c9189c83d554a9cc8a082\nY = 44d0ceaf4c0f50e46bea4a52e30423ce3ada19edd363ac5694c65cb8\nDigest = 215e9817eccaa125e0c053fed373f4605de292d27a692bd4f744e63215fd8705\nK = 6be6dd9f6a083915ccba54626caf12d246d3aece0a7eda7d8d85599c\nR = ff1460946e06fb6f5d35e8d2625ca70ffb9b45308e3fabf6ad8351b1\nS = 6029aa3990918e8cb8a388d53b0772e5cdfff49c3405fe0d3a95933a\n\nCurve = P-224\nPrivate = 70f74c7324ef137318b610ead8ddc5b964e0eed3750b20612fc2e67b\nX = 279649e2a2918e683520cde3fc98b0ae58a7100e8de35e7c9cc797b6\nY = aa4de6be34be61f02880139787b9038f4554a8ef1c994b887c2974b5\nDigest = 6571a344765c0512d3911a7724509b649a6ce4106823be76726f117f109ec0fa\nK = 8e984864f86f7a2a73f3edda17dbccd13fac8fa4b872814abf223b1b\nR = 3b18736fa11d04e27e2614cda03a63ec11a180f357b0b3192920d09c\nS = 2f0f3dbd570727b14fbb29155538e62c930dd51c4035275c1365dc60\n\nCurve = P-224\nPrivate = 026be5789886d25039c11d7d58a11a6e1d52cb1d5657561f2165b8a8\nX = 3fa617c50b177da1a2bdb98b780ad21ad1195c4bd24465f6187de3c9\nY = e3fd8d8876dfd03a4a4e31a1acad3a08d983826d286c250c4e5620c1\nDigest = 95914b17ff0362e12305d71657bbc9d919ae4aa746bf4ebe95b2d2fe7ca3f022\nK = 0128b8e3f50731eb5fcc223517fc0cf6b96cd1d2807eb4524bc46f77\nR = 3a6b633f96f3d0b6d54f7fb29ac33709e4f0dd8fa0e51606ed9765ca\nS = 63e8c119dfa51784decd864f6911f2210a80f8f02d472d88df10d119\n\nCurve = P-224\nPrivate = e79c18d935c2839644762867aa793201f96a3cde080c5968412ce784\nX = b7ae1e992b1c7fde1141f40bd913358538ca0f07f62b729f13cea327\nY = 811252d12120e04805fc171a439d382c43b68a21e1a0bdf5e4ec1da4\nDigest = 2dd97b10b2ac90709062989f57873e30696bf8376957e68f7de95aa333a67685\nK = 7abedab1d36f4f0959a03d968b27dd5708223b66e0fc48594d827361\nR = d35047d74e1e7305bb8c1a94e8ae47cb1591c3437a3e185e00afe710\nS = d9c425c9d5feb776ac8952e6c4eee0ecd68aef2f0e7bff2e49c9185e\n\nCurve = P-224\nPrivate = 0d087f9d1f8ae29c9cf791490efc4a5789a9d52038c4b1d22494ad8c\nX = cd95cf8fb1cd21690f40d647f2353672a1076cc6c46bddaad2d0fc56\nY = 934262f74d9ee0f8a2754f64cb7415923d64bf00c94a39b52803f577\nDigest = 7c74a2e71f7bb3101787517394a67d03f977c95519526b47854e417b95bf8d1b\nK = 557d0e3995dc6377b3911546dd7aeaeec62a6d8f2af6a274382fc37f\nR = 56df0ea6afdcc232ceb41729eec00cf906b69b6e28423a36d3c92cc5\nS = f4f70fd948c9a147f55317fdea7b8a84c33e721014552d5800d63edc\n\nCurve = P-224\nPrivate = 0830aebb6577d3a3be3ba54a4501c987b0e0bb593267b9bbadb66583\nX = b88652020e083ccc1c43dc83d1881884dd4c7e3b4e3460b344b1ea64\nY = 22b69b517f86d7c26dc37c0f8feb4bb07fe876149fbcc3334fd2805b\nDigest = ccc04666744685c57d2256f21cee0f53857a0528a96d59bb13cdeb92fd786d4f\nK = e4f4a3280574c704c2fde47ca81ec883d27f2c5a961a294db7cda9d2\nR = b30b8a0079d9a134b5e1618c2ac63e3fbe0e95866b9dbc5f423f2707\nS = 3dc36746610271ef66e0aa52cc2ccadc5c9b08dc769e4dc4f6538c11\n\nCurve = P-224\nPrivate = 2acc9b97e625263e8e4cd164302c7d1e078bfcdd706111a13ccda5b2\nX = ce1a06f82df874dded37cca03b56c0648e4e8917ecd40ee73ee61588\nY = ceb6177b8f1ac7c5c6e6e1f7737cc3026952ee392badd2cd7af32f9d\nDigest = 9e7d5f30677692b669e21cf5461fa7f2e887dfcbbeb2db88d666bd591a944e00\nK = e401fa80f96480d437ed4f61a783888062ec33d530b188fd48016a6d\nR = 28674f447c4742e4087bbccfb522fbad4e18b56031d2ce8f532b078a\nS = a5a7a13d15b423dd17771f73cea98d89dbffa846cc209b45c0e29b76\n\nCurve = P-224\nPrivate = f4e873d4fb944fb52323406f933815092b7672221de4d1c45917f3fc\nX = 0dc2cdddb990341adb1de73f02d87fc3822485a659a15145f4251d5f\nY = cf78b2a83c7352eda1af2c74e1804ea04b35f76c04e89d90281dc2bb\nDigest = d8978f697bef71b062d4b3211e8ab5b993c09920af803614dbb9437f6e261b70\nK = 5d1476c682a64162fd2fdc82696fc8cab1469a86f707ea2757416e40\nR = 82982b38ed465138df4018d7cfb835edcb591cb57446ca49d163782b\nS = 8ef1d7b326cabee7f7ab95b7b98d3c27a069c0fd95a1599c0ccb422b\n\nCurve = P-224\nPrivate = 62c572ee0d6f81b27e591d788bfc2f42b5105d2663078dfb58069ebd\nX = bd6ba605639b98fa8113a16a3bb004ddfaec901c98a931206165f4a5\nY = a3190b10ef39e88abd60b2293b4707512b45c6c5ed5794cc11454427\nDigest = 1a9fc0195bf0f53cebba8aa7ccc8567c680d75187392d6d8201854ec4a6e6abd349037d831809e9f3add2fc09d27e4a4\nK = 0f0bb1e428bcdebf4dc62a5278068efc0f8ce75f89e89b3630f102b2\nR = aac0ea27e129f544abcc77f110e70bbdd5aa3e425dc39d5e8887025d\nS = 10e5dd06aee6b8419a04aa33d9d5678b0039c3acc3c4b61fe106bfdc\n\nCurve = P-224\nPrivate = e2f86bf73ba9336fa023343060f038e9ad41e5fe868e9f80574619a3\nX = f5d5346f17898ea6bbdfff19c216a8757a5dc37b95315f5481628381\nY = ae61fd172ac8b7a4f13870a932dece465834cbd4f50bbcfb802c824e\nDigest = 0f236d9a43edd55dacf5ff9f93ee805395e130ca2c8ad2eaea0fdd68e2ee2fadae9f41aa46f881485db208bd9cdc463b\nK = 35724ac043e3b44b73b5a7919cf675190306d26aa67c27c28c873534\nR = 535147c265af138eec50c7fb570bcc8d2e6f675597b0fcc034e536bc\nS = 743812c188a1dddf9fb34b90738f8b2e58760d6cd20ccceb1bb9c516\n\nCurve = P-224\nPrivate = b0a203438e2586d7575bc417a4a798e47abc22aa3955b58fc2789f17\nX = dc5d217862a1e5b00c95affa9d8b925a72b9beaeb7a86dc397e788d8\nY = 5f05f8e976ae1eb1036eca6d683a82850795bf9127dee5f8b2859445\nDigest = 525b6241eb2a6dd00b55b172708aafd0775e959b7c601903f44ffcfc17ee979f34f204680f8a71044a6d7e3679a50576\nK = 408e9c8b1f33136d6ddb93ff3a498bc09d4eee99bf69cdd5af0aa5a2\nR = 1b5a964c8b1fc634c6e2b82322499df1d7f0c12a4d2a77723c816ab8\nS = cf54599a36ca064fae0aa936de5266f87704409d22a15d28c01b7f2a\n\nCurve = P-224\nPrivate = efcfa50fad6fb2065f9a55f28c0c42fa24c809ccb19b6fc6d8ffb085\nX = 61521a0cfb72be77ba33cb3b8e022743cd9130ff49e97093b71aa178\nY = ce0819aedaf6fce639d0e593f8ab0147eeb6058f5f2b448231584ea9\nDigest = 88c4b7ca396f17e82c92596c301e41d7f01810bfeb33173cc0d1fedf3fd5ace6892ba9a788de13417f0ef00ff87344fb\nK = d1eea821f286eae6ebc1f61b08f9ad4323a3787e94af4c32cd31351b\nR = b37caaa71103752ac559f9eb4943324409ebfa8b585f684dcaa5c411\nS = 7c28e7619e2944ab4b7be022878c8052ebdf2cae5dff4f976c49686a\n\nCurve = P-224\nPrivate = 61a17816937987764cdc064dc7b5b4f5b16db1023acdfe25902957dd\nX = a7e975c0a8f87c683bb8e31bc160843a7b69c945f4850bd60e1c08c0\nY = 8930a454dcc2aa13bed7ea89368b2c9d689d816b2acf4e52585ee9c4\nDigest = 3babfaba30f3300171e6adcf4f62a12287031ac40078c96b2c2c063849e9a42ef3be953dc11fb319c18bf22fe511bf37\nK = 44b1fdec2629f9075f89c134ac28ff19bfddaa", + "9db02a5d7f853582b4\nR = b0f5635d8bc9c53a1d54a3ec63de59ed66e6b2358d4ab79755414326\nS = 67c68fe265c7e5aba4232deeafb88545a2aa266fb9f2c2bb3f3ae8d2\n\nCurve = P-224\nPrivate = 79d5367314ec664aa0f6ca36f95549502a05bf8400bf532d669fab8d\nX = 3191f0237102dac159032ab2dde53cf56c9ec827b5caddfe9e83c02a\nY = b496b1bdcca4434ac0d0d91ea38ff3bc33f9f54095bfe17796d5a9e2\nDigest = 9f36da1a5653469a52f85e7e3b2a21ac3497cc00ff37e03235bbdf951695f182312ad5c8fb8a5fbd0295dc8c5acda068\nK = da529c52f5cc1f435d873109cd991d6cd7e1631d9ff1dd9521dd5db6\nR = 8e0ac63903f4921755430572c3f08bc272790639bdf1009fe2a9a714\nS = 6278c841a2d0a270791fe54b36c49d426d67907aa4e4f59c8638ad97\n\nCurve = P-224\nPrivate = 1320eedad4745121793a7eaf732b0b4498f7cb456cac8cf45a1f66f0\nX = 9fdd99906ab77fd29e9021bde947d05a7a9eb153612269bfb0899bc9\nY = 681b65b9ac8e4c2899bb622dafb253b7bf5a6e38e5f6595f997c291a\nDigest = 12532cbcfd4e80373bc235ac0bfa2a70b1044786d29f9384d555030f5df3cb5ab9f973df638b6835cb756792d1fe1a4e\nK = 66ed8d8934633f4125f593cf1b1d3745c4db1f15dde60cf46ca1c7f2\nR = 80199485a3a96447b39f7679cd47412a78675ba17dcbd10465dc5b48\nS = a251fd9f136a3cb0dd0bc80659ae032e4a761ba7045da0034553fb8c\n\nCurve = P-224\nPrivate = e18821329447d3f65ba7279e96bd4624ffa1b32b90f6e8331b1e876d\nX = 46c9ed837232c47022df2f1a1578fbe65ac9f2e81c98a74cc22ea31a\nY = 6fc5e9568ae62b31412a0b0b367242e9fd7e518c83aa06a069e1d90d\nDigest = 89030408e06cc06d3dbfb51f6725c710a2bc9db9e07ff1ec8a32a827d93d2dc951834cdb01a7afa1fe4cf4e9186ee424\nK = a4c1eb402a2fb3af26e0e14a3d2fc8ed3bc1a8b2475270356a79fdd3\nR = d478b68733d8ad44be46766e7b66af782fbdc7ff7ed0b191176da98a\nS = 5eae9160ccf71fd1d359d89cecce72ef8afaeee2365f6ba828aa450a\n\nCurve = P-224\nPrivate = f73e030d5a696b358986d3efaca121cf71f775f8835a21e6135145d7\nX = 9ca2c6ea87ac8dd3a23a5b4010841a7c8af309038882ae44634bcf55\nY = b0a347dbd5ded3b8702ac5a457e8b32bd4de06fd315095fa1b7d5fe1\nDigest = eda24262a9e64be110a6c96763e8a4b5edb38af2a084695e294593583b462c56b0db50bc014eb19278e3f3d675eb5f22\nK = e3cc786c1288ea567836c51d6d69dd0cab5c015987d936ccc3a4beb3\nR = f1234da71761b7a0f49e661a419d2a739bdc4544bf87690e3d2f96db\nS = 096d16bf8020c3d3c233894ad8eb81206010e62c6e692a215e088fd4\n\nCurve = P-224\nPrivate = 7a0789323f8741c157a1753ae165ecaf8e8b03a60561f8b80cee467c\nX = 101271a9addd4bd1f19d00bf116c8524f52cefd598e85dc381597acb\nY = 2f17d14f4d8ccb28b216553718152ba7c104646d8eca986dd9ddea39\nDigest = 983a5d16b009cc65bdf3c3badc2f21280e04f44244b70a583c2e9732534497373f51b226c3ab7bd69c6940e46bc41fa1\nK = d169f04f05b60c625cda864d187938863964dab7bb3b9dfc04b05519\nR = e4a51be686a764b709da23ab48b1985e153c6ee238d945e743907afc\nS = 118a8f1ffe3cd556ce6345bd1a398dd9cc3729b7fd6d8af9bfd82f40\n\nCurve = P-224\nPrivate = 78e795d0edb11fd9e28dc26b21e751aa89bea0d87932ef11c95c0e18\nX = 9edd544107977134bf6360d43ccabb3c94d627c03963c0a04b439627\nY = ece4c61d319a0e41f3de7863e7c355bac94395aaa74cdb5f74a87a5b\nDigest = ae7b5fde427af9c450368b11f66f49bf8c3b6e1f5abed6bb25683001924dfb005738637e1c1b7855566330d202ecc763\nK = 36f7c0f76808b826a0a974a1fd6e155e00a73f1d34674a8f88be405a\nR = 3e319444438bc2cc92f323ea842cb402b3c3c2448c89869ef7998edb\nS = 3420cc38f058f41c31e71f4b1ad488f801111c73541de69fcee60695\n\nCurve = P-224\nPrivate = bee02d8bc5bffb3fd3b4c9d6f686409f02662d10150d1e58d689966a\nX = 8848f964c847fe9dddc774618d4588c9cd56bbe588d7b1fb369c8bfa\nY = ebbb699fbd0dc08859fe9132285fe20dff3b9d561c0640b6e0717607\nDigest = 63ef787f467ff0cd6e5012b09414c00ef56dba959c4b62bf7e76a4205078d436c45591752c8d55abe728a2d28b5b0643\nK = 59f1450d857b40e5552a4b8cd4ab0df2f01716635d172c1106840f21\nR = a206d8398a16a991bc217f77f23c6f648384f254f255a8a876404444\nS = eb1169cb5b1423dc0bfaffe565ae57f986e00de06405e3e7b605862e\n\nCurve = P-224\nPrivate = dc0ddf6e501418bb8eafc5d7ccc143369e2aa441df8fc57d5f94a738\nX = 063a5d632f4144376e14cfb03ad8ccf1489b613acd184d20dff66545\nY = e77727f057b043d8a0f7458196b72e92d11f85b0891c6aaa9d915f58\nDigest = 11f0d587e82e7490af4737c272877d9d37c1e7ae7f2fd3b00d8fa0d4f2bcb3a41d5185e65604b8c411a407eb6c558954\nK = ff0e5cae2671db7a1b90e22c63e7570bdd27352d45bac31e338debe0\nR = 5bc0b4998481ecbd3b6609184a84ca41d69b08c37138097f559259f8\nS = 0df8828eb1ca85e46405b94e1a2972c34c5e620a54e2f640f04aecc5\n\nCurve = P-224\nPrivate = 229d89b2fcf8441ffc95ebb2ac2ef156e25825782044b2b8bd6a3e01\nX = de616848d8044a44789ef1ba3a6dd66fe9257ddc57f7534e59a701be\nY = 26cbf74a6d25e5b34b96d30f327abd574cff7f7dbe6686573a7d6c5c\nDigest = 537d6d3d4be3e3beaf31014dae59ca7186c1c1a32c88068ff343180a138ceb6d7c38e0ae1e9b51003b71c1a2f3a3741b\nK = 3b18ca6ec8e8e255ac88f64302745ca0b73ff94b2b2d48be95b4aaee\nR = fa94fd8b827c06115c1eefd50afc02ce5926ee0e789667783c01c34b\nS = edf766a66973cfc33e4159966c07321a7f6549c3c60e8586ef41402b\n\nCurve = P-224\nPrivate = 97d747068147c0393a0bb5c159e2c9f1bd538f6204823294883abe28\nX = 3858a576eef2ce24d01766997fb81b3f3f78b6104cd188610be221d7\nY = 95ffc677ac7bfe3e0bb4cffb17355a964c8356a807151b3cba5d1f4e\nDigest = 7e16034a71ebf52a7a6cd00fe469c6edc121b2882462176298c9443aca2a0ad6ebe2eb9e145097409873170f40d503dd\nK = c1a2ec1ef16cfd5107c892790daefbed061be78bd8576696b60f64d5\nR = 18c908541843fcdac99b9ff6bb397f3f8094d16b42670216e4eaa2d7\nS = c107a8a508ff57c5d4f78f86cc37e129c864d1c44ed5e73909613b74\n\nCurve = P-224\nPrivate = ba5374541c13597bded6880849184a593d69d3d4f0b1cb4d0919cbd6\nX = ac635fe00e8b7a3c8ef5655bdfb7f83e8532e59c0cc0b6534d810ffa\nY = 1d067aebeba66e79b28ecfe59ac6fdf5e1970dc3a84499c9d90cd8e2\nDigest = 3edbb59a32b2464291d0a96023a798c1fc6cb5ff4fcecfadcfac2be00c26fa27181aef76c96d8269aeaf2275eeacbb777abbd9571de9279edc5695a3345cad9b\nK = 187ed1f45c466cbafcd4b9577fb222408c011225dcccfd20f08b8d89\nR = f83d54945997584c923c09662c34cf9ad1e987da8bfd9be600e7a098\nS = 4ff2dba9dba992c98a095b1144a539310e1a570e20c88b7d0aa1955c\n\nCurve = P-224\nPrivate = 1e27187134d0a63542adf4665fba22f00cfc7b0a1e02effe913ceedc\nX = ecaea8ceea55c3bd418fd34a4ff2499e25e66a104eed846bc00c31d2\nY = 3933a356ab1f2dabc303ff0a5d076131e77032e6f502336883bf78a7\nDigest = 825ab979af5c263d9f074a2d771d1d1cdfa435e7938245a3c9ee30cb77ee8c1475051d2f09d7d11d920a6c754bfd253903131c491994679cafdb8cfbf32b763d\nK = 34cb597deae9a3b1cada937abcd247161b19b2b336b20e2e42ae01f1\nR = 58177ba46fb291490b39368774accf72736412c1fb5ee0f27b9b1e02\nS = 58337d78b95a080bfcabb5809bee012501b4da84b8ef310a4628f11c\n\nCurve = P-224\nPrivate = 0905b40e6c29bfcbf55e04266f68f10ca8d3905001d68bb61a27749b\nX = d656b73b131aa4c6336a57849ce0d3682b6ab2113d013711e8c29762\nY = 6328335ffc2029afbfe2a15cc5636978778c3f9dab84840b05f2e705\nDigest = d0db7c20c201cd8c63ca777293543750d7f6a9e375b056e74cfe9fb2c95b2cc9807d8a9607a5b0fad6eeda86e4f73ace139e77a5356181b8cbef3f88173253b6\nK = dc82840d147f893497a82f023d7d2cbf0a3a5b2ac6cc1b9b23e504be\nR = 583af080e0ec7c1ba5a491a84889b7b7b11ccfe18927c7c219b11757\nS = b23700035349df25d839f0973bef78a7515287de6c83707907074fa6\n\nCurve = P-224\nPrivate = afbaede5d75e4f241dd5b53220f3f5b9c1aa1d5d298e2d43236452dc\nX = fe83e59fc8ea8b939355d3258fe53a64d45f63031a0716b7cc416173\nY = f151d23060f1c856eb7f1f58be72a7228c3af89e43b56e9695b558c7\nDigest = 37d9091eddc6fc34b45cf97140e956a42ab659f6bd442e81b57c4ecfbdab45f7380a7efdbac5400ceb1bf683194232cd086c1b4e09fc9313f1bc38af731f1a98\nK = 0fbbe7b40136c81a8fb894498d5502157a1cf5a89d0643de92cd38f6\nR = 24f3f457c7b72b7e759d5a8afbf330e31c5d8d2e36f92c0e79c5d87d\nS = 36fd1193def34f12a960740fd79fb38bf2b480726ccad540eb42cdf8\n\nCurve = P-224\nPrivate = 950b07b0c2b7539a21b5135bfede214733f2e009647d38d8b21d760c\nX = f43d13bbfcee3b724063b3910fea49fd591b81e86fdb813b1a492d0c\nY = 6b4c8d6fa5dc661889e3cf5ec64997a78222837885f85d2fe9b684fb\nDigest = 8ddf64c9c67289a76c2f5b44a30b8365f4adf487b4edadada5749cad9e5765c57a348a750817a53e5c2ff551e003747ca1e3438b2aa1952c6876fda8fd8f4de2\nK = 83e110d0d1e700d2f36543028737d2a2f1474aa3b4b28998a39e4793\nR = 2685265bc878e85d10ab13293dec190881a57c4a467f8fc2170432ea\nS = 80a347bb49036522369339bd6485a967cdda818915d8eb947302fcf9\n\nCurve = P-224\nPrivate = 015bd9f5dfef393b431c3c7fced24385d861ccb563542574a5d2a9bc\nX = e868690641e2cda13b289a6c5d2fb175940396044d9cf27b4f2240af\nY = 4c78c9abdf2b7fc67ed4497001d7bcf1daca1739dc14a661f91d7c40\nDigest = 7c22f34d5897ccdf7d807f68a7f16e3093a4413625e7853401a4e0384d26893f1997c84557515f2ea66afe7629f62415e6b98e18e97dcb4fb2dec97cf2dd68d9\nK = e2374350f47c08f3c1359d4edf87e61d1ba4e7dd1540d8d9062efa79\nR = e12dc088d2bc032bb214c77d0e0fb749fc8e61ebe1ed72996f1084b6\nS = 0ab58aa31e0bba5fbc76855e6549", + "f1036fba0a589aeab978ab01b8fb\n\nCurve = P-224\nPrivate = 0a3c259df933247445acffb6d8265b601d597fb9997dc2a1eb4deef4\nX = e67f4385a9da54253cc371ee9bc6739ae6385a4b87669c7baf0c460d\nY = 2bb00b6ddd7b67d9ac5653ec04ca8529fbf16f815c04da3c2e58e82d\nDigest = 016d26cbcf55236c053ece58651183e4c81edd8f07749a5ba28d8d22a5d6a9c6b33810c9618bd9cf472006cfeb62842927d3fb677d82e09bb5134e470d481812\nK = 8bf5859665b6a23e6b05a311580f60187ba1c4ae89e44877fb48af66\nR = 653675fb993c3fa9e57b32e33029ec230b966e8077c72c1ec90ddefc\nS = 792723bf87e315147cd4303de7f1dfe95cd7658ebb95c38c1a196140\n\nCurve = P-224\nPrivate = a1c8ef463f9e7e3dd63e677412f87cf9ea4ac9a6a2dae629da5b9916\nX = 400e5cd4b315ceb309545cd3277acb70bdae2073fda6ad896ea14b27\nY = fbe1d2466cd2e116f38248bd5cabaa6cbe6c4a2694d998abd7b0c991\nDigest = 47e43ab8ebe14f0394c46b55856104211b12d8f2b075f6efa1510fed823dc121cfd9198e060839ebbdf2eb994194875c342be861bf0975665aae881f28cefbc0\nK = 82f55a25d3ed6e47c22a6eed0fa52ed0818b87d6ea7950281dfefc09\nR = 16305a46a3f6f9e216ef8f6a6f5f0760d064a885657c864e1c1ea035\nS = 58fd97050bfbca6f87e64e1458c4ad80bae26e280356da344ad3b25d\n\nCurve = P-224\nPrivate = fa511dbf6fef7e5e9c73e4555eb75d435f7884322d9faf5d78cacc0b\nX = e8dccd706c31f895f2f261ab979cbab51b8ae28196bcc12a42046380\nY = ec246be8e71ea3859cb717a59990fe22e4b76858ff49becd70739a01\nDigest = d86bfb4fc2ae431617d8800e44b37a5b549775c78e90eaec58b42aebafed731b3123a82fab13254783e24c28db715c53f6538a2961cc888638eab768ee6b66c0\nK = a37d665fe4314aa4cd03eb8e6a1f366b43e11fdb419c96b48f787b62\nR = 05e4909bcc172ab4140be291aad4660e375032bce2d762b6269ba764\nS = e347a1c9d3670690e1d8d1d4cd9579848f442199c10526488da5cebf\n\nCurve = P-224\nPrivate = a58bd53646400a646f0e4208320dc679a9664d1c6bfb27fdc8eac7ea\nX = e22e0dc4ecd96eb0071b72ba4b4988bf784f3fe73cb81bfb93d9ac4f\nY = b3e213e518bee1367a4fb3703b9008bac9d95a1fc4aa61225fff9f3c\nDigest = e537383a08a421bf1f29e07554387bd32d685c2a5830b157df1e83c0f3c78cd11e5a5cc62830a45d7eb71920a2d13ca9cc1eec020c9db49a07d1c91433b31e2c\nK = 42c5b6f87d3bb1ed74f5ee8398d8f8c61e9e50ffa7a1da12d39893f9\nR = 5c0e5c6f057de1e99ef5d237a60d7a07fa9a42b120a82f573d9fb7b2\nS = 2fffc0bf550bd2f650fed085a84501cacfa6a1bb984df1f9237eaa59\n\nCurve = P-224\nPrivate = 64bd4452b572cc95510ac2e572f41136299ff17f6e8448f4ffb571d0\nX = 92521fa25c2e034d127e0921efdb167f0b2ff8b20504487ed87fa264\nY = e72c770e37375ad7dc2c4e63e5701826f6606f6ffb9461ee61b4e872\nDigest = e7a2242c4409f1eefabffc48014a00424ae3b38c39651227d033b464c2ed4a365841499048b8e491506657e40548a104b4d9d08dc86b6d6dd43af27730788639\nK = eaf76ee4d7e00d13d8a6d03dffd07ad9a8bb6dc8176c9f93059b1b7f\nR = cf5058e2a6cf5e61a138b013eb292f38a1b9f07239ae5941dbce8919\nS = d14198621650d985d270bc997da6e78588fd0ef843b874c66a3de3c3\n\nCurve = P-224\nPrivate = 7f3edb710df9d982f486233d0c176aa88f5a0ee81efa9b8145020294\nX = e7611e013e7b43ff5b8b57ad83333bffcc9e469ad23070b5791dc594\nY = 7784da0a11dbe16208c6e0b6d5029e71fbec4dffc9fa046d3eeb71c9\nDigest = 8b751b00d1bb15cc16f6ea2e67b3235c9a50e8cb602eb20dd846c92375ef8446bf1ff1c77fdbc93cfb7d4e845774a27983aaf3fad289ba8495183d03e8b3bbe0\nK = 94db7ef9a232593091eb9a74f289529c7e0d7fef21f80b3c8556b75e\nR = a971f45bab10b1d16d7234ca8e4ec987da20d9e867f28aa063296e23\nS = e38c538d65a7e1a28fd3ec53f015a7e5beb60e9d309f1e3ba4b2c3d2\n\nCurve = P-224\nPrivate = b569f8296ff1d9cc01fffd9919016e5730c1858bdb7b99527153751a\nX = 242f34959516a4706172f7dede23110efa314bff22eb320ab88feeff\nY = 45e3227710900a8acfc9bcce728119d042f64ca40876c2b380ee46e0\nDigest = 89670327dfc4c3a20cd71c6943d3404c34c4b2267b892ae69dee792107ea19e90cc792c3ab886e6c1247e37c3eae8d81cff87b24e06f476e32dae64303349a23\nK = ae61523866a8f43e6cdd42ba27a34ed06527e8a5842901a64c393f76\nR = c2732a4e0815f9f785500e80147e9486994446beccf8a6a352b97585\nS = 6ecaece6487d7920e398f7f951ab7c7aba5832dabf03704106ad1244\n\nCurve = P-224\nPrivate = 41a4dd8eee39232b728516e2f21e66011e7426a6b25986c3ffa237e4\nX = c32988171caab178bf50dc7310bc7f604df5a9d19a8e602519c72d8a\nY = f8985d112ad9de05969e5364d943c1cc5cd198359f4c62b19da0e117\nDigest = e94800f0b0272d7e59c7e2614318df5652261e89c47fbd0c01b016e569825a4a1b0631e0749dca72b47a4edaac6e6463c7b1c8c3038b20d06d160fc0e1c217e3\nK = 827d4999da81fa920c8492ccc1e2d5cdafed9754cf7382a859952071\nR = 89c61da7422ccd676baec07e2185c12e947a2374eede87847304be6c\nS = 2685379624717ea28422e8d001c090405a130b4ef9f1ac726c3ca502\n\nCurve = P-224\nPrivate = 67fa50569257c8cc89ac0325db4902003a62f30b917f53e4035a7e04\nX = 6773a0436a9c42635730413b19aa4166f08c69c0e5002953da42253b\nY = 555138290b093bf2fe79acda9131d920cd1e7ac43fb8775776cd713c\nDigest = 0bc258cd68474b7df93d2b3209048f571fb0fad76e4c1a5d6e0fc83c2aaff5e50fc978c36a47fb2c0163ad47333b78ed08e07fc21ba2230356a54885a8df2fe5\nK = 557cb45fd3a30b3bdbf08c56eabbd4478736024aaa52bf8448096453\nR = 8e92cf7a674aa5f7542dd95c695589a05747431692edd04804299b8f\nS = af4908b41f8180b71a6ff10fd51f3d143147af6ddddf7534d3284ed9\n\nCurve = P-256\nPrivate = 708309a7449e156b0db70e5b52e606c7e094ed676ce8953bf6c14757c826f590\nX = 29578c7ab6ce0d11493c95d5ea05d299d536801ca9cbd50e9924e43b733b83ab\nY = 08c8049879c6278b2273348474158515accaa38344106ef96803c5a05adc4800\nDigest = 5e53611194b517b0ef4f704684850dfa387f99997d586d43c9e41530\nK = 58f741771620bdc428e91a32d86d230873e9140336fcfb1e122892ee1d501bdc\nR = 4a19274429e40522234b8785dc25fc524f179dcc95ff09b3c9770fc71f54ca0d\nS = 58982b79a65b7320f5b92d13bdaecdd1259e760f0f718ba933fd098f6f75d4b7\n\nCurve = P-256\nPrivate = 90c5386100b137a75b0bb495002b28697a451add2f1f22cb65f735e8aaeace98\nX = 4a92396ff7930b1da9a873a479a28a9896af6cc3d39345b949b726dc3cd978b5\nY = 475abb18eaed948879b9c1453e3ef2755dd90f77519ec7b6a30297aad08e4931\nDigest = 50be7b4f0e1fa36f06eb430ad4afe8f0cea2b97e060230f91ed1922b\nK = 36f853b5c54b1ec61588c9c6137eb56e7a708f09c57513093e4ecf6d739900e5\nR = 38b29558511061cfabdc8e5bb65ac2976d1aa2ba9a5deab8074097b2172bb9ad\nS = 0de2cde610502b6e03c0b23602eafbcd3faf886c81d111d156b7aa550f5bcd51\n\nCurve = P-256\nPrivate = a3a43cece9c1abeff81099fb344d01f7d8df66447b95a667ee368f924bccf870\nX = 5775174deb0248112e069cb86f1546ac7a78bc2127d0cb953bad46384dd6be5b\nY = a27020952971cc0b0c3abd06e9ca3e141a4943f560564eba31e5288928bc7ce7\nDigest = f51177ab6c34bf80ea72d687a670e4102987d1378bd9a4d973af4dad\nK = a0d9a7a245bd9b9aa86cecb89341c9de2e4f9b5d095a8150826c7ba7fb3e7df7\nR = b02a440add66a9ff9c3c0e9acf1be678f6bd48a10cbdec2ad6d186ffe05f3f2a\nS = a98bea42aec56a1fcecec00a1cc69b01fcbcf5de7ac1b2f2dcc09b6db064f92b\n\nCurve = P-256\nPrivate = 7bbc8ff13f6f921f21e949b224c16b7176c5984d312b671cf6c2e4841135fc7f\nX = f888e913ec6f3cd8b31eb89e4f8aaa8887d30ae5348ed7118696949d5b8cc7c1\nY = 08895d09620500d244e5035e262dea3f2867cd8967b226324d5c05220d8b410c\nDigest = 03bf686dab49196f887f3a8083f1a39e26085127a9d9e6a78f22f652\nK = 21c942f3b487accbf7fadc1c4b7a6c7567ce876c195022459fa1ebf6d04ffbaa\nR = 2e6cc883b8acc904ee9691ef4a9f1f5a9e5fbfde847cda3be833f949fb9c7182\nS = 2ac48f7a930912131a8b4e3ab495307817c465d638c2a9ea5ae9e2808806e20a\n\nCurve = P-256\nPrivate = daf5ec7a4eebc20d9485796c355b4a65ad254fe19b998d0507e91ea24135f45d\nX = 137c465085c1b1b8cccbe9fccbe9d0295a331aaf332f3ed2e285d16e574b943b\nY = d3e8d5a24cd218c19760b0e85b35a8569945aa857cbf0fd6a3ce127581b217b6\nDigest = 40a7ece19f7f6a6473b209a7ac9441d59b00fc94ae0ded3423427c12\nK = 343251dffa56e6a612fec7b078f9c3819eab402a72686b894a47a08fd97e6c23\nR = 775e25a296bd259510ae9375f548997bec8a744900022945281dc8c4d94f2b5b\nS = d87592ceab773ae103daebbb56a04144aaccb1e14efc1024dc36c0e382df1f70\n\nCurve = P-256\nPrivate = 8729a8396f262dabd991aa404cc1753581cea405f0d19222a0b3f210de8ee3c5\nX = 82b1f1a7af9b48ca8452613d7032beb0e4f28fe710306aeccc959e4d03662a35\nY = 5e39f33574097b8d32b471a591972496f5d44db344c037d13f06fafc75f016fd\nDigest = f6c083325d6316e337c102b16bb96faa478a43b2dc0d56d51a4affed\nK = 6de9e21f0b2cacc1762b3558fd44d3cf156b85dbef430dd28d59713bfb9cfa0b\nR = a754b42720e71925d51fcef76151405a3696cc8f9fc9ca7b46d0b16edd7fb699\nS = 603924780439cc16ac4cf97c2c3065bc95353aa9179d0ab5f0322ca82f851cf2\n\nCurve = P-256\nPrivate = f1b62413935fc589ad2280f6892599ad994dae8ca3655ed4f7318cc89b61aa96\nX = e0bbfe4016eea93e6f509518cbffc25d492de6ebbf80465a461caa5bdc018159\nY = 3231ee7a119d84fa56e3034d50fea85929aec2eb437abc7646821e1bf805fb50\nDigest = 6890736262386d60424be27b3f95996ab696e1ddffdc4a03c256a7c0\nK = 7a33eeb9f469afd55de2fb786847a1d3e7797929305c0f90d953b6f143bb8fc6\nR = 96d1c9399948254ea381631fc0f43ea808110506db8aacf081df5535ac5eb8ad\n", + "S = 73bf3691260dddd9997c97313f2a70783eacf8d15bdfb34bb13025cdfae72f70\n\nCurve = P-256\nPrivate = 4caaa26f93f009682bbba6db6b265aec17b7ec1542bda458e8550b9e68eed18d\nX = e3c58c1c254d11c7e781ad133e4c36dd1b5de362120d336a58e7b68813f3fbee\nY = 59760db66120afe0d962c81a8e5586588fd19de2f40556371611c73af22c8a68\nDigest = e8ed2e73fe9e3c6bb087c5179bb357be4cd147bc66e70dc1fecc10fd\nK = c0d37142dc8b0d614fad20c4d35af6eb819e259e513ddeac1e1c273e7e1dc1bb\nR = 25dd8e4086c62a40d2a310e2f90f6af5cb7e677b4dfdb4dc4e99e23ea2f0e6dc\nS = 90ad62c179b0c9d61f521dde1cd762bfd224b5525c39c3706f2549313ddb4f39\n\nCurve = P-256\nPrivate = 7af4b150bb7167cb68037f280d0823ce5320c01a92b1b56ee1b88547481b1de9\nX = cb3634ec4f0cbb99986be788f889e586026d5a851e80d15382f1bdb1bda2bc75\nY = 51e4e43bc16fb114896b18198a1aebe6054ba20ed0c0317c1b8776158c0e6bfb\nDigest = ca7e8c8c873346c85db9ac648509c8ccc9ab5651d91e35a248b951fb\nK = 98edd59fafbcaee5f64e84eb5ed59fff45d14aabada47cee2fa674377173627a\nR = 261a1cdb0fd93c0fb06ea6068b6b03c330a12f621a7eba76682a1d152c0e8d08\nS = 7ca049bad54feee101d6db807635ffb8bdb05a38e445c8c3d65d60df143514c5\n\nCurve = P-256\nPrivate = 52ad53e849e30bec0e6345c3e9d98ebc808b19496c1ef16d72ab4a00bbb8c634\nX = 7cca1334bfc2a78728c50b370399be3f9690d445aa03c701da643eeb0b0f7fa8\nY = 3f7522238668e615405e49b2f63faee58286000a30cdb4b564ac0df99bc8950f\nDigest = 3367c395a9ad7b8214c48658f2a4b377b6b0288ba272a4fbfeaa48df\nK = 8650c30712fc253610884fbba4a332a4574d4b7822f7776cab1df8f5fa05442a\nR = a18194c7ac5829afc408d78dde19542837e7be82706c3941b2d9c5e036bb51e0\nS = 188ead1cdf7c1d21114ff56d0421ffd501ab978ef58337462c0fa736d86299af\n\nCurve = P-256\nPrivate = 80754962a864be1803bc441fa331e126005bfc6d8b09ed38b7e69d9a030a5d27\nX = 0aaeed6dd1ae020d6eefc98ec4241ac93cbd3c8afed05bb28007e7da5727571b\nY = 2dda1d5b7872eb94dfffb456115037ff8d3e72f8ebdd8fcfc42391f96809be69\nDigest = a36a7d6424763633320ca799667f1b79955f079fb1b6dc264058af41\nK = 738e050aeefe54ecba5be5f93a97bbcb7557d701f9da2d7e88483454b97b55a8\nR = 8cb9f41dfdcb9604e0725ac9b78fc0db916dc071186ee982f6dba3da36f02efa\nS = 5c87fe868fd4282fb114f5d70e9590a10a5d35cedf3ff6402ba5c4344738a32e\n\nCurve = P-256\nPrivate = cfa8c8bd810eb0d73585f36280ecdd296ee098511be8ad5eac68984eca8eb19d\nX = c227a2af15dfa8734e11c0c50f77e24e77ed58dd8cccf1b0e9fa06bee1c64766\nY = b686592ce3745eb300d2704083db55e1fa8274e4cb7e256889ccc0bb34a60570\nDigest = 864f18aa83fd3af6cdf6ac7f8526062d0c48a8d3c341cc23d53be864\nK = 2d6b449bb38b543d6b6d34ff8cb053f5e5b337f949b069b21f421995ebb28823\nR = 5e89d3c9b103c2fa3cb8cebeec23640acda0257d63ffbe2d509bfc49fab1dca6\nS = d70c5b1eeb29e016af9925798d24e166c23d58fedd2f1a3bbdb1ef78cdbfb63a\n\nCurve = P-256\nPrivate = b2021e2665ce543b7feadd0cd5a4bd57ffcc5b32deb860b4d736d9880855da3c\nX = 722e0abad4504b7832a148746153777694714eca220eced2b2156ca64cfed3dd\nY = f0351b357b3081e859c46cad5328c5afa10546e92bc6c3fd541796ac30397a75\nDigest = 916924fcced069bf6956eeb4e8f09dc9bf928e8a690111b699e39eab\nK = b15bbce4b382145de7ecd670d947e77555ef7cd1693bd53c694e2b52b04d10e1\nR = 9d086dcd22da165a43091991bede9c1c14515e656633cb759ec2c17f51c35253\nS = 23595ad1cb714559faaecaf946beb9a71e584616030ceaed8a8470f4bf62768f\n\nCurve = P-256\nPrivate = 0c9bce6a568ca239395fc3552755575cbcdddb1d89f6f5ab354517a057b17b48\nX = 4814d454495df7103e2da383aba55f7842fd84f1750ee5801ad32c10d0be6c7d\nY = a0bd039d5097c8f0770477f6b18d247876e88e528bf0453eab515ffab8a9eda3\nDigest = ec2fb907b92865e501ce97f703cf6214a6de2303df472ba58145af16\nK = d414f1525cdcc41eba1652de017c034ebcc7946cb2efe4713d09f67c85b83153\nR = 84db02c678f9a21208cec8564d145a35ba8c6f26b4eb7e19522e439720dae44c\nS = 537c564da0d2dc5ac4376c5f0ca3b628d01d48df47a83d842c927e4d6db1e16d\n\nCurve = P-256\nPrivate = 1daa385ec7c7f8a09adfcaea42801a4de4c889fb5c6eb4e92bc611d596d68e3f\nX = f04e9f2831d9697ae146c7d4552e5f91085cc46778400b75b76f00205252941d\nY = bd267148174cd0c2b019cd0a5256e2f3f889d1e597160372b5a1339c8d787f10\nDigest = b047a2a715335a1cc255beb983355e7d1363c610bf56df45d4503e69\nK = 7707db348ee6f60365b43a2a994e9b40ed56fe03c2c31c7e781bc4ffadcba760\nR = 5d95c385eeba0f15db0b80ae151912409128c9c80e554246067b8f6a36d85ea5\nS = db5d8a1e345f883e4fcb3871276f170b783c1a1e9da6b6615913368a8526f1c3\n\nCurve = P-256\nPrivate = 519b423d715f8b581f4fa8ee59f4771a5b44c8130b4e3eacca54a56dda72b464\nX = 1ccbe91c075fc7f4f033bfa248db8fccd3565de94bbfb12f3c59ff46c271bf83\nY = ce4014c68811f9a21a1fdb2c0e6113e06db7ca93b7404e78dc7ccd5ca89a4ca9\nDigest = 44acf6b7e36c1342c2c5897204fe09504e1e2efb1a900377dbc4e7a6a133ec56\nK = 94a1bbb14b906a61a280f245f9e93c7f3b4a6247824f5d33b9670787642a68de\nR = f3ac8061b514795b8843e3d6629527ed2afd6b1f6a555a7acabb5e6f79c8c2ac\nS = 8bf77819ca05a6b2786c76262bf7371cef97b218e96f175a3ccdda2acc058903\n\nCurve = P-256\nPrivate = 0f56db78ca460b055c500064824bed999a25aaf48ebb519ac201537b85479813\nX = e266ddfdc12668db30d4ca3e8f7749432c416044f2d2b8c10bf3d4012aeffa8a\nY = bfa86404a2e9ffe67d47c587ef7a97a7f456b863b4d02cfc6928973ab5b1cb39\nDigest = 9b2db89cb0e8fa3cc7608b4d6cc1dec0114e0b9ff4080bea12b134f489ab2bbc\nK = 6d3e71882c3b83b156bb14e0ab184aa9fb728068d3ae9fac421187ae0b2f34c6\nR = 976d3a4e9d23326dc0baa9fa560b7c4e53f42864f508483a6473b6a11079b2db\nS = 1b766e9ceb71ba6c01dcd46e0af462cd4cfa652ae5017d4555b8eeefe36e1932\n\nCurve = P-256\nPrivate = e283871239837e13b95f789e6e1af63bf61c918c992e62bca040d64cad1fc2ef\nX = 74ccd8a62fba0e667c50929a53f78c21b8ff0c3c737b0b40b1750b2302b0bde8\nY = 29074e21f3a0ef88b9efdf10d06aa4c295cc1671f758ca0e4cd108803d0f2614\nDigest = b804cf88af0c2eff8bbbfb3660ebb3294138e9d3ebd458884e19818061dacff0\nK = ad5e887eb2b380b8d8280ad6e5ff8a60f4d26243e0124c2f31a297b5d0835de2\nR = 35fb60f5ca0f3ca08542fb3cc641c8263a2cab7a90ee6a5e1583fac2bb6f6bd1\nS = ee59d81bc9db1055cc0ed97b159d8784af04e98511d0a9a407b99bb292572e96\n\nCurve = P-256\nPrivate = a3d2d3b7596f6592ce98b4bfe10d41837f10027a90d7bb75349490018cf72d07\nX = 322f80371bf6e044bc49391d97c1714ab87f990b949bc178cb7c43b7c22d89e1\nY = 3c15d54a5cc6b9f09de8457e873eb3deb1fceb54b0b295da6050294fae7fd999\nDigest = 85b957d92766235e7c880ac5447cfbe97f3cb499f486d1e43bcb5c2ff9608a1a\nK = 24fc90e1da13f17ef9fe84cc96b9471ed1aaac17e3a4bae33a115df4e5834f18\nR = d7c562370af617b581c84a2468cc8bd50bb1cbf322de41b7887ce07c0e5884ca\nS = b46d9f2d8c4bf83546ff178f1d78937c008d64e8ecc5cbb825cb21d94d670d89\n\nCurve = P-256\nPrivate = 53a0e8a8fe93db01e7ae94e1a9882a102ebd079b3a535827d583626c272d280d\nX = 1bcec4570e1ec2436596b8ded58f60c3b1ebc6a403bc5543040ba82963057244\nY = 8af62a4c683f096b28558320737bf83b9959a46ad2521004ef74cf85e67494e1\nDigest = 3360d699222f21840827cf698d7cb635bee57dc80cd7733b682d41b55b666e22\nK = 5d833e8d24cc7a402d7ee7ec852a3587cddeb48358cea71b0bedb8fabe84e0c4\nR = 18caaf7b663507a8bcd992b836dec9dc5703c080af5e51dfa3a9a7c387182604\nS = 77c68928ac3b88d985fb43fb615fb7ff45c18ba5c81af796c613dfa98352d29c\n\nCurve = P-256\nPrivate = 4af107e8e2194c830ffb712a65511bc9186a133007855b49ab4b3833aefc4a1d\nX = a32e50be3dae2c8ba3f5e4bdae14cf7645420d425ead94036c22dd6c4fc59e00\nY = d623bf641160c289d6742c6257ae6ba574446dd1d0e74db3aaa80900b78d4ae9\nDigest = c413c4908cd0bc6d8e32001aa103043b2cf5be7fcbd61a5cec9488c3a577ca57\nK = e18f96f84dfa2fd3cdfaec9159d4c338cd54ad314134f0b31e20591fc238d0ab\nR = 8524c5024e2d9a73bde8c72d9129f57873bbad0ed05215a372a84fdbc78f2e68\nS = d18c2caf3b1072f87064ec5e8953f51301cada03469c640244760328eb5a05cb\n\nCurve = P-256\nPrivate = 78dfaa09f1076850b3e206e477494cddcfb822aaa0128475053592c48ebaf4ab\nX = 8bcfe2a721ca6d753968f564ec4315be4857e28bef1908f61a366b1f03c97479\nY = 0f67576a30b8e20d4232d8530b52fb4c89cbc589ede291e499ddd15fe870ab96\nDigest = 88fc1e7d849794fc51b135fa135deec0db02b86c3cd8cebdaa79e8689e5b2898\nK = 295544dbb2da3da170741c9b2c6551d40af7ed4e891445f11a02b66a5c258a77\nR = c5a186d72df452015480f7f338970bfe825087f05c0088d95305f87aacc9b254\nS = 84a58f9e9d9e735344b316b1aa1ab5185665b85147dc82d92e969d7bee31ca30\n\nCurve = P-256\nPrivate = 80e692e3eb9fcd8c7d44e7de9f7a5952686407f90025a1d87e52c7096a62618a\nX = a88bc8430279c8c0400a77d751f26c0abc93e5de4ad9a4166357952fe041e767\nY = 2d365a1eef25ead579cc9a069b6abc1b16b81c35f18785ce26a10ba6d1381185\nDigest = 41fa8d8b4cd0a5fdf021f4e4829d6d1e996bab6b4a19dcb85585fe76c582d2bc\nK = 7c80fd66d62cc076cef2d030c17c0a69c99611549cb32c4ff662475adbe84b22\nR = 9d0c6afb6df3bced455b459cc21387e14929392664bb8741a3693a1795ca6902\nS = d7f9ddd191f1f412869429209ee3814c75c72fa46a9cccf804a2f5cc0b7e739f\n\nCurve = P-256\nPrivate = 5e666c0db0214c3b62", + "7a8e48541cc84a8b6fd15f300da4dff5d18aec6c55b881\nX = 1bc487570f040dc94196c9befe8ab2b6de77208b1f38bdaae28f9645c4d2bc3a\nY = ec81602abd8345e71867c8210313737865b8aa186851e1b48eaca140320f5d8f\nDigest = 2d72947c1731543b3d62490866a893952736757746d9bae13e719079299ae192\nK = 2e7625a48874d86c9e467f890aaa7cd6ebdf71c0102bfdcfa24565d6af3fdce9\nR = 2f9e2b4e9f747c657f705bffd124ee178bbc5391c86d056717b140c153570fd9\nS = f5413bfd85949da8d83de83ab0d19b2986613e224d1901d76919de23ccd03199\n\nCurve = P-256\nPrivate = f73f455271c877c4d5334627e37c278f68d143014b0a05aa62f308b2101c5308\nX = b8188bd68701fc396dab53125d4d28ea33a91daf6d21485f4770f6ea8c565dde\nY = 423f058810f277f8fe076f6db56e9285a1bf2c2a1dae145095edd9c04970bc4a\nDigest = e138bd577c3729d0e24a98a82478bcc7482499c4cdf734a874f7208ddbc3c116\nK = 62f8665fd6e26b3fa069e85281777a9b1f0dfd2c0b9f54a086d0c109ff9fd615\nR = 1cc628533d0004b2b20e7f4baad0b8bb5e0673db159bbccf92491aef61fc9620\nS = 880e0bbf82a8cf818ed46ba03cf0fc6c898e36fca36cc7fdb1d2db7503634430\n\nCurve = P-256\nPrivate = b20d705d9bd7c2b8dc60393a5357f632990e599a0975573ac67fd89b49187906\nX = 51f99d2d52d4a6e734484a018b7ca2f895c2929b6754a3a03224d07ae61166ce\nY = 4737da963c6ef7247fb88d19f9b0c667cac7fe12837fdab88c66f10d3c14cad1\nDigest = 17b03f9f00f6692ccdde485fc63c4530751ef35da6f71336610944b0894fcfb8\nK = 72b656f6b35b9ccbc712c9f1f3b1a14cbbebaec41c4bca8da18f492a062d6f6f\nR = 9886ae46c1415c3bc959e82b760ad760aab66885a84e620aa339fdf102465c42\nS = 2bf3a80bc04faa35ebecc0f4864ac02d349f6f126e0f988501b8d3075409a26c\n\nCurve = P-256\nPrivate = d4234bebfbc821050341a37e1240efe5e33763cbbb2ef76a1c79e24724e5a5e7\nX = 8fb287f0202ad57ae841aea35f29b2e1d53e196d0ddd9aec24813d64c0922fb7\nY = 1f6daff1aa2dd2d6d3741623eecb5e7b612997a1039aab2e5cf2de969cfea573\nDigest = c25beae638ff8dcd370e03a6f89c594c55bed1277ee14d83bbb0ef783a0517c7\nK = d926fe10f1bfd9855610f4f5a3d666b1a149344057e35537373372ead8b1a778\nR = 490efd106be11fc365c7467eb89b8d39e15d65175356775deab211163c2504cb\nS = 644300fc0da4d40fb8c6ead510d14f0bd4e1321a469e9c0a581464c7186b7aa7\n\nCurve = P-256\nPrivate = b58f5211dff440626bb56d0ad483193d606cf21f36d9830543327292f4d25d8c\nX = 68229b48c2fe19d3db034e4c15077eb7471a66031f28a980821873915298ba76\nY = 303e8ee3742a893f78b810991da697083dd8f11128c47651c27a56740a80c24c\nDigest = 5eb28029ebf3c7025ff2fc2f6de6f62aecf6a72139e1cba5f20d11bbef036a7f\nK = e158bf4a2d19a99149d9cdb879294ccb7aaeae03d75ddd616ef8ae51a6dc1071\nR = e67a9717ccf96841489d6541f4f6adb12d17b59a6bef847b6183b8fcf16a32eb\nS = 9ae6ba6d637706849a6a9fc388cf0232d85c26ea0d1fe7437adb48de58364333\n\nCurve = P-256\nPrivate = 54c066711cdb061eda07e5275f7e95a9962c6764b84f6f1f3ab5a588e0a2afb1\nX = 0a7dbb8bf50cb605eb2268b081f26d6b08e012f952c4b70a5a1e6e7d46af98bb\nY = f26dd7d799930062480849962ccf5004edcfd307c044f4e8f667c9baa834eeae\nDigest = 12135386c09e0bf6fd5c454a95bcfe9b3edb25c71e455c73a212405694b29002\nK = 646fe933e96c3b8f9f507498e907fdd201f08478d0202c752a7c2cfebf4d061a\nR = b53ce4da1aa7c0dc77a1896ab716b921499aed78df725b1504aba1597ba0c64b\nS = d7c246dc7ad0e67700c373edcfdd1c0a0495fc954549ad579df6ed1438840851\n\nCurve = P-256\nPrivate = 34fa4682bf6cb5b16783adcd18f0e6879b92185f76d7c920409f904f522db4b1\nX = 105d22d9c626520faca13e7ced382dcbe93498315f00cc0ac39c4821d0d73737\nY = 6c47f3cbbfa97dfcebe16270b8c7d5d3a5900b888c42520d751e8faf3b401ef4\nDigest = aea3e069e03c0ff4d6b3fa2235e0053bbedc4c7e40efbc686d4dfb5efba4cfed\nK = a6f463ee72c9492bc792fe98163112837aebd07bab7a84aaed05be64db3086f4\nR = 542c40a18140a6266d6f0286e24e9a7bad7650e72ef0e2131e629c076d962663\nS = 4f7f65305e24a6bbb5cff714ba8f5a2cee5bdc89ba8d75dcbf21966ce38eb66f\n\nCurve = P-256\nPrivate = b6faf2c8922235c589c27368a3b3e6e2f42eb6073bf9507f19eed0746c79dced\nX = e0e7b99bc62d8dd67883e39ed9fa0657789c5ff556cc1fd8dd1e2a55e9e3f243\nY = 63fbfd0232b95578075c903a4dbf85ad58f8350516e1ec89b0ee1f5e1362da69\nDigest = d9c83b92fa0979f4a5ddbd8dd22ab9377801c3c31bf50f932ace0d2146e2574da0d5552dbed4b18836280e9f94558ea6\nK = 9980b9cdfcef3ab8e219b9827ed6afdd4dbf20bd927e9cd01f15762703487007\nR = f5087878e212b703578f5c66f434883f3ef414dc23e2e8d8ab6a8d159ed5ad83\nS = 306b4c6c20213707982dffbb30fba99b96e792163dd59dbe606e734328dd7c8a\n\nCurve = P-256\nPrivate = 118958fd0ff0f0b0ed11d3cf8fa664bc17cdb5fed1f4a8fc52d0b1ae30412181\nX = afda82260c9f42122a3f11c6058839488f6d7977f6f2a263c67d06e27ea2c355\nY = 0ae2bbdd2207c590332c5bfeb4c8b5b16622134bd4dc55382ae806435468058b\nDigest = 76c8df4563375d34656f2d1dd3445c9d9f0c8da59dc015fa6122237e1a02039998c16b3935e281160923c6e21115d0a9\nK = 23129a99eeda3d99a44a5778a46e8e7568b91c31fb7a8628c5d9820d4bed4a6b\nR = e446600cab1286ebc3bb332012a2f5cc33b0a5ef7291d5a62a84de5969d77946\nS = cf89b12793ee1792eb26283b48fa0bdcb45ae6f6ad4b02564bf786bb97057d5a\n\nCurve = P-256\nPrivate = 3e647357cd5b754fad0fdb876eaf9b1abd7b60536f383c81ce5745ec80826431\nX = 702b2c94d039e590dd5c8f9736e753cf5824aacf33ee3de74fe1f5f7c858d5ed\nY = 0c28894e907af99fb0d18c9e98f19ac80dd77abfa4bebe45055c0857b82a0f4d\nDigest = bad1b2c4c35c54eede5d9dee6f6821bb0254395ae6a689ae7289790448ff787ea4e495ea418c0759c51144a74eba3ac9\nK = 9beab7722f0bcb468e5f234e074170a60225255de494108459abdf603c6e8b35\nR = c4021fb7185a07096547af1fb06932e37cf8bd90cf593dea48d48614fa237e5e\nS = 7fb45d09e2172bec8d3e330aa06c43fbb5f625525485234e7714b7f6e92ba8f1\n\nCurve = P-256\nPrivate = 76c17c2efc99891f3697ba4d71850e5816a1b65562cc39a13da4b6da9051b0fd\nX = d12512e934c367e4c4384dbd010e93416840288a0ba00b299b4e7c0d91578b57\nY = ebf8835661d9b578f18d14ae4acf9c357c0dc8b7112fc32824a685ed72754e23\nDigest = c248cc5eb23ed0f6f03de308fffed1e5fdd918aef379946d7b66b8924dc38306feb28e85cc5ab5d7a3a0e55087ddecde\nK = 77cffa6f9a73904306f9fcd3f6bbb37f52d71e39931bb4aec28f9b076e436ccf\nR = 4d5a9d95b0f09ce8704b0f457b39059ee606092310df65d3f8ae7a2a424cf232\nS = 7d3c014ca470a73cef1d1da86f2a541148ad542fbccaf9149d1b0b030441a7eb\n\nCurve = P-256\nPrivate = 67b9dea6a575b5103999efffce29cca688c781782a41129fdecbce76608174de\nX = b4238b029fc0b7d9a5286d8c29b6f3d5a569e9108d44d889cd795c4a385905be\nY = 8cb3fff8f6cca7187c6a9ad0a2b1d9f40ae01b32a7e8f8c4ca75d71a1fffb309\nDigest = b05d944f6752bfe003526499bb4d8721c0d25a7901999f67519b17665e907cd148b2ff1b451248d292866bcc81b506d9\nK = d02617f26ede3584f0afcfc89554cdfb2ae188c192092fdde3436335fafe43f1\nR = 26fd9147d0c86440689ff2d75569795650140506970791c90ace0924b44f1586\nS = 00a34b00c20a8099df4b0a757cbef8fea1cb3ea7ced5fbf7e987f70b25ee6d4f\n\nCurve = P-256\nPrivate = ecf644ea9b6c3a04fdfe2de4fdcb55fdcdfcf738c0b3176575fa91515194b566\nX = c3bdc7c795ec94620a2cfff614c13a3390a5e86c892e53a24d3ed22228bc85bf\nY = 70480fc5cf4aacd73e24618b61b5c56c1ced8c4f1b869580ea538e68c7a61ca3\nDigest = 847325a13b72de5a15cd899ced0920b8543ab26f9d3877fde99c5018efc78ddf14c00f88b06af7971181923aa46624d4\nK = 53291d51f68d9a12d1dcdc58892b2f786cc15f631f16997d2a49bace513557d4\nR = a860c8b286edf973ce4ce4cf6e70dc9bbf3818c36c023a845677a9963705df8b\nS = 5630f986b1c45e36e127dd7932221c4272a8cc6e255e89f0f0ca4ec3a9f76494\n\nCurve = P-256\nPrivate = 4961485cbc978f8456ec5ac7cfc9f7d9298f99415ecae69c8491b258c029bfee\nX = 8d40bf2299e05d758d421972e81cfb0cce68b949240dc30f315836acc70bef03\nY = 5674e6f77f8b46f46cca937d83b128dffbe9bd7e0d3d08aa2cbbfdfb16f72c9a\nDigest = fd30608cf408dac5886ca156bdce7f75067e18172af79ca84f8d60d011b8a6b5ea33a92554d1ea34b105d5bd09062d47\nK = 373a825b5a74b7b9e02f8d4d876b577b4c3984168d704ba9f95b19c05ed590af\nR = ef6fb386ad044b63feb7445fa16b10319018e9cea9ef42bca83bdad01992234a\nS = ac1f42f652eb1786e57be01d847c81f7efa072ba566d4583af4f1551a3f76c65\n\nCurve = P-256\nPrivate = 587907e7f215cf0d2cb2c9e6963d45b6e535ed426c828a6ea2fb637cca4c5cbd\nX = 660da45c413cc9c9526202c16b402af602d30daaa7c342f1e722f15199407f31\nY = e6f8cbb06913cc718f2d69ba2fb3137f04a41c27c676d1a80fbf30ea3ca46439\nDigest = 9d21e70e88c43cbab056c5fdeb63baa2660ebc44e0d1ef781f8f6bf58b28e3a2c9d5db051c8da3ba34796d8bcc7ba5cb\nK = 6b8eb7c0d8af9456b95dd70561a0e902863e6dfa1c28d0fd4a0509f1c2a647b2\nR = 08fabf9b57de81875bfa7a4118e3e44cfb38ec6a9b2014940207ba3b1c583038\nS = a58d199b1deba7350616230d867b2747a3459421811c291836abee715b8f67b4\n\nCurve = P-256\nPrivate = 24b1e5676d1a9d6b645a984141a157c124531feeb92d915110aef474b1e27666\nX = b4909a5bdf25f7659f4ef35e4b811429fb2c59126e3dad09100b46aea6ebe7a6\nY = 760ae015fa6af5c9749c4030fdb5de6e58c6b5b1944829105cf7edf7d3a22cfb\nDigest = 0bc6a254fa0016a5aa608309f9a97cf0c879370bae0b7b460da17c2694e8414db39ec8b5f943167372610fc146dd8b28\nK = 887949", + "23d8943b5dbcc7a7a76503880ff7da632b0883aaa60a9fcc71bf880fd6\nR = 6ec9a340b77fae3c7827fa96d997e92722ff2a928217b6dd3c628f3d49ae4ce6\nS = 637b54bbcfb7e7d8a41ea317fcfca8ad74eb3bb6b778bc7ef9dec009281976f7\n\nCurve = P-256\nPrivate = bce49c7b03dcdc72393b0a67cf5aa5df870f5aaa6137ada1edc7862e0981ec67\nX = c786d9421d67b72b922cf3def2a25eeb5e73f34543eb50b152e738a98afb0ca5\nY = 6796271e79e2496f9e74b126b1123a3d067de56b5605d6f51c8f6e1d5bb93aba\nDigest = 12520a7ef4f05f91b9f9a0fba73eddc813413c4d4764dc1c4b773c4afd5cd77b0e7f09d56e5931aec2958407c02774c0\nK = 89e690d78a5e0d2b8ce9f7fcbf34e2605fd9584760fa7729043397612dd21f94\nR = 07e5054c384839584624e8d730454dc27e673c4a90cbf129d88b91250341854d\nS = f7e665b88614d0c5cbb3007cafe713763d81831525971f1747d92e4d1ca263a7\n\nCurve = P-256\nPrivate = 73188a923bc0b289e81c3db48d826917910f1b957700f8925425c1fb27cabab9\nX = 86662c014ab666ee770723be8da38c5cd299efc6480fc6f8c3603438fa8397b9\nY = f26b3307a650c3863faaa5f642f3ba1384c3d3a02edd3d48c657c269609cc3fc\nDigest = 4b3a6ea660aac1e87dae5a252ab5588b5292d713f8c146f1a92d7b72f64bc91663c46e2beb33832e92ec0dccdf033f87\nK = ec90584ab3b383b590626f36ed4f5110e49888aec7ae7a9c5ea62dd2dc378666\nR = 13e9ad59112fde3af4163eb5c2400b5e9a602576d5869ac1c569075f08c90ff6\nS = 708ac65ff2b0baaccc6dd954e2a93df46016bd04457636de06798fcc17f02be5\n\nCurve = P-256\nPrivate = f637d55763fe819541588e0c603f288a693cc66823c6bb7b8e003bd38580ebce\nX = 74a4620c578601475fc169a9b84be613b4a16cb6acab8fd98848a6ec9fbd133d\nY = 42b9e35d347c107e63bd55f525f915bcf1e3d2b81d002d3c39acf10fc30645a1\nDigest = a357e9fa283e8699373cb7c027e4c86084259f08662fd0fc064e7b2f6a33562fb2a9e938962eda99f43e5e2b012822b8\nK = 4d578f5099636234d9c1d566f1215d5d887ae5d47022be17dbf32a11a03f053b\nR = 113a933ebc4d94ce1cef781e4829df0c493b0685d39fb2048ce01b21c398dbba\nS = 3005bd4ec63dbd04ce9ff0c6246ad65d27fcf62edb2b7e461589f9f0e7446ffd\n\nCurve = P-256\nPrivate = 2e357d51517ff93b821f895932fddded8347f32596b812308e6f1baf7dd8a47f\nX = 7e4078a1d50c669fb2996dd9bacb0c3ac7ede4f58fa0fa1222e78dbf5d1f4186\nY = 0014e46e90cc171fbb83ea34c6b78202ea8137a7d926f0169147ed5ae3d6596f\nDigest = 347d91b8295d9321c84ce2a5e1c5257c4ffaf0006d884ff7337d386c63f532db444a873b8047ba373bb3538b5664ab31\nK = be522b0940b9a40d84bf790fe6abdc252877e671f2efa63a33a65a512fc2aa5c\nR = a26b9ad775ac37ff4c7f042cdc4872c5e4e5e800485f488ddfaaed379f468090\nS = f88eae2019bebbba62b453b8ee3472ca5c67c267964cffe0cf2d2933c1723dff\n\nCurve = P-256\nPrivate = 77d60cacbbac86ab89009403c97289b5900466856887d3e6112af427f7f0f50b\nX = a62032dfdb87e25ed0c70cad20d927c7effeb2638e6c88ddd670f74df16090e5\nY = 44c5ee2cf740ded468f5d2efe13daa7c5234645a37c073af35330d03a4fed976\nDigest = 46252c7ed042d8b1f691a46b4f6ca5395106871bd413e277a3812beb1757d9fb056a9805aa31376fd60e0ac567265cdd\nK = 06c1e692b045f425a21347ecf72833d0242906c7c1094f805566cdcb1256e394\nR = eb173b51fb0aec318950d097e7fda5c34e529519631c3e2c9b4550b903da417d\nS = ca2c13574bf1b7d56e9dc18315036a31b8bceddf3e2c2902dcb40f0cc9e31b45\n\nCurve = P-256\nPrivate = 486854e77962117f49e09378de6c9e3b3522fa752b10b2c810bf48db584d7388\nX = 760b5624bd64d19c866e54ccd74ad7f98851afdbc3ddeae3ec2c52a135be9cfa\nY = feca15ce9350877102eee0f5af18b2fed89dc86b7df0bf7bc2963c1638e36fe8\nDigest = 1ec1470e867e27ab4800998382f623e27fc2a897a497e6a9cb7c3584b42080c65dbe1270dc479a454566653abd402f02\nK = e4f77c6442eca239b01b0254e11a4182782d96f48ab521cc3d1d68df12b5a41a\nR = bdff14e4600309c2c77f79a25963a955b5b500a7b2d34cb172cd6acd52905c7b\nS = b0479cdb3df79923ec36a104a129534c5d59f622be7d613aa04530ad2507d3a2\n\nCurve = P-256\nPrivate = 9dd0d3a3d514c2a8adb162b81e3adfba3299309f7d2018f607bdb15b1a25f499\nX = 6b738de3398b6ac57b9591f9d7985dd4f32137ad3460dcf8970c1390cb9eaf8d\nY = 83bc61e26d2bbbd3cf2d2ab445a2bc4ab5dde41f4a13078fd1d3cc36ab596d57\nDigest = a59ca4dd2b0347f4f2702a8962878a206775fd91047040be60463119f02aa829b7360b940b2785395406c280375c5d90ee655e51d4120df256b9a6287161c7fc\nK = 9106192170ccb3c64684d48287bb81bbed51b40d503462c900e5c7aae43e380a\nR = 275fa760878b4dc05e9d157fedfd8e9b1c9c861222a712748cb4b7754c043fb1\nS = 699d906bb8435a05345af3b37e3b357786939e94caae257852f0503adb1e0f7e\n\nCurve = P-256\nPrivate = f9bf909b7973bf0e3dad0e43dcb2d7fa8bda49dbe6e5357f8f0e2bd119be30e6\nX = f2a6674d4e86152a527199bed293fa63acde1b4d8a92b62e552210ba45c38792\nY = c72565c24f0eee6a094af341ddd8579747b865f91c8ed5b44cda8a19cc93776f\nDigest = 9e359350e87e7573ad9894cd4aad6c6202a58e9938d098dbf65650fc6f04fce3664b9adb234bfa0821788223a306daaa3e62bd46b19d7eb7a725bc5bce8998f3\nK = e547791f7185850f03d0c58419648f65b9d29cdc22ed1de2a64280220cfcafba\nR = 4782903d2aaf8b190dab5cae2223388d2d8bd845b3875d37485c54e1ded1d3d8\nS = dfb40e406bfa074f0bf832771b2b9f186e2211f0bca279644a0ca8559acf39da\n\nCurve = P-256\nPrivate = 724567d21ef682dfc6dc4d46853880cfa86fe6fea0efd51fac456f03c3d36ead\nX = 70b877b5e365fcf08140b1eca119baba662879f38e059d074a2cb60b03ea5d39\nY = 5f56f94d591df40b9f3b8763ac4b3dbe622c956d5bd0c55658b6f46fa3deb201\nDigest = ff5e80ccbb51b75742a1f0e632b4c6cd119692f2aca337378f7eb2f3b17fc3d912828b7e1655d2263d8757715eea31493aa89dfe1db143a8fa13f89a00379938\nK = 79d6c967ed23c763ece9ca4b026218004c84dc2d4ccc86cf05c5d0f791f6279b\nR = 2ba2ea2d316f8937f184ad3028e364574d20a202e4e7513d7af57ac2456804d1\nS = 64fe94968d18c5967c799e0349041b9e40e6c6c92ebb475e80dd82f51cf07320\n\nCurve = P-256\nPrivate = 29c5d54d7d1f099d50f949bfce8d6073dae059c5a19cc70834722f18a7199edd\nX = 3088d4f45d274cc5f418c8ecc4cbcf96be87491f420250f8cbc01cdf2503ec47\nY = 634db48198129237ed068c88ff5809f6211921a6258f548f4b64dd125921b78b\nDigest = e9518ad1c62d686b9df1f5ae1f6797d8c5944a65fcf2244b763f47b9bc5db8ec360cbd17180e6d24678bc36a1535276733bab7817610399ef6257ca43361dfa0\nK = 0508ad7774908b5705895fda5c3b7a3032bf85dab7232bf981177019f3d76460\nR = acd9f3b63626c5f32103e90e1dd1695907b1904aa9b14f2132caef331321971b\nS = 15c04a8bd6c13ed5e9961814b2f406f064670153e4d5465dcef63c1d9dd52a87\n\nCurve = P-256\nPrivate = 0d8095da1abba06b0d349c226511f642dabbf1043ad41baa4e14297afe8a3117\nX = 75a45758ced45ecf55f755cb56ca2601d794ebeaeb2e6107fe2fc443f580e23c\nY = 5303d47d5a75ec821d51a2ee7548448208c699eca0cd89810ffc1aa4faf81ead\nDigest = 9fd9a5f9b73f6d01894ceaf8a1e0327a0cac0dbc30153201bcccf09b6756e2f89198781e80a7ff5119cc2bb4402c731379f5ab5eda9264e3fe88b4b528e16598\nK = 5165c54def4026ab648f7768c4f1488bcb183f6db7ffe02c7022a529a116482a\nR = ebc85fc4176b446b3384ccc62fc2526b45665561a0e7e9404ac376c90e450b59\nS = 8b2c09428e62c5109d17ed0cf8f9fd7c370d018a2a73f701effc9b17d04852c6\n\nCurve = P-256\nPrivate = 52fe57da3427b1a75cb816f61c4e8e0e0551b94c01382b1a80837940ed579e61\nX = 2177e20a2092a46667debdcc21e7e45d6da72f124adecbc5ada6a7bcc7b401d5\nY = 550e468f2626070a080afeeb98edd75a721eb773c8e62149f3e903cf9c4d7b61\nDigest = bfc07b9a8a8941b99ac47d607356e5b68d7534fb3faccfbe97751397af359d31fe239179a1d856ffac49a9738e888f599123ee96ae202fb93b897e26bc83202e\nK = 0464fe9674b01ff5bd8be21af3399fad66f90ad30f4e8ee6e2eb9bcccfd5185c\nR = f8250f073f34034c1cde58f69a85e2f5a030703ebdd4dbfb98d3b3690db7d114\nS = a9e83e05f1d6e0fef782f186bedf43684c825ac480174d48b0e4d31505e27498\n\nCurve = P-256\nPrivate = 003d91611445919f59bfe3ca71fe0bfdeb0e39a7195e83ac03a37c7eceef0df2\nX = 7b9c592f61aae0555855d0b9ebb6fd00fb6746e8842e2523565c858630b9ba00\nY = d35b2e168b1875bbc563bea5e8d63c4e38957c774a65e762959a349eaf263ba0\nDigest = a051dcee66f456d9786785444cee2a3a342a8e27a5ebdf0e91553a0d257eea11af3a7df7e9310b46d95021a1880cd3f064c73447d92a31bacdb889f1e1390f49\nK = ef9df291ea27a4b45708f7608723c27d7d56b7df0599a54bc2c2fabbff373b40\nR = 66d057fd39958b0e4932bacd70a1769bbadcb62e4470937b45497a3d4500fabb\nS = 6c853b889e18b5a49ee54b54dd1aaedfdd642e30eba171c5cab677f0df9e7318\n\nCurve = P-256\nPrivate = 48f13d393899cd835c4193670ec62f28e4c4903e0bbe5817bf0996831a720bb7\nX = 82a1a96f4648393c5e42633ecdeb1d8245c78c5ea236b5bab460dedcc8924bc0\nY = e8cbf03c34b5154f876de19f3bb6fd43cd2eabf6e7c95467bcfa8c8fc42d76fd\nDigest = e1a00e6e38599d7eba1f1a8a6c7337e4dcbdd4f436f47c57d17ef85829f7e266b6bff67a001598db6b9ac032ad160d6f928f8724d2f10928cf953bc76c3fd2fb\nK = efed736e627899fea944007eea39a4a63c0c2e26491cd12adb546be3e5c68f7d\nR = cf7fc24bdaa09ac0cca8497e13298b961380668613c7493954048c06385a7044\nS = f38b1c8306cf82ab76ee3a772b14416b49993fe11f986e9b0f0593c52ec91525\n\nCurve = P-256\nPrivate = 95c99cf9ec26480275f23de419e41bb779590f0eab5cf9095d37dd70cb75e870\nX = 42c292b0fbcc9f457ae361d940a9d45ad9427431a105a6e5cd90a345fe3507f7\nY = 31", + "3b08fd2fa351908b3178051ee782cc62b9954ad95d4119aa564900f8ade70c\nDigest = bdcf1926e90c980373954c67d3c3c06ccb1a5076957673f12ddf23fa0cce7b3dc3ec2aec143a1ba58094e3da45e2b160092e1d943cf8f22fad35f8348575a0cf\nK = 4c08dd0f8b72ae9c674e1e448d4e2afe3a1ee69927fa23bbff3716f0b99553b7\nR = f2bc35eb1b8488b9e8d4a1dbb200e1abcb855458e1557dc1bf988278a174eb3b\nS = ed9a2ec043a1d578e8eba6f57217976310e8674385ad2da08d6146c629de1cd9\n\nCurve = P-256\nPrivate = e15e835d0e2217bc7c6f05a498f20af1cd56f2f165c23d225eb3360aa2c5cbcf\nX = 89dd22052ec3ab4840206a62f2270c21e7836d1a9109a3407dd0974c7802b9ae\nY = e91609ba35c7008b080c77a9068d97a14ca77b97299e74945217672b2fd5faf0\nDigest = da606bb1d0d25dd18a9c29096042e65e6b73086b30509962ea1aa75f25b74653c03a66620cba446f442765f28d7c55a5ff4f9693a6c7ce18e1196c25c12da48d\nK = c9f621441c235fc47ec34eef4c08625df1ec74918e1f86075b753f2589f4c60b\nR = a70d1a2d555d599bfb8c9b1f0d43725341151d17a8d0845fa56f3563703528a7\nS = 4e05c45adf41783e394a5312f86e66871c4be4896948c85966879d5c66d54b37\n\nCurve = P-256\nPrivate = 808c08c0d77423a6feaaffc8f98a2948f17726e67c15eeae4e672edbe388f98c\nX = b0c0ad5e1f6001d8e9018ec611b2e3b91923e69fa6c98690ab644d650f640c42\nY = 610539c0b9ed21ac0a2f27527c1a61d9b47cbf033187b1a6ada006eb5b2662ed\nDigest = efdb1d2143ecf0447a68e8156a7443897a56b31b4c0cfe499511a4a3ff6f32ba25515b3a20296a10d23378a24fb7de8c2ce606a7d93a9bd72aef3a34d1ff6401\nK = 1f6d4a905c761a53d54c362976717d0d7fc94d222bb5489e4830080a1a67535d\nR = 83404dcf8320baf206381800071e6a75160342d19743b4f176960d669dd03d07\nS = 3f75dcf102008b2989f81683ae45e9f1d4b67a6ef6fd5c8af44828af80e1cfb5\n\nCurve = P-256\nPrivate = f7c6315f0081acd8f09c7a2c3ec1b7ece20180b0a6365a27dcd8f71b729558f9\nX = 250f7112d381c1751860045d9bcaf20dbeb25a001431f96ac6f19109362ffebb\nY = 49fba9efe73546135a5a31ab3753e247034741ce839d3d94bd73936c4a17e4aa\nDigest = eeb09b1f4a74744909774bfe707977e5234db27026873fc7b5496e37d363ff82d5a1dd6fa6c97717aa0828a6f6325a2b7970e5d836ddfb63bf47b09f136eb9da\nK = 68c299be2c0c6d52d208d5d1a9e0ffa2af19b4833271404e5876e0aa93987866\nR = 7b195e92d2ba95911cda7570607e112d02a1c847ddaa33924734b51f5d81adab\nS = 10d9f206755cef70ab5143ac43f3f8d38aea2644f31d52eaf3b472ee816e11e5\n\nCurve = P-256\nPrivate = f547735a9409386dbff719ce2dae03c50cb437d6b30cc7fa3ea20d9aec17e5a5\nX = 4ca87c5845fb04c2f76ae3273073b0523e356a445e4e95737260eba9e2d021db\nY = 0f86475d07f82655320fdf2cd8db23b21905b1b1f2f9c48e2df87e24119c4880\nDigest = 8cd8e7876555a7393128336880c8002136e1008814a691528111220fd14158b7ff822226c67390739db56b368cf69cecc4cc147220be3d3ce587c8ad75b0f55a\nK = 91bd7d97f7ed3253cedefc144771bb8acbbda6eb24f9d752bbe1dd018e1384c7\nR = 008c1755d3df81e64e25270dbaa9396641556df7ffc7ac9add6739c382705397\nS = 77df443c729b039aded5b516b1077fecdd9986402d2c4b01734ba91e055e87fc\n\nCurve = P-256\nPrivate = 26a1aa4b927a516b661986895aff58f40b78cc5d0c767eda7eaa3dbb835b5628\nX = 28afa3b0f81a0e95ad302f487a9b679fcdef8d3f40236ec4d4dbf4bb0cbba8b2\nY = bb4ac1be8405cbae8a553fbc28e29e2e689fabe7def26d653a1dafc023f3cecf\nDigest = 7a951d7de2e3552d16912a1d4381f047577f9fd7a8f55dc8ebfb5eac9c859ab8771e222bf56d3330201b82751d0aa5b6c21f42ada05db9955d46f62d530723e1\nK = f98e1933c7fad4acbe94d95c1b013e1d6931fa8f67e6dbb677b564ef7c3e56ce\nR = 15a9a5412d6a03edd71b84c121ce9a94cdd166e40da9ce4d79f1afff6a395a53\nS = 86bbc2b6c63bad706ec0b093578e3f064736ec69c0dba59b9e3e7f73762a4dc3\n\nCurve = P-256\nPrivate = 6a5ca39aae2d45aa331f18a8598a3f2db32781f7c92efd4f64ee3bbe0c4c4e49\nX = c62cc4a39ace01006ad48cf49a3e71466955bbeeca5d318d672695df926b3aa4\nY = c85ccf517bf2ebd9ad6a9e99254def0d74d1d2fd611e328b4a3988d4f045fe6f\nDigest = 4cb0debbdb572d89e2e46dcc6c2c63ef032792683032ce965b3e7fa79e3282039a705acbcc7bd07057a88b1e65852707934f10a67710ebefaa865201dfa6d4ff\nK = dac00c462bc85bf39c31b5e01df33e2ec1569e6efcb334bf18f0951992ac6160\nR = 6e7ff8ec7a5c48e0877224a9fa8481283de45fcbee23b4c252b0c622442c26ad\nS = 3dfac320b9c873318117da6bd856000a392b815659e5aa2a6a1852ccb2501df3\n\nCurve = P-384\nPrivate = 0af857beff08046f23b03c4299eda86490393bde88e4f74348886b200555276b93b37d4f6fdec17c0ea581a30c59c727\nX = 00ea9d109dbaa3900461a9236453952b1f1c2a5aa12f6d500ac774acdff84ab7cb71a0f91bcd55aaa57cb8b4fbb3087d\nY = 0fc0e3116c9e94be583b02b21b1eb168d8facf3955279360cbcd86e04ee50751054cfaebcf542538ac113d56ccc38b3e\nDigest = 5e3b235f5a8037f7556331ed6e9b503fd9f4d6e7d5851d8716780e00\nK = e2f0ce83c5bbef3a6eccd1744f893bb52952475d2531a2854a88ff0aa9b12c65961e2e517fb334ef40e0c0d7a31ed5f5\nR = c36e5f0d3de71411e6e519f63e0f56cff432330a04fefef2993fdb56343e49f2f7db5fcab7728acc1e33d4692553c02e\nS = 0d4064399d58cd771ab9420d438757f5936c3808e97081e457bc862a0c905295dca60ee94f4537591c6c7d217453909b\n\nCurve = P-384\nPrivate = 047dd5baab23f439ec23b58b7e6ff4cc37813cccb4ea73bb2308e6b82b3170edfe0e131eca50841bf1b686e651c57246\nX = de92ff09af2950854a70f2178d2ed50cc7042a7188301a1ea81d9629ad3c29795cb7f0d56630a401e4d6e5bed0068d1e\nY = 6135adbd8624130735e64e65ecbd43770dcc12b28e737b5ed033666f34c918eb5589508e4a13b9243374a118a628dd0b\nDigest = 871afe65a30654d09a9bd33767cb4c581a8c5a534c9cdc5801821e89\nK = f3922351d14f1e5af84faab12fe57ded30f185afe5547aeb3061104740ecc42a8df0c27f3877b4d855642b78938c4e05\nR = 38e181870cb797c1f4e6598cfd032add1cb60447d33473038d06df73919f844eddd16f40f911075f8a4bacc0d924e684\nS = a58dd1ca18aa31277de66c30c3bb7a14b53705ce6c547ed2cb0e336f63c42809422efffcc722d1155f2254330a02b278\n\nCurve = P-384\nPrivate = 54ba9c740535574cebc41ca5dc950629674ee94730353ac521aafd1c342d3f8ac52046ed804264e1440d7fe409c45c83\nX = 3db95ded500b2506b627270bac75688dd7d44f47029adeff99397ab4b6329a38dbb278a0fc58fe4914e6ae31721a6875\nY = 049288341553a9ac3dc2d9e18e7a92c43dd3c25ca866f0cb4c68127bef6b0e4ba85713d27d45c7d0dc57e5782a6bf733\nDigest = 31113fbe2375b059be766f538b09bf18ca8ec6c38442847e809fe25a\nK = 04324bd078807f6b18507a93ee60da02031717217ee5ce569750737be912be72da087ac00f50e13fdf7249a6ae33f73e\nR = b2752aa7abc1e5a29421c9c76620bcc3049ecc97e6bc39fcca126f505a9a1bfae3bde89fb751a1aa7b66fa8db3891ef0\nS = f1c69e6d818ca7ae3a477049b46420cebd910c0a9a477fd1a67a38d628d6edaac123aebfca67c53a5c80fe454dba7a9d\n\nCurve = P-384\nPrivate = dabe87bbe95499bac23bc83c8b7307fe04be198f00059e2bf67c9611feaffb2c8f274f6aa50eb99c3074186d8067d659\nX = c2aa0a695125279705917e02a4f258cade4c3ff9140a071414babf87764f426f7f36ffda9d5f3394375d24864235476f\nY = 8f9808da0ce0227cf453f9e456f557db9752e23b45cce4baad5fee3844ddd7e1112bcec01ea9d67c7a76f3535bd0cb58\nDigest = 279d65e738a347fd9aa6890e497077ad9e90043868bdcb5ab09e90cd\nK = 65a0305854033cbc6fe3ca139c40ca354d45801ecb59f4a923c251dc6b25d12d452d99b5d6711fdb5efac812aa464cc4\nR = c7fc32997d17ac79baf5789e4503f5f1a8863872bc350a91f12dd3ef8cf78c254e829217809e8e00b6b8d4d85be3f1fd\nS = 1422e1838a22496df93486bce1142961dbd8478ae844b8dda54e210afdae0d9e930d587c91bb600b0bde7237186d94e6\n\nCurve = P-384\nPrivate = df43107a1deb24d02e31d479087bd669e2bc3e50f1f44b7db9484a7143cdca6a3391bddfea72dc940dbce8ec5efbd718\nX = 76bd4be5d520471162cb5c36f80038301b325f845d9642204a84d78b3e721098932827bf872bde0a9f86383953667d29\nY = 415116b8b878f896a5aa4dbbdc21076f27135d8bbcaaca02489ef639d742bd63f377da0c8e8ab36ff19b4a7cc5d4ceb4\nDigest = 21cd3764d8b28d8c70eea318bba06a8cc2b359e59a0782d7f1c659a2\nK = 798abad5a30d1805794540057388ee05e2422901c6335f985b9d4447b3ef75524751abfeab6409ad6bf77d4ae3014558\nR = 98744e5c6742fa5118a74a70db4957647a3cc12add4e876b45974a6a8707809f871daadbfc0b865e01624f706b65f10c\nS = 9e256e8da8eff5a0c83baaa1ef4f7be798eba9543bf97adb0fff8719f5406ea1207a0cf703d99aa8f02169724b492273\n\nCurve = P-384\nPrivate = ea7a563ba2a7f5ab69973dca1f1a0d1572f0c59817cd3b62ad356c2099e2cdca1c553323563f9dfbb333b126d84abc7f\nX = cf4717c5f5de668b785f06bdc9845df5a09e4edd83f4669756407cbb60807305c632bc49f818f4a84b194369aa07736f\nY = 7391e4982af8a2218f704f627d01f0508bfc8304992a2d598a420bf2eb519f33bd7caf79380793733b3dba0cc5e2b9d8\nDigest = dae4b61e1cbc5c2846b3b698656ca1acbd262a0fbe492f810fac6b39\nK = 7b9606b3df7b2a340dbc68d9754de0734e1faeb5a0135578a97628d948702235c60b20c8002c8fcf906783e1b389e754\nR = 0d680010bed373287f9767955b5d2850e150b6713b49e453eb280148e45230c853d99ea2d2f8fcbd3ddcba19aeec0af1\nS = 64329763a930ab5452afdb0557fef16ff71810d6343dfc9c6ae18905c3d274db6554cdc69d6078a1ca03284474a94f30\n\nCurve = P-384\nPrivate = 4cc70cb35b3ddeb0df53a6bd7bd05f8ff4392a2db7344f2d443761484b3a468a4ee3d1a8b27113d57283fd18b05f7829\nX = 40e1fe21df34bb85a642a0abe819ebd128f7e39b84d8dcc4a9a599b372fb95", + "88da1484600ec28b1297bb685f9ae77831\nY = f3aa69ada57879fdcbe8df19cefabc308add7d03b17b1fac2f7783fece6a8dfe20bc36f518692677d96e3f730a67a671\nDigest = 1e7ca1523ce2b48143a9665843b602d617441d1b43142631de2088cf\nK = 8eda401d98f5688c34d8dbebcd3991c87c0442b0379154eaa2e5287dabe9a9e34cfc1305d11ff68781df25d5611b331d\nR = ff2d772786e159448bba26afd8c3281941a4cb0c56fec6f5cccb4c292c4ee0f7af9bd39bbe2d88148732585e104fdb30\nS = 07a1d890770daa949a17797dca7af3e8163da981ec330c03d63d1a8312c152be6a718163205ffa08da7dcc163ba261f4\n\nCurve = P-384\nPrivate = 366d15e4cd7605c71560a418bd0f382fd7cd7ad3090ff1b2dfbed74336166a905e1b760cf0bccee7a0e66c5ebfb831f1\nX = a143f277ab36a10b645ff6c58241ea67ffdc8acf12d60973068390f06b4d8f4d773b10c1ebf6889b1cfa73ebb90f6ca1\nY = 7a17cad29bb507b309021f6f92cb5c10ba535f4a3e317fcc68cfd02d3ccd269f465169c73d30ff308f5350d881b08aec\nDigest = 505dff744fd26f08990ef6c68e80b5c1f1bfb328203a8a6efd444e02\nK = dbe545f920bc3d704c43d834bab21e40df12ec9e16a619a3e6b3f08760c26aae6e4fd91fad00f745194794b74bb1baee\nR = cdc39b12bba30da66fe9554713c05880ddc27afa4d2d151440f124c351fb9496dc95046516b0921083347d64369846ac\nS = 797d0344e49f9ba87a187c50f664e5015d449e346b1a7bd9427c5be559fc58173651880d5aadf053f81899d3368d6181\n\nCurve = P-384\nPrivate = e357d869857a52a06e1ece5593d16407022354780eb9a7cb8575cef327f877d22322c006b3c8c11e3d7d296a708bdb6d\nX = ce9a2185a68d6094aa5849a6efe78b349946f7380f0c79aa9664246cfcc71a879e90ad78a0474f58644c6a208168150e\nY = 8354fa47673cb3e07d446521345706c5515584b2602f921c3b9c44dded9e2c3f90ce47adb36d7e5f9f95a8c5ad8af397\nDigest = b972526301f2c5d689205193c9fc73fb0cddc24ed6ff32e7b5fd6f6e\nK = 1e77367ac4e10924854d135ad2f2507f39e2bafdbce33ff256bcbe9a7329b8d27185218bcc3550aafbe3390e84c77292\nR = df3182d49ad70959fb0c95bc7312750ce70fc87f1a328d39d9b29ac05d31305ce7209d6c24d13225d9567b489f7a187b\nS = d812b05abab0e96de13291e1f0da6479444ed5cd9d959b76f6cb43d394769035364f7c831a104dc7b5bd9b4a8e64df64\n\nCurve = P-384\nPrivate = 745a18db47324a3710b993d115b2834339315e84e7006eafd889fb49bd3cc5a8b50c90526e65e6c53bddd2916d14bead\nX = f692578c6f77531210aef55c9e004ce3b66cf268c6900dde31a8bbb76e7562e3fb76242de34ca330d2501030aa119466\nY = 40965833b28de926c46de060aa25beaeda98f8415a6b1e3564aa77870cf4c89bd4fde92c8f5d9bf0eb41721586859d8e\nDigest = 0659e2e64a794837b070ce3a664836d0157880e496f1e9b8c51fc7e0\nK = 11b9b36720abcac084efdb44c9f5b7d039e3250cb1e9c47850189ba3cfc1489d858b2a44df357772b61d919c7e729c0f\nR = 02b252c99820cf50e6ce060ab55bd4f682276e29b4ae4197417432e6a7bfb8cf0bac89dfe105456af805d822cee77696\nS = 8e248bbf7d7028d63177e565c9d1666ee5be4d1ffbfffc9c7814b0cd38f74b98f3f2cd59be42b9f132bfe5ee789cd96c\n\nCurve = P-384\nPrivate = 93f20963ea5011ff4f26481e359309e634195f6289134087bd2e83eee008c962780a679784ee7ac6acda03d663ed27e0\nX = 0edcde3533ea019e18f1a3cd97b7962e8823dda36c389f8f9287549f796d11376392b8a01c7a80f127a8f75795e04f54\nY = 63d7c458dccfc02f5148d755d59f9bbc8e3c3ea34908777928440747795955741296abcdd5386676419ed8049fedb489\nDigest = 6a29c05caf892d0b0d339eea5c58ec54f59a66da25051bfc01fef680\nK = 3ad308faf04c42ee5ac69d36bc0aa9a96aacf55ea0f27dac4f52e088f023d206340a6324874ffad169ff80624de24c96\nR = 209b72f9aae72c4339813573c3a8408a9e0be641ca863d81d9d14c48d0bf4cd44a1a7985cff07b5d68f3f9478475645b\nS = f6292e599b22a76eda95393cf59f4745fa6c472effd1f781879ad9a4437a98080b0b07dadad0c249631c682d2836a977\n\nCurve = P-384\nPrivate = f175e6ac42fd48ec9d652c10707c039c67c4cc61d8c45a373dcda6e4ca6c53e947e49c24e01b48e7cdf92edfe6d316a1\nX = a40c64f595491ce15790a5a87fbe64c1800247b42acd08fe5257700719f46afc8acce0e4ede0517a312092d5e3d089cd\nY = d565df9dc2f381cc0c5d84f382a43a98018524c0b4708a44b3e2817f9719f29fbf9c15803591ed9b4790c5adaba9f433\nDigest = 3978516bf80bf5bcd4acd93497d3f56d699f089207b1715b9733421b\nK = 812dcaa6d4f9a43ccc553288065d13761581485aa903a500a690ccafbd330ba4818c977b98c4bb57f8a182a1afacfae9\nR = d000f18d3e4c162ff0d16f662e6703e7a6f5bff7a333ed266fa4f44c752415946c34945c342c20f739677186b1d80ab3\nS = ae7f1271c89e0aaa238710d039ea73a69110cc28fcf426f2fe6754b63a59e417fa84f903cf7dccb5468b43ff083bbfd5\n\nCurve = P-384\nPrivate = 46c4f0b228b28aaa0ec8cfdf1d0ed3408b7ae049312fb9eaf5f3892720e68684cc8ad29844a3dc9d110edf6916dfb8bb\nX = 13ddec844731b7e30c467451df08ca11d6c581cb64abd8a257671cffd26f5ccad4df7b9ee8924047a88a5d2d7567609c\nY = d74ca94f590fd1d13e190cc1e03c3da6c3faab15c7dda034af3deefee8aeec3628fa8b1978c54cfcd071baa319a46ec0\nDigest = 6833365d547d47628755680dbe3a946feca5bb0a07929d88ca894923\nK = 2a9dd520207c40a379cd4036adef9ee60fa8bc8c0d39b3ad91850ac93fd543f218b1688581f23481a090b0e4c73792ac\nR = 94e08cca20fe3866f643f53ec65faf3f2b4d80cd9bcc8ff8f88bb28da9eada324fc2d048908dd3d08a9e0ebb547731bc\nS = 8e6f82c4d3069b14f4c844b4ca133a9503493265c9f77a7d4775eda67de76798a23dd7ea48e0ac3c337dd62bf058319d\n\nCurve = P-384\nPrivate = 1d7b71ef01d0d33a8513a3aed3cabb83829589c8021087a740ca65b570777089be721a61172b874a22a1f81aef3f8bb6\nX = 8d2721370df8f097d5a69396249a315f6037dc7045b3da11eacae6d43036f779d5de7053d101768b42cc2b1283a3aaea\nY = a046039ae662141f9954d278183eaa2e03917fe58583e32d344074d59d60caa5b0949c53066525d5cca923e2f201502e\nDigest = b3b149ce5ceb3df24bcc080484fea7170b5a91e3c36dfb86a5ccb6f8\nK = d1b25ad25581cad17e96f1d302251681fee5b2efbb71c3c15ff035b2145d015d18e0e52dc3187ab5a560277b3a3929b0\nR = d836f52b14c7391744868daa2d5cf27eb9380b9b6176195573d5b04842e9f2fc3794d6cf877feafee63d11b05f6a6bee\nS = 8b89042fef2c04d4bd6c9d66a06a010514321d623a5f8d57ba5ac3686872eaabca9e0ba2d058ae7028e870acf03ca32d\n\nCurve = P-384\nPrivate = cf53bdd4c91fe5aa4d82f116bd68153c907963fa3c9d478c9462bb03c79039493a8eaeb855773f2df37e4e551d509dcd\nX = 3a65b26c08102b44838f8c2327ea080daf1e4fc45bb279ce03af13a2f9575f0fff9e2e4423a58594ce95d1e710b590ce\nY = fe9dcbcb2ec6e8bd8ed3af3ff0aa619e900cc8bab3f50f6e5f79fac09164fb6a2077cc4f1fed3e9ec6899e91db329bf3\nDigest = 0baa03848341fbe4df9caa8b4d52a47a174cf485659ea7044b9265f3\nK = df31908c9289d1fe25e055df199591b23e266433ab8657cc82cb3bca96b88720e229f8dfd42d8b78af7db69342430bca\nR = 6770eea9369d6718e60dd0b91aee845ff7ed7e0fcc91675f56d32e5227fd3a4612bbcb1556fe94a989b9e3bcc25bb20e\nS = c43072f706c98126d06a82b04251e3ecb0ba66c4bb6cd7c025919b9cc6019cdc635256d2a7fa017b806b1e88649d2c0d\n\nCurve = P-384\nPrivate = c602bc74a34592c311a6569661e0832c84f7207274676cc42a89f058162630184b52f0d99b855a7783c987476d7f9e6b\nX = 0400193b21f07cd059826e9453d3e96dd145041c97d49ff6b7047f86bb0b0439e909274cb9c282bfab88674c0765bc75\nY = f70d89c52acbc70468d2c5ae75c76d7f69b76af62dcf95e99eba5dd11adf8f42ec9a425b0c5ec98e2f234a926b82a147\nDigest = bbbd0a5f645d3fda10e288d172b299455f9dff00e0fbc2833e18cd017d7f3ed1\nK = c10b5c25c4683d0b7827d0d88697cdc0932496b5299b798c0dd1e7af6cc757ccb30fcd3d36ead4a804877e24f3a32443\nR = b11db00cdaf53286d4483f38cd02785948477ed7ebc2ad609054551da0ab0359978c61851788aa2ec3267946d440e878\nS = 16007873c5b0604ce68112a8fee973e8e2b6e3319c683a762ff5065a076512d7c98b27e74b7887671048ac027df8cbf2\n\nCurve = P-384\nPrivate = 0287f62a5aa8432ff5e95618ec8f9ccaa870dde99c30b51b7673378efe4ccac598f4bbebbfd8993f9abb747b6ad638b9\nX = b36418a3014074ec9bbcc6a4b2367a4fb464cca7ec0a324cb68670d5c5e03e7a7eb07da117c5ea50b665ab62bd02a491\nY = 4ea299c30e7d76e2c5905babada2d3bb4ee5eb35a5a23605cdb0d5133471a53eb9e6758e49105a4eaf29d2267ba84ef2\nDigest = e4cb4f2f94793f4a471a1e1de49b2c6ceb5825c5d02c69a7fe122eebda7b28b9\nK = 935eeab3edeb281fbd4eead0d9c0babd4b10ff18a31663ee9de3bfa9ae8f9d266441158ea31c889ded9b3c592da77fd7\nR = 738f9cb28f3b991335ef17b62559255faf75cad370a222464a492e27bb173c7f16b22100ada6b695875c7e4b1a28f158\nS = bc998c30e1491cd5d60dc7d1c38333165efe036b2a78db9b8f0e85ee68619cfba654e11ae5ca5ee5a87099c27cf22442\n\nCurve = P-384\nPrivate = d44d3108873977036c9b97e03f914cba2f5775b68c425d550995574081191da764acc50196f6d2508082a150af5cd41f\nX = c703835d723c85c643260379d8445b0c816fe9534351921e14a8e147fe140ec7b0c4d704f8dc66a232b2333b28f03dee\nY = c5d0bb054053fd86c26f147c4966757aa04b00513a02d427b8d06c16055c607955efdc518d338abfe7927c195dc28588\nDigest = a22a3d3da784a68d37ae5aaca8ef28dc1ceefc8e530431e455dd2bb2ed969684\nK = c80f63e080650c8a21e4f63a62ec909adfb7d877f365d11ee1cb260baf112eb4730c161c1d99dba98fc0d5bbd00dc97d\nR = 81de2810cde421997013513951a3d537c51a013110d6dbb29251410bcb5ba001a9686b8490f1e581e282fd2ed0974b22\nS = 9cab0bbaffe91c7677ec3dd1f17060211a3cc0be574cbca064aa8c4b66ba6e64f3d80e83da895042ca32d311c388d950\n\nCurve = P-384\nPrivate = d5b72cbb6ec68ac", + "a46b9c27ad992afd8ffa02cb3067b234fcfa6e272e3b31be760695ff7df988b57663057ab19dd65e3\nX = 135a6542612f1468d8a4d01ff1914e532b1dd64d3627db9d403dc325651d3f82b0f6f0fd1dbdeca2be967c4fb3793b5f\nY = cbbd40f6d3a38d0dfb64582ff4789d7b268241bc0c36de2884bccfaeeff3b7b2b46a30bb35719804e0d11124b4e7f480\nDigest = 1241e0219c19b1fe70919f4f5738edf7cdf4bd51905273b030c2f522abf11823\nK = 9da6de7c87c101b68db64fea40d97f8ad974ceb88224c6796c690cbf61b8bd8eede8470b3caf6e6106b66cf3f0eebd55\nR = 17840911ecdf6ae0428b2634f442163c2c11b8dbf0cc7a5596fbe4d33e3e52f9d99e99ad169867b1f39e89c9180cedc2\nS = dd7ed67e480866d0474379ea4afff72870746f4feef2153be42f13bf472b1613d7faa5c0abb7f7464070f94d7cf3f234\n\nCurve = P-384\nPrivate = 218ee54a71ef2ccf012aca231fee28a2c665fc395ff5cd20bde9b8df598c282664abf9159c5b3923132983f945056d93\nX = 01989ff07a7a452d8084937448be946bfedac4049cea34b3db6f7c91d07d69e926cce0af3d6e88855a28120cf3dba8df\nY = eb064e029d7539d4b301aabafe8de8870162deffe6383bc63cc005add6ee1d5ced4a5761219c60cd58ad5b2a7c74aaa9\nDigest = e2e52fe49dd358e95fdaf1fc6f7f4bdc638ee8f65a410890eb290342ca53f6de\nK = c5d39b436d851d94691f5f4aa9ef447f7989d984f279ae8b091aef5449ac062bcc0567740f914624ad5b99fc32f9af0b\nR = 07d5b1b12877e8cb5e0aa5e71eeeb17bf0aa203064c7e98b3a1798a74dc9717252dc47c7f06aaf1d5fe15b868323bbb9\nS = 69428cf101a7af5d08161a9fd7af212e02e33b6062aebdce4c96bf3a0684b5394cb902ca7c2dec6e2f01f40c4576009d\n\nCurve = P-384\nPrivate = e6ab171f6937c000e144950801ad91023ae8e8476856c2592d9f7d5bb7180fd729211803d39a412ead6c0be761cfa5d1\nX = 38bc42b8c9d8866d09b214398d584b1b24a488dfacc3420d1e9506aa825b19fdf1ba74e7b8f547f47b571467fe8c4d1f\nY = 5179d62668d3f6a7ab5c8e3761a685e12008fb87d0529a97645f65cfb5364376c1b6682e0ffcddd0bcd995c41d013ad3\nDigest = 57f030024cde572f1e3368cf23aaa686e59d645455ef5f01e3b9c14067dd0eb3\nK = 05e9718aea9669c9e434f73866da5f252dec6d24c47a1c4ee3233450b6ec626de9746ebe095b285558dfc89fc1b622fe\nR = df9bab9dd1f22ec6f27116f38831cb2089aa78aa8c073024a0faddd9a48e810a5e8e2cadd80fbf8dbd6088c71fe30b5b\nS = 1e0e8718567d12d18558c57f9e87a755c309e4ffb497335a3adfc8d7475ce8fd882d5dc33a8f5a16274b7ad74bb7862a\n\nCurve = P-384\nPrivate = 14acd516c7198798fd42ab0684d18df1cd1c99e304312752b3035bed6535a8975dff8acfc2ba1675787c817b5bff6960\nX = 29909d143cf7ee9c74b11d52f1a8f3ebd4a720c135612ca5618d3f432f03a95602ee75a2057e1d7aab51d0648ac0b334\nY = 404b6c5adffbadfa1b0380ae89fed96ec1ca16cc28661e623d0f1c8b130fbaa96dd7257eae2bf03c2d3dcbc3dbc82c58\nDigest = b3533ac348a241e255a62e7bc787a44394fd80328621f62f39df170298cc6a1b\nK = 7f623c103eaa9099a0462e55f80519c565adaeffcb57a29993f3a8a92e63a560be8f0fb9d23dc80bff1064bb41abad79\nR = 932ab291950c16b2b19a8036cd2e905714c6229cb190a73b3ea49c48dd8e76063a453c7c3267a57597d2973678216296\nS = d17d4c5ddbb9c27beebf526f113b416c8abfad53d11c4224813c7f351ba41a77dd4e77d6e4a65bef2c9f62cc37a469a5\n\nCurve = P-384\nPrivate = 2e780550984f3a00cb1e412429b33493c6eb6cd86d12f9d80588c247dcf567bd04296d2d4b24b889d9c54954b7f38f57\nX = 37dac42ef04663238443ef33e8addee2e78c40d50a1751913a7f5c37d1f23a26c7f86e16055c788b8ca9554f06b2f2ef\nY = bbed1549652904e3d00c39b01cc0460dbaf3185e6190c2705677a9701de1fe56dff4f4d8418ee15059ff8fc36800982d\nDigest = 8f8009afc17d98d009d1bc84afb81d07e128c941e3312cf807223fc4f33ebb53\nK = b788ca82811b0d4e4841765c71eafaa1e575378beedcd3860d8b92db3d070ac5aef7c425067860fbee6c50cf0c642bbb\nR = 7292b3851870daeb2555a8a2fb198ead78739fcfb75327e5c32a82c6b77d58983e5ad548ccb75dcf9411039c9576d9b9\nS = a378c61802d9f1dd062b6e18f16416a954018f77df4df95ad1b983570377d5cfce4cc7861759e802c52f81abc4f49aac\n\nCurve = P-384\nPrivate = a24d0fe90808aecc5d90626d7e6da7c9be5dfd4e1233c7f0f71f1b7c1c6fd318fafe18559c94718f044cf02ed5107cb1\nX = ec8ae1fb9bb88589d27d6f27d790392853396f37bc0c381631d85800fc668eea0886bf1c6cff801147df19778d5b1604\nY = 1e1a8336c1e2506f8ee388b55cc648ae73b9295ea78467979d2affb364536fad28120f51ec62a67cbb6ce7784780389f\nDigest = 9611180f5a8b0d8320759910bf653e92accbf1f968d40dec5d8e0350a989b09b\nK = 755d025509b73cf1ea8817beb772ad150b4c17a52378be187daffe3db0158921e5e552d1ca3c85df28519939f3cb794d\nR = 23ff2ffa62bbd427d49995d9c9950116e0d5a06ef076a4553448bc109e6482c5e87d4c833bc88de0bc722bc98cae2e61\nS = 9aea13d487c3ea6917e16374caafcf0321c12a80d28902dd8cd81909bb04b8c439e2491e504756742d0d0bfb15a9c34c\n\nCurve = P-384\nPrivate = 1c172e25732555afee7ded67a496f3f11babc0875898619f4519c29321e201e8ba1149f2c20b48e5efba235d58fea7c3\nX = 13e9e2c8bbcfe26e8f5f43c86268c5980ee693236a6b8777f3a7323718baa21005b482d08aafc6fa6e3667d91353544c\nY = 9ba181b3ee505be030f87ecd249b00670a791489b42af04976013483ff95b630c91c01e95757e906129f2f9b4ce719a8\nDigest = 45607fd85aa1a246e8910dd3164b7c62c23ae515a3b464128a69c78f172138cc\nK = 08aec9a9e58bdc028805eb5dc86073d05fff1f5fb3fd17f510fc08f9272d84ba7aa66b6f77d84fe6360bd538192bf01a\nR = 2b4337c3dfbc886ffad7858ae2480cb62227e12205a70361c42f1a5ca9e658ee30fc3cf4030d85bd065edad83b99821f\nS = 2550cef8574bf17fb3d6b0c9d04ab266962bac3621bac233ff2e4989712d2a4a07171c0aebd3040cd6a32c3bd3efb8b5\n\nCurve = P-384\nPrivate = 5b96555dbd602e71d4d5d3aee19fd1ea084ee23d4f55c10937056762bc2015cbded2e898a487f5482ab7e1e971245907\nX = 6e14c17bb831b0112d7f3543c5fd17c78379a516c9e0539b03b8b4bfdead2820343fc84b0382807573ded6c4d97b7003\nY = 7f60021d2de77546db666721c9aec84c3e2ba8de0ba77443600dc77e6839bbf9316271adb22d4cb47d08f745ecb1dafd\nDigest = 5a3b963da0a115759db0cee686ee34441e35ca3a3d5dd8ccb9d85b1f001ae63f\nK = 7ad6f4ffd2b429ba10c6f112f800cacf1ad508cf8eba880893bb9659c1ddaaec57dcdc093a114500460d457bdde324f2\nR = faea950ca513806bc59028c638d6302ffc86978c3ff1f06db015dd7c4777050186cb8dd871f5e926e1416539c1939c2f\nS = 2c592240eabb8a1f9878e1b5c9d5d3ced7b3a7ae571f5a86494ed2ca567a36eb72e7bea8934bded29594bccf67ca84bd\n\nCurve = P-384\nPrivate = 8df9c3c710a25192f3dea970910bb3784e3509874cccf4334823eb9f7a8d05b067f2d812d61e878e24b093089a0b8245\nX = 92c9e32b20cbe6d4ed0727c6c942cf804a72031d6dfd69078b5e78ebce2d192268f1f5e2abce5aaf1f8d6a35f136837f\nY = d5167905fa7689e03b9fb1487c566f62b36f2bc1c4a2bfb6a836113b5c8d46f7c1ca51b628b14397fbc06ec9a07f4849\nDigest = 3863fc5414aef6de36c69b2a38307f9b429fefb2fb029d7dbf80483950316a8d\nK = 258dd05919735cd48627c9fe9fac5c252604aa7c2ae0460d7c1149cd96b7bd2ba195ad393bf392a2499f06aead5ba050\nR = 413793bcce52eda0f5b675a8d687cce86d5c9e1659b38a89e96246b5e05f8b0934d17dbba3b2ea44c838aa5fd87125d1\nS = ce7309fc2d6e3438818a1a29a997410b025b0403de20795b97c86c46034a6b02afeed279aeb06522d4de941bfdf50469\n\nCurve = P-384\nPrivate = 6002cb01ad2ce6e7101665d47729c863b6435c3875de57a93f99da834f73e3e6e2b3880e06de3e6bd1d51ea1807ab0d7\nX = e4216e1a20af8e8e3e74653ac016545001066e53e64af679ad1c85841bb475aed3e00ead052ae9955f48d675ff4ace56\nY = 8804c17641be21d4c6386902c9c5c888af25d97ca383703ea4a85cf93bbab360c0bbd2993374da499a303778650270b9\nDigest = 9ef131664cee116ba88d3c362e694c2a56772c19f4356d9e576c96285bc52275\nK = 6b9507fd2844df0949f8b67b6fde986e50173713ac03df2edf65cb339859321cd3a2b9aab8356f95dec62460ab19c822\nR = 018891f6381ed358b422f79a299cf0789cee783ba388af4d82cbbe17f3709751b7fd9400e9702820c28b9afc62fdf489\nS = aef73bd590802b2fd2a65c4f7fec89f9b24ecc199a69254785925f334cd1977c5e1f858bd9830d7d7d243ea707b1af0b\n\nCurve = P-384\nPrivate = d8559c3543afc6f7b3dc037a687bad2630283757ba7862fd23ed14e2151a4cf5fed3d249268f780e0b96b6b46274a2d5\nX = 5f94223918f2ec9f0a08342cb99e724881c92453957c59672860f69daac01b660331a0f5845e50f1f27766b219c89e7e\nY = d76d83396130d10d1168d76c7fc83742ffffbe66d9f4da4ca3f95f5ad6dac8cc7bb65d16d317d37aa99fdbf30ec7439c\nDigest = 2d0f59dc1c0698c75de8744e75c8bca110f125fc67bd75833c2b5aaf9d99da26\nK = 4ad5a92b5b8e170b71c8a7ed419dc624c7680004562b8d16a37b6e639f581ce81d5f0d98cce44d54c4e7136229148340\nR = f7baa6a5488ab462ea59aa31a36402b15880c68110b6069f51ede0c3b52a7b1e5bf926fdbe95768931b7d5f87058835c\nS = 28b1c4ef448a432f7c91b98b0c6471691e888211b6af907369a8930859b8cdb2e94f466a44f4e52f46df9b0d65e35de6\n\nCurve = P-384\nPrivate = b9208cbfd186ddfa3efd5b71342ae1efb01a13ebc4c2a992a2cbee7254b7846a4252ece1104b89d13d835911f8511224\nX = 166e6d96cb60d916fd19888a2dd945a3306ff0d7b0a5e30729f47d3dac3de2be3fd5cd7437e9a80d6c48cf960d2d36f8\nY = e6b2b70f131092ae210f29cc6bad701318bddb31bddf921695855c6208941100d0cee5d10799f8b835afe3ea510e8229\nDigest = c92cd2d52c9bfbd5c1bc55c6894cbaeae5aef12bd76a4d39d63e526aaf25760f\nK = da706ab5f61531f2378b3c0a2b342108cd119eadaa88b859df64923bccfb0ec2393fd312826f65c15a6587d1d460015b\nR = d9124c42858080c624", + "00e4d4d8136304e03d910cbe9b9b3487f4d27c7e0540a314d34bef8c850045c8746ca631c11c42\nS = bbf6424a3b70166fa799f49e918439d515327039258ef9bd88435a59c9c19659f8ec3c8660720b0c08354ff60e0f5a76\n\nCurve = P-384\nPrivate = 201b432d8df14324182d6261db3e4b3f46a8284482d52e370da41e6cbdf45ec2952f5db7ccbce3bc29449f4fb080ac97\nX = c2b47944fb5de342d03285880177ca5f7d0f2fcad7678cce4229d6e1932fcac11bfc3c3e97d942a3c56bf34123013dbf\nY = 37257906a8223866eda0743c519616a76a758ae58aee81c5fd35fbf3a855b7754a36d4a0672df95d6c44a81cf7620c2d\nDigest = 31a452d6164d904bb5724c878280231eae705c29ce9d4bc7d58e020e1085f17eebcc1a38f0ed0bf2b344d81fbd896825\nK = dcedabf85978e090f733c6e16646fa34df9ded6e5ce28c6676a00f58a25283db8885e16ce5bf97f917c81e1f25c9c771\nR = 50835a9251bad008106177ef004b091a1e4235cd0da84fff54542b0ed755c1d6f251609d14ecf18f9e1ddfe69b946e32\nS = 0475f3d30c6463b646e8d3bf2455830314611cbde404be518b14464fdb195fdcc92eb222e61f426a4a592c00a6a89721\n\nCurve = P-384\nPrivate = 23d9f4ea6d87b7d6163d64256e3449255db14786401a51daa7847161bf56d494325ad2ac8ba928394e01061d882c3528\nX = 5d42d6301c54a438f65970bae2a098cbc567e98840006e356221966c86d82e8eca515bca850eaa3cd41f175f03a0cbfd\nY = 4aef5a0ceece95d382bd70ab5ce1cb77408bae42b51a08816d5e5e1d3da8c18fcc95564a752730b0aabea983ccea4e2e\nDigest = a92784916a40feaebfeab16ea28c0c65e45c5e81eb634052944865708072e20110bd669a9838d7e722e94ac75245cdd3\nK = 67ba379366049008593eac124f59ab017358892ee0c063d38f3758bb849fd25d867c3561563cac1532a323b228dc0890\nR = fb318f4cb1276282bb43f733a7fb7c567ce94f4d02924fc758635ab2d1107108bf159b85db080cdc3b30fbb5400016f3\nS = 588e3d7af5da03eae255ecb1813100d95edc243476b724b22db8e85377660d7645ddc1c2c2ee4eaea8b683dbe22f86ca\n\nCurve = P-384\nPrivate = b5f670e98d8befc46f6f51fb2997069550c2a52ebfb4e5e25dd905352d9ef89eed5c2ecd16521853aadb1b52b8c42ae6\nX = 44ffb2a3a95e12d87c72b5ea0a8a7cb89f56b3bd46342b2303608d7216301c21b5d2921d80b6628dc512ccb84e2fc278\nY = e4c1002f1828abaec768cadcb7cf42fbf93b1709ccae6df5b134c41fae2b9a188bfbe1eccff0bd348517d7227f2071a6\nDigest = b2acf6b4ae1ba9985c1e657313d59157939c21868302f6f5c5dbf037867035ae7c2009bad9fce472579923f7b4b87795\nK = 229e67638f712f57bea4c2b02279d5ccad1e7c9e201c77f6f01aeb81ea90e62b44b2d2107fd66d35e56608fff65e28e4\nR = b11db592e4ebc75b6472b879b1d8ce57452c615aef20f67a280f8bca9b11a30ad4ac9d69541258c7dd5d0b4ab8dd7d49\nS = 4eb51db8004e46d438359abf060a9444616cb46b4f99c9a05b53ba6df02e914c9c0b6cc3a9791d804d2e4c0984dab1cc\n\nCurve = P-384\nPrivate = de5975d8932533f092e76295ed6b23f10fc5fba48bfb82c6cc714826baf0126813247f8bd51d5738503654ab22459976\nX = f1fabafc01fec7e96d982528d9ef3a2a18b7fe8ae0fa0673977341c7ae4ae8d8d3d67420343d013a984f5f61da29ae38\nY = 1a31cf902c46343d01b2ebb614bc789c313b5f91f9302ad9418e9c797563e2fa3d44500f47b4e26ad8fdec1a816d1dcf\nDigest = ec21c9d03a7270ea9ce7e9ff83211bac2fb104d078217c370248a3aba81f6c586852f19ced56dc71f83f5251d7381c8a\nK = fc5940e661542436f9265c34bce407eff6364bd471aa79b90c906d923e15c9ed96eea4e86f3238ea86161d13b7d9359d\nR = c2fbdd6a56789024082173725d797ef9fd6accb6ae664b7260f9e83cb8ab2490428c8b9c52e153612295432fec4d59cd\nS = 8056c5bb57f41f73082888b234fcda320a33250b5da012ba1fdb4924355ae679012d81d2c08fc0f8634c708a4833232f\n\nCurve = P-384\nPrivate = 11e0d470dc31fab0f5722f87b74a6c8d7414115e58ceb38bfcdced367beac3adbf1fe9ba5a04f72e978b1eb54597eabc\nX = 1950166989164cbfd97968c7e8adb6fbca1873ebef811ea259eb48b7d584627f0e6d6c64defe23cbc95236505a252aa1\nY = 41ef424b5cb076d4e32accd9250ea75fcf4ffd81814040c050d58c0a29b06be11edf67c911b403e418b7277417e52906\nDigest = f0272d0a51ee61f86d0875ca7800e12744ef6ffbac72bdda7c54ba24e5a5a6bd69ebe6f429cc20ac12b926d392efc4ce\nK = e56904028226eb04f8d071e3f9cefec91075a81ca0fa87b44cae148fe1ce9827b5d1910db2336d0eb9813ddba3e4d7b5\nR = c38ef30f55624e8935680c29f8c24824877cf48ffc0ef015e62de1068893353030d1193bf9d34237d7ce6ba92c98b0fe\nS = 651b8c3d5c9d5b936d300802a06d82ad54f7b1ba4327b2f031c0c5b0cb215ad4354edc7f932d934e877dfa1cf51b13fe\n\nCurve = P-384\nPrivate = 5c6bbf9fbcbb7b97c9535f57b431ed1ccae1945b7e8a4f1b032016b07810bd24a9e20055c0e9306650df59ef7e2cd8c2\nX = 2e01c5b59e619e00b79060a1e8ef695472e23bf9a511fc3d5ed77a334a242557098e40972713732c5291c97adf9cf2cf\nY = 563e3fe4ad807e803b9e961b08da4dde4cea8925649da0d93221ce4cdceabc6a1db7612180a8c6bef3579c65539b97e9\nDigest = e114c6204bee5bf0bbdf9ffc139bb99f09e7ea2186da3ee1e011dd059185d57c4953a130d34ff0df3fc6782dda199ee8\nK = 03d23f1277b949cb6380211ad9d338e6f76c3eedac95989b91d0243cfb734a54b19bca45a5d13d6a4b9f815d919eea77\nR = abab65308f0b79c4f3a9ff28dd490acb0c320434094cef93e75adfe17e5820dc1f77544cfaaacdc8cf9ac8b38e174bef\nS = 11b783d879a6de054b316af7d56e526c3dce96c85289122e3ad927cfa77bfc50b4a96c97f85b1b8221be2df083ff58fb\n\nCurve = P-384\nPrivate = ffc7dedeff8343721f72046bc3c126626c177b0e48e247f44fd61f8469d4d5f0a74147fabaa334495cc1f986ebc5f0b1\nX = 51c78c979452edd53b563f63eb3e854a5b23e87f1b2103942b65f77d024471f75c8ce1cc0dfef83292b368112aa5126e\nY = 313e6aaf09caa3ba30f13072b2134878f14a4a01ee86326cccbff3d079b4df097dc57985e8c8c834a10cb9d766169366\nDigest = f11e38f4037ae3ffd0fde97c08e2e5acbc26e3ac5828a86c182232be90ef6fc0f5d21a9b1a7b93472d78c103b4136019\nK = c3de91dbe4f777698773da70dd610ef1a7efe4dc00d734399c7dd100728006a502822a5a7ff9129ffd8adf6c1fc1211a\nR = f4f477855819ad8b1763f53691b76afbc4a31a638b1e08c293f9bcd55decf797f9913ca128d4b45b2e2ea3e82c6cf565\nS = 7c26be29569ef95480a6d0c1af49dc10a51a0a8931345e48c0c39498bfb94d62962980b56143a7b41a2fddc8794c1b7f\n\nCurve = P-384\nPrivate = adca364ef144a21df64b163615e8349cf74ee9dbf728104215c532073a7f74e2f67385779f7f74ab344cc3c7da061cf6\nX = ef948daae68242330a7358ef73f23b56c07e37126266db3fa6eea233a04a9b3e4915233dd6754427cd4b71b75854077d\nY = 009453ef1828eaff9e17c856d4fc1895ab60051312c3e1db1e3766566438b2990cbf9945c2545619e3e0145bc6a79004\nDigest = f8d0170479b2d1a8f50c80556e67ff345592c8b7dcda4e4f6099f993c1a71bff6d3b60190715ae1215a8a759a8eb13df\nK = a2da3fae2e6da3cf11b49861afb34fba357fea89f54b35ce5ed7434ae09103fe53e2be75b93fc579fedf919f6d5e407e\nR = dda994b9c428b57e9f8bbaebba0d682e3aac6ed828e3a1e99a7fc4c804bff8df151137f539c7389d80e23d9f3ee497bf\nS = a0d6b10ceffd0e1b29cf784476f9173ba6ecd2cfc7929725f2d6e24e0db5a4721683640eaa2bbe151fb57560f9ce594b\n\nCurve = P-384\nPrivate = 39bea008ec8a217866dcbdb1b93da34d1d3e851d011df9ef44b7828b3453a54aa70f1df9932170804eacd207e4f7e91d\nX = 5709ec4305a9c3271c304face6c148142490b827a73a4c17affcfd01fffd7eaa65d2fdedfa2419fc64ed910823513faf\nY = b083cda1cf3be6371b6c06e729ea6299213428db57119347247ec1fcd44204386cc0bca3f452d9d864b39efbfc89d6b2\nDigest = 86bc7536faf2de20028159ce93e293d0a7f5721fb6680b5b070c3f70aba845de2eaed9245144babc38c49cce59f3eac7\nK = 3c90cc7b6984056f570542a51cbe497ce4c11aeae8fc35e8fd6a0d9adeb650e8644f9d1d5e4341b5adc81e27f284c08f\nR = d13646895afb1bfd1953551bb922809c95ad65d6abe94eb3719c899aa1f6dba6b01222c7f283900fe98628b7597b6ea6\nS = 4a9a38afda04c0a6b0058943b679bd02205b14d0f3d49b8f31aac289129780cdb1c555def8c3f9106b478729e0c7efaa\n\nCurve = P-384\nPrivate = e849cf948b241362e3e20c458b52df044f2a72deb0f41c1bb0673e7c04cdd70811215059032b5ca3cc69c345dcce4cf7\nX = 06c037a0cbf43fdf335dff33de06d34348405353f9fdf2ce1361efba30fb204aea9dbd2e30da0a10fd2d876188371be6\nY = 360d38f3940e34679204b98fbf70b8a4d97f25443e46d0807ab634ed5891ad864dd7703557aa933cd380e26eea662a43\nDigest = 1128c8b09573a993adaa0a68f3ca965db30870db46de70d29e3b9a7d110ba0cd57633f1713173c62331b36fb925fa874\nK = 32386b2593c85e877b70e5e5495936f65dc49553caef1aa6cc14d9cd370c442a0ccfab4c0da9ec311b67913b1b575a9d\nR = 5886078d3495767e330c7507b7ca0fa07a50e59912a416d89f0ab1aa4e88153d6eaf00882d1b4aa64153153352d853b5\nS = 2cc10023bf1bf8ccfd14b06b82cc2114449a352389c8ff9f6f78cdc4e32bde69f3869da0e17f691b329682ae7a36e1aa\n\nCurve = P-384\nPrivate = d89607475d509ef23dc9f476eae4280c986de741b63560670fa2bd605f5049f1972792c0413a5b3b4b34e7a38b70b7ca\nX = 49a1c631f31cf5c45b2676b1f130cbf9be683d0a50dffae0d147c1e9913ab1090c6529a84f47ddc7cf025921b771355a\nY = 1e207eece62f2bcc6bdabc1113158145170be97469a2904eaaa93aad85b86a19719207f3e423051f5b9cbbe2754eefcb\nDigest = ab9a6d22c8d7675bc8e99e3cafed8318f33051ba5398ce0e9d8e8d3d537a6a908d4c2ace3e6d8204d0236d863eee3c28\nK = 78613c570c8d33b7dd1bd1561d87e36282e8cf4843e7c344a2b2bb6a0da94756d670eeaffe434f7ae7c780f7cf05ca08\nR = 66f92b39aa3f4aeb9e2dc03ac3855406fa3ebbab0a6c88a78d7a03482f0c9868d7b78bc081ede0947c7f37bf193074ba\nS = e5c64ed98d7f3701193f25dd237d59c91c0da6e26215e0", + "889d82e6d3e416693f8d58843cf30ab10ab8d0edd9170b53ad\n\nCurve = P-384\nPrivate = 083e7152734adf342520ae377087a223688de2899b10cfcb34a0b36bca500a4dfa530e2343e6a39da7ae1eb0862b4a0d\nX = 70a0f16b6c61172659b027ed19b18fd8f57bd28dc0501f207bd6b0bb065b5671cf3dd1ed13d388dcf6ccc766597aa604\nY = 4f845bf01c3c3f6126a7368c3454f51425801ee0b72e63fb6799b4420bfdebe3e37c7246db627cc82c09654979c700bb\nDigest = 68f858243fe465eb91dc2481333cbb1958883ef25099d45cf02721d17d2846d2cec4689884ae7c0412332e035a1fa3fc\nK = 28096ababe29a075fbdf894709a20d0fdedb01ed3eeacb642a33a0da6aed726e13caf6cf206792ec359f0c9f9b567552\nR = ee2923f9b9999ea05b5e57f505bed5c6ba0420def42c6fa90eef7a6ef770786525546de27cdeb2f8586f8f29fb4ee67c\nS = 50ef923fb217c4cf65a48b94412fda430fac685f0da7bd574557c6c50f5b22e0c8354d99f2c2f2c2691f252f93c7d84a\n\nCurve = P-384\nPrivate = 63578d416215aff2cc78f9b926d4c7740a77c142944e104aa7422b19a616898262d46a8a942d5e8d5db135ee8b09a368\nX = cadbacef4406099316db2ce3206adc636c2bb0a835847ed7941efb02862472f3150338f13f4860d47f39b7e098f0a390\nY = 752ad0f22c9c264336cde11bbc95d1816ed4d1b1500db6b8dce259a42832e613c31178c2c7995206a62e201ba108f570\nDigest = dca5ebfebeac1696eff4a89162469c6937b80f8f8cf17299856de2e13d8f8a199bff3085cee59366886164bcc03f7e90\nK = 7b69c5d5b4d05c9950dc94c27d58403b4c52c004b80a80418ad3a89aabc5d34f21926729e76afd280cc8ee88c9805a2a\nR = db054addb6161ee49c6ce2e4d646d7670754747b6737ca8516e9d1e87859937c3ef9b1d2663e10d7e4bd00ec85b7a97a\nS = fcc504e0f00ef29587e4bc22faada4db30e2cb1ac552680a65785ae87beb666c792513f2be7a3180fc544296841a0e27\n\nCurve = P-384\nPrivate = ed4df19971658b74868800b3b81bc877807743b25c65740f1d6377542afe2c6427612c840ada31a8eb794718f37c7283\nX = 33093a0568757e8b58df5b72ea5fe5bf26e6f7aeb541b4c6a8c189c93721749bcaceccf2982a2f0702586a9f812fc66f\nY = ebe320d09e1f0662189d50b85a20403b821ac0d000afdbf66a0a33f304726c69e354d81c50b94ba3a5250efc31319cd1\nDigest = f9b152150f7dc99d5262c9da04dde148009730fb2af9ac753b9c64488d27c817f68c17ae1ff61e50ebb6749230c59a71\nK = d9b4cd1bdfa83e608289634dbfcee643f07315baf743fc91922880b55a2feda3b38ddf6040d3ba10985cd1285fc690d5\nR = 009c74063e206a4259b53decff5445683a03f44fa67252b76bd3581081c714f882f882df915e97dbeab061fa8b3cc4e7\nS = d40e09d3468b46699948007e8f59845766dbf694b9c62066890dd055c0cb9a0caf0aa611fb9f466ad0bbb00dbe29d7eb\n\nCurve = P-384\nPrivate = e9c7e9a79618d6ff3274da1abd0ff3ed0ec1ae3b54c3a4fd8d68d98fb04326b7633fc637e0b195228d0edba6bb1468fb\nX = a39ac353ca787982c577aff1e8601ce192aa90fd0de4c0ed627f66a8b6f02ae51315543f72ffc1c48a7269b25e7c289a\nY = 9064a507b66b340b6e0e0d5ffaa67dd20e6dafc0ea6a6faee1635177af256f9108a22e9edf736ab4ae8e96dc207b1fa9\nDigest = 14f785ebb5a3b1bdff516a6b580e245b3c81aff37e1035e354b084a6691e973e0de30bb2a0490fca2d757f8191d7560a\nK = b094cb3a5c1440cfab9dc56d0ec2eff00f2110dea203654c70757254aa5912a7e73972e607459b1f4861e0b08a5cc763\nR = ee82c0f90501136eb0dc0e459ad17bf3be1b1c8b8d05c60068a9306a346326ff7344776a95f1f7e2e2cf9477130e735c\nS = af10b90f203af23b7500e070536e64629ba19245d6ef39aab57fcdb1b73c4c6bf7070c6263544633d3d358c12a178138\n\nCurve = P-384\nPrivate = 217afba406d8ab32ee07b0f27eef789fc201d121ffab76c8fbe3c2d352c594909abe591c6f86233992362c9d631baf7c\nX = fb937e4a303617b71b6c1a25f2ac786087328a3e26bdef55e52d46ab5e69e5411bf9fc55f5df9994d2bf82e8f39a153e\nY = a97d9075e92fa5bfe67e6ec18e21cc4d11fde59a68aef72c0e46a28f31a9d60385f41f39da468f4e6c3d3fbac9046765\nDigest = f863cf3749ae5256da0ceb2e6d391fcce939b1490b024527687b1a2908da35c48b44255d82956c76d70672c41c6456d78c57342e932490083f73016b560a0245\nK = 90338a7f6ffce541366ca2987c3b3ca527992d1efcf1dd2723fbd241a24cff19990f2af5fd6419ed2104b4a59b5ae631\nR = c269d9c4619aafdf5f4b3100211dddb14693abe25551e04f9499c91152a296d7449c08b36f87d1e16e8e15fee4a7f5c8\nS = 77ffed5c61665152d52161dc13ac3fbae5786928a3d736f42d34a9e4d6d4a70a02d5af90fa37a23a318902ae2656c071\n\nCurve = P-384\nPrivate = 0a3f45a28a355381a919372f60320d6610cfb69c3e318eb1607db3cadfc42b728b77a6a9e9e333de9183c58933daf60f\nX = 832cbb7061a719a316e73dbad348fa67cd17c33f40b9000a3d3b691a2a2cd821052566717c3ead01089b56086af1366f\nY = 1e15a048d1dce642d9ebcbfac7f92b1bcee90fd0240cc79abd29e32e0e655c4ee1fd34fb88178bba92aca100e7794ed0\nDigest = 68944ca920620e1d42184d264c4ffe295882f00079f9daaaa0efc305fe10cc7bbc667985c148eacb51ee1c05a6d8a861e98371a045e11e18e200ad52d5b4cb13\nK = 2a78e651623ba604c42cf094fc7d046629306f508853427ba091448800d1092c041bb2323035fc9d19a8d44950f7dcc3\nR = 0db0cc9a2bda8dd7e565ad36f91b1c5756d78164dc8a72a5bee4b6bc45ea38c7a16b01d05b1893d4e06b62db24c30385\nS = abd383edaeda7d0b8de1b54fcd3c28874fed62ab266f1f84c8ba796a7b54e5e0695fdb43ce7fe90ed00fa468d87bca64\n\nCurve = P-384\nPrivate = 2e408c57921939f0e0fe2e80ce74a4fa4a1b4fa7ab070206298fe894d655be50e2583af9e45544b5d69c73dce8a2c8e7\nX = a2b24a5ad4a2e91f12199ed7699e3f297e27bf8b8ea8fbe7ed28366f3544cd8e680c238450f8a6422b40829d6647b25c\nY = 2732be0075536e6519f6a099b975a40f8e0de337fa4d48bd0762b43f41cab8deafdef9cfbb9973e457801e3bf9c93304\nDigest = 8876ecd423fd0e903364fac777897b80b31c03f0f1ef1678372a6cb240ab701e49b51b798fd8e588ab39db7d3c77879901916babdd0ef0632cc16d5ccb9d1535\nK = b10b6258afdde81f9c971cc1526d942e20cafac02f59fee10f98e99b8674636bff1d84a6eaa49c0de8d8cfdc90d8ce84\nR = be428a8de89a364a134719141ee8d776a3a8338f1132b07e01b28573d8eaf3b9008b63304c48821e53638b6141f9660b\nS = 866181dbef5c147d391bed6adcee408c339982c307adc718c2b9ab9e5642d8dedc36dd6402559a3ab614c99c1e56b529\n\nCurve = P-384\nPrivate = 1c285da72a8eb1c3c38faab8d3bb4e68dc95c797082b9a3991a21c1de54759071ecf2265fb1eff504ab24174bc6710cf\nX = 11acb1b5cc59a4f1df1913a8d6e91cbdafb8206dc44aff7d9da45906b664fc33194d9935a82aa4d62f39618897c86025\nY = 832ed0b9575fff52a3603bfe89f312751b4c396da98324117a61b3f525d27b2266f6cfb22be07e50b6874435e380ed62\nDigest = 2a1a866fe1596c484c38ef78bdda2e9783dd9f8df86e93e56f86cfb467e9f457d27e02d36e0c23d63401d82765e5e1a8065ad8f3a67bb0db356a6a1c5a63df27\nK = 2513075e02cc7fb3cff7b7adde46da31c5493749b5cf02758bd5b098a838bfd4d5e4c7fb8268bdc37e219c30efebe878\nR = b3d638b3be45f14f170da5bdc22d2114deac93ab340a25b3af2b5c18584bb9147e00dc6c67a2274f79aa4838793eb63f\nS = 876112bdca2c725eb2f6dbd76d07710a31f0c16d38430cb0817f320a25a9ecfec8a66137d0304612ae29a6a484fd3319\n\nCurve = P-384\nPrivate = 9da37e104938019fbdcf247e3df879a282c45f8fb57e6655e36b47723af42bec3b820f660436deb3de123a21de0ca37b\nX = 722d0ea6891d509b18b85ca56f74deb5c3030d2a30433824123d430d03c99279572c3b28ecf01e747b9db8acc55d0ba3\nY = 7e2605ea7092214f366f3639037bffd89fe103c646e990839d3a1ced8d78edb5b9bc60d834fd8e2a3c17e920bdae023a\nDigest = 96768f5d5edae35aaabf1e32158525b0cfb28a74059a48e053208e4a655f51a8fabb63e3a7e7c70be9945b1954f9bc48247d9f19c98328b8d65030d37a71b84b\nK = c8c18e53a9aa5915288c33132bd09323638f7995cd89162073984ed84e72e07a37e18c4c023933eace92c35d10e6b1b6\nR = 6512a8a2be731e301dcf4803764297862bbfa0ac8daed64d8e98b34618ecb20520fc5d3cf890b7783edf86e7ea407541\nS = 4ff10301f7b4168fae066361376007c1d7aa89a75c87719d0b54711ffef5ef3726f3eef84f7ebc025c110bde511b17f6\n\nCurve = P-384\nPrivate = 0661ab3bf9f7bef51bec7dff758de289154557beb9ce18cc4b8cc09a871e8322af259cf188b593dc62f03a19e75f7f69\nX = b4f100558043858efa728082d9b99ad5192b59b0947434f5ba7ff2514508a6d71ba54e7221c31cb0712103272b3f6fa4\nY = 34f6df4eeb2da11498044635067c2715ed15ae251c78ffb9030d87909ea8539b66394e93109ca54c0406cf99960c3e93\nDigest = c2a0f9cd8fe7d7a951f19d373ad97dc7f95219cd2b8498552a3352f1a4b0e4ee25c7a7a51b1e47b66640c320e503a53dc76af6c08141c8936ec8cbdc038cb7a8\nK = 84a87137edb6894f96c5a8e94a3765162034feb84dfea94e1c71411170c285a80321ec7999e25861844143209804882c\nR = 4dc9d1b949b36e3c3847ac1c7ed114e1bc9cbe76119cf6fcd3f1b69ee6ee54e3255f1bb288fe2f8bd6d4049a21793c27\nS = 56a561d647b62ccae1e6df818b1a6fbde66c82ef0ff69ee415f183e7daf76be22630c7e02cd3fd729dfa490f26824584\n\nCurve = P-384\nPrivate = 66e7cfdeb7f264cf786e35210f458c32223c3a12a3bc4b63d53a5776bc9b069928452484f6241caa3781fd1a4109d4db\nX = 3c7682de540ab231daf21bf9fc80bda6abf7e17dcc79d476c7b7c3bd4d42d386877fd8ba495c1b0333e04fb5fd2a1505\nY = 0a1582e4f4d72abea9d3476aff8369c41261f0c5dddf2ca82e10f7a163f73df09473d9e5e2552187104e4cc7c6d83611\nDigest = cc04e32af9b8c178039eb9b1cece8bd89079ea400e35bb912e5efec06eeb02f9a12905383acbb5551b949f225998169818e3e9e6bd2cb0c08e10895f022f3be8\nK = 2fa266f5cce190eb77614933ca6a55121ad8bae168ff7a9043d96d13b5ca2fe70101ff9fe1e2b2cd7413e6aa8f49abde\nR = e7ecda9da0c52d0474a9f70094dc8f061d7d6a22210d3b69a7be", + "8f389aa666f256322099b87d16ad35357ea856574dba\nS = ba348eb40a2830ec5a1130264ac0a8675420b1ae243e808a778135809ece21f42c0c881166321102b4f02df4c5c7ed9d\n\nCurve = P-384\nPrivate = 92c2f7ee64af86d003ab484e12b82fcf245fc330761057fec5b7af8f7e0a2d85b468c21d171460fcb829cae7b986316d\nX = ca43a306479bf8fb537d4b9ff9d635bbb2a0d60d9e854d5b7e269d09d91f78c6b90b616e4c931629453645a2bb371e14\nY = 356c4d7f10e690614eaf7f82ba0f9dc1aad98130c0ad9fe353deec565cc04bef789a0a4242322e0058b46cd02f2de77d\nDigest = cf638b5ae7d04e6edc97be83aa2598afce555f9f85893208b7a5192ea84b08cbd10b54d0f5ee6e11e86a31252d766dfd927f724f276a52eb43c98fc16c4f7333\nK = 6ec81fb74f8725ba225f317264460ee300cfd2f02092000989acbdad4799cf55c244a65c557113328fe20282e6badb55\nR = cd7a4309bcebc25a8e10899fe2eda5f8b2dbcf329cd2f3d65befd67393e83fba2f8a67a15c01a6ac8314f9f5e87a9dca\nS = 6dcfc0426bc148e67e91d4784e3d7e9bc3b7ce3676be62daa7f3f55dfdff6d9dc735b5e3e0bbd0785db1f76f7ac065f3\n\nCurve = P-384\nPrivate = 15347caaad1067f1848a676bd0a8c52021ae604b79d02775a0459226e0391a3acd26653c916fcfe86149fb0ee0904476\nX = e5a0463163964d984f5bad0072d45bc2059939e60a826ccca36c151460ae360f5d6679f60fe43e999b6da5841c96e48a\nY = 30f2dd425a3fa2c95d34124217250b39e3b4a14f3e6e415ae8e5b0409eb72f43f78b64d0ce6f2d49980d6f04cd1391db\nDigest = 4f381df1ba39833f9f10e4b88314290ed04b56a8cdc4eab26d7b8b2bb03b5add622d8323b9fce5c794027b91578fdbd17208cb238cb1c8bfab7485c81bf45a90\nK = 1a2d224db4bb9c241ca5cab18920fad615fa25c1db0de0f024cb3ace0d11ef72b056885446659f67650fdff692517b1c\nR = 87b4de0fb21df38dfc9a4b1e350da67547e307f55b5b9dd6615e408afe7c3553a6e02722847367439e636074faa2182b\nS = 375d965753b9ed6c6c08576726f8308c2f8dbd2737824464e71265d47907e26f615bbeb8203ec617520d4ecd1851dc44\n\nCurve = P-384\nPrivate = ac1cb5e59bda2eff3413a3bab80308f9fb32c595283c795de4c17fdae8d4647b5f108fd0801aee22adb7db129283b5aa\nX = bc6b1a718284803553c173089c397870aaaecca579bb8e81a8cfa12473cd2057567fa8726a19ed427cc035baeec2c551\nY = 14f82997d1129b669f0015350e47ad561b1b13441af4fb44656f15ed0c5706984d66655accc52f2e943eef39cb1cdc21\nDigest = d1a787cdf3c1c6c807731083e28a75a1df39f43d19a16ff121ca10b33111b5c71c561542cb61c2cca85a1632ab5535596c659d8b257df95be175843d246e6232\nK = 8053a46e875f446056b06d4318fa3e8977622de7207cbf0996bf35b0e9b19aaa507f642bcf0be9f048f1af09806f6946\nR = a994eb15b64114ce8a9342d18b5edda96a6d76314a5ac03da723699177d352a4a9f3b7121b11a91e43a6af4025da51d6\nS = 8183ae33a888e99aa76882da0a6705ad102f2bbd9572fad0d2e4d6d70151970469e00c5220e59c14724d771c1384b302\n\nCurve = P-384\nPrivate = 205f1eb3dfacff2bdd8590e43e613b92512d6a415c5951bda7a6c37db3aae39b9b7ec6edd256609e75373419087fa71f\nX = c9f1f63a18c761b077a1ec35fbb2de635db9b8592c36194a01769b57728c7755d4c79b3d5b97a1a4631e30c86d03f13c\nY = f8c4a38770054d5cc9bb9182e6d4638242c4fd16e869ac22e44c4b9402d594e0c6f5df6a9a7de32a4893d9f6588f1950\nDigest = f1c6287f6a2164c20b246bcc8500b03a7cee404caa6b571ed32ee7cff17eb1979d07e8ef1c2856ca83d987bf8301d7f3a8384c22f209c831f8b12f2b11cd8154\nK = ecd395c5d8b7d6e6b2b19644e0d2e6086c912c6a0f5b8ed4b94b7290b65852c9741ce8eeb08d8751ead8a183e17d76c6\nR = e81331d78b438b0b8d98c1be03385ba5d614af182f1677f259126cc3de7eaac6c19b02be955d936b6bf9c27c6796e6f0\nS = 17c2b7a8e0fc93909762aa9f86f9561e759ecb88f02337b2018363be6095d9e4324a6d3296046686624b5efad6b52878\n\nCurve = P-384\nPrivate = e21e3a739e7ded418df5d3e7bc2c4ae8da76266a1fc4c89e5b09923db80a72217f1e96158031be42914cf3ee725748c1\nX = 0f753171922b5334f3dd2778a64ce2da8295121939beae71ad85e5344e893be0fd03cf14e1f031adec098e0c4409449c\nY = 45c10a0ffc0eb2f1cec5c89b698061108313ee7d449ad580efad344f0e7cf35be8a18fca620f112e57bdc746abdace55\nDigest = 44d0ad691730209dbfde2083c68111a0f59af96d8de255875b55654055c5b6f7a48537d461ebea4df1709e196fc5d9fab1466a53f24a63c749fde05f62daf7b8\nK = d06bea06b25e6c30e866b1eb0657b45673e37b709013fb28fd7373afc8277cbc861354f821d0bd1927e52ec083a0f41f\nR = e8d4a31dd0e7d2522be62a32608e744c3775ceb606dc897899f0c73f1a40ce9a8be854cd506e65cd81fd7fa2c616cb7b\nS = 8151b681b6b6046d3c36f332d06d9ba7751e740631cdb759f88c50a25a8e950d5023df8a15c77243743733c4feaf21d5\n\nCurve = P-384\nPrivate = 93434d3c03ec1da8510b74902c3b3e0cb9e8d7dccad37594d28b93e065b468d9af4892a03763a63eae060c769119c23c\nX = a52c25f2af70e5bc6a992ecef4ea54e831ed5b9453747d28aec5cffb2fcfee05be80c5cbab21606b5507aa23878adee1\nY = 2cf2a9afeff83f3041dc8a05f016ccae58aa1a0e0dc6be9d928e97f2598c9ba5e9718d5eb74c9cfb516fd8c09f55f5b9\nDigest = 61c5ed5d5e7d742dce869379a4322dd5b3d773c0c07575d69fca1e9fe2e7a90ea013094dd474ef1e682f30ca0fca50d8835e84f1e5e62b8a3f6140fbe5c75a44\nK = 13d047708ae5228d6e3bbada0e385afdb3b735b31123454fdf40afe3c36efed563fd2cce84dcc45c553b0993d9ca9ec3\nR = a0203f6f2c456baac03538ed506a182e57a25151802cf4b2557613b2fb615ebd4c50ddc505f87c048a45bad3b2fc371c\nS = 0eab56457c4080400fa3af124761d5a01fef35f9649edba8b97d22116386f3b8b363e97ef3f82616d5d825df1cf865ef\n\nCurve = P-384\nPrivate = e36339ddbe8787062a9bc4e1540690915dd2a2f11b3fe9ee946e281a0a2cbed426df405ed9cb0eca42f85443efd09e0c\nX = a1ffb4b790d1593e907369b69de10b93cddbb02c6131f787422364d9d692768ef8097970306cce16c97f2b10c538efa7\nY = d0692028601ea794d2563ffe9facc7273938fab47dd00b8960be15549a9c2b3f8552583eb4c6cd212fe486c159c79153\nDigest = 5e7b908015b39fe97a2e84d30cae3c3b309103ff446e3ea2b2eafb8c004ceee6589d31a83c9904f4f4caec4cc0cec7641f62dd228a40a7696bd2b4583a016ace\nK = 2226f7329378cecd697f36ae151546643d67760856854661e31d424fae662da910e2157da9bb6dfbe3622296e0b5710c\nR = 20dcc25b67dd997621f437f65d78347fb57f8295b1b14453b1128203cda892bcfe726a2f107d30975d63172e56f11d76\nS = 51cff592cbef75ef8321c8fa1e4229c4298b8180e427bee4e91d1e24fc28a729cf296beb728960d2a58cf26773d8e2e2\n\nCurve = P-384\nPrivate = 5da87be7af63fdaf40662bd2ba87597f54d7d52fae4b298308956cddbe5664f1e3c48cc6fd3c99291b0ce7a62a99a855\nX = 54c79da7f8faeeee6f3a1fdc664e405d5c0fb3b904715f3a9d89d6fda7eabe6cee86ef82c19fca0d1a29e09c1acfcf18\nY = 926c17d68778eb066c2078cdb688b17399e54bde5a79ef1852352a58967dff02c17a792d39f95c76d146fdc086fe26b0\nDigest = 6f39c6187b6dbdfb17c7267aba7804f6087742d56647e74692afc69e1430bed1535cd71c7cef015f9647e2ade3e19f4f9574807a4c5fc5b2b219d1b6fe803bb0\nK = 1b686b45a31b31f6de9ed5362e18a3f8c8feded3d3b251b134835843b7ae8ede57c61dc61a30993123ac7699de4b6eac\nR = 9dbfa147375767dde81b014f1e3bf579c44dd22486998a9b6f9e0920e53faa11eed29a4e2356e393afd1f5c1b060a958\nS = e4d318391f7cbfe70da78908d42db85225c85f4f2ff413ecad50aad5833abe91bdd5f6d64b0cd281398eab19452087dd\n\nCurve = P-521\nPrivate = 01d7bb864c5b5ecae019296cf9b5c63a166f5f1113942819b1933d889a96d12245777a99428f93de4fc9a18d709bf91889d7f8dddd522b4c364aeae13c983e9fae46\nX = 01a7596d38aac7868327ddc1ef5e8178cf052b7ebc512828e8a45955d85bef49494d15278198bbcc5454358c12a2af9a3874e7002e1a2f02fcb36ff3e3b4bc0c69e7\nY = 0184902e515982bb225b8c84f245e61b327c08e94d41c07d0b4101a963e02fe52f6a9f33e8b1de2394e0cb74c40790b4e489b5500e6804cabed0fe8c192443d4027b\nDigest = 84358f87f45970a080efcb8b1d9284c8e61e06edbf5209b1a9db9cbc\nK = 0141f679033b27ec29219afd8aa123d5e535c227badbe2c86ff6eafa5116e9778000f538579a80ca4739b1675b8ff8b6245347852aa524fe9aad781f9b672e0bb3ff\nR = 006b973a638bde22d8c1c0d804d94e40538526093705f92c0c4dac2c72e7db013a9c89ffc5b12a396886305ddf0cbaa7f10cdd4cd8866334c8abfc800e5cca365391\nS = 00b0a01eca07a3964dd27d9ba6f3750615ea36434979dc73e153cd8ed1dbcde2885ead5757ebcabba117a64fcff9b5085d848f107f0c9ecc83dfa2fa09ada3503028\n\nCurve = P-521\nPrivate = 017e49b8ea8f9d1b7c0378e378a7a42e68e12cf78779ed41dcd29a090ae7e0f883b0d0f2cbc8f0473c0ad6732bea40d371a7f363bc6537d075bd1a4c23e558b0bc73\nX = 00156cd2c485012ea5d5aadad724fb87558637de37b34485c4cf7c8cbc3e4f106cb1efd3e64f0adf99ddb51e3ac991bdd90785172386cdaf2c582cc46d6c99b0fed1\nY = 01edeeda717554252b9f1e13553d4af028ec9e158dbe12332684fc1676dc731f39138a5d301376505a9ab04d562cc1659b0be9cb2b5e03bad8b412f2699c245b0ba2\nDigest = 962bade1e8227c9f2a069177fb89dab45c4f7e8e2f81fdd206b0b99e\nK = 01dc3e60a788caa5f62cb079f332d7e5c918974643dca3ab3566a599642cd84964fbef43ce94290041fe3d2c8c26104d9c73a57a7d4724613242531083b49e255f33\nR = 012592c0be6cce18efb2b972cd193d036dcb850f2390fa8b9b86b2f876548bc424fb3bc13c1e5c415fa09d0ecfcae5bf76fb23e8322d7eecb264a2ae6d20ef50d405\nS = 011bc9713be88e3b9912a3e5f5d7b56f20573e979b1a75d04ce339f724bddffa4665d25995fe24d32507d8a07c5e10169f5338ef2827737f7b0291752b21237217e3\n\nCurve = P-521\nPrivate = 0135ea346852f837d10c1b2dfb8012ae8215801a7e85d4446dadd993c68d1e9206e1d8651b7ed763b95", + "f707a52410eeef4f21ae9429828289eaea1fd9caadf826ace\nX = 018d40cc4573892b3e467d314c39c95615ee0510e3e4dbc9fa28f6cd1f73e7acde15ad7c8c5339df9a7774f8155130e7d1f8de9139ddd6dfe1841c1e64c38ea98243\nY = 017021782d33dc513716c83afe7ba5e7abef9cb25b31f483661115b8d6b5ae469aaf6f3d54baa3b658a9af9b6249fd4d5ea7a07cb8b600f1df72b81dac614cfc384a\nDigest = 3ab194db447f5dc738e1452bf7958b346c071b84d6ca2edd9ea3b870\nK = 00c24acc1edb3777212e5b0bac744eadf4eda11fa150753b355bf96b189e6f57fc02284bb22d8b3cd8bba7a09aae9f4ea955b382063425a6f8da2f99b9647b147172\nR = 0183da7b8a9f9d5f08903359c1a2435b085fcf26a2ed09ab71357bb7634054acc569535e6fe81d28233e4703005fc4bf83ce794d9463d575795aa0f03398e854cefd\nS = 00b3621145b9866ab7809139795cc30cd0404127a7f0fafa793660491009f6c53724fdb0b1ffbf0fd51c131180b8a957fe66e76d2970247c024261c768dee9abbfb9\n\nCurve = P-521\nPrivate = 01393cb1ee9bfd7f7b9c057ecc66b43e807e12515f66ed7e9c9210ba1514693965988e567fbad7c3f17231aacee0e9b9a4b1940504b1cd4fd5edfaa62ba4e3e476fc\nX = 01e855c935139c8092092cfa733db1292530506eeb2bbb1687f9602c36d97a6714e998892d5d3b842d1896a6ece9d549e9792881a256256137b3dff180c96cc5d07b\nY = 018d83b6e93cd287311f7bf7c1d7f9eeabcf0b69c12f2d8f40e333e81e956d968532a37a4c04d761874df293b484cd7053b03fdbc2fdcd3b4c412d6f272fb7c93fe6\nDigest = 7c72d5606cbc1610e101aa50d4793f96339eab9eba88342e87ff2642\nK = 01d98619bdc04735d30c222fc67da82c069aea5f449af5e8c4db10c1786c0cb9e6f2cc0bb66fa6be18c485570d648dafcd0a973c43d5c94e9a9dacbd3170e53fa2a0\nR = 00bf47fabe107ce0ec03e2ad60a79b058e1bebb18568b6a8cdbe86032e71aa30c15766105b2ea952cfa79bcab046df601159f96e179bbcf252dc68ac73d31481fdae\nS = 01f918fec69cd07d90f9d892b7117e7519c3224947f4262f1fd97077dd5386a6c78aeddff3ee97e59ea353f06029f1336f0d6ef5c0f4b17ca59343a55319b7bfc3db\n\nCurve = P-521\nPrivate = 0179fa164e051c5851e8a37d82c181e809a05fea9a3f083299b22684f59aa27e40dc5a33b3f7949338764d46bfe1f355134750518b856d98d9167ef07aac3092c549\nX = 01857cc7bbed20e87b3fd9a104956aa20c6502192910e0e7598410526ebfe1c99397b85189612a60c51fb8f4dd5cb08a8cd2e702563062dcb043410715c5323a0046\nY = 01fce8d135284310d2f38c216030634b32cd223222f0d9d8d2b7c55477c4b8b74fc6c96a6092f34b05ca44d3633a5037c2166c479a032bb4f949f89fc1ba5236d07d\nDigest = b2d36a3bfc82c960eb05f4993b9bd596a25920145d4267f74481a070\nK = 016d9704c0cee791f2938bb2a8a595752a3635c2f557efeecefd719414b5f2aaf846080f582c76eae7a8fddf81859b49d0131c212524d55defa67dca1a9a28ca400f\nR = 01c9a4e51774384e8362876a87c572e6463a54413c7c6252c552ebb182f83e45ace436ade4ca373d8a7216e83efb62c8b41c4d5132a0afa65078f16d189baca39187\nS = 01e92a7dd5fea29a666398e1df5775cbb5664fe6943fe4c1d2bba516b7543c84df584458e53919c4ffab579a26fb3c892a5d1a77b0a07428c89350f8b559e627b014\n\nCurve = P-521\nPrivate = 013dabca37130ba278eae2b3d106b5407711b0d3b437fbf1c952f0773571570764d2c7cb8896a8815f3f1975b21adc6697898e5c0a4242092fc1b80db819a4702df4\nX = 00bc2aebf40cd435bc37d73c09d05f2fd71321111a767c2b0d446f90dd4a186839c694ceb734e027e7ee948f0f63e4d3f1656d3d543df23c342a599306909b347109\nY = 01f4c98ac03f0718e58d5d1762c920445b11dbdd60ec7f60095809204e14965a4ecb0be6fea06adbac8ba431d6f144c75c199225df2a619a34be99897125b3a10af8\nDigest = 06d4fd20efb2a725626550c8097bd7b38dcadf64ee36350ce8e47a24\nK = 00401187c8b89945a1e48cda9ee52167789f4121e67482a7ac797899f5d3d2e623aed31e4adae08a8d43e69028fa074d2650317cbc765f6ed191cf0317b4bae57881\nR = 01e572afed754016fba43fc33e352932c4db65efcb84e2bd159b40fc5925893b161effc40240be28d8c07154d2615f605c6f0451b976522d95afd37f46602df7a12a\nS = 0030370c1c5352c2b663ac1858b42f69545b2f58ed5b2c007f303726977d3c756b5d644ec6788f94c886f78269aa190a3d8d1ae10e4fd24d937c4556fb9e1953fd6d\n\nCurve = P-521\nPrivate = 0198681adbde7840d7ccd9cf1fb82056433fb4dd26bddf909af7b3b99da1ca2c05c8d4560ecd80ba68f376f8b487897e374e99a9288ed7e3645cc0d00a478aae8d16\nX = 0057ce3777af7032f1f82308682e71fe09f88bf29dacd5018a725e1caa4b1e2bfdd894fe618f9266f31ba089856dc9c1b70e4a2faa08b4b744d1aafcd5ae99e2c736\nY = 0199bcfef2021bc5890d7d39ec5dc0c26956801e84cae742cf6c50386eb289b6e97754dd25a94abf81f1cb1b36935b5eb29f4b32a6516d2ff6a7d23064a0daec94b3\nDigest = 8c7db2e1a2ba5f8bd0a4f7e7f67a20918a87bc6c6462c326406e6c4e\nK = 019d2d74ad8ee2d85048f386998a71899ef6c960b4ab324e5fd1c0a076c5a632fd0009500076522e052c5c9806eef7056da48df6b16eb71cdf0f1838b0e21715fce0\nR = 018ecacbcffd5414bbb96728e5f2d4c90178e27733d13617e134ec788022db124374bbaa11e2c77fe3f38d1af6e998e1b0266b77380984c423e80ffa6ff2bcafd57a\nS = 01c727f34b6a378f3087721a54e9796499b597ecf6666b8f18312d67e1190a8a66e878efc2367b551267494e0245979ef4deed6d2cbf2c3711af6d82ccfeb101a377\n\nCurve = P-521\nPrivate = 008c4c0fd9696d86e99a6c1c32349a89a0b0c8384f2829d1281730d4e9af1df1ad5a0bcfccc6a03a703b210defd5d49a6fb82536f88b885776f0f7861c6fc010ef37\nX = 0164ac88ed9afe137f648dd89cdd9956682830cac5f7c1a06d19a1b19f82bb1d22dfeefea30d35c11202fed93fd5ce64835d27c6564d6e181287fa04a2d20994986b\nY = 005cb83669265f5380ccefe6b4f85fdf0049e6703f6f378a0b2e52ed0fbbcf300afebb722f4ed48e3819cb976c1d60e2ba05646b478f6dfecfbae730e9644c297f00\nDigest = 4ff99d232c8fef39fecfe8af79d274e03beb4502fb833d8af4181d7b\nK = 0189801432cba9bf8c0763d43b6ec3b8636e62324587a4e27905b09a58e4aa66d07d096dbce87824e837be1c243dd741f983c535a5dd2f077aac8beee9918258d3cb\nR = 00917723f7241e8dc7cd746b699ab621d068dd3a90e906aaf0a4862744b96fd4e5ccdb9c7796c27f7196e693d06ec209464c3ea60ad6313e9b77cceaa14767e6651c\nS = 00957b0ecdc3668f6efa5d0957615bcfffd6419c5e57579b74f960f65ae3fb9e8284322ff710b066f7e0959ac926d3cf9a594bdb70bbec756c96910b26a2486dee9e\n\nCurve = P-521\nPrivate = 01466d14f8fbe25544b209c5e6a000b771ef107867e28ed489a42015119d1aa64bff51d6b7a0ac88673bbc3618c917561cff4a41cdb7c2833dab5ebb9d0ddf2ca256\nX = 01dc8b71d55700573a26af6698b92b66180cf43e153edadb720780321dbb4e71d28e0a488e4201d207fc4848fe9dd10dcabec44492656a3ff7a665fe932445c82d0b\nY = 01920b16331b7abeb3db883a31288ef66f80b7728b008b3cc33e03a68f68d9e653a86e3177bbc00014fa5ea4c1608c0d455c2e2ac7bd8ab8519ebf19955edf1baf8d\nDigest = c1120fe21c2c40b47a97c9815c619a223c2f11fb2ebb5e87cb175280\nK = 0160d04420e0d31b0df476f83393b1f9aff68389cc3299e42ef348d97646f7531a722b66ddfb9501bbb5c4a41d84c78be7233b11489bceb817d23060e6017433fab8\nR = 008077aabd0a342f03f912007c586cfedfc63f93d1118f720d5b62b3ce141a60f86f111dfd8fc2e31a6778981f1a5e28f29a7369bd7897bb41240c8d3a9c170e0ee0\nS = 000abc75fc154b93840579457820957e89d1260fee0a4b9bb1946f61ca1e71afd76bb5e1077b3e38ceb39d1fac5ef8b217c4110617b3ad118e02b3fcc2a39ef38613\n\nCurve = P-521\nPrivate = 001a99fcf54c9b85010f20dc4e48199266c70767e18b2c618044542cd0e23733817776a1a45dbd74a8e8244a313d96c779f723013cd88886cb7a08ef7ee8fdd862e7\nX = 01912d33b01d51e2f777bdbd1ada23f2b1a9faf2be2f2a3b152547db9b149b697dd71824ca96547462e347bc4ef9530e7466318c25338c7e04323b1ba5fd25ea7162\nY = 00bbe9b1e3a84accd69b76b253f556c63e3f374e3de0d1f5e3600fc19215533b2e40d6b32c3af33314d223ea2366a51d1a337af858f69326389276f91be5c466e649\nDigest = 08a10ee8d56db0cbc4bd68611f39f23d2ef379fe730eae170d84b388\nK = 014fafd60cb026f50c23481867772411bb426ec6b97054e025b35db74fe8ea8f74faa2d36e7d40b4652d1f61794878510b49b7b4fe4349afccd24fc45fec2fd9e9e7\nR = 018b1df1b6d7030a23a154cacce4a2e3761cc6251ff8bf6c9f6c89d0a15123baef9b338ada59728349ce685c03109fcde512ed01a40afd2ca34e1bc02ecf2871d45c\nS = 00a399f9b9e21aeddf450429fec2dc5749e4a4c7e4f94cee736004dcc089c47635da22845992cd076a4f0a01d2cc1b0af6e17b81a802361699b862157ad6cad8bd1d\n\nCurve = P-521\nPrivate = 01b6015d898611fbaf0b66a344fa18d1d488564352bf1c2da40f52cd997952f8ccb436b693851f9ccb69c519d8a033cf27035c27233324f10e9969a3b384e1c1dc73\nX = 0110c6177ceb44b0aec814063f297c0c890671220413dbd900e4f037a67d87583eaf4b6a9a1d2092472c17641362313c6a96f19829bb982e76e3a993932b848c7a97\nY = 00f6e566c4e49b2ee70a900dc53295640f3a4a66732df80b29f497f4ae2fa61d0949f7f4b12556967bb92201a4f5d1384d741120c95b617b99c47a61e11c93a482d6\nDigest = bdcae2456898841b7d4dfe7309457bbcd51de792ef4942d5ea419926\nK = 01a88667b9bdfe72fb87a6999a59b8b139e18ef9273261549bc394d884db5aa64a0bc7c7d38a8ef17333478d2119d826e2540560d65f52b9a6dc91be1340cfd8f8f8\nR = 0015f73def52ea47ddb03e0a5d154999642202e06e6734ac930c1dc84756c67bbb1cca9f21f92d61bfdb2052c5dd2833349610f68139393d77250a7662ef7bd17cbe\nS = 0155c744a729f83b27d1f325a91e63a0d564fe96ff91eaa1bad3bff17d2abffa065d14a1d20a04dd993f6ed3260b60bcc6401e31f6bc75aaafe03e8c1a9cd14d2708\n\nCurve = P-521\nPrivate = 005e0d47bf37f83bcc9cd834245c42420b68751ac552f8a4aae8c24b6064ae3d33508ecd2c17ec391558ec79c84401", + "17ad80e5e22770dac7f2017b755255000c853c\nX = 01a6effc96a7f23a44bf9988f64e5cfafdae23fa14e4bee530af35d7a4ddf6b80dcd0d937be9dd2db3adcda2f5216fecbce867ee67e7e3773082f255156e31358c2f\nY = 01e7760190dfbe07ec2df87067597087de262c1e0a12355456faba91b2e7277050d73b924e14c0e93b8457a8b3e1f4207ce6e754274f88ad75c000d1b2977edc9c1a\nDigest = c7d69612a965f318f419e9e1c6fdbcce011e42bbbffc2ed4b3458036\nK = 018afea9a6a408db1e7a7bb1437a3d276f231eacfc57678bfa229d78681cbe4e800e6065332a3128db65d3aa446bb35b517dca26b02e106e1311881a95b0302d15e8\nR = 001c49b3c1d21f1678bdbe1ac12167e95e06617190bdee1a729c1c649210da19e2e210f6689e1310513bfe2ac6c0f4ee5f324f344b31b18df341eaadb826d07adc9b\nS = 0129d4931ba457443012f6ffecd002f2abc3a4b65a58fee8457917ebcf24b29a1d3055b7fc62939a74ebb0c3582172ee7c3c75e0b2fa2367c6e04df63a7a91d593ad\n\nCurve = P-521\nPrivate = 01804ab8f90ff518b58019a0b30c9ed8e00326d42671b71b067e6f815ac6752fa35016bd33455ab51ad4550424034419db8314a91362c28e29a80fbd193670f56ace\nX = 00a79529d23a832412825c3c2ad5f121c436af0f29990347ecfa586ce2e57fd3c7e0624d8db1f099c53473dbc2578f85416ad2ac958a162051014fb96bf07f9e1d17\nY = 017c0750f26df0c621d2d243c6c99f195f0086947b1bf0f43731555f5d677e2d4a082fb5fe8da87e1592a5fa31777da3299cede5a6f756edf81c85b77853388bb3ab\nDigest = 7131ff8c846ed0de577806cc5e57f3bc896865a1994a17101fc1d254\nK = 0042d7c36fec0415bc875deb0fab0c64548554062e618aee3aa6670ffd68ab579fe620d3a9316357267fd3111c0ed567dca663acd94b646d2ba0771953cd9690ef42\nR = 00d01dfbef126febbdfa03ef43603fd73bc7d2296dce052216e965fed7bb8cbbc24142bfcddb60c2e0bef185833a225daa0c91a2d9665176d4ad9986da785f4bfcf0\nS = 016627e2614dbcd371693c10bbf579c90c31a46c8d88adf59912c0c529047b053a7c7715142f64dcf5945dbc69ff5b706c4b0f5448d04dd1f0b5a4c3765148bf253d\n\nCurve = P-521\nPrivate = 00159bff3a4e42b133e20148950452d99681de6649a56b904ee3358d6dd01fb6c76ea05345cb9ea216e5f5db9ecec201880bdff0ed02ac28a6891c164036c538b8a8\nX = 012d7f260e570cf548743d0557077139d65245c7b854ca58c85920ac2b290f2abfeccd3bb4217ee4a29b92513ddce3b5cbf7488fb65180bb74aeb7575f8682337ef5\nY = 017560186230c7e8bff0bffce1272afcd37534f317b453b40716436a44e4731a3ec90a8f17c53357bc54e6ff22fc5b4ca892321aa7891252d140ece88e25258b63d5\nDigest = 3bd7a8f543e3bc2a56be31f437e5917cf18abc84da11bded6c352921\nK = 014b8a30f988cefdc0edec59537264edb0b697d8c4f9e8507cf72bc01c761304bd2019da1d67e577b84c1c43dd034b7569f16635a771542b0399737025b8d817e1c3\nR = 00fc50939ebca4f4daa83e7eaf6907cb08f330c01d6ea497b86becda43dfcad47cb5c48f5eb2cc924228628070bcd144088c449a7873242ba86badf796097dbecd6d\nS = 00ccb6463c4301ba5c043e47ed508d57dd908fd0d533af89fd3b11e76343a1cf2954ce90b0eb18cbc36acd6d76b3906612d8a0feec6ebed13d88650ed9c708b28a11\n\nCurve = P-521\nPrivate = 017418dfc0fc3d38f02aa06b7df6afa9e0d08540fc40da2b459c727cff052eb0827bdb3d53f61eb3033eb083c224086e48e3eea7e85e31428ffe517328e253f166ad\nX = 000188366b9419a900ab0ed9633426d51e25e8dc03f4f0e7549904243981ec469c8d6d938f6714ee620e63bb0ec536376a73d24d40e58ad9eb44d1e6063f2eb4c51d\nY = 009889b9203d52b9243fd515294a674afd6b81df4637ffdddc43a7414741eda78d8aa862c9cbbb618acec55bb9a29aac59616fc804a52a97a9fc4d03254f4469effe\nDigest = 83fd2803e0faa52a4bc5ff9549ed9f68531da5acf81a5bb6e23016a4\nK = 01211c8824dcbfa0e1e15a04779c9068aed2431daeac298260795e6a80401f11f6d52d36bcee3cfa36627989c49d11475163aa201d2cd4c5394144a6bb500bbaf02b\nR = 01d59401b8ac438855d545a699991142685077a409de2418c7ccfe01a4771b3870e76287a9654c209b58a12b0f51e8dc568e33140a6b630324f7ef17caa64bf4c139\nS = 0143af360b7971095b3b50679a13cd49217189eaee4713f4201720175216573c68f7ac6f688bfe6eb940a2d971809bf36c0a77decc553b025ed41935a3898685183b\n\nCurve = P-521\nPrivate = 01e8c05996b85e6f3f875712a09c1b40672b5e7a78d5852de01585c5fb990bf3812c3245534a714389ae9014d677a449efd658254e610da8e6cad33414b9d33e0d7a\nX = 007d042ca19408524e68b981f1419351e3b84736c77fe58fee7d11317df2e850d960c7dd10d10ba714c8a609d163502b79d682e8bbecd4f52591d2748533e45a867a\nY = 0197ac6416111ccf987d290459ebc8ad9ec56e49059c992155539a36a626631f4a2d89164b985154f2dddc0281ee5b5178271f3a76a0914c3fcd1f97be8e8376efb3\nDigest = 53e6537cb6ea68ae47a81611c22756d770d7a37e336c3af0b0814b04fa39434b\nK = 00dc8daaacddb8fd2ff5c34a5ce183a42261ad3c64dbfc095e58924364dc47ea1c05e2599aae917c2c95f47d6bb37da008af9f55730ddbe4d8ded24f9e8daa46db6a\nR = 009dd1f2a716843eedec7a6645ac834d4336e7b18e35701f06cae9d6b290d41491424735f3b57e829ad5de055eaeef1778f051c1ee152bf2131a081e53df2a567a8a\nS = 002148e8428d70a72bc9fa986c38c2c97deda0420f222f9dc99d32c0acba699dc7ba0a2b79ce5999ff61bd0b233c744a893bc105bca5c235423e531612da65d72e62\n\nCurve = P-521\nPrivate = 00b65bf33b2f27d52cbfabcadce741e691bf4762089afd37964de1a0deda98331bf8c74020a14b52d44d26e2f6fa7bcddbe83be7db17a0c8a1b376469cf92c6da27c\nX = 010038bb9a7aea626de68c14c64243150e72c69e2f8a1ab922bfbdaa6f33d24fb4542c0324357b0dd640bbcd07632ecd253f64ca2bfbfbf3de9b24fffd0568ab82da\nY = 00faf867d95308cc36d6f46844a0f535dc70f9768eed011a2464d2f308fa1d8e72c3616aec7e70516908183ffce7fdd36984a15f73efaa3858c2edf16a784d40e6c2\nDigest = 40aef13bb7192a564d72ba58f7efad15635248eca49619b4182bf6f979842d6f\nK = 014aeb96c57d99677a1f5e4588064215e7e9af4027bfb8f31ff6126dbf341b8e6f719465e4273e91ba32670feca802549808322b7ee108bb20653cf20f93284d365f\nR = 0075ead62edf7d86c5d1bc2443d1aeb5dc034fd999e6ea012cef7499d9d050cd97d262095884e9fc89a42e15bd3dee80fe3c1ba10f4caabc4aabb86347023028b663\nS = 0129a992a6ff66d41948d11fa680f732b1a74315b804c982805190ed9d2fae223f2b149980b9241998cdea0c5672595a8a49d5186a0ef7a46c0a376f925bdda81726\n\nCurve = P-521\nPrivate = 002c4e660609e99becd61c14d043e8b419a663010cc1d8f9469897d7d0a4f076a619a7214a2a9d07957b028f7d8539ba7430d0b9a7de08beeeae8452d7bb0eac669d\nX = 00fb3868238ca840dbb36ecc6cf04f5f773ea0ab8e8b0fdcf779dc4039a8d7146a417504e953c0cb5e7f4e599cc2c168deda8b7f16084b5582f89f2ece4cae5167f7\nY = 01f90b5c15eeda48e747cf3ee8183166a49dbfac6161cbd09d29d40a6854f4c495e88a435892a920cdaad20d41985890b648badd4f0a858ffcbd9afdfc23134ede18\nDigest = 6fd829bd5fc68d7a36436284c1282e3fae76ba44c5babcee423142c1cf2b52c4\nK = 01f875bbf882cd6dd034a87916c7b3ba54b41b2ea2ce84ebaf4e393fcf7291fee09dec2b5bb8b6490997c9e62f077c34f0947fe14cec99b906dd6bf0b5d301e75ca1\nR = 007aa70425697736b298233249f5d0cf25c99e640c9ff88035ef1804820e1bfe7d043755f02d7a079494f7fa6dc26740c4e6b7b430c63f29c67bbd3a5c88d2f0e8d1\nS = 00e0d42e4ff11cf5be37a9fda348514d5097a662f214687cbfb28ff42d635b13029871ca4f464bb1fbce02d5da4d5fb61b2a071844259fc863d136197bec3a61e7c7\n\nCurve = P-521\nPrivate = 017c3522007a90357ff0bda7d3a36e66df88ca9721fb80e8f63f50255d47ee819068d018f14c6dd7c6ad176f69a4500e6f63caf5cf780531004f85009c69b9c1230c\nX = 013a4bea0eed80c66ea973a9d3d4a90b6abbb5dee57d8affaf93390a8783a20982eba644d2e2809f66530adeeee7f9a1da7515447e9ba118999f76f170c375f621f7\nY = 012f9dfaee40a75d8442b39b37a5c19ea124b464236e9b9a31bae6780cfd50f7ea4a700154b5ea0feeb64e9b35a1b0e33e46900cca1f34d13bb17e5017769841af27\nDigest = 902b55b79c29c0de27386e4fadb3469fc124f1225ad0fac06bd4a3a1e351c09e\nK = 018388a49caeda35859ef02702c1fd45ff26991998bd9d5e189c12c36cdae3f642ddd4a79561bd1d3e1cd9359de8f5c9e1604a312d207a27b08a6033f2741794ced5\nR = 015c6264795837dfea19f91876455f564f073c5c84a3c9d76e67872ae0447ba0d4850d8721302b25bec7ebfedd2721de140b2f3dead547042b24b0876117e7093cc1\nS = 0060eb74236c189a28ed20bd0822eb22d75f7d97c9043a3c8e3f6d4c90bc8ca02ac4d37c1171c799a1c7dfd2fcbf83406b5e48c051e0fbf0fd937bfe6c3db4e18154\n\nCurve = P-521\nPrivate = 00c4dad55871d3bd65b016d143ddd7a195cc868b3048c8bbcb1435622036bdb5e0dec7178ca0138c610238e0365968f6ddd191bbfacc91948088044d9966f652ff25\nX = 0014858a3b9bd426b678fdcf93fc53d17e7a9e8fe022442aaaba65399d12fd3a6a381958fb0f07ac6088f4e490506ec0f1ab4d0dbd461126f7eb46ff69cfa8bd88af\nY = 018c18ce29ecc6d79d26a2de0cd31c4b32e84b5e90f6ba748f86c5afbd89618aceb9079460cbd1a8261ed5476973e61bf1d17ea78b022387443800c9247d21dde550\nDigest = 99a83d5d6471963d9e18b105e51662dce360f34f23b8d64be47d50e9f8afa4d9\nK = 005577108f4187a173e5c29e927a8fc8f5ffd37e184254a6e381ff1018955aec91a35f30085e8cee6a7555c10f9efdce26d62f2b4b52dfdbaeafc3a30983e2d50d5b\nR = 00344375ae7c804cbe32ced7a20976efae5d9c19eb88b6e24514d1d0cfb728b0f4601098b18b2e98f42b5222dd5237d4d87767007bf5acb185c5526d72047e2cb1a1\nS = 002de4cfa908c73c1102d6fb7062baf54a056a9517701e036c9c51e09899d60051612d59348945f845dffebec5aa395b2fac7229929033615788777306ccad96d0a3\n\nCurve = P-521\nPrivate = 003d4749fadcc2008f098de70545a669133c548ce0e32eec1276ff531bcff5353", + "3144555728ad8906d17f091cc0514571691107350b6561858e90dbe19633aaf31bf\nX = 010fe5986b65f6e65d13c88c4d2aed781a91026904f82129d46779bdadaf6b733c845a934e941ab4a285efdea9c96ecc9dc784d87e4d937b42c337b3a9cb111a9600\nY = 0077853768a2a4d6f596f57414e57ec60b76d3cd5ece8351cd1f335ebcb8801a3d91fb82c65caaeb5c31eea9918367bb5906863ff3ccaf7a6cee415e0d75c15ac2e0\nDigest = 2c92465f323f6355ff408e42196e2de9a47807877ec02c9a7686917d3aa166a4\nK = 01fbb4de337b09e935a6dc6215ffcfcb85d236cc490585e73251a8b8bac37cfa36c5d1df5f4536d33659be1e7a442529a783452f7efda74a4f661b6a127f9248aaf7\nR = 009d8f10eeff6178594c89d6e8184f9502117384813243ddf9ccf3c8eac5dc6502c472dfc1487a5caffc569f7dedd14a8ebcb310e9bacdb79fb6655aba026cdf87f2\nS = 00f74236c7915d638708d17c9f10e39dda358faf9bbb821d8dcda0d151aac143bfb165ad0a23a65cd3de532e32cad928728f5ae1c16f58fc16577f3ca8e36f9e708b\n\nCurve = P-521\nPrivate = 0096a77b591bba65023ba92f8a51029725b555caf6eff129879d28f6400e760439d6e69ce662f6f1aecf3869f7b6057b530a3c6ff8ed9e86d5944f583ee0b3fbb570\nX = 00fdf6aed933dba73913142ef8bdcd4b760db8500831cd11d7707ab852a6372c05d112a1e7fbc7b514c42142c7370d9f4129493cd75cc6f2daf83747078f15229db6\nY = 00ef91dffb3c43080a59534b95ca585ee87f6145f6a0199b2b82c89f456d8bd8e6ac71c78039c08177184484eb2ebd372f189db3a58fab961a75a18afec1ee32764a\nDigest = 17baaa5a7f97f2d17545c4baa468f36ef22b1945ea889b63b027806f5b1b7f90\nK = 013aa7b0471317a2a139c2f90df1c40d75e5a8a830fbaf87030fffdb2ef6f2c93d1310c9ed7fe9d7bcd4fe46537ff2495bc9c4f0aaff11461f5e4bebbfbce9a8740a\nR = 01c7a21800962c91d4651553633b18612d931bb88bff8b743ed595b4e869437e50f8e84fbf334c99061db123a1c40b73b07e203790561a37df65a660355ba2017d78\nS = 01301e1782559a38f1ca0eebe9bed0f5c7c33103d506a24f8a688f500ee1fe37f97b6685319279e82e6fe43cfd823ccbc123309974cffa76c4f8d41ec02a3cbc45f1\n\nCurve = P-521\nPrivate = 0015152382bfd4f7932a8668026e705e9e73daa8bade21e80ea62cf91bd2448ebc4487b508ca2bdaaf072e3706ba87252d64761c6885a65dcafa64c5573c224ae9e6\nX = 000b8c7c0186a77dc6e9addd2018188a6a40c3e2ba396f30bbd9293dba2841d57d60866b37f587432719b544d8bf7eb06d90a8c0dc9c93b0c53d53b2f667077228ca\nY = 01dd2e5c73ab908ae34f701689f1cd3cf5186d3a2bc941e208bf3ef970e5e429ee9b154d73286b2e5da423e75b7c7b78c7bdf915da92279db43265a0cdefca51f86a\nDigest = b8f56952078ffcf04cd9815c6b06b63812eee9d682495d7172fd3677abe1c2db\nK = 00d03506999f5cc9ec3304072984a20a9c64a22ad9b418495ca904f4bbddc96e76d34672cb52763339d3f3bc5b1701c00a675b972797e3a086314da1a8d338436566\nR = 0085406c0ff5ec91f598bb579ad8714ad718c3e133d5dcc2e67c5d2339c146b69919cac07f3bc2bda218f4c7c8be04855e2ca6fff7fbdc4fc0fda87c8c3081cad4f5\nS = 01b45f2066e583636215ae135afc202b8bf3f301eccff2e1c0198b9aeddf695fa8179488e7b622fc307f601e2f6551815117cc836bb09ef888f8e64a45d9c84ad30c\n\nCurve = P-521\nPrivate = 01750ff0ca0c166560b2034bc5760fe0b3915340bc43216e9de0c1d4a76550e8b2036e8b874230f8d29354aed43e183610f24fd4abd4b0be2f111dae942bd7a121f7\nX = 01b4b8947192a7c0166c0e0b2791e217370836283e805f3ee11cfb78445aba3c5bc39fe594e01916617ad59e7c8e740d8f2d07d88905d3f33bd5e51aafd4943c5dc6\nY = 01175d117232836c28e717ce2a55e59f4ec550effde30d18e3d99e42c6aa2283c7b3e7f2f6ff1fca605dde78c3a5bffa689347b4c93f51ba59a1787bb7d5e43861dc\nDigest = 9477d884384f80b528aa4c3408b7f7d0dc59bd3f678466b122d48a42c01fc3bd\nK = 0023645023d6bdf20652cdce1185c4ef225c66d54f18632d99ccf743bf554d04c214c88ce52a4f71ec75c899ad1b3c07c34112ca20b55c217ff1d72c9528e2774ce8\nR = 01e933f68ce0f8403cb16822b8e0564b1d39a35f27b53e4ae0bcdff3e051759464afbc34998ba7c8a7ee34ef6c1aaa722cffe48356fd0b738058358d4c768b3186c1\nS = 00a67368a305508ce6d25d29c84f552a4a513998990fef4936244f891a2909c30d5fdc9e8a267ecbf3c597138f4a08f7e92bee57d5420eadd700fee864bf78b2614b\n\nCurve = P-521\nPrivate = 0023048bc16e00e58c4a4c7cc62ee80ea57f745bda35715510ed0fc29f62359ff60b0cf85b673383b87a6e1a792d93ab8549281515850fa24d6a2d93a20a2fff3d6e\nX = 00ba3dc98326a15999351a2ec6c59e221d7d9e7ee7152a6f71686c9797f3f330d3150123620d547813ba9d7cc6c6d35cc9a087d07dff780e4821e74ad05f3762efd6\nY = 018b051af9824b5f614d23ecadd591e38edbfe910ad6cbebc3e8a6bec11ea90691c17deb3bc5f34a4a3acd90b7b10f521f6ee7b3cfbfdc03b72d5a8783a4a77c3e4c\nDigest = e995003b47e16fcdc7487e2fe3b715b707e5c8d1246de04172a3002b140dddac\nK = 006099d2667f06c58798757632d07d8b3efbe9c1323efb0c244be6b12b3b163ba1b7cf5246c98dcc0771665a66696d687af5f28ed664fd87d5093df6427523d4db84\nR = 010dc80ea853064a2ba5a781f108aca3785c5ec0aa45aa05ba31d4de671170797589e863d54a3a986aadf6f670277f50355713dfb27d4ec7e348f787910b3cd668cd\nS = 0018572bfad4f62e3694d1f2e6ffd432faed2e2b9d7e3611a07138212f1e79e6c394839f7cfae96bc368422630016fb9346681eadc5f9699e7331c3b5fde6d65e4c6\n\nCurve = P-521\nPrivate = 002b8b866ce4503bb40ffc2c3c990465c72473f901d6ebe6a119ca49fcec8221b3b4fa7ec4e8e9a10dbd90c739065ad6a3a0dd98d1d6f6dcb0720f25a99357a40938\nX = 01b8c7a169d5455f16bfe5df1ba5d6ec9c76e4bad9968d4f5f96be5878a7b6f71d74bfac0076dd278bc4630629f3294646f17d6b6c712b0087e2c4d576039cfdc8b9\nY = 018faffd5422dfd1b61432fa77b9a288b2b7d546656c0dcca3032179e6f45ee3cf61d6a447fc51731cb54457343a41569fcf78cef42895f4da5efcb14ea1fc065f8d\nDigest = ce977a38b4c4db0c74fb5d0bfda5818719fb4bec00412f235c48c99995510c55\nK = 00ac89e813f94042292aa1e77c73773c85cf881a9343b3f50711f13fa17b50f4e5cb04ac5f6fc3106a6ef4c9732016c4e08e301eefac19199459129a41a7589e0628\nR = 005bc7a253a028ee8b7253979b8d689d41d8df6fae7736341f22e28b6faf0cbbdebbd2ef4d73e56d2021af2c646dc15539a7c1e1c4dc9c7674808bd7968d8a66f947\nS = 00fd71575837a43a4cf1c47d0485cfd503c2cf36ebcea0fdef946ad29acb7fb2e7c6daf6b4eb741eb211081aed6207d02569f1518988f275ad94c7fd4735cb18a92e\n\nCurve = P-521\nPrivate = 00a43b32ad7327ec92c0a67279f417c8ada6f40d6282fe79d6dc23b8702147a31162e646291e8df460d39d7cdbdd7b2e7c6c89509b7ed3071b68d4a518ba48e63662\nX = 0172fb25a3e22c2a88975d7a814f3e02d5bb74cfb0aaa082c5af580019b429fddd8c7f9e09b6938f62e8c31019b25571aaceef3c0d479079db9a9b533ee8e1670abd\nY = 00ff5516223b6cc7c711705f15b91db559014e96d3839249c5c849f2aced228a8998177a1e91177abbb24b57a8ea84d944e0c95da860ae0925f1b40c0e1b7c9e0a46\nDigest = 35156a6da83777e4bb100c48cd11dafc0e2e0bbe5c985faa57a6da61fcf31236\nK = 00383eda042e06c0297fbd279a2ad40559c5c12ad458f73458eebcc92b308d3c4fcec20a5b59f698e16fa6ea02dba8661b6955f67c052f67b0a56460869f24cfdf7d\nR = 01b9c35356b9d068f33aa22a61370dae44a6cb030497a34fb52af23c6b684677370268f06bb4433be6795a71de570088aec17ce0c9933d2f76c7edce7f406f62fedd\nS = 006f07ea453cfa20ad604ba855332f62834657b0b795684d50c1562a675456e37f4dae45f0df47d8e27e47bc9ce9c9cbba1554c5b94b0b17401b73c8d0c0902c6cc4\n\nCurve = P-521\nPrivate = 003c08fdccb089faee91dac3f56f556654a153cebb32f238488d925afd4c7027707118a372f2a2db132516e12ec25f1664953f123ac2ac8f12e0dcbbb61ff40fb721\nX = 0193301fc0791996ca29e2350723bd9aa0991ddbb4a78348ee72bdcd9ed63ce110ba3496f2ce0331b5c00d4d674c1b70114e17ce44a73c3e16bab14ed1ee924202e4\nY = 00aea9b288cfb2933ec0a40efa8e2108774e09b3863b3193d0dac6cc16ccaa5bd5f9ce133aec5cd3b62cbaeec04703e4b61b19572705db38cfaa1907c3d7c785b0cd\nDigest = afe33dce77cc747ec0a7f4835740be3bbe3faa1c3b02b10afdfc40a28dae61aa\nK = 00d0e90d5ee7b5036655ad5c8f6a112c4b21c9449ca91c5c78421e364a2160bbac4428303657bc11ea69f59fb0fe85a41b8f155a362343094456fd2a39f2a79e4804\nR = 01a8c23a2965d365a4c2ffd0802ae8b3a69c6b84a1ba77fd8a5f2f61e8ec3a1dcb336f136e2a997252eaa94caf9b5ad6c9ecff5bf33abf547ca84985bb89908a11d7\nS = 01cc42a2dd97aa42b9df5ea430e0d4cb13106dd6da6e8c9315c96ed7b052db365bbde6960c9a965954a4398c18ea7db9593bbfc3c3b6b3466ff806fccac3de6424ab\n\nCurve = P-521\nPrivate = 00969b515f356f8bb605ee131e80e8831e340902f3c6257270f7dedb2ba9d876a2ae55b4a17f5d9acd46c1b26366c7e4e4e90a0ee5cff69ed9b278e5b1156a435f7e\nX = 00fc7ae62b05ed6c34077cbcbb869629528a1656e2e6d403884e79a21f5f612e91fc83c3a8ac1478d58852f0e8ba120d5855983afd1a719949afa8a21aec407516c3\nY = 00aa705da6459a90eaa2c057f2e6614fb72fc730d6fdebe70e968c93dbc9858534768ea2666553cd01db132331441823950a17e8d2345a3cab039c22b21bfe7bd3b9\nDigest = ff76d5393d73d021b9dce99b394b6a6b4d9c34ff74d68a2406319c48bbe6743d\nK = 019029260f88e19360b70c11107a92f06faa64524cfbd9f70fecf02bd5a94f390582a7f4c92c5313bb91dc881596768d86f75a0d6f452094adbe11d6643d1a0b2135\nR = 007f2158e9b9fa995199608263969498923cf918fdc736427c72ce27ce4a3540dce2e8e5e63a8fc7ba46f7fa42480efbf79c6ed39521f6e6ec056079e453e80a89d9\nS = 008e349eed6f1e28b0dbf0a8aeb1d67e59a95b54a699f083db885f50d702f3c6a4069591afaa5b80b3c75efb1674ebd32c7ead0040d115945f9a52ee3a51806cad45\n\nCurve = P-521\nPrivate = 0013", + "be0bf0cb060dbba02e90e43c6ba6022f201de35160192d33574a67f3f79df969d3ae87850071aac346b5f386fc645ed1977bea2e8446e0c5890784e369124418\nX = 0167d8b8308259c730931db828a5f69697ec0773a79bdedbaaf15114a4937011c5ae36ab0503957373fee6b1c4650f91a3b0c92c2d604a3559dd2e856a9a84f551d9\nY = 019d2c1346aadaa3090b5981f5353243300a4ff0ab961c4ee530f4133fe85e6aab5bad42e747eee0298c2b8051c8be7049109ad3e1b572dda1cac4a03010f99f206e\nDigest = e40ae6e430f07950c186100e20048cc62bf56be6a818ad660785bdaf3bcc0c25\nK = 01a363a344996aac9a3ac040066a65856edfb36f10bb687d4821a2e0299b329c6b60e3547dde03bdbd1afa98b0b75d79cf5aac0ef7a3116266cadf3dfbd46f8a4bfc\nR = 01ff097485faf32ce9e0c557ee064587c12c4834e7f0988cf181d07ba9ee15ae85a8208b61850080fc4bbedbd82536181d43973459f0d696ac5e6b8f2330b179d180\nS = 00306dc3c382af13c99d44db7a84ed813c8719c6ed3bbe751ead0d487b5a4aa018129862b7d282cce0bc2059a56d7722f4b226f9deb85da12d5b40648bf6ec568128\n\nCurve = P-521\nPrivate = 0095976d387d814e68aeb09abecdbf4228db7232cd3229569ade537f33e07ed0da0abdee84ab057c9a00049f45250e2719d1ecaccf91c0e6fcdd4016b75bdd98a950\nX = 013b4ab7bc1ddf7fd74ca6f75ac560c94169f435361e74eba1f8e759ac70ab3af138d8807aca3d8e73b5c2eb787f6dcca2718122bd94f08943a686b115d869d3f406\nY = 00f293c1d627b44e7954d0546270665888144a94d437679d074787959d0d944d8223b9d4b5d068b4fbbd1176a004b476810475cd2a200b83eccd226d08b444a71e71\nDigest = 9832832c49754bdeba2d3799cbf6437af28ad9f942d3f313abd320fad0897be6b446aa24f1b23a86ea54aef12b1f5c0b\nK = 00a8d90686bd1104627836afe698effe22c51aa3b651737a940f2b0f9cd72c594575e550adb142e467a3f631f4429514df8296d8f5144df86faa9e3a8f13939ad5b3\nR = 002128f77df66d16a604ffcd1a515e039d49bf6b91a215b814b2a1c88d32039521fbd142f717817b838450229025670d99c1fd5ab18bd965f093cae7accff0675aae\nS = 0008dc65a243700a84619dce14e44ea8557e36631db1a55de15865497dbfd66e76a7471f78e510c04e613ced332aa563432a1017da8b81c146059ccc7930153103a6\n\nCurve = P-521\nPrivate = 004ceb9896da32f2df630580de979515d698fbf1dd96bea889b98fc0efd0751ed35e6bcf75bc5d99172b0960ffd3d8b683fbffd4174b379fbdecd7b138bb9025574b\nX = 00e7a3d30d5bd443549d50e9b297aaa87bc80b5c9e94169602d9d43d6d0c490c0bed8cc2170288b106bdbf4c9f1ce53fd699af0b4c64b494b08520e57dc01ab9a8b0\nY = 01d81056d37aec8a75d588f6d05977416e6f24ad0117a7f4450036d695612e7bc2771caed80e580314eebc88c8fc51c453f066e752481f212b57165d67f8a44f375a\nDigest = cca0c216abf3baaff0b0d8597bcfc7183835b4e3d025749a741a0e75d00845a341fe094214b1c39e13e8932a062c1ecf\nK = 0046639c5a3ec15afae5e4a7a418ac760846512d880c359bc2c751b199ce43b10887e861b14127809754dbea47f6cc0140d2817e3f5b9a80ce01abd81f81b748433a\nR = 00f913de91e19bd8f943d542ae357bacc942a0967abc9be6c06239a379db8cc733fa50013e0b0f088bce9d630262feaa33b30d84f91bcf5ce9976e4e740fcb112f84\nS = 008a73a5c9c24235e0d9cecaac653f68ce5a6fb186ce67fa058d6ddbbd4d0a8c4d194e571148e8ad6c8882b4e33d2f60fb23dd7d07a1ae60864e8277918f592b3dc6\n\nCurve = P-521\nPrivate = 000a8db566bd771a9689ea5188c63d586b9c8b576dbe74c06d618576f61365e90b843d00347fdd084fec4ba229fe671ccdd5d9a3afee821a84af9560cd455ed72e8f\nX = 004f5b790cbe2984b71d41af5efed6c6893d15e13f31816d55a9c2926a104eee66f1ada83115d1388551218773b8b9d1138e3e3f027bb4392c90c14fd232580b4a11\nY = 00660eb160e9bfc8c5619e70e948e238c6fd37739bc1bb657b8e8436e63628f91992be7e63d9a7359623a1340642777b22026feb51116a6c50c54c3589b9bd39b6cb\nDigest = 0af6f685cb6c1219cb1627dd2b9099b70b1622d32b2342cbef6c0b9604d3f22360d595198af65579062dddccb66a56ce\nK = 01e7b5e53571a24bd102dd7ad44a4b8d8a4e60e5957bc3c4e5d3c73109f55233f072e572c7892f425ba5e64d3cb7966096bb34a47e26cd5b3e3b44108b310d9f681b\nR = 01a88bcd7e2bdff6e497d943dde432fb3f855a7177c466319cb53b701230c299db030276269685857d1e3f28110e690f2f529c8d18115eb381f313bc891d92ad278e\nS = 0146f1984ea879274dfd5e86ad92e564a4de081523ddbb1c397b8f9595911ef2e6501bc081584d5340f7aa47e1af036234ac6f27a5ac31f78dd3b0ff1a62693c630d\n\nCurve = P-521\nPrivate = 01a300b8bf028449344d0e736145d9dd7c4075a783cb749e1ec7988d60440a07021a25a3de74ea5e3d7bd4ab774d8ad6163adae31877ef0b2bd50e26e9e4be8a7b66\nX = 005055b9ad726ba8a48219b0ecbfffb89f8428de895b231f676705b7de9f2022d9ff4e0114ebb52dea342f9bf76b2fb060c020e29d92074ebb1fbfe5290a58c8bc10\nY = 00415af7f20a6e945315adbf757316bb486c80780a0a3a15b4b9609f126d7341053a2b726ab63cb46feee527b0bf532b32b477e5671aea23d9b3c3e604b9029954b5\nDigest = b5008011397235faff9eda7ac9838dd1199eb52b2921d28407e5c356dcca7611184d29d268c16bfb489481a294bd7a43\nK = 005a2e92717bb4dab3ee76724d4d9c2d58a32b873e491e36127985f0c9960c610962ca1c4510dba75c98d83beebdc58b1d8678e054640951d11db1bd2d8a4ab8476b\nR = 0104a78ce94f878822daaf00ee527fbdbf6cceb3cbb23a2caa485e4109466de8910252f92379ab292cac8d1eda164f880c0067696e733fc8588a27703a3e1f5b8f1f\nS = 01ffe23e8ab5a31668a81161a234ea14879771fe9866f8872eb6edb672e0fe91d2bb75c9767a2dfbac7c15c802211236b22ea41ecd055a0b8b311ffc4255f86d5c67\n\nCurve = P-521\nPrivate = 006a253acd79912a74270fc0703ed6507ab20a970f2bc2277f782062092cf0e60ae1ca1bb44dec003169bc25ef6e7123dd04692f77b181a6d7e692e66b09d35a540c\nX = 01f15c6b1df156fdd8381cd7446e039435e445f8f36f0247475058da0e371bf72753f6e39f98066bc79370b038c39687ba18e16cb118fe6538b7568c5403c251f6b7\nY = 012d2b4f46b854eeae75f1c63f55b76bf0c604d47f870c28a50ecdeb52bba1dd9a0ff12e680804ff864111207652da7dd10b49edf66bb86be00bc06672de91982457\nDigest = 64c05e43191b0313abd6514eb5a44dbf25befb232b8e928f92801f75a968d9a96801facc86b2174e0a5f247d9b5e7587\nK = 0165faf3727e42fd61345cfa7b93e55fb4bf583b24bdc14ce635b6c99dbd788012f14da9a210b677c44acdd851e672f1a48188d6b8946c0efeebfe8a597ba0090a2c\nR = 01ad9463d2759abd568626548578deefdcd8b2d050ce6d9c7ed05feca20167484b86e89bdcc936fd647e0f8aedd7b6add2b8cf13ff6ff013c2b5540c6c56fda97a0c\nS = 01645a7d0e11015256cfb034adca198695eea6aedd44d9fbf496850ccfed950f43fffd8dbf41e113f2d3837d8a5dd62b2ed580112ff05800b1f73196e5576810e15b\n\nCurve = P-521\nPrivate = 00d5a5d3ddfd2170f9d2653b91967efc8a5157f8720d740dd974e272aab000cc1a4e6c630348754ab923cafb5056fc584b3706628051c557fce67744ee58ba7a56d0\nX = 0128a4da5fc995678e457ceb3929adee93c280f851abe900fa21f4f809dafad4e33b381e0cd49ce8dd50e2e281cea162bfd60a1d6a1c0ee2228e6a011e171b559ab8\nY = 006eb0917cd72256992c49ea527f6bb0315f13d8047794a0f1da1e93737703b1c2a74a00441ef3b47b6a2ff789c49ae32d91cabe7b29247aeec44f6c40a76597a2ca\nDigest = 9e4bf8293245611cb31caf0b0125117a4ef286ca3730f1519f3c95e65a5db326ead01b08e6b219281a26f2a41bda1e98\nK = 003269983a5c2bcc98e9476f5abf82424566b1f08b17204d29e310ece88f99eb677a537f86fe2529e409cfef2c12929644100099e0de2f27c0f0ac11105a4dca935b\nR = 01a5257ae1e8187ba954f535b86ff9b8d6a181a3b95c250d090cb4e9c3bfbd03aa64696a76c569728ef67780d6338d70ce46da40b87a3e49bfe154b93930890dfa93\nS = 005b6ccdfd5c63c7db76d3a0478064a2a376e0e050cb093be795a72a549247c2e4adba9183145c63d46479dbbdcf09986a6f64c09c7e16abc4853f6376c9558b014a\n\nCurve = P-521\nPrivate = 01bcedf920fa148361671b43c64e3186e1937eb1bd4b28cbd84c421472394552889bc05509aa732ef69d732b21b750523fdfd811f36467690fe94e01e64c9d5cbbe9\nX = 00d33c151d202a5d4d831348e940b027ee32e4b0b9b48d823a05c67ff3bdaee0189fc6680565f352c062e99968afc643208b4f9c7af185b861658a88c4ad0fcc8ba2\nY = 00e4441ddb546468ad8ffa6074f137edfbb81e82e0e7d8f05c4c54598aa996a9cde54cb371f642bfdd4ae7eca5b769696030027129a4183da93567ad142a2dff5183\nDigest = 417e8611fe90382b134add3b3df5a963d95c4de28a5a5b215b7f96731db9350d4646c1efe7455d48a1a2de6b4fcbd9c3\nK = 0046e619b83aac868b26d0b3cbfab55e630e0b55c461985b5d00f94ff3a5ce90ff412cebf46bbd84550d2031d573ca27d924624428360708c8d8491c29eb01d30f2e\nR = 008427c0f0ac0263472cd423c0fb554bf3c851b9c775c566ab0f6878717bd57665830767b05b7789c5c0b078195bd943dc737325552d32877ecb04a7c41bd07cd80c\nS = 010bb6652d6a624c40a7dd06828f15774130d02369ceb1a7d03b553e16e17b7fa5b5401f15885d5e4fc2e55c0c7a1b97871ab02f76386b93a16aa6e7eb65debac6dd\n\nCurve = P-521\nPrivate = 003789e04b3a2a0254ade3380172c150d2fad033885e02ea8bea5b92db3f4adbab190ae423080a1154dfedec694c25eab46ce638be3db4e4cba67bc39f62d6e7db2d\nX = 01dbc2cf19627bdccf02432b1761f296275230c150cdde823ce3141ec315d7d05e16b2c29e2a67491078d5316883e933d85b4b10d4f64c477d3c4e0442dc928983a2\nY = 007562e720807dd118d3d8b265b3abc61a71fce43e3dce0e7b5ae18b7a4cb01ecc00d39c1f22e150a9a8728997e502144f5b3f6fa9b4cb8a4136212b082ca394e3f6\nDigest = 297eed020ddcd03aeeafc77469caa105469205595ef22f64860126135e2596ae99ccaeb679d073cd9364b1e4ee2c4b60\nK = 00fbccd8d7804bdd1d1d721b5ec74d4ba37603bc306f9fce2ec241853d8e07334e6b4b12c4ecca0c54bd71193dd7146507933a20737c5f3e1508583", + "0fab9b30ca57b\nR = 0181915a3998d8fa214f9715f4ca928d09c36de168dc15c6970a8a062b5cea2dc969b2437ca17b684f78a1fd583aad8e6c762c8f4ab0c91b86a497145e3ca440d307\nS = 015a6c18c5c77f5470b27d061eafdc26b78561941a3b2ab0f5c81d40899fc053c3d9ed12d7d61e298abbae470009c7b2157731c58d7b16a66fa5abaf5e8a1b8ed394\n\nCurve = P-521\nPrivate = 0124700aa9186353e298edefc57bec0c7d0201cca10c1d80dd408d5d71040592b0ac59facdadfa8712445f5977ef8d4854022720c3f02d60e0732dbb2f171fcf1490\nX = 00c80fc4cecae5d53348524ddba6a160b735c75b22fdb39af17e2a613d09246e3bb0fd3f2978577f6db5d2118e05c7898024808f8eb8e021d7969cdcf7fc981200bb\nY = 01a880c93943fd446d4b3923b574d2221c1bb7b645fb5534dda60e827b497666ff586b77921f7e7f605147947194cffd2fef0678880b89cc0bc7fb74fa96d4b112d7\nDigest = 39884fd5e7c8b6cb67836e257957cc11f6bd342f540bde745e0e4e55d3ead2ea080d8b2b2e96664056c50de0d7822f25\nK = 001a05238d595ded5c61d3bf6fde257dbf13095af8a5cb3a2e579e8e4c550fe31d12b71cc2dbcb295e6c4fd0fb8c22d1b741c097cc59d826ced1a8771f09983143c4\nR = 0132762bc81e9922a8d642e3a9d0218affa21fa2331cfcb9e452545c5981c64a8f7e4cc8e68056023b2aa78bead59061d19c7f646c931163a91e544b106b3be8de9e\nS = 00c3a1b0b000c3169984132add51d611e2cb7069a262a6983d2ae72b459c36e6469509bdb0f473600b8686700b08910779dee9ba83f82e755d4a4ef5f124eb09397f\n\nCurve = P-521\nPrivate = 01f532d01af885cb4ad5c329ca5d421c5c021883bd5404c798d617679bb8b094cbb7e15c832fb436325c5302313ce5e496f9513455e7021ffad75777a19b226acfa1\nX = 00c0bd76b0027b85bdd879052220da1494d503f6a4bb972105a48ae98e7dda8c2d9fd9336f5646385b961ef68e8464e3a95b00f96614b1a408ceaa2c87b077b6a8fb\nY = 017eb7eb5c78db7819af92e8537d110d9f05a5e24f954f4dde21c224d4040f059ec99e051702f390413d2708d18f84d82998c61847475250fb844b20082cbe651a6b\nDigest = ac6b375afaad4c5c1b8e8aa5ac94e2aa1553e8f8603d16a86d573d53a4e6c5731f6d6c18ac732cfd3ae8aed75046c1f1\nK = 014e66853e0f7cd3300ebcae06048532e19cbb95bee140edc1c867ce7310637651445b6dfeb1d99d2e32f2ffb787ebe3fe35032277f185d3dad84f95806924550abe\nR = 00c5b3a57161098e2e8e16e0a5ae8ecf4a14df14927eea18ed4925d11dc429dda145159323ba970174b194b9b4608a8fa2373b7a825c5e8bd80574e49698285c2c82\nS = 01a0c038a51796158b42eb5b0dac37aff9ab93b903a47e06ebbdd15946e4bcc9a3b3875b18cf6294c33fc6c3693cef04ed1a43d08951e664c760e2cf3fb4e47490d2\n\nCurve = P-521\nPrivate = 011abf508bca68a85a54bc0659e77efad3c86112c9db04db2883e76144aa446918bb4bb0784b0b6a0e9aa47399fe3de5aaecfd8894a0d130bb0c366c40d9d5050745\nX = 005c0ea363a3a12633ea39d564587ebdd3a22a175ef32b9ebfc7311304b19cb3a62b5adc36f6afb6a6f7fabbf810ee89fdb72854fefd613e7798e9b9ff5938ea54c6\nY = 00bd06a85e47b885c08124b55a3fcc07ca61647cda6efbfdbd21b24d1ea7a4c7300d46cd798e76063aa979adef6f0698b15e5b7ae8a2ab39ab4f50b2d20614db6317\nDigest = d59d1ff62ae0c4e41b3b8bfcb14f8d40b1774be1d9c6b44a60cb546a21e9f2ae5f4427d45f7fdd67e238ead3afa59c8d\nK = 019cadb8c7eb10565aa4567e0709873918720f0e4b42b4817afb0b0547c70cd1100229deae97a276b9c98ea58b01d4839fee86336d749d123b03e8b1a31166acc110\nR = 00667448a8bbef1c810d40646977dc22f3dfb52a4d80928ded5e976e199cbed02fbd5a08546756ece14548d721a6eb380d0e1a71ad0660dbcac6163c776eedd3e249\nS = 00ae7f0a238daaddb7fb4a1707fe5132daf653f8e19f732347134c96f1dd798f867c479a4a4609a568a15b61afed70790adbde13ac5f68c468d0230852c1a2c22581\n\nCurve = P-521\nPrivate = 018dbf520d58177e4b7a0627674d220137983f486dd2fd3639f19751804e80df0655db6afd829cdf75238de525e1a7a9f048049b593dd64b4b96cc013f970c05ea1f\nX = 018b872690c37995be324ddb5c2bd5462841bb062f8e63da248a853de79c3d6bb9a2eb1e6933afda0998ca43491cc807b08ace2d5336a43d0ab50563a2d3d98755f0\nY = 0002ff31221aa32aa6546f35e8fe5b9361f938362a5e89e77ae130ba8bce3729e912dfac35a2fd21efe84b45b8be2a340850e4b574e1885b35c2afbe196b57c6cf4c\nDigest = 6985cfbbd8dbf28558ee181006d07193feb1225ac9dd46e5da122759daa9ced6fafdb95cc407c217d9f163d7c04aaa8d\nK = 0098faeb73054639cb2e4442cd68e7b3a13f4b3f397a7b26f303afa40789f8ddd3d918f1ce4f0be53c8cb69c380744e2297d7fc01e2b3daef4ce64dd3a2644234753\nR = 009c0e7649f814f70a8416cb78bc4601472a363fe97f5c587305778169677860dd97f87b5ab07c3a953bc4615fc34634509d6a25621bdded33ed42446d059509c190\nS = 0120b90e1cfb8a1b5e530df7b17d1128bc051ca4f1a65dd9c9d9d3c59d2f00c7c1e994c52b8671d40294b4d574d2c04475d5bebeacd3a0d3870a54dc7a4805614f40\n\nCurve = P-521\nPrivate = 0002764f5696aa813cd55d30948585f86288ae05aeb264ca157cd09e1d09a10515a849b0791b755ccc656a34707be9e52f5762d290a7d2bcd6de52c600ff862eaf4e\nX = 0127279c88719dc614db387f102e55104ea1c704ac7f57f3bca936f728439b76556730dd7cde2ac1ad0a4c2c2f036ab6f00cf34cb87ea36113571f300713044106d2\nY = 0134a0786c31f5f2291b83c50fb579ae4c620b95e5a8bdc0c7e1ee6b996c89d764f1b20403e7faa203f397425ada297045dd8ba0e4b155d4900da249e934faab7991\nDigest = 67d285cfc8eaaedab30be810129fcf06da8b091fa7f4bc49752fd707fbf2a9cf8bc5c187db6f6191b838873fb55c9784\nK = 008bffb0778cbb06466cecc114b9e89ca243a2b2b5e2597db920bc73a8bbcbe3f57144ad33409ef7faaab430e13f4c42d304d11347360c84972ca20b1539cce3a288\nR = 01f8f504e64a502e51e7c129517931c3b71f0d8a63b19cfe01ff7c951c6525249608b3ef5d00061d77eb6b3d69581adeaa3732c773bbb9b919c3e7c71fdc09f44d06\nS = 0058044fc64b340604ffd02a5b2918d76fd6fb59ea895feab7aa218e6f1e8c8f226eb9ee345ef8140183a69272582005077b008006aab11597e808d7ff1e8382c924\n\nCurve = P-521\nPrivate = 01b0c9acd3eeb618b4b0de4db402206f0f29adc69d7ad324b6db6601b351f723ac8fe949eeacd34228649bf0126276e5aceb0137d00c30dd858aef2d6b6449de2e89\nX = 01811c8884486aaa083ddee1c51cb6e861cb830bd5eaa929f72efadbbd1286566ae7e7ba7fde7e02529900d35ee64591652d28798bfc1bed0d192602a9cf5a7d22e3\nY = 006d7fc9dd494816cfd29613d4689af67f7d0a2e6fbad5d4d6e0130189172a1ab601c5ca71deaa8bfcb5a190d49da191672ff6fc048e146cb902acec5eae6d87e60a\nDigest = 10bb638f2f48a8696dca63275a35428adfd6ae154923c8a33f06d23e4fe4c42edff1f382ef09fc3970611d0806abd630\nK = 01fdc4f108070af3c66c9ba7b6c1f2603a19ceb4760399df81228cfc7eafde1082b5a0716a3ff82fbe84726f14dd0db3376ca184a78c3c60679bab6cd45f77f9b9ce\nR = 01ec310339ff056faeb341c4499c43782078b04be1725ae9a6cdcb6011c46d1a4eb3d75c358225e4ec142fd1cd344186f5eb597f7ba559ddfa954824365d5b6edaec\nS = 0005b679a33fdb7e04834f071cd0ac514c04add9f2614ab9bbd9b407b1420fed3f3e02a108e7e279899e43dcf64ae4083c289a87cd7d2103bdc036a95d36800ac7c6\n\nCurve = P-521\nPrivate = 0181e1037bbec7ca2f271343e5f6e9125162c8a8a46ae8baa7ca7296602ae9d56c994b3b94d359f2b3b3a01deb7a123f07d9e0c2e729d37cc5abdec0f5281931308a\nX = 00cfa5a8a3f15eb8c419095673f1d0bd63b396ff9813c18dfe5aa31f40b50b82481f9ed2edd47ae5ea6a48ea01f7e0ad0000edf7b66f8909ee94f141d5a07efe315c\nY = 018af728f7318b96d57f19c1104415c8d5989565465e429bc30cf65ced12a1c5856ac86fca02388bc151cf89959a4f048597a9e728f3034aa39259b59870946187bf\nDigest = a02db3dbf881cbe8a90a27e6513d67bbf7b33a9d3d2a422ba1f4c42b7e21e0885dd86cb9a920f7c3571e8fbcd047ba23\nK = 009078beaba465ba7a8b3624e644ac1e97c654533a58ac755e90bd606e2214f11a48cb51f9007865a0f569d967ea0370801421846a89f3d09eb0a481289270919f14\nR = 019cf91a38cc20b9269e7467857b1fc7eabb8cea915a3135f727d471e5bfcfb66d321fabe283a2cf38d4c5a6ecb6e8cbee1030474373bb87fcdfcc95cf857a8d25d0\nS = 01cf9acd9449c57589c950f287842f9e2487c5610955b2b5035f6aacfd2402f511998a1a942b39c307fc2bcab2c8d0dae94b5547ddccfb1012ca985b3edf42bbba8b\n\nCurve = P-521\nPrivate = 00f749d32704bc533ca82cef0acf103d8f4fba67f08d2678e515ed7db886267ffaf02fab0080dca2359b72f574ccc29a0f218c8655c0cccf9fee6c5e567aa14cb926\nX = 0061387fd6b95914e885f912edfbb5fb274655027f216c4091ca83e19336740fd81aedfe047f51b42bdf68161121013e0d55b117a14e4303f926c8debb77a7fdaad1\nY = 00e7d0c75c38626e895ca21526b9f9fdf84dcecb93f2b233390550d2b1463b7ee3f58df7346435ff0434199583c97c665a97f12f706f2357da4b40288def888e59e6\nDigest = 65f83408092261bda599389df03382c5be01a81fe00a36f3f4bb6541263f801627c440e50809712b0cace7c217e6e5051af81de9bfec3204dcd63c4f9a741047\nK = 003af5ab6caa29a6de86a5bab9aa83c3b16a17ffcd52b5c60c769be3053cdddeac60812d12fecf46cfe1f3db9ac9dcf881fcec3f0aa733d4ecbb83c7593e864c6df1\nR = 004de826ea704ad10bc0f7538af8a3843f284f55c8b946af9235af5af74f2b76e099e4bc72fd79d28a380f8d4b4c919ac290d248c37983ba05aea42e2dd79fdd33e8\nS = 0087488c859a96fea266ea13bf6d114c429b163be97a57559086edb64aed4a18594b46fb9efc7fd25d8b2de8f09ca0587f54bd287299f47b2ff124aac566e8ee3b43\n\nCurve = P-521\nPrivate = 01a4d2623a7d59c55f408331ba8d1523b94d6bf8ac83375ceb57a2b395a5bcf977cfc16234d4a97d6f6ee25a99aa5bff15ff535891bcb7ae849a583e01ac49e0e9b6\nX = 004d5c8afee038984d2ea96681ec0dccb6b52dfa4ee2e2a77a23c8cf43ef19905a34d6f5d8c5cf0981ed804d89d175b17d1a63522ceb1e785c0f5a", + "1d2f3d15e51352\nY = 0014368b8e746807b2b68f3615cd78d761a464ddd7918fc8df51d225962fdf1e3dc243e265100ff0ec133359e332e44dd49afd8e5f38fe86133573432d33c02fa0a3\nDigest = a6200971c6a289e2fcb80f78ec08a5079ea2675efd68bcab479552aa5bcb8edf3c993c79d7cebcc23c20e5af41723052b871134cc71d5c57206182a7068cc39b\nK = 00bc2c0f37155859303de6fa539a39714e195c37c6ea826e224c8218584ae09cd0d1cc14d94d93f2d83c96e4ef68517fdb3f383da5404e5a426bfc5d424e253c181b\nR = 01a3c4a6386c4fb614fba2cb9e74201e1aaa0001aa931a2a939c92e04b8344535a20f53c6e3c69c75c2e5d2fe3549ed27e6713cb0f4a9a94f6189eb33bff7d453fce\nS = 016a997f81aa0bea2e1469c8c1dab7df02a8b2086ba482c43af04f2174831f2b1761658795adfbdd44190a9b06fe10e578987369f3a2eced147cff89d8c2818f7471\n\nCurve = P-521\nPrivate = 014787f95fb1057a2f3867b8407e54abb91740c097dac5024be92d5d65666bb16e4879f3d3904d6eab269cf5e7b632ab3c5f342108d1d4230c30165fba3a1bf1c66f\nX = 00c2d540a7557f4530de35bbd94da8a6defbff783f54a65292f8f76341c996cea38795805a1b97174a9147a8644282e0d7040a6f83423ef2a0453248156393a1782e\nY = 0119f746c5df8cec24e4849ac1870d0d8594c799d2ceb6c3bdf891dfbd2242e7ea24d6aec3166214734acc4cbf4da8f71e2429c5c187b2b3a048527c861f58a9b97f\nDigest = 46ff533622cc90321a3aeb077ec4db4fbf372c7a9db48b59de7c5d59e6314110676ba5491bd20d0f02774eef96fc2e88ca99857d21ef255184c93fb1ff4f01d3\nK = 0186cd803e6e0c9925022e41cb68671adba3ead5548c2b1cd09348ab19612b7af3820fd14da5fe1d7b550ed1a3c8d2f30592cd7745a3c09ee7b5dcfa9ed31bdd0f1f\nR = 010ed3ab6d07a15dc3376494501c27ce5f78c8a2b30cc809d3f9c3bf1aef437e590ef66abae4e49065ead1af5f752ec145acfa98329f17bca9991a199579c41f9229\nS = 008c3457fe1f93d635bb52df9218bf3b49a7a345b8a8a988ac0a254340546752cddf02e6ce47eee58ea398fdc9130e55a4c09f5ae548c715f5bcd539f07a34034d78\n\nCurve = P-521\nPrivate = 015807c101099c8d1d3f24b212af2c0ce525432d7779262eed0709275de9a1d8a8eeeadf2f909cf08b4720815bc1205a23ad1f825618cb78bde747acad8049ca9742\nX = 0160d7ea2e128ab3fabd1a3ad5455cb45e2f977c2354a1345d4ae0c7ce4e492fb9ff958eddc2aa61735e5c1971fa6c99beda0f424a20c3ce969380aaa52ef5f5daa8\nY = 014e4c83f90d196945fb4fe1e41913488aa53e24c1d2142d35a1eed69fed784c0ef44d71bc21afe0a0065b3b87069217a5abab4355cf8f4ceae5657cd4b9c8008f1f\nDigest = 6b514f8d85145e30ced23b4b22c85d79ed2bfcfed5b6b2b03f7c730f1981d46d4dadd6699c28627d41c8684bac305b59eb1d9c966de184ae3d7470a801c99fd4\nK = 0096731f8c52e72ffcc095dd2ee4eec3da13c628f570dba169b4a7460ab471149abdede0b63e4f96faf57eab809c7d2f203fd5ab406c7bd79869b7fae9c62f97c794\nR = 01e2bf98d1186d7bd3509f517c220de51c9200981e9b344b9fb0d36f34d969026c80311e7e73bb13789a99e0d59e82ebe0e9595d9747204c5f5550c30d934aa30c05\nS = 012fed45cc874dc3ed3a11dd70f7d5c61451fbea497dd63e226e10364e0718d3722c27c7b4e5027051d54b8f2a57fc58bc070a55b1a5877b0f388d768837ef2e9cec\n\nCurve = P-521\nPrivate = 018692def0b516edcdd362f42669999cf27a65482f9358fcab312c6869e22ac469b82ca9036fe123935b8b9ed064acb347227a6e377fb156ec833dab9f170c2ac697\nX = 01ceee0be3293d8c0fc3e38a78df55e85e6b4bbce0b9995251f0ac55234140f82ae0a434b2bb41dc0aa5ecf950d4628f82c7f4f67651b804d55d844a02c1da6606f7\nY = 01f775eb6b3c5e43fc754052d1f7fc5b99137afc15d231a0199a702fc065c917e628a54e038cbfebe05c90988b65183b368a2061e5b5c1b025bbf2b748fae00ba297\nDigest = 53c86e0b08b28e22131324f6bfad52984879ab09363d6b6c051aac78bf3568be3faeade6a2dda57dece4527abaa148326d3adbd2d725374bdac9ccb8ac39e51e\nK = 0161cf5d37953e09e12dc0091dc35d5fb3754c5c874e474d2b4a4f1a90b870dff6d99fb156498516e25b9a6a0763170702bb8507fdba4a6131c7258f6ffc3add81fd\nR = 014dfa43046302b81fd9a34a454dea25ccb594ace8df4f9d98556ca5076bcd44b2a9775dfaca50282b2c8988868e5a31d9eb08e794016996942088d43ad3379eb9a1\nS = 0120be63bd97691f6258b5e78817f2dd6bf5a7bf79d01b8b1c3382860c4b00f89894c72f93a69f3119cb74c90b03e9ede27bd298b357b9616a7282d176f3899aaa24\n\nCurve = P-521\nPrivate = 00a63f9cdefbccdd0d5c9630b309027fa139c31e39ca26686d76c22d4093a2a5e5ec4e2308ce43eb8e563187b5bd811cc6b626eace4063047ac0420c3fdcff5bdc04\nX = 014cab9759d4487987b8a00afd16d7199585b730fb0bfe63796272dde9135e7cb9e27cec51207c876d9214214b8c76f82e7363f5086902a577e1c50b4fbf35ce9966\nY = 01a83f0caa01ca2166e1206292342f47f358009e8b891d3cb817aec290e0cf2f47e7fc637e39dca03949391839684f76b94d34e5abc7bb750cb44486cce525eb0093\nDigest = a9e9a9cb1febc380a22c03bacd18f8c46761180badd2e58b94703bd82d5987c52baec418388bc3f1e6831a130c400b3c865c51b73514f5b0a9026d9e8da2e342\nK = 001e51fd877dbbcd2ab138fd215d508879298d10c7fcbdcc918802407088eb6ca0f18976a13f2c0a57867b0298512fc85515b209c4435e9ef30ab01ba649838bc7a0\nR = 011a1323f6132d85482d9b0f73be838d8f9e78647934f2570fededca7c234cc46aa1b97da5ac1b27b714f7a171dc4209cbb0d90e4f793c4c192dc039c31310d6d99b\nS = 00386a5a0fc55d36ca7231a9537fee6b9e51c2255363d9c9e7cb7185669b302660e23133eb21eb56d305d36e69a79f5b6fa25b46ec61b7f699e1e9e927fb0bceca06\n\nCurve = P-521\nPrivate = 0024f7d67dfc0d43a26cc7c19cb511d30a097a1e27e5efe29e9e76e43849af170fd9ad57d5b22b1c8840b59ebf562371871e12d2c1baefc1abaedc872ed5d2666ad6\nX = 009da1536154b46e3169265ccba2b4da9b4b06a7462a067c6909f6c0dd8e19a7bc2ac1a47763ec4be06c1bec57d28c55ee936cb19588cc1398fe4ea3bd07e6676b7f\nY = 014150cdf25da0925926422e1fd4dcfcffb05bdf8682c54d67a9bd438d21de5af43a15d979b320a847683b6d12ac1383a7183095e9da491c3b4a7c28874625e70f87\nDigest = 7e324819033de8f2bffded5472853c3e68f4872ed25db79636249aecc24242cc3ca229ce7bd6d74eac8ba32f779e7002095f5d452d0bf24b30e1ce2eb56bb413\nK = 01c1308f31716d85294b3b5f1dc87d616093b7654907f55289499b419f38ceeb906d2c9fe4cc3d80c5a38c53f9739311b0b198111fede72ebde3b0d2bc4c2ef090d2\nR = 000dbf787ce07c453c6c6a67b0bf6850c8d6ca693a3e9818d7453487844c9048a7a2e48ff982b64eb9712461b26b5127c4dc57f9a6ad1e15d8cd56d4fd6da7186429\nS = 00c6f1c7774caf198fc189beb7e21ca92ceccc3f9875f0e2d07dc1d15bcc8f210b6dd376bf65bb6a454bf563d7f563c1041d62d6078828a57538b25ba54723170665\n\nCurve = P-521\nPrivate = 00349471460c205d836aa37dcd6c7322809e4e8ef81501e5da87284b267d843897746b33016f50a7b702964910361ed51d0afd9d8559a47f0b7c25b2bc952ce8ed9e\nX = 000bbd4e8a016b0c254e754f68f0f4ed081320d529ecdc7899cfb5a67dd04bc85b3aa6891a3ed2c9861ae76c3847d81780c23ad84153ea2042d7fd5d517a26ff3ce4\nY = 00645953afc3c1b3b74fdf503e7d3f982d7ee17611d60f8eb42a4bddbec2b67db1f09b54440c30b44e8071d404658285cb571462001218fc8c5e5b98b9fae28272e6\nDigest = 4541f9a04b289cd3b13d31d2f513d9243b7e8c3a0cbd3e0c790892235a4d4569ef8aef62444ecc64608509e6ad082bf7cd060d172550faa158b2fd396aa1e37b\nK = 000eb2bd8bb56b9d2e97c51247baf734cc655c39e0bfda35375f0ac2fe82fad699bf1989577e24afb33c3868f91111e24fefe7dec802f3323ac013bec6c048fe5568\nR = 014bf63bdbc014aa352544bd1e83ede484807ed760619fa6bc38c4f8640840195e1f2f149b29903ca4b6934404fb1f7de5e39b1ea04dba42819c75dbef6a93ebe269\nS = 005d1bcf2295240ce4415042306abd494b4bda7cf36f2ee2931518d2454faa01c606be120b057062f2f3a174cb09c14f57ab6ef41cb3802140da22074d0e46f908d4\n\nCurve = P-521\nPrivate = 007788d34758b20efc330c67483be3999d1d1a16fd0da81ed28895ebb35ee21093d37ea1ac808946c275c44454a216195eb3eb3aea1b53a329eca4eb82dd48c784f5\nX = 00157d80bd426f6c3cee903c24b73faa02e758607c3e102d6e643b7269c299684fdaba1acddb83ee686a60acca53cddb2fe976149205c8b8ab6ad1458bc00993cc43\nY = 016e33cbed05721b284dacc8c8fbe2d118c347fc2e2670e691d5d53daf6ef2dfec464a5fbf46f8efce81ac226915e11d43c11c8229fca2327815e1f8da5fe95021fc\nDigest = 7ec0906f9fbe0e001460852c0b6111b1cd01c9306c0c57a5e746d43f48f50ebb111551d04a90255b22690d79ea60e58bed88220d485daaf9b6431740bb499e39\nK = 00a73477264a9cc69d359464abb1ac098a18c0fb3ea35e4f2e6e1b060dab05bef1255d9f9c9b9fbb89712e5afe13745ae6fd5917a9aedb0f2860d03a0d8f113ea10c\nR = 007e315d8d958b8ce27eaf4f3782294341d2a46fb1457a60eb9fe93a9ae86f3764716c4f5f124bd6b114781ed59c3f24e18aa35c903211b2f2039d85862932987d68\nS = 01bcc1d211ebc120a97d465b603a1bb1e470109e0a55d2f1b5c597803931bd6d7718f010d7d289b31533e9fcef3d141974e5955bc7f0ee342b9cad05e29a3dded30e\n\nCurve = P-521\nPrivate = 01f98696772221e6cccd5569ed8aed3c435ee86a04689c7a64d20c30f6fe1c59cc10c6d2910261d30c3b96117a669e19cfe5b696b68feeacf61f6a3dea55e6e5837a\nX = 007002872c200e16d57e8e53f7bce6e9a7832c387f6f9c29c6b75526262c57bc2b56d63e9558c5761c1d62708357f586d3aab41c6a7ca3bf6c32d9c3ca40f9a2796a\nY = 01fe3e52472ef224fb38d5a0a14875b52c2f50b82b99eea98d826c77e6a9ccf798de5ffa92a0d65965f740c702a3027be66b9c844f1b2e96c134eb3fdf3edddcf11c\nDigest = 7230642b79eed2fd50f19f79f943d67d6ef609ec06c9adbb4b0a62126926080ecd474922d1af6c01f4c354affde016b284b13dbb3122555dea2a2e6ca2a357dc\nK = 01a277cf0414c6adb621d1cc0311ec908401ce040c6687ed45", + "a0cdf2910c42c9f1954a4572d8e659733d5e26cbd35e3260be40017b2f5d38ec42315f5c0b056c596d\nR = 00d732ba8b3e9c9e0a495249e152e5bee69d94e9ff012d001b140d4b5d082aa9df77e10b65f115a594a50114722db42fa5fbe457c5bd05e7ac7ee510aa68fe7b1e7f\nS = 0134ac5e1ee339727df80c35ff5b2891596dd14d6cfd137bafd50ab98e2c1ab4008a0bd03552618d217912a9ec502a902f2353e757c3b5776309f7f2cfebf913e9cd\n\nCurve = P-521\nPrivate = 013c3852a6bc8825b45fd7da1754078913d77f4e586216a6eb08b6f03adce7464f5dbc2bea0eb7b12d103870ef045f53d67e3600d7eba07aac5db03f71b64db1cceb\nX = 00c97a4ebcbbe701c9f7be127e87079edf479b76d3c14bfbee693e1638e5bff8d4705ac0c14597529dbe13356ca85eb03a418edfe144ce6cbf3533016d4efc29dbd4\nY = 011c75b7a8894ef64109ac2dea972e7fd5f79b75dab1bf9441a5b8b86f1dc1324426fa6cf4e7b973b44e3d0576c52e5c9edf8ce2fc18cb3c28742d44419f044667f8\nDigest = d209f43006e29ada2b9fe840afdf5fe6b0abeeef5662acf3fbca7e6d1bf4538f7e860332ef6122020e70104b541c30c3c0581e2b1daa0d767271769d0f073133\nK = 01e25b86db041f21c2503d547e2b1b655f0b99d5b6c0e1cf2bdbd8a8c6a053f5d79d78c55b4ef75bff764a74edc920b35536e3c470b6f6b8fd53898f3bbc467539ef\nR = 01dce45ea592b34d016497882c48dc0c7afb1c8e0f81a051800d7ab8da9d237efd892207bc9401f1d30650f66af8d5349fc5b19727756270722d5a8adb0a49b72d0a\nS = 00b79ffcdc33e028b1ab894cb751ec792a69e3011b201a76f3b878655bc31efd1c0bf3b98aea2b14f262c19d142e008b98e890ebbf464d3b025764dd2f73c4251b1a\n\nCurve = P-521\nPrivate = 01654eaa1f6eec7159ee2d36fb24d15d6d33a128f36c52e2437f7d1b5a44ea4fa965c0a26d0066f92c8b82bd136491e929686c8bde61b7c704daab54ed1e1bdf6b77\nX = 01f269692c47a55242bb08731ff920f4915bfcecf4d4431a8b487c90d08565272c52ca90c47397f7604bc643982e34d05178e979c2cff7ea1b9eaec18d69ca7382de\nY = 00750bdd866fba3e92c29599c002ac6f9e2bf39af8521b7b133f70510e9918a94d3c279edec97ab75ecda95e3dd7861af84c543371c055dc74eeeff7061726818327\nDigest = c992314e8d282d10554b2e6e8769e8b10f85686cccafb30e7db62beaad080e0da6b5cf7cd1fc5614df56705fb1a841987cb950101e2f66d55f3a285fc75829ff\nK = 01b7519becd00d750459d63a72f13318b6ac61b8c8e7077cf9415c9b4b924f35514c9c28a0fae43d06e31c670a873716156aa7bc744577d62476e038b116576a9e53\nR = 0183bddb46c249e868ef231a1ebd85d0773bf8105a092ab7d884d677a1e9b7d6014d6358c09538a99d9dca8f36f163ac1827df420c3f9360cc66900a9737a7f756f3\nS = 00d05ee3e64bac4e56d9d8bd511c8a43941e953cba4e5d83c0553acb87091ff54f3aad4d69d9f15e520a2551cc14f2c86bb45513fef0295e381a7635486bd3917b50\n\nCurve = P-521\nPrivate = 01cba5d561bf18656991eba9a1dde8bde547885ea1f0abe7f2837e569ca52f53df5e64e4a547c4f26458b5d9626ed6d702e5ab1dd585cf36a0c84f768fac946cfd4c\nX = 012857c2244fa04db3b73db4847927db63cce2fa6cb22724466d3e20bc950a9250a15eafd99f236a801e5271e8f90d9e8a97f37c12f7da65bce8a2c93bcd25526205\nY = 00f394e37c17d5b8e35b488fa05a607dbc74264965043a1fb60e92edc212296ae72d7d6fe2e3457e67be853664e1da64f57e44bd259076b3bb2b06a2c604fea1be9d\nDigest = 6e14c91db5309a075fe69f6fe8ecd663a5ba7fab14770f96b05c22e1f631cde9e086c44335a25f63d5a43ddf57da899fcedbc4a3a4350ad2edd6f70c01bb051e\nK = 00e790238796fee7b5885dc0784c7041a4cc7ca4ba757d9f7906ad1fcbab5667e3734bc2309a48047442535ff89144b518f730ff55c0c67eeb4c880c2dfd2fb60d69\nR = 01d7ce382295a2a109064ea03f0ad8761dd60eefb9c207a20e3c5551e82ac6d2ee5922b3e9655a65ba6c359dcbf8fa843fbe87239a5c3e3eaecec0407d2fcdb687c2\nS = 0161963a6237b8955a8a756d8df5dbd303140bb90143b1da5f07b32f9cb64733dc6316080924733f1e2c81ade9d0be71b5b95b55666026a035a93ab3004d0bc0b19f\n\nCurve = P-521\nPrivate = 00972e7ff25adf8a032535e5b19463cfe306b90803bf27fabc6046ae0807d2312fbab85d1da61b80b2d5d48f4e5886f27fca050b84563aee1926ae6b2564cd756d63\nX = 01d7f1e9e610619daa9d2efa563610a371677fe8b58048fdc55a98a49970f6afa6649c516f9c72085ca3722aa595f45f2803402b01c832d28aac63d9941f1a25dfea\nY = 01571facce3fcfe733a8eef4e8305dfe99103a370f82b3f8d75085414f2592ad44969a2ef8196c8b9809f0eca2f7ddc71c47879e3f37a40b9fecf97992b97af29721\nDigest = 26b4f562053f7aed8b7268e95eff336ac80a448fae52329d2771b138c9c7f70de936ef54158446afa72b0a27c2a73ca45dfa38a2ba2bf323d31aba499651128f\nK = 00517f6e4002479dc89e8cbb55b7c426d128776ca82cf81be8c1da9557178783f40e3d047db7e77867f1af030a51de470ee3128c22e9c2d642d71e4904ab5a76edfa\nR = 01c3262a3a3fb74fa5124b71a6c7f7b7e6d56738eabaf7666b372b299b0c99ee8a16be3df88dd955de093fc8c049f76ee83a4138cee41e5fe94755d27a52ee44032f\nS = 0072fd88bb1684c4ca9531748dfce4c161037fcd6ae5c2803b7117fb60d3db5df7df380591aaf3073a3031306b76f062dcc547ded23f6690293c34a710e7e9a226c3\n\nCurve = P-521\nPrivate = 01f0ec8da29295394f2f072672db014861be33bfd9f91349dad5566ff396bea055e53b1d61c8c4e5c9f6e129ed75a49f91cce1d5530ad4e78c2b793a63195eb9f0da\nX = 009ec1a3761fe3958073b9647f34202c5e8ca2428d056facc4f3fedc7077fa87f1d1eb30cc74f6e3ff3d3f82df2641cea1eb3ff1529e8a3866ae2055aacec0bf68c4\nY = 00bed0261b91f664c3ff53e337d8321cb988c3edc03b46754680097e5a8585245d80d0b7045c75a9c5be7f599d3b5eea08d828acb6294ae515a3df57a37f903ef62e\nDigest = ea13b25b80ec89ffa649a00ce85a494892f9fb7389df56eed084d670efb020c05508ac3f04872843c92a67ee5ea02e0445dad8495cd823ca16f5510d5863002b\nK = 00ac3b6d61ebda99e23301fa198d686a13c0832af594b289c9a55669ce6d62011384769013748b68465527a597ed6858a06a99d50493562b3a7dbcee975ad34657d8\nR = 00cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94\nS = 00097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d13571612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f\n", +}; +static const size_t kLen34 = 160910; + +static const char *kData35[] = { + "# Tests from NIST CAVP 186-4 ECDSA2VS Test Vectors, Signature Verification Test\n# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3ecdsatestvectors.zip\n#\n# NIST's files provide message and digest pairs. Since this is a low-level test,\n# the digests have been extracted. P-521 test vectors were fixed to have the\n# right number of leading zeros.\n\nCurve = P-224\nX = a100d410ce497e991070285c439cd361a1a9c6c973fd6f5e1ba9ec66\nY = 0a8c3a2f909f212c84441b8c0030529cbd731304d86f771d89d7cc29\nDigest = 6a02c84186eb132d8e91ab6fea2e066f6f8de1a5\nR = 1bfcaab01e47addd4733369320364ad208169ffb15e6aac33c2d7c06\nS = 07fb33465e7b7b373feda2ea35ab7cc9477156a1335ecad942f99627\n\nCurve = P-224\nX = a6cd3d14cd5eb188a9f59d9c32e93d890558de382f6fba5ff5c6e395\nY = 7a76734a0afead9e5e4aba65f1ae353d6445b1689b5ea402de5f9af9\nDigest = ab1205b7f9f591a013c70cb645435b38689644c1\nR = f0f670963c3d2a3281d639f850f3781c6402d99a1bf07cd9f35b2975\nS = 758e84920c1b744502cd787cdd64ec58364ccc6917258a2580097492\nInvalid =\n\nCurve = P-224\nX = f5fe7875a517207f1336ec2bb4fe5cc7eb80ee2b0f8ebeff4c56e620\nY = 0b7ac24ea9092d03b28904d89714b517be023235abc9cffa297cf4ad\nDigest = d62c7a42fcf3738276a6e0d27160328e9f27e5aa\nR = 88617e694e361d2cfef6b0658d444607fba030ad31fe8dead14db22e\nS = 5b0bf37c4a583dd75d99aec20943ea02617cecdbcd295d35ed01cc32\nInvalid =\n\nCurve = P-224\nX = 8a6a77179ffc0ff5d412cf859cc82aa19cd18e5224ab997e9c2e46b0\nY = 3d67c177ca7cc12c7b05a3bf55fb78549ef5400a566efe8ae3580c9f\nDigest = 0b5a025a4038b6f9f995001c0b8d7a660e6766c2\nR = 107b7442e6569ddde54b5da55a9dac9bd348079358047a19a3de0b91\nS = 92359be39353cb263946294fb728eecf1880f50a43637f391d3e7824\n\nCurve = P-224\nX = f9f23388d573562f29e7e7c9a98f27e7a1ff02d2d66e177c6506466f\nY = 4545937caf1878fbacc34ca38a0e5e1f6ad2b25ddd796d06c8d12351\nDigest = cf670c7589b91dac6a131fe2e863e86ee790ca75\nR = bc1db32e437c67439c27db1dc607e3c505210c984bf707a8e87abb70\nS = b760f4943a2397311e54e888a1ad379ad9c45d1fd09b5389ce1a00ee\nInvalid =\n\nCurve = P-224\nX = 8781e5a98950092570d685964e9ed27760fb7dcff8d3b6f3c8f77151\nY = 9207cef64b7c2ed181c57337001f45f1e800e0d1bc8adac296e454b5\nDigest = e5e5e8c8b3f7146c72ef86ca1b75f422181b5729\nR = 79826ae5b0297b9404829df0f02bbb7b8acb35459e13a4045c40f242\nS = 2a629dab19c9e5cd0a551a43851fe6d8409469f86cbcf6204b41e5b5\nInvalid =\n\nCurve = P-224\nX = 03c78c532b8767784fd45e75027abce3371181f8f54914811588cbb2\nY = 166c7b70e98fa11ac361d827557676ec07e553370a462b4fe502dedb\nDigest = 270606c9c9b136ffada9588f15f9786455369422\nR = ff18b493b166d832c9c25ee491525e4c188ff2b804e38b5964941c48\nS = bbf4291db484b4e4143c01a284c03543bbdaa2db1f1c571f1e5a5e2e\nInvalid =\n\nCurve = P-224\nX = 99fab11464484cee96d72dfcf0327d671787a2f6ee32f9b184c48fec\nY = fe8ec3d660cfa3f3e09e5cfc2c3298d4de2f464416deb5b4a27ac062\nDigest = 9c77c796ba619aedef68b2d30b4ba00c4972488b\nR = 714c48c143cb259408c04f77a38d6484e788cb268fc9789d5e871491\nS = 542793d5dbcabcebc83a809cca02b8e95189c93fa4e330d66d5a62ef\nInvalid =\n\nCurve = P-224\nX = 014e8e57388eba32ebdce80df60c481e5c7758374f90a92e0a82f1b9\nY = d1aa8418f992283c5b6bb0461f05dc9103050dc55e0265e1c99b935d\nDigest = 82b45d1fb3bb502c7c20ee1e2d63f2aaa9f492ab\nR = a159b83e80e656f54f614e8437821bd87f6f13264ac8eca1b3ddde29\nS = b77b7bc8cf374f012ee15f9f9224a46a560a5b689cfc92ca4fa03459\nInvalid =\n\nCurve = P-224\nX = e0b9e3cadca81311923d6d6adcfc326b62fac9c4b8d61c5f960c88fa\nY = be505338108f8d3f0ee80aefa304d51dd4a4035477934a98a6111403\nDigest = f4da99fee346e572906e6dc8083a3d0c2e09b773\nR = 8dba585dc3312056a7be61161c7af8ba8b538f0c125c80cf9af2682e\nS = 1b5b1adac4d66c7045f3f79c3aa154a0274c4a994ac7a093e2482eeb\nInvalid =\n\nCurve = P-224\nX = 29197e94a3617e62d9999c859640871a4537a073ca4f12a4c324dcad\nY = fe198969ac7cbe49df2c61c4cc6fa502c2207a7da10acdccec7b1cad\nDigest = 58fab970cb7c1f0dac21b7c7fd67d0ad169688a1\nR = 261670b09afaeee71c590c5658e3f57d859b18a887f70fdeb90e57ea\nS = d1d12c11cf7f4a9dd015ead4bd245793cb37ffee1f4cf109b7b68394\nInvalid =\n\nCurve = P-224\nX = 0fac352c1c444435e6aeb1d60f28ac773b0170ae902afb0944ef0a12\nY = ac3ca693a7c5347a074808b43edea94059e2b1d0571d935fde3f5841\nDigest = 4b69dbfac12f1b974566d8170d1672d0f5fc0506\nR = c33c7a4de313ff856d2f51cd9e3d173bd10668c296f0e6b208c036ef\nS = e562d30822b5cc69713a57ce8c70f83827add85a06c88109505ebf7a\nInvalid =\n\nCurve = P-224\nX = b0d4298e998b7d9d4509322a1ac974c6180956533debafd3d9e7f2fc\nY = 185a64ca840d4b6a2800e72433f26dd523f97daadc18d6d01533f0ad\nDigest = b84805c37e76e530729ddcb59a68ad69d40c82f9\nR = a5155ce53050cbfe84b67d62ce118c6004564087f2fe1cdf44e9c945\nS = b6894b050d77a3ff4d191ddc0c9fc7009a7472e31739949193d7cceb\nInvalid =\n\nCurve = P-224\nX = 59996a4a06658e553fc2993f0f55e3fc8ca2cb52d30f882a37729be4\nY = a5f68f26ea6608fd1f350d8da7c187c7e70f23363177a5aa41508fce\nDigest = ef0a69578d8a1dc930803a7ad2a92c3c19ab6513\nR = 704ef49e0a43c61ef5b325899acb9d12287883a849976c8b9c950634\nS = 73da6e3a26d5c512405fc09fcfdf650dd8da748e6c3dfc05032d7a9f\n\nCurve = P-224\nX = a0cfdfc5a096b0b23ba6748ebaad17e60228b204aebdc01057a7154b\nY = 9f6bd5369d21d88d7b5c3ce221af530fb9a8fb91e751cdb855ff32a6\nDigest = b05f0232e6d44151e249e7b75c7c9ab05c14d44b\nR = d68aa9048e84b8653b8ff3ab31bc73884c6ac7df1fd1bd3c38c16b0d\nS = 38ce58afe5fbc6af892e06a4ddd978c745d5ec700cab825c11dd8fd1\nInvalid =\n\nCurve = P-224\nX = f1eb36b3e1c96a18d87878d5fa8b79d77afce9d2ce40d26199f33482\nY = ae819af474f3efbd62401a407036505c5a2d60449274593865de3374\nDigest = 1dd27c95dd6fb3f080afebdf5a1ad906502e12ab8f64e5f38f67c386\nR = 003122e976bac378c06ec95fd73290b067e7ff022d23493c40663ec9\nS = b99eb4220146a282c7a34f98a9a4fa38ed3f48ca2c7983cde2d3235f\n\nCurve = P-224\nX = 3bdcc7c6112cde3c0522f1a4863f1d7b6727c5bff67598ba2f1bafc1\nY = 47acb6b254e0e8747e0039de471d0dda443cb09a592c678717d83200\nDigest = 19b39292f4e862ed3ee90c35e709587231191632dc8b35611dd24abe\nR = a5aab7768f549f8fe3c7e650154c865b71ea5089bd6303bfdfd19316\nS = ee4989c4b96bcc802464fe44b2adeb1b3506755a3f4fb3f9252bf21b\nInvalid =\n\nCurve = P-224\nX = 6d5bacf458cee3ded627d0ff14fd2aeb54fe1455d6daaf7bb43faeea\nY = caecc8d3967ca1c8889607e9ed975b8a335a17c0acbcfbfed721ee1c\nDigest = 328ab7d2a7c56d09cb72cedaacc23a6da46d5cf984dfdfd16af60964\nR = 80e7024bf30ecddf7a658785ae51cd6e5a23963c89ee96a82346d889\nS = 561252dc8d9280fc54da0046da494fa5e4b7aed213923e8b894a1ae3\nInvalid =\n\nCurve = P-224\nX = 7f9789c729355516588a5c75cb2cbcf85a14c35e14a5d03b4ef920d7\nY = 49e95c49e62dd20f02ed16594f35ebf3415ed50e6efdc0c548101a9d\nDigest = c5bb2d7ca9b37af1f4bb572ae6b6e69e8fcab9ac1cc5a6e1b6d1f8de\nR = 3c7b664413c2a0e4682a9d1c88243a96196fbd03f72cb873b9bee8b9\nS = 8f7f81ee9d3a2660ab1d666bac6cc434143ca9b04ff638ca7b4aa1ea\n\nCurve = P-224\nX = fd3efc7108edbe155adcd8686d8605e811fa79756c7e2dc8c1c04212\nY = 59edea73a4e5f91541fb4cabce539afffa85b6b0113289f049ce60a0\nDigest = 562d1a8fa642dd8bbb4f4801f2d9fc8cf3452be916c0ecd6c8ddc4fc\nR = 4907884b8b7d0eb9a7b24420f69c58e3a17314e101da0280c0ceb130\nS = f7629bed92e5c40f35d7731912fb45a3cee06eab3d409a62997f2282\nInvalid =\n\nCurve = P-224\nX = 8b3f3e31d9c8408a39997455ffe0240fe128a5f1be9b3a33a97b0910\nY = d74ac6ad8de2407887c335bd66f684454dee175a2af713bb334cb3fe\nDigest = b57ffce01c72221c6714e4a38c76746c45a8cc685f37c55a69f6773f\nR = d28ae763c22f50ae9ee9fbe5bab682fd8d820b99ab70677cc46624f7\nS = d9fa54d0300a6ac74936e7a47fbacadcbb4b25ae3a5b550aaf53991f\nInvalid =\n\nCurve = P-224\nX = f4fd02f3d224727e156a2cd7543483f3e35eb65219e32c7923f93ecf\nY = e7aa734828ef326259f98e0e8c3f30b62bd3295c6d1af2c429a087f6\nDigest = 8e70efc206d69d1bd1dce263a29a56030ad5602046bc61848899474d\nR = 9f57e28f69d2ebd96f6d98903156a4e795730e09fb67963771b0a851\nS = 8cfe716488479e04500c8eccdc86fdd54ff00258639f7177169e2030\nInvalid =\n\nCurve = P-224\nX = 0fdb8faf52d8f46229cca1e0f22e869a91bd56eb6dccc547151f9c68\nY = 96c8d1946528bdd2c14c3a0a9c17a088d3f0599752d095ba9de9ffa6\nDigest = db452771046d4b64ba673771b49df905881df9c4b6a1292a11f87515\nR = c53c0ce7d408278552a5fe5854c05641cbe93b1dc18eff1c68af53c1\nS = be7453a12693ce7812fe58746323882bc14eff972480b49431cb10b3\nInvalid =\n\nCurve = P-224\nX = 240431da69703b32ba2ae501d2458b355b66170725806b45996db195\nY = 13beb5198ee00abdcfb2cc5454416d4f7c795e97a14bd93cec3f0a56\nDigest = 3598d7d7b2cd9e482fd3bbebb9ae4549a4b452c81b89f3da6f6f2e85\nR = ad03bdf64e3450407a2a977e1985853d6ea41568c3a394d696de6739\nS = 7b55db9abf2045e2dc7ccfa2e8fb501883c494662d400590c74d100f\nInvalid =\n\nCurve = P-224\nX = 8c80c86f91b1e330f86f5177fdba839e625a27e8531f232efb10a484\nY = a24deab897", + "8dfe7398f7a1da0633ff7cf5aa7b7365ce2d840ce81c80\nDigest = 44603667b2251cf051cd67b927714d67a25295679d884c4b79099a80\nR = 0c422b292308f31af78b1261d12765cced1cf96a83a6bc3bd90330fc\nS = db34f4462d0bb1927cc99273dc92d3fe654c85a3b53c6d74ed900621\nInvalid =\n\nCurve = P-224\nX = 3a5d1b7ee6749630c9619789b256f6bad5bc4b09950cd53b78d5ef30\nY = e85c7ee707df680eeb5fd78451f7302ae653f96721443826096f62a3\nDigest = 2ed9e7077df2ca2f8a96dfea2127b1b34147fcf963f9d73e8aff9df6\nR = 671ad280609364b0e26c92b13891f677db7c83499d0a3d7b6d80affa\nS = 7c4b9c5a3937d540ed8bd59e340c13f02313445e06b2bf7525f5726a\nInvalid =\n\nCurve = P-224\nX = 350f59509abc9f7f9b35a8b80065258727a8ffc27e6dac635ed68900\nY = 634fceae493b200cc7680297fd940dd86a5111da14bed68c797ef254\nDigest = 012a6edb0064f2b734b0297ab924efcb0e653be9e6ae97c371d59680\nR = 13a302b200555a0e80584e6ede32c0f9c5a199125b219c3e8d0fbf96\nS = 13f1d7b0c87acea6290cd9d36f1820f546f83dd8d7d9abe9da5812a9\nInvalid =\n\nCurve = P-224\nX = 1fdb820003a2fe61deef2b68b92ac711abc76200c534ec3abc99a187\nY = 32f87d0554b6b5e389311fd3c86825fcd42654a0b6f5d4d5ba73031b\nDigest = 2afe40d5042eb4020b14053e9ead6774d566e0b536912b7de4450090\nR = c03e551abcb12eadbc291b2d5fdd53bf725b785933e0766969f0355e\nS = 94826a8753cb949e0199be3220b4f90318f1c835cdd67efc50df7fbd\n\nCurve = P-224\nX = 208dcc6c87e7c38bd914bc9b350602ff62ac62fa4fd633c1af5b8cd7\nY = 0263587c7692c8be1f78de88ed6dc99ce1198ecc53a77ae6cf98a323\nDigest = 3f95e73294defecfc125a2dbbf322d31f323c030adf244c07a7c8746\nR = c12d3b396e1a894dfe4a28971ce4983547596879956504e1a3aed75c\nS = 067b729ca23be6cd520fbe9b972b9bb3d00c9ee96832a5c35e20e0e0\nInvalid =\n\nCurve = P-224\nX = a66a652fa36413dccd72c83febedda051182dc5758a1466366197f5f\nY = dc813a79e0fc647d8892dcf4f2132c90914a520cbbad65f458ee0fae\nDigest = 8a8942761ccd4ac7c88c4afcb6bc69d431cc3d10e6ad7a2b8610892f\nR = 809d1b4557eaf36b6eab3449dad56e61d572bd8b63d51b63af1b0bc6\nS = 8bf88226a463606ab57c27ed78f1b71ccd61732fa58b62ee845fd3dd\nInvalid =\n\nCurve = P-224\nX = 8856fb8b81a4eacd971a954560018f33cbb71cc1fc243d03f63cabcb\nY = 28afa26baf31b4d89de1dadd2289006f836f23a11383817ec7e4e799\nDigest = d8454640ad1f4632cc667823418ae56c62028825d727adfc84afdb0842b0c9a4\nR = efccef331805e71bbf876cbbc2342a6bc4508aea7c691029c8396aef\nS = bed544d09e28dbf01a30b2cfb61b98ad6201a9818f22b4f543f3e7f5\nInvalid =\n\nCurve = P-224\nX = 34c5ff3de565b85bfdd9f0a8b3fb0d46f924c57b276bcc830a1ed580\nY = 609d22200ef38b410da77f7a8ff2f58448188042978fd9ae1b2b4477\nDigest = 831979405db4eb9dadf01249fa15f68d4846e0ece70a320d3022f75f3dc281cc\nR = f0138024fe0516738f3bd0e0fec10defaca8c3b89c161a77489cf2b7\nS = 4ae0934266d9e3d64c2a12f546b132ba0f33ef50abc90e7ef5974805\n\nCurve = P-224\nX = 465afb14f4bf85022ac1f635f46c0b2f6548bace9352d32f74eab012\nY = 036371a3246dbf1069d2d268ca431553d1f2bf0181225145881b7be0\nDigest = 489cd3c10d94f7f284bc4ea472634a5d7f0d280d5abbf139c110ef80c8bf463f\nR = 9bcd57a2fec2518903e4b13dc0a7b84bafed5c4908546e94ffae87ed\nS = a337e06582f6b3973df38b93a0fb2a63f7774b62db50dba557e5cfcc\nInvalid =\n\nCurve = P-224\nX = b8b7f923c05ec95ebd484db7c58d219cfd26ee6b66149631f25ffe4c\nY = 6bda5f4f988784555a80b5494eca51ad2c7f88ce94d2090ee0c76fba\nDigest = b100feed0121d9d0471e5bd94a659510c2f84e313f476431deac17ca6d87bd79\nR = ce4d86bf5a7543d1cba8e4470a297e9a48d0096d7788c6284b1c0af3\nS = 229eb0636ee62508ce3719396d7577ed892cec70a66857fdee0d1fa0\nInvalid =\n\nCurve = P-224\nX = 13e84ec2eb993818d7d78330855ee2fbe8ddb548a5e4198e2087b3b2\nY = c95dff249e10c506fb547a92ade53c61ddbb667c760e4127a1a7f806\nDigest = 21a9f65d4cdcc287e0bf330e4f76f1168d16d0cea796dd6c0e13cd2837decaf1\nR = ed26f00ed696e114305c546ed04db5fc35efa43059c0d8bbcd418d0c\nS = 6e16efbe9501e3055d74966a49232cd76b5d1241468788b4cc7378b4\nInvalid =\n\nCurve = P-224\nX = 16c23c93699cf665a5da8b2d4baa72c36158d3433b1b945e47204b0d\nY = 12023703e1b59ec9054ff22d15567b9f74058b47cc13f2ca08ab77c1\nDigest = d62496d0ee0453e7f13f8d9c57adcd33442a5365f626381ed665f95f528aa198\nR = ada849b673a1bd2949a8b4d8fdfc239ec53524a356d37da3c9d17ae2\nS = 698de3a3d8697c2e8e5b2c85fceb8796750c5b44154f01ce86d99e24\nInvalid =\n\nCurve = P-224\nX = a580f9a0cd15abff8e1e712f16b0fd4142d0d773af3c657abc06c2a6\nY = 22c6286340dc072e64274209eda60503047700571caee64b4a2306c2\nDigest = 25ef291dd6a2047ea193f8aedd3f4692f2c135cb519922a17cba3e969423b030\nR = c6fae06274dc052e482102520b49d4ccc4cb7eb8a3ea41bd3680ddad\nS = 50d66b75a2bbd0468be1f9e61bfda85b6329505b0134d60846cbe4b7\n\nCurve = P-224\nX = 0b4fb6fe5f6cf6adc7d28683628d4b9c569d21d2397533f5bd121a23\nY = b44d60a3414b9b7b6e4ad735ce2f9cb05593b0874ada5e65acdead4c\nDigest = 7d53ebba0424c4b6731806407f97af4af863a5a87c759626830c9e8753ca50fe\nR = ab5ac2039b49690c6436793decb1a6a58ac34833a8091005312a93a7\nS = 98fe955cd836501cef78c7a05fa27edf2fb3afea80990028ff64e984\nInvalid =\n\nCurve = P-224\nX = bae2b3634c7854c932551ece8dced2139a51705059503881a9239c78\nY = 094d5e455bc9296202618d7022512b0f9ce53d796c7294e6eb076a29\nDigest = bb5c0917ec5376b2c685f3a530a9f8ef1ef1c1b398ab66f479d936cd662efc1b\nR = 2fbdc7e9e98aed5dbbcc5b034e17a95209e2fe1b01515426b8b372c3\nS = f2b19226528f10be6ef0d27ec3703db690261206b7e42f93a691192e\nInvalid =\n\nCurve = P-224\nX = 49d9ff4f4bbd4320b6806a7fbaaedd962283c766a6c130e4b62139dc\nY = 06dbe8e7fb8fccf9758101ae46939c6fd4d3afc526ba6c8156c6b013\nDigest = 9a113d3d73543e17faba847981e0b7fbc5647e547bfc989921ddc987133692d1\nR = 2d83aa59bcfc8a0237884826e08dbd78a56733598e379f2a9d51e9e2\nS = 485036c74618d0e665775fbe2d614a313c550f9826b955d3e5636fd1\nInvalid =\n\nCurve = P-224\nX = 78451cca49655978b65d8ddd45ff367c47f321f5d55ddac7969ab82b\nY = 25b77f820aa9ec93ec89d7fc84285f3f3deed496e0cd3fb9ee4a5c99\nDigest = 352afd36279bee1ef5727c55c7428bb79db949a9f1953eb98cfd38c4a4a458af\nR = 998789490e008ed11febdfe2981a55c733eb9739d7f37fd5c2a7ec96\nS = c3ec8afade81860ff23cc1e7d759d32d9a5775886ef17bfb719df4aa\nInvalid =\n\nCurve = P-224\nX = 18ced60b7fd9ebf76c3aa5976dcbdef40bd3e36033c013553043dd84\nY = 30398582dbd2004064f8055e7fe0fe8df11b2c9d9e2931ad12d09628\nDigest = a1e3668af6307f6a2b7414079e73308ee0836b588b92a48bd5baa9a62f45b0f8\nR = f880143960e812464810c175001b5d39592fe63aab544deb9ca301a0\nS = 1e0657df071a25dd791264b411c8964688f4fe17ce024e659836ebe1\nInvalid =\n\nCurve = P-224\nX = 5d67c1fca848ba7f3d9de5b1894d3993ac4ebe68cdb0b49553b3b0e9\nY = 07c219a8323273c81f5694306d0dd1d133a49efce5003bc90f05578f\nDigest = e8f714f901cd2390c66f9fa9cb81ecc5f17a82bd934cf19c5ce2bcbd3a985de9\nR = 767cb6b2efa7a40739830659b0cc24fe3de771d00104b3dcc0f640bc\nS = f2e7268bc011d79d33f3551d2edd3c95f324955479b8e29e8aba629b\n\nCurve = P-224\nX = eac72b399cb791b3ed25cb0a49eb157e69603197e0327eac5448680d\nY = bdab3a2270066e74e8210eed7b5d43fba1e26845b6c037a8a7e2a13b\nDigest = 74aa7c8f25644514582fa904cea1ea88a0b262ffca43cdf6536ad97d8550616e\nR = 55485947e9e3c194a29c8ecaddb18eefd16fb6919aeb0bbbd8c12369\nS = 6309a2cc7fdd9eccb32b86d5577aa54ada79899a9645f2e299630d31\nInvalid =\n\nCurve = P-224\nX = 17f741267bf3e8143046707d41eafc9555953fe5f57d6c035452b232\nY = c667554d9a55fc8ab1062203dcbcd2bf9769c696a295350cb28aa01a\nDigest = 3b997a1c220593cab4301e07886db745436911b8abfd9d1b03cc12e1c7fa4510\nR = 57408bfcc68e60ad000eddbfe6eccbe5f87b98c95de0e0a2e065da92\nS = 51249bddc149f0942be001b2f3d6f6d17a0cc36fefce147058944667\nInvalid =\n\nCurve = P-224\nX = 3297edac34cb802df263f8d366f62a8b746c316adfb1c84a1c79c58c\nY = 79fe82e87ef5879c12eda6adda198a662fd77afa6a1fb5696cb7da9d\nDigest = e71dc3ab7ce73995d053bc6361bbb3f20e39ec2f295d97fa2bd229ed31a56dde6bf2c9cf6b0a9cc7e65962c57f3662a3\nR = 9993defdcf83965723c03e04ce6c33b3972cef3c449cdf1bc69990db\nS = 553b22a4164549f16aa1a928eee74548fc141fd3c16f213318965974\n\nCurve = P-224\nX = 2bc010527ea7427cedd213aeccf0c62dc513785888c6373740139d8b\nY = 2e9eb7ddf027ff7678ca880511be147098b34d8e77acb4389fbc6e50\nDigest = 781195b6396344146fe8b73a2526b4b1c981d26b9adcce0123176be1239f798c847495fd714661d1ba8e41f2ccfd052b\nR = 70a7cb04295a53b4a3a695ccb5d87856fe9152fce11987d4c43207bd\nS = 49f4094368f2de9327ca2913ef940e17c5801e8f589413838831083f\nInvalid =\n\nCurve = P-224\nX = 55c6217adbefff6e21bfb5d1b75213ce7b20c900d514ee094f27ad0d\nY = a68ae9f86eb9c10de3e7d9b03868518f33f571f85c3529d2902575d3\nDigest = a318b24bbb5ba46e6656f8ad68201c024e7b3b3849d6a70f3abce8c20f5b98ae43a326f5f48994045f0ff27098837b5b\nR = c073fba87267b45853e693910c1de791908ca7a25c1716ec2d3cec71\nS = 6138c86daf1021ae4af0faaf0abd5958f93944d5b0d82c40214bacca\nInvalid =\n\nCurve = P-224\nX = 4d0cab0dae88fa0cf53a2a6562934e0cf", + "0271cc7fe54a30109a232be\nY = 70835833cf9e1f989a18d419e7bee9eb5cef1fd145cf62c4411c372c\nDigest = 6abbf2557f2e9b4e020126f4a87fb0262a1ec59bd3b569581048c5692f8a1cd381ee9c3cf195fa1a362a87ab604d79b3\nR = 3b8548eab4dc123e236133d826f2badbde96f92249f456e33ccc9739\nS = c82b2e41b9e2b21594cc03b1c0de216f183403c6025e18bb29bff421\n\nCurve = P-224\nX = f55a53b818b3ec4b4402a2c63429c1d78f2cd0d8d202e33812878a03\nY = 5a2b1a00615c56b4313828bd70526b12f402df1d40fa4900c994af8b\nDigest = da8d2571bea9840494a41f03c6c357410de030a7b5c023a0487020bb5b7c45fb6c5ed0e3dc66e4c0ab8460d9bda68c94\nR = fa934f9fdb765fabb5693ccb1de4177f172a8de108805a48f4bb989c\nS = 12994f2a26252742667044a01b509b0f315e8141629f760267b850e1\nInvalid =\n\nCurve = P-224\nX = 40a5c52dda7de858a2c17d12856c552ab820023336b9b4fc196bcd67\nY = 301e5368f59c00f15e6f3a91510444fb75a4ead8efb0778b4419e7db\nDigest = 0f88ea2d9dd40c19cd31c7a7cff71379431c9dc0a3092041a5fcbd2c20a05a8cb6e5a8aa143f1dfa169d2eaf87d01e26\nR = 0fd8773fac425a2761b954c946020615336d3e350ae40743641917fe\nS = d59f2b806ccecc444f9387f511c7f9926fe7f045c0ea633a51b7db47\nInvalid =\n\nCurve = P-224\nX = 372a134eec0dae3322de8836b89dde11a69e0379a60b10343abd478c\nY = 65921970ca8cf5a75f044db0e29802afe1726d18b3e07b61c768c242\nDigest = 1547d49d33566f8c05f68b9a980e113f919bbdef8d6d53046456a2c2ebe27ad86eaa52d05677fadd5ccc3e84b04c0f94\nR = be6474845a42fd4e85b91238f1e3ba11cc88e216d295c1b07d855987\nS = 2724242ffb5775f614ee06eaa4c985358f64869ce4ae4bfb16b5271d\nInvalid =\n\nCurve = P-224\nX = 9ad2cee0d92b00b11157a18fcd752f43e772ede7a46475a50e7ad8d2\nY = a6edfae6c5589dc0db6353b8655fe3b0f7dab2aa8400cbbd72d1a572\nDigest = 60942be3ff8d2370481b04fa07743482e08a61d3724010d7edd49bcf12e1463ae059696c825ac0505f079625b95310a1\nR = c31a40b6c245572457a19efac0da0db22b2a0818de716b6fdc5bdb32\nS = ed8204de94f1d92ae3fa6e10c727eea38d0e12b58133fda1a15559bb\nInvalid =\n\nCurve = P-224\nX = ed071a20d76f81c776875f8d3307841d33b70523ea40abd691d55d21\nY = 34ca47d8ba0a984d0d728c4d8c6b9aacdded03c6070616680aac162c\nDigest = e0776a80c616b8e596bacb0391a19956b2f0e2c566c50dd2ba99f9e59ff3dfa6197622c2a64cb4d02780a39c68d249e0\nR = c7a5dce4733a81bd738e0a6e0667dc1fade86db119e7f3cde57d6dc6\nS = dfb7f43343941cce331be27047b131617910f68393630fa53d137df4\nInvalid =\n\nCurve = P-224\nX = f51097e1e4b4f3b32e92fded0b4c8b7240a62731292e615a4cae0dcf\nY = 0549003f18e67076bc68110a75252072fc29b6d4a336d152dac2c3d1\nDigest = 48803bce00fe101650dcc83b290c49a524b21422f1f6a3aaa6e2f201863ffc355346d167dcb0ac552007a46cf8d6e4ad\nR = 6875a118dbf586a51af2212d5f32908c9f31110e9e9a7e4cdf7494c5\nS = 1542ab4260459e82070bbad405193a1894ce717af158daf1d096bc01\nInvalid =\n\nCurve = P-224\nX = 5255e4fdc816044389e9c6f5e09b85aedbe1c85b1cf9b7190ef7c2cc\nY = 683c8cb6f31e4cc1e2a5361eb47e305d5d8bfeaf94e261a341aedde6\nDigest = 995229c018cd0ea061672c46ec30c99693fff1cad491b13b4093df0154872adf946644dee6192657b436931c30b7af9d\nR = f1b0f8a3fbf7d4de19cc1d3b4c525c31bd97c2e2a94eb8a27c7c197d\nS = 936d3f49a9aa58935cfe227b22db83314ffadcc4751c8e26853d8cd0\nInvalid =\n\nCurve = P-224\nX = 7cdaf519f6b1254cb8da4668a2dd2015857ceec17f838c15d7d34b27\nY = e29f80fa4f830af7737126d4454b6498905e2c633fa61ad6acb30823\nDigest = c7d8d1f060287ec402092be54ca6e06895e91f9d0c29010124c0d9bd54007d8039b7328ec7b3a29e1d5d4d8fb78807e4\nR = e640f3e676a11007e73efd00b23087adefc9b9407ae8b79b47c397f3\nS = 66b7860a0ca35c2f1c65d50f99def9f2bfc0a6cad2008dcc38d6b3d7\nInvalid =\n\nCurve = P-224\nX = ca1a04f08708ae714b7dfb3db509970d30b7e01be7fd6181613894a7\nY = 1d90a2fcda7dd6ce8b207eef48340e58cd439a3ce17658f6f82be778\nDigest = 1f710f925826bc33c0da91798cb7d7d0700883da685a1fb9503179f0a06b589bf92eb4b67496faf21cd74c8e3d560d77\nR = 9e810ec2a0bc205df6a75bd6410e0c8ea1c738e71af060e2eb271aa6\nS = 9d05eeb46258c468b0398cb6e421149bbea5ed936be3fde3380111cb\nInvalid =\n\nCurve = P-224\nX = 558c323d8259e055a025fbbe6ba8b525b02f32caddfd31e5b08219d4\nY = e1d6398b1c47132632cd3f3fae14fc3ee3092faa619074fd951a5870\nDigest = 4b662138833a976051b20ddfb02e67339715b77046bedeb1e30b9dccbcd84204e76da722bb3bd020fbbe33a182792e0f\nR = 05d8b0bcedf287a4740bfc548570b1c1fff71058e0a9d88476bbb6a1\nS = 769321d50e34939e622a727855501e25a7ad44ec979985e7389aa3f9\nInvalid =\n\nCurve = P-224\nX = 9237e61ad9ffafc61cc1c72b6d2f96d69b588c8feee4074359f694f7\nY = db25a18f1eee72734c640313f5c6c0441358611406cc62619113b4ba\nDigest = 4e7bbf78843a767536977b240e9d1516c73c0fa19bc91448280fd85361b06fdd11ee413f956ca4ea3d67c0e325a1d53a\nR = a58225b10080dab26644f10d8a817ffc4ed4535011729491b6ad5d00\nS = ddbc010e295882e0731ff240f15ed82fa3e81b7552c690cc5b40be03\n\nCurve = P-224\nX = ea7efb9a7e7bf693dc0249504ead70dd422ec86806cd649ed57a7ffe\nY = 33dfb17b1cb244279990019286ab477a2aff2b55c08959deed0b1a28\nDigest = 330f78db9f217f95d99cbcb5414a32523025b85c87ed5aaa3a5e6b006c53cecbbd446166bb9b98e944626332c3266e82356e72110bdbf7df2431b8e7faf59e45\nR = deab574de1f971419b7ba9e169866c3a6233fc627c13dc6a8cb88bdc\nS = 8d4c542bb0046da1b3912652a2c84542668cd89920808785d04e4352\nInvalid =\n\nCurve = P-224\nX = 6fce4d789b1240f2ab1c23051aa03e219da99943a18864e7876d4d11\nY = 3e84a6bddea4a28cf8151ae73aa7b1964c37e654241353a9fa723f67\nDigest = 0088e4cbf3eddb6eaf108fd3937c439684ff8fe5595f2032948423a2a15811b34b0def245bed3b4b4ca90d3f497f3aaa2577a7154d22d7254dfc4755eb9b7b17\nR = 2d1b4f1ccaebc0a929598b650ee364abfd6091a542ba426886d75f38\nS = 44f3d7afe84ae33ab5f9426dfc85248ebc7e0df434d35980ddec75e0\nInvalid =\n\nCurve = P-224\nX = 72013dd6f5b1eb709b3b7da234987f9a36c6f0b095620b8c31f02381\nY = 319d54c719b59d91900b3c20d963ddf1a10d80d6601ac155094b075a\nDigest = 3cba2980faf5579c7ddbeb31c3318a162a882129a1efe1fc9acc3219a617c460701f22fd7a5c46b017bd9ec9c40587127319ea14b148d2be4df9875d5bef6e4e\nR = eb38db9b757b3cf04020f09188c789bf0258cd0467cf7d67368e8703\nS = 7664e85f01e67881712b24083f89e838c8b818de4d665494e7016833\nInvalid =\n\nCurve = P-224\nX = c6a65011926eb64e02bf472d5ba37841d49cfb7f17a20fb9f59355de\nY = 386ccb33d944fd7be6b8531863d2b6200cd602d300d7e7681537e53f\nDigest = eaa81b1236121db12f2036611eb6d3e5386f5733125fb26844cb4188109aae402525fc63bcd73494c36c170d1934b108739d79b0c4f184bd85ffce93b1beecde\nR = 9e7c637a699dd52512faea847079f0ad41b20cd7a5461c36d01e857e\nS = dec6e9ef361de3f6ec7d87de3129eaac5fd0b43b5f7f58ce46c29173\n\nCurve = P-224\nX = 5bcdbaeb2f6c57e8a9dffe94804e74daaf9db8452d13c6a8bc2a4966\nY = a564072356c5d86200e979291a19d5e73d8bcb701cf84d9012824bf6\nDigest = 4a5de84f304f0c83365ae4213fee71c0944d8580f9d8e7455fc961e9f98bf3d51b7fc20aa44e36c0bdaa09e365767742e9bd8bc868d5c6cd8e1cd2ce2968e3dc\nR = c58436fb77aaa4468dee284e1220141ce9ff4426f75daadf5a898a6f\nS = 87aeee1229a50921d8e77e7e3478061f5c051097defb104a0455ed81\nInvalid =\n\nCurve = P-224\nX = 6c6a7deef8b3dee2eaa98d8ec877dddb460365968e63ffe5c249a421\nY = 1ad1715797b5e47c4be24d7ecb8141f1772344a2f643cc66fbcf3f9d\nDigest = f59946dd73887a1fb945ae3e5b44b574512e36dd7d35925b0bdc3a3f69a88e50dc6ebaaac86092679961a99d7ba5724363c5886e7c2cd566433c5a9d59e2515d\nR = f778faa2dc2cee7de2af0bbc4339239dc240907e59ac034464ce986b\nS = 2ac929588a8dc8785808c9d4366bd7b1a81e0fc5be0c63e62344c251\nInvalid =\n\nCurve = P-224\nX = 0ee33a134feae6ee1488bf10edf7cf7c318a2d709080a24818619b91\nY = d7d39536e42652baf55159847f475ded075385a3c1af5c3dcb17ee6a\nDigest = 00fc4992514c1053eee7facc5199161a2b0f69dad2770326371ba42c2c12ffdb4ff6bd86fc440dc8dc1354dad42ff0c2a055b61137532a62521b0f3508ebe611\nR = 34bd0407f80cb6fc759036e6d4522eb6da94874c92ce0f02d8f5f2ad\nS = 3a2dd970050ff990162e5702b06905d03e3c7bb2771050de6d84eece\nInvalid =\n\nCurve = P-224\nX = 31d3c62a4305c37a15e9102072e287a8e0ac027f9189cb9d87ecbea2\nY = 26449ca391af6a2a9f8daaa036f2c9044b336773ee48bcbd9cad59f0\nDigest = dfafbf96b70ead7e91dbf48b8efd062bf2bc0aac6d3e90a7fdf61aac13a74b304bcd0d0c23c88df269d45bdd31d50f0fccfc0324698af4dbcffef04ca05a119e\nR = dc33e8f7b52f584aa3f091aba10c2a9a23be6835e1551092652e1bbc\nS = ae84a6d19f6bad3f9886930c0a1406016fae813673db1516b31b638c\nInvalid =\n\nCurve = P-224\nX = a6e4470712df583d0c795237ff46c9df5718ba2aa24139a2d99721b4\nY = 9edb403a8c10807e8736af665dbcf6052bd4b43bcdc8b9eb8d4394fd\nDigest = 36cd6716cbb8b7f96df4617143be7b74f42bc94e468e79e6658d00b092e24d6de82f207693427fb439dd13bcf49665cac343ea35a79b5963cb21273094ce28fd\nR = 4e9ba5bc4f4fc4e507c1e5cbd0d688da4237385b16ff06601436d8ab\nS = 4e0450a57d802d0ea7b0fb57eb162267195bc4248a831a0ee8b0380d\nInvalid =\n\nCurve = P-224\nX = 350fa782e1cf7254b18cde30683e54edf2c1b4782525fd081bed5920\nY = a77de5b4139ff63e108b6fbd3a7e6c0", + "9c3d2ea8720860a7db1c1b5c8\nDigest = 0589be3481da7becf046cc9fd84e9a68db8086c730374e8ee8542de45e1e17dbacba6ecbaa99886f4daaaf32be01bae96b1e2a04cd76f699a1a74a3d97b73019\nR = fb7073865646bd92f882f8224503ac1f340cb7a5d6319102c31fb544\nS = aed3ca77d23c78ec76f748e84483c536d447b0f8e186dbd0774b1214\nInvalid =\n\nCurve = P-224\nX = f10652c3c2c30a765564f5e393c6c202d436c81fc7d71b88857bd458\nY = 42979ba5e6c8cd044e262c73e6aa918d8c3e0e08e4bf98ec2d5c6f57\nDigest = 680aaa97b939a5031737a40b9e34e5fb8047b8a6e495c7c90653458072cb423fb098e6ecef15c9d62d4443337f61cde237c66c1683753e65f8bced5298375bf5\nR = 072e0b130267d8e124dda2d0604f4c575ef4007628fa61f66bcd8f07\nS = 6276475fccda3bee2af7816c7b3ec222e408cec36d0409e672af23b5\n\nCurve = P-224\nX = 89cef29515f1d30fdd283625eb59e682023bdf2eb0497288ff700b27\nY = ca0a3f7ee4853ae8454fff6e926c7a85dc7852fb4d01cc3de861c53d\nDigest = bb7394f9b30617419daa71573f5ed9d72732930b6d24141ea2bfb6bcdd67f4fd7a7e6caed8fcac76f50bad0616c291ff875d866b4085f2a0201289a0895a319a\nR = 0ff5dba589454d0ee5bb391a4dc8446b1ffd1cf8d66c9fc0f05a8a89\nS = 987c32258cd12b6b9cdcc5915eea5eb79a30ead442179a126b97fa9e\nInvalid =\n\nCurve = P-224\nX = 086d892340057368ca47a3762735519a4316f005ed8a18a9edce3b4c\nY = e15f4c9a0d240fb94e05192ce4296c532b549af577c26de861dd3452\nDigest = dd84be132129accb134697c8b86a47bc3479eb3db37f128965c5638e210b416580ad52d8f63033b032f1897dbc4732fdddd8202479ee6b32fa12b1ee529242bc\nR = 8d1e13fdf36eeea06a837cb22d17601081df6ed2815ea9da79894a75\nS = c19713a132a562bf2abf8c2d8cae95ef3272824db63edb0776ffc1ce\nInvalid =\n\nCurve = P-224\nX = 6c8aea044d4f0b9699eaf398dbb030db4d6c68e0786068fbc2094974\nY = 426e743008febd8597594e7247ed1cbd40561bbabe1031963591ec6b\nDigest = c5e3ff45af230a7a97d1ab13f95641d1a47953d43be0427c1f30de1b7a431d22972fcdbe748911e05aa0c8047f9211af2234ddad4c30f34abee15d421c9333d6\nR = 3041c36b8456d65f4564597c65aa880fa8bc455f2c35de0fa2298cc1\nS = b87a516d1e2dcd862c6e5fcfc363e9f36bb06ff2c0333e95221e7f36\nInvalid =\n\nCurve = P-224\nX = dc85f6701bc95a60ea52f1c476dcb211e5e3eeba5b35dc3a3786113f\nY = a52b364fb7c4b4c9155e4ee2d8841386b8a96cbeed1e5c9957214a50\nDigest = d4e0bcf58e2083383ef94b28cfb2710a4e898b2c2a0cf30bebb99c3f2dc93403dd165e1a0c3773ed05adedf967fc92f0a158e5086965a29dab3a4aaa5e9f9911\nR = bdc7b4d3266e54a19f030f3055f83460ccf30fe8f5368be013076081\nS = 82a0e3a21a8d5e9cfcc5a673385cc2d4159498b6c1ef5791b2b02f9f\n\nCurve = P-256\nX = 1198b3c409a8b47edb1347e0982d533cb1813e5cb2a92c824b2881b3cd2f3f4a\nY = 0bdbac5fa02e41e775f8d602446d58ecb2209b5a3d79ae69eef399016e992e87\nDigest = 01ed0c41d650479c47057f61433d7e8b24492649\nR = 9206d435f148f88c15b2effbf3c506e41b2c620102022b801e371d0767b54bea\nS = cbc4e1674ae1af69873946ccf6275946e59e0107278749b2d0010795833d80fa\nInvalid =\n\nCurve = P-256\nX = f7c6280aecd6b936513b0ca84e63346333dc41437a15442e605d46bba93ae101\nY = 3c834cecc16167b07866a9478f9f2d882de7ef937da447cd837e60cb5ed65d81\nDigest = f91b4dfddd5eb33a875d2e50d1e949211ac819da\nR = f615af212ab030c4bbf9362d9815a1462312df4beb4358a7ce80d820355420bf\nS = d12ed715ef65cfe6fe6bf348364088a0e7f70927bbafe4c12fc4cb65c0cc51bc\nInvalid =\n\nCurve = P-256\nX = 0e7632dbc4db879e10d1d80f2789d9fa414c1fe77a6c1e56d6667af43e36e610\nY = 6f0dd2a5840e5a6f6ff7e23f656f5c945b7a493fbb0cfd5b9b531bf04435b1ef\nDigest = 3905696f8bad8205fa1445df0e91ade3dbc413e6\nR = 2b0b9ab4a575732a168f28494b66a855fc1a757fb1177864bf3e4f0a000c4a86\nS = 54901ce2f92f55ac112afa0f8b62bc00b44c8c10fe0c863675bfd305d6dc0cd8\nInvalid =\n\nCurve = P-256\nX = 1613f12bae8e98d09b4bba53f5229596a0d417d2c625f41bb15f923b3c1e4b57\nY = 411319fa85227997a4cf3b1756161485124d2cedc38c9c30d82f42dc2647d545\nDigest = 580d31ce22700a20c2db81bcdac37330b491c86f\nR = ed058d476a77be99c1b0fc8502abe545541b4c0ff3eed3f558133ae2f02042b0\nS = c571b4895712a4f64f7220b0694cab767379b09f1824fe7874acd127deb2371e\nInvalid =\n\nCurve = P-256\nX = 88bb041dcb1733a676a7f4ae8d3e407d72d5396547f07db77078485c1d5db077\nY = 72cf2b55e596cd140c58228f1b0a19c34fca26ffac043528a417c5abb6fca9c9\nDigest = 7900a02f768b0718a13525c33adace583de15c50\nR = 87208734deb125dca68f0d33f9d369cf1b79cf5a021391b9c6c1727d2efe663a\nS = b984f722de18f1ce407104342948f03f2b55413a096c4b5fca1e032a2c814a4a\nInvalid =\n\nCurve = P-256\nX = 811eb5180def7fb60d632f8cb2cba831b88cee778aa2a82ec3a5fc3d80ff7fb6\nY = db88d65b0fc35d9ba1f1ced0400434979ae895d371d1441d7c7a441a9fb1709b\nDigest = 17b7451ea903125ccb293ffaa9d1a4ca1141a2c5\nR = c329fa28dac0018276c5af0cd770e60be50bc14e2562d5556991971edc7d4916\nS = 2d111d13837a02fa279fe835a7dc59a521864d92b26649ca4e24b36ae93878e8\nInvalid =\n\nCurve = P-256\nX = 4a6f1e7f7268174d23993b8b58aa60c2a87b18de79b36a750ec86dd6f9e12227\nY = 572df22bd6487a863a51ca544b8c5de2b47f801372a881cb996a97d9a98aa825\nDigest = 54e9a048559f370425e9c8e54a460ec91bcc930a\nR = 4a800e24de65e5c57d4cab4dd1ef7b6c38a2f0aa5cfd3a571a4b552fb1993e69\nS = d9c89fb983640a7e65edf632cacd1de0823b7efbc798fc1f7bbfacdda7398955\nInvalid =\n\nCurve = P-256\nX = f3033d1e548d245b5e45ff1147db8cd44db8a1f2823c3c164125be88f9a982c2\nY = 3c078f6cee2f50e95e8916aa9c4e93de3fdf9b045abac6f707cfcb22d065638e\nDigest = e8d38e4c6a905a814b04c2841d898ed6da023c34\nR = d4255db86a416a5a688de4e238071ef16e5f2a20e31b9490c03dee9ae6164c34\nS = 4e0ac1e1a6725bf7c6bd207439b2d370c5f2dea1ff4decf1650ab84c7769efc0\n\nCurve = P-256\nX = 0ea0a6bb6c70966fad1a2307479c12de2322795bdecb70e4b286bd6200ba9c1a\nY = c40eda3947021348db691ac4086fb6c06b587ce37c155bb0a7d912b93226de81\nDigest = 3b08bf1b67abc03c1cd69b0e24743b5c2d49e506\nR = f5509deff7bfda3f3759800fa4033af6a84466b114ecb48eac37eff48d2ae1b3\nS = 8c4b62dce2082f80caf220cdbb1d02567bbdfab40564b90ef31d86e3e10ce80a\nInvalid =\n\nCurve = P-256\nX = e7a57e0f6ec0fa9c7c34978034cf82f039f8fd62804070ad943573fc8efa5775\nY = 87b2cc85dfff2dae5620fbe3e6256bd728de28fc9dc1b5eb6b5d7bd5d29186ad\nDigest = a8c5dc0344b1442dfdb5f8836251893d6c4ecbe9\nR = 97642038932fdddbe2021ec1af53ae6b9af00ef9c8b9f26aea582892e80e6285\nS = 9cb14918359338041cf795cf6781e4905837fa5ce3b3e50ffafb5f13c73b5bc8\nInvalid =\n\nCurve = P-256\nX = be7a651be0c87278569987cf62d7fa1dd1b3d6e1b868d8f4dfb56135a9960eec\nY = b7a62c588a987760b915edbd7f95506870c60f042471de1d8b2d4cd9d6563391\nDigest = 2f93ee45db133a14c26d418c2ffd3470ae63bf50\nR = aa889fb608b6939f6eeacf2f64c3b2e3a6061f2834058c7e724321720b737a63\nS = 6cd6d0ef2b93a760daa914e11b9b414bd4d72457405f00a62ab63f36d76efb73\nInvalid =\n\nCurve = P-256\nX = 76ddc46d8db8d7ce2ce837f60cdabcee92b7c7817ee41c8f066f1ae65f85c318\nY = bea47191f1c584c87250370ce337a1de1583bcfc20ccc23b7a82e83f19adaa88\nDigest = 2136a5470ff9d45214a0b2c300042efea8ff7266\nR = 84a42efbf7ec04166ad144d19cd98c120aa2e79d483b5eea6fbdfa7f1222e07b\nS = e41531205e691e65668f69f518abc7b60f32c373434872a043b7358462babf83\nInvalid =\n\nCurve = P-256\nX = 2f71b932f770ba9daf7c1dd47444ab6cb8881f71a1c597e719845b15cb84ca35\nY = ab928625b40ec0738d0fc8dbc4df4a1f65d20bc0447b69cfa13bb20b95bb41d4\nDigest = ae6093bb37c1264ca3ead439e4f678721912c8c4\nR = 63fca172bbca6197cd2802a9cb61d74c2b47cf35f6d35203e67ffbaa838be775\nS = e70ec283cd212df6ba3723e26b697501f112d7cf64e4f45185dae76055e09f1e\n\nCurve = P-256\nX = ce775648b928db82ac5edb3b009d32959a73b86c45e96d4b8d5b6e640b7c2790\nY = 52455caf08ee94d86f0984e9ec9268d74823f2102dd97fced59638055f6af18e\nDigest = 60054807acb29e3091a023c42b9885c4945249e1\nR = 2a64b29146588f3153fee1029a0131ac0a8a25ba2ecc494f697c166c7c91fc08\nS = 7b429bc12a72ca3d76c119eea9f4098633cc31c87831e54d5d93afd6e8d20f4f\nInvalid =\n\nCurve = P-256\nX = cd2f29a53f0ce57e0e4a542c3256e65ebbdc30415f4de771d5d706d3aeacc852\nY = dbbf2c129f30d11fe77d7816a24187764eae3fb2ff70c1ec745e876e26f5232f\nDigest = 5f50e35b134942295c16d003742fd6bce5bdab45\nR = 2454c5ee84e4f77b554acd368dd412389db8c78429590a092f24db2da43cb761\nS = 63e870ce2fa4085d4ff1e360f7a5c101a1f8b288abe71cca56887e613ad034b7\n\nCurve = P-256\nX = 843f6d83d777aac75b758d58c670f417c8deea8d339a440bb626114318c34f29\nY = 83e0c70008521c8509044b724420463e3478e3c91874d424be44413d1ce555f3\nDigest = cda2c7ad9abb2a858c4981550f78974c69e41cc31fa33509e3e83dc2\nR = d08e9a5db411019d826b20ac889227ed245503a6d839494db1e8d7995a6b245b\nS = 8d46a204054125d0dc776ab1055302ec4eb0f20b90bca6d205f21d3cefd29097\n\nCurve = P-256\nX = f08b56f73f7a0e098444f6f0a02ad81ce0b914a11cafa15893d1c84704e1c564\nY = bbee9aeb91cdc2d1d1437b4168df73acfd64e8b02962b14c85e67187e1ef80a4\nDigest = 5453c2656550e9b3dc6c40a3f1362a73522396bc35d383dd6451128f\nR = 71b3ec982725a007ac18a5cf60587e1fd1beb57685a1f9df3cddd9df25dcbc18\nS", + " = 407e41217325f92f8a031cfcc4eb64c1a4b17b0a7459c254af754a7ea9eac997\nInvalid =\n\nCurve = P-256\nX = 0b688e761e1ddda2305e002809da65bf5916dfe1356a5b99b61f5576a9b90efa\nY = 90ec958e2e3a676e7bbf8e9394f72742875836125a317b0ae38374953f746a91\nDigest = 7289573d6bb7486e428e086bec9da9d7ff3c5f8bd0db2ec209fed6ae\nR = ef89df3bbf079fb250f7e882c4f85c0023fc3804e862d9ef4d9530a15f1013f0\nS = 4ba985e900e6737b8e07eac638f7b38277ead4faee6d2076a2eee90fd2a6bf0f\nInvalid =\n\nCurve = P-256\nX = 0b64480783e260e1e9caef37b4cc9c650d2d57e2c594b1106314843d8d7ab74e\nY = 29d373d8522deffe40055aef539f53f38937eb799b44f05a8d8c0b381f12907f\nDigest = 497656e780360ec3b4bd1be97570615e4a32467982cd9330bc6aa224\nR = c5c26b0b21eef0f7a0f1cff38d0079d890376759369b01d8d8e959c1c785e203\nS = fecc400bf0deab99d87da168b9d0dd31d2dfa3435b0fe9d38b5fb8efd45195a4\nInvalid =\n\nCurve = P-256\nX = 7f78a8fd880c509940e2b83de67c9ab553ab91489bae75cdc1d5b523b06ab7f5\nY = 7786aee7032c373cdfad7d9ddb6fa09a026f6da30fd477ab014d30a289d542a1\nDigest = 6d88da9e83ae9457e233d7977172c062dfbdd17d365694515251e031\nR = c93ada69db326f76b1362d610cb8bcc6e7ef1dc03d3d11367e153c0e39d5dc86\nS = d0c02c71b14ef7a4af4e23bd207ce98449f5d6e7e5b3ec8cbbca9549e97d379d\n\nCurve = P-256\nX = e58cdc207c56f62e0bb7c0b55b7f7236a6b308f8fc4de3e61cdb3bf20ad2f62c\nY = 6056c0ee827e85ba284838954d0c6cc096df03b4611b1e0f7f9002bac86856d4\nDigest = 3f9a97b8ea807edc88788df8956c296b1daaed8dd12d50c712344091\nR = 2df3906527ad322000285bccdd11dd09130d633cf43534f5802604639eb847e0\nS = adaaad19b7c66836ef0f4afeff8ac5e898cd2523246a74a1a291a3a1ff583322\n\nCurve = P-256\nX = 70b4bba10b7bbc6d4175ada8d485f3685b13916d0c992301f47e45b629c63d0e\nY = 257a93be31b09ff4cd22e3375e30b5a79f3bf3c74c80dde93e5d65e88c07c1c4\nDigest = cc3a0d3a5d4f28dc9144a3cdb276eb92265f1157a8d8192cf628673c\nR = 6e714a737b07a4784d26bde0399d8eee81998a13363785e2e4fb527e6a5c9e4e\nS = 94c0220f0f3fa66ff24f96717f464b66ae3a7b0f228ab6a0b5775038da13768a\nInvalid =\n\nCurve = P-256\nX = 8b11b48d2397355000a5289d816b9892ae64dffc842abec02a2fb2db2bb34310\nY = fc1a42528a0473cfc2c2e184b8bc5055096350fe1549d24b526d6536681026e8\nDigest = f340e491fa935be8945b8caa485d0699c66331e0e17c7407da1b018e\nR = 61a91dd1c80049e70dc4aea84bda0efc6ec9c7b9dd16ecbccf687244c51184ce\nS = e381e7b32bab49578c7e7ce7784ce19263e4a7dab4b614df411d20eaebfc391c\nInvalid =\n\nCurve = P-256\nX = 7bad1b3d8bad4355a44511d2eb50daeae793af99418ada118327359936aa0e1d\nY = e7eff40334b7a5455f6b0d0ecdcdc513702857bb5bbb73c910c86746092bcd7d\nDigest = 9cf84546c046b370c372c167ebba39af6aadd60463626453787bb058\nR = fd961b60b21be32b47abafa77e22197dc99af6825dcca46e0e3b1991a90aa202\nS = a0477f97b94a1c26a3b2d186791d7fc9dfa8130bbae79c28fa11ec93a3aeac0b\nInvalid =\n\nCurve = P-256\nX = 407d92c9b28723602bf09f20f0de002afdf90e22cb709a8d38e3c51e82cba96c\nY = 4530659432e1dd74237768133e1f9808e62d0fbe5d1d979d1571baf645dcb84c\nDigest = 0cf5cd48c93f45472d254196bebea4bddb272a2adff23bab8c3adf99\nR = a7dc65293ee3deb0008ae3e2d7ef9e9a4ebb8bf7b10d165f80ab8bed58d6fdef\nS = 3e8300a3ee603a8d8234fe265c628e705015bf1903eb74c943323050626f701f\nInvalid =\n\nCurve = P-256\nX = 26aea3dd5c53f984dbdaf415c7f26e1e73048658a548eb3b59dd5f721899919a\nY = dff15f57bd9b08644d49cbb214403647195725cd4d4511bc8a48b0770466ae9f\nDigest = 75d6b6b575d0a2c89528b83c94ef864c825b66253ab662b36bb0e716\nR = 726af92afe53e8125b0b9f3659745be401a37ae658b7b1aa88c3cb97e9de22c3\nS = 794484c5837a419efe11a4e4293341a6fa36d21230925a0e5e135887302acca9\nInvalid =\n\nCurve = P-256\nX = e73418677ce044b331a6d60773cbae199221699d31e1bec4b68b9bc0b87e4cd0\nY = 37215db4e3d9161f3351b385a61ddb2fcf1cec469d1659e7574610ed27fe879f\nDigest = dcbb92e3be3951d37e37852d508f78da29c8183c5dbe59d6549f78ed\nR = ac469290a8f61a2a8c6adc7533dd5cfe804e2e7bf101cc74e5f624f301bccd23\nS = 4c328c3bc259316641fff44753743afebe89b8627f904df7245e42adcff2dc76\nInvalid =\n\nCurve = P-256\nX = b0892b19c508b3543a5ae864ba9194084c8f7ae544760759550cc160972e87ff\nY = 9208e9b0c86ad6bc833e53026f233db9a42298cdb35d906326008377520b7d98\nDigest = 90333facb4f5068c1d05d1a478fb46d02f367e271a000474c06a5fec\nR = a62dd0d1518c6b9c60de766b952312a8d8c6eaa36a68196d2a30a46fb17dc067\nS = b9ded660e978129277f74c1d436003d1e6d556dc8eed9d505bbaf4c67cb13d21\nInvalid =\n\nCurve = P-256\nX = 8c5c41cb07d828a6a86be4533aef791d3a70a95cb285aa2956b21feeac2f8c49\nY = 84101581cad7a48b7d0596df7ffed47085d22e8a4af685cddbeeb32ea69ae190\nDigest = 8bb52bd045c985167f673c07b613a3402f435a54c122877bc0c5fe34\nR = 9812449df0a51f7a2a8f78aa9a589ca9644dce285f1e69658daaea759fa5bd7e\nS = beb4c27c748a7944e37afe861576f76b5a749a8ccbbd7dec00838ba250ddfe1a\nInvalid =\n\nCurve = P-256\nX = 788d7e54ab03020e4954f41259052ee5af68361492b180da31fbbe68d868aa95\nY = 982a3ababa6d351649e56da3faeb7160b9de74e22fe93a06ead1bd9a8dffdf7e\nDigest = 9870ae25b0f0403eff1079b94669cf95fb250fb098eeb885ff08f117\nR = 3ddea06bf8aa4a1b0c68674a2c4796def0bfb52236f4efb3332204a41fd8ea89\nS = 871237039431a41aeefcdd08f67848b2b09067e3a1344c8ed9b372d1b1c754a6\nInvalid =\n\nCurve = P-256\nX = 87f8f2b218f49845f6f10eec3877136269f5c1a54736dbdf69f89940cad41555\nY = e15f369036f49842fac7a86c8a2b0557609776814448b8f5e84aa9f4395205e9\nDigest = a82c31412f537135d1c418bd7136fb5fde9426e70c70e7c2fb11f02f30fdeae2\nR = d19ff48b324915576416097d2544f7cbdf8768b1454ad20e0baac50e211f23b0\nS = a3e81e59311cdfff2d4784949f7a2cb50ba6c3a91fa54710568e61aca3e847c6\nInvalid =\n\nCurve = P-256\nX = 5cf02a00d205bdfee2016f7421807fc38ae69e6b7ccd064ee689fc1a94a9f7d2\nY = ec530ce3cc5c9d1af463f264d685afe2b4db4b5828d7e61b748930f3ce622a85\nDigest = 5984eab8854d0a9aa5f0c70f96deeb510e5f9ff8c51befcdc3c41bac53577f22\nR = dc23d130c6117fb5751201455e99f36f59aba1a6a21cf2d0e7481a97451d6693\nS = d6ce7708c18dbf35d4f8aa7240922dc6823f2e7058cbc1484fcad1599db5018c\nInvalid =\n\nCurve = P-256\nX = 2ddfd145767883ffbb0ac003ab4a44346d08fa2570b3120dcce94562422244cb\nY = 5f70c7d11ac2b7a435ccfbbae02c3df1ea6b532cc0e9db74f93fffca7c6f9a64\nDigest = 44b02ad3088076f997220a68ff0b27a58ecfa528b604427097cce5ca956274c5\nR = 9913111cff6f20c5bf453a99cd2c2019a4e749a49724a08774d14e4c113edda8\nS = 9467cd4cd21ecb56b0cab0a9a453b43386845459127a952421f5c6382866c5cc\nInvalid =\n\nCurve = P-256\nX = e424dc61d4bb3cb7ef4344a7f8957a0c5134e16f7a67c074f82e6e12f49abf3c\nY = 970eed7aa2bc48651545949de1dddaf0127e5965ac85d1243d6f60e7dfaee927\nDigest = d1b8ef21eb4182ee270638061063a3f3c16c114e33937f69fb232cc833965a94\nR = bf96b99aa49c705c910be33142017c642ff540c76349b9dab72f981fd9347f4f\nS = 17c55095819089c2e03b9cd415abdf12444e323075d98f31920b9e0f57ec871c\n\nCurve = P-256\nX = e0fc6a6f50e1c57475673ee54e3a57f9a49f3328e743bf52f335e3eeaa3d2864\nY = 7f59d689c91e463607d9194d99faf316e25432870816dde63f5d4b373f12f22a\nDigest = b9336a8d1f3e8ede001d19f41320bc7672d772a3d2cb0e435fff3c27d6804a2c\nR = 1d75830cd36f4c9aa181b2c4221e87f176b7f05b7c87824e82e396c88315c407\nS = cb2acb01dac96efc53a32d4a0d85d0c2e48955214783ecf50a4f0414a319c05a\n\nCurve = P-256\nX = a849bef575cac3c6920fbce675c3b787136209f855de19ffe2e8d29b31a5ad86\nY = bf5fe4f7858f9b805bd8dcc05ad5e7fb889de2f822f3d8b41694e6c55c16b471\nDigest = 640c13e290147a48c83e0ea75a0f92723cda125ee21a747e34c8d1b36f16cf2d\nR = 25acc3aa9d9e84c7abf08f73fa4195acc506491d6fc37cb9074528a7db87b9d6\nS = 9b21d5b5259ed3f2ef07dfec6cc90d3a37855d1ce122a85ba6a333f307d31537\nInvalid =\n\nCurve = P-256\nX = 3dfb6f40f2471b29b77fdccba72d37c21bba019efa40c1c8f91ec405d7dcc5df\nY = f22f953f1e395a52ead7f3ae3fc47451b438117b1e04d613bc8555b7d6e6d1bb\nDigest = 8a3e7ad7b9b1b0cdc48e58d1e651fe6d710fef1420addeb61582bdd982d2b44c\nR = 548886278e5ec26bed811dbb72db1e154b6f17be70deb1b210107decb1ec2a5a\nS = e93bfebd2f14f3d827ca32b464be6e69187f5edbd52def4f96599c37d58eee75\nInvalid =\n\nCurve = P-256\nX = 69b7667056e1e11d6caf6e45643f8b21e7a4bebda463c7fdbc13bc98efbd0214\nY = d3f9b12eb46c7c6fda0da3fc85bc1fd831557f9abc902a3be3cb3e8be7d1aa2f\nDigest = d80e9933e86769731ec16ff31e6821531bcf07fcbad9e2ac16ec9e6cb343a870\nR = 288f7a1cd391842cce21f00e6f15471c04dc182fe4b14d92dc18910879799790\nS = 247b3c4e89a3bcadfea73c7bfd361def43715fa382b8c3edf4ae15d6e55e9979\nInvalid =\n\nCurve = P-256\nX = bf02cbcf6d8cc26e91766d8af0b164fc5968535e84c158eb3bc4e2d79c3cc682\nY = 069ba6cb06b49d60812066afa16ecf7b51352f2c03bd93ec220822b1f3dfba03\nDigest = 7c1048884558961c7e178b3a9b22583fca0d17f355a9887e2f96d363d2a776a3\nR = f5acb06c59c2b4927fb852faa07faf4b1852bbb5d06840935e849c4d293d1bad\nS = 049dab79c89cc02f1484c437f523e080a75f134917fda752f2d5ca397addfe5d\nInvalid =\n\nCurve =", + " P-256\nX = 224a4d65b958f6d6afb2904863efd2a734b31798884801fcab5a590f4d6da9de\nY = 178d51fddada62806f097aa615d33b8f2404e6b1479f5fd4859d595734d6d2b9\nDigest = 4c8d1afb724ad0c2ec458d866ac1dbb4497e273bbf05f88153102987e376fa75\nR = 87b93ee2fecfda54deb8dff8e426f3c72c8864991f8ec2b3205bb3b416de93d2\nS = 4044a24df85be0cc76f21a4430b75b8e77b932a87f51e4eccbc45c263ebf8f66\nInvalid =\n\nCurve = P-256\nX = 43691c7795a57ead8c5c68536fe934538d46f12889680a9cb6d055a066228369\nY = f8790110b3c3b281aa1eae037d4f1234aff587d903d93ba3af225c27ddc9ccac\nDigest = 8581034ec7d7a6b163d71820923f616b362748f2846042c9896d8e4bf7577960\nR = 8acd62e8c262fa50dd9840480969f4ef70f218ebf8ef9584f199031132c6b1ce\nS = cfca7ed3d4347fb2a29e526b43c348ae1ce6c60d44f3191b6d8ea3a2d9c92154\nInvalid =\n\nCurve = P-256\nX = 9157dbfcf8cf385f5bb1568ad5c6e2a8652ba6dfc63bc1753edf5268cb7eb596\nY = 972570f4313d47fc96f7c02d5594d77d46f91e949808825b3d31f029e8296405\nDigest = e5b30e0041a33281210644938d9aaa15ef2c1247b4178f7ca1ee935ce23daabc\nR = dfaea6f297fa320b707866125c2a7d5d515b51a503bee817de9faa343cc48eeb\nS = 8f780ad713f9c3e5a4f7fa4c519833dfefc6a7432389b1e4af463961f09764f2\nInvalid =\n\nCurve = P-256\nX = 072b10c081a4c1713a294f248aef850e297991aca47fa96a7470abe3b8acfdda\nY = 9581145cca04a0fb94cedce752c8f0370861916d2a94e7c647c5373ce6a4c8f5\nDigest = edd72dc0aa91649e09e2489c37ec27efab3b61953762c6b4532a9b1cd08a500d\nR = 09f5483eccec80f9d104815a1be9cc1a8e5b12b6eb482a65c6907b7480cf4f19\nS = a4f90e560c5e4eb8696cb276e5165b6a9d486345dedfb094a76e8442d026378d\nInvalid =\n\nCurve = P-256\nX = 09308ea5bfad6e5adf408634b3d5ce9240d35442f7fe116452aaec0d25be8c24\nY = f40c93e023ef494b1c3079b2d10ef67f3170740495ce2cc57f8ee4b0618b8ee5\nDigest = 0d06ba42d256062e16b319a0f3099109518a765f26bac3b9f56930d965617726\nR = 5cc8aa7c35743ec0c23dde88dabd5e4fcd0192d2116f6926fef788cddb754e73\nS = 9c9c045ebaa1b828c32f82ace0d18daebf5e156eb7cbfdc1eff4399a8a900ae7\nInvalid =\n\nCurve = P-256\nX = 2d98ea01f754d34bbc3003df5050200abf445ec728556d7ed7d5c54c55552b6d\nY = 9b52672742d637a32add056dfd6d8792f2a33c2e69dafabea09b960bc61e230a\nDigest = 41007876926a20f821d72d9c6f2c9dae6c03954123ea6e6939d7e6e669438891\nR = 06108e525f845d0155bf60193222b3219c98e3d49424c2fb2a0987f825c17959\nS = 62b5cdd591e5b507e560167ba8f6f7cda74673eb315680cb89ccbc4eec477dce\n\nCurve = P-256\nX = 40ded13dbbe72c629c38f07f7f95cf75a50e2a524897604c84fafde5e4cafb9f\nY = a17202e92d7d6a37c438779349fd79567d75a40ef22b7d09ca21ccf4aec9a66c\nDigest = 5aa8e8a6f0622b841416e1a70d79a54641d2c699a075b6960fe5dcf96301da8ca6f15b0948d4ededac30a42e00d3b310\nR = be34730c31730b4e412e6c52c23edbd36583ace2102b39afa11d24b6848cb77f\nS = 03655202d5fd8c9e3ae971b6f080640c406112fd95e7015874e9b6ee77752b10\nInvalid =\n\nCurve = P-256\nX = 1f80e19ffeb51dd74f1c397ac3dfd3415ab16ebd0847ed119e6c3b15a1a884b8\nY = 9b395787371dbfb55d1347d7bed1c261d2908121fb78de1d1bf2d00666a62aed\nDigest = 244656186c11c2e67be88099d55e60f4b68e61fba0b214aac3399dc559cfccc02f9884e85623426dbdc3243f2b5374f7\nR = 249ca2c3eb6e04ac57334c2f75dc5e658bbb485bf187100774f5099dd13ef707\nS = 97363a05202b602d13166346694e38135bbce025be94950e9233f4c8013bf5bf\nInvalid =\n\nCurve = P-256\nX = ce4dcfa7384c83443ace0fb82c4ac1adfa100a9b2c7bf09f093f8b6d084e50c2\nY = d98ae7b91abee648d0bfde192703741ac21daad7262af418b50e406d825eb0d6\nDigest = adaeadda3f0e941fba1d3e206a84e6d7530d800e0f215b3ddd82022f27c5be44fed27bc73084c6f7ca55555532be2e3b\nR = 597e1e04d93a6b444ccc447a48651f17657ff43fb65fe94461d2bf816b01af40\nS = 359fe3817963548e676d6da34c2d0866aa42499237b682002889eaf8893814d2\n\nCurve = P-256\nX = 1b677f535ac69d1acd4592c0d12fac13c9131e5a6f8ab4f9d0afdcb3a3f327e0\nY = 5dca2c73ec89e58ef8267cba2bb5eb0f551f412f9dc087c1a6944f0ce475277a\nDigest = e34a541f87ff0eaa0c640f555caec6bf11a1320c74c47a8ff172c4e2ec902e48d499732b12a86189e750bbf4c0424c72\nR = df0b0cd76d2555d4c38b3d70bfdf964884d0beeb9f74385f0893e87d20c9642d\nS = 128299aabf1f5496112be1fe04365f5f8215b08a040abdfeca4626f4d15c005b\nInvalid =\n\nCurve = P-256\nX = 7ffc2853f3e17887dda13b0eb43f183ce50a5ac0f8bba75fb1921172484f9b94\nY = 4cc523d14192f80bd5b27d30b3b41e064da87bfbae15572dd382b9a176c123a2\nDigest = 0689927a38486cccf28fe9454e08e0d74843424b89be4cdee8e48f39a69addec730184da72f914cea67231c765ee2574\nR = 3156176d52eb26f9391229de4251993a41b8172f78970bb70e32a245be4bb653\nS = 62827a29e12d2f29b00fb2d02dd5f2d5412e17a4455f4431a5c996881fdfc0ee\nInvalid =\n\nCurve = P-256\nX = 5569f76dc94243cde819fb6fc85144ec67e2b5d49539f62e24d406d1b68f0058\nY = 1208c38dbe25870deab53c486f793a1e250c9d1b8e7c147ea68b71196c440730\nDigest = 97f8f8cea435282ac746730ac744bf97d85d4e249c0b1d9c7b83c7e59aed172ffc3724d7e6fab7d6ab55ffb3a39c0775\nR = 706f2ba4025e7c06b66d6369a3f93b2fec46c51eceff42a158f7431919506cfb\nS = b4e75ac34a96393237fc4337789e37168d79382705b248051c9c72bcbac5f516\nInvalid =\n\nCurve = P-256\nX = e4b470c65b2c04db060d7105ec6911589863d3c7f7ce48726ba3f369ea3467e8\nY = 44c38d3ae098de05f5915a5868c17fee296a6e150beb1f000df5f3bec8fc4532\nDigest = 5b937a2af46dbf18b4a6fb042ea353a6878e0d4beac016002b3d91a42bcba52856c07a3f35c08dfecb4f03e1c0b9948e\nR = c9c347ee5717e4c759ddaf09e86f4e1db2c8658593177cfda4e6514b5e3ecb87\nS = baae01e9e44a7b04d69c8eaaed77c9e3a36ce8962f95cc50a0db146b4e49eb40\nInvalid =\n\nCurve = P-256\nX = 96050c5fa2ddd1b2e5451d89ee74a0b7b54347364ddc0231715a6ef1146fe8dc\nY = e0888a9e78aeea87f6e1e9002b2651169f36c4ee53013cfc8c9912b7fd504858\nDigest = b123e07744f05ad523790ea5bfa3f848869a3bfdbf936a496c8606b577ed8427eb7ee888e0fe18d4e3cfac73baad883f\nR = 2353d6cd3c21b8ea7dbc1cd940519812dbe365a3b15cd6aebba9d11cf269867a\nS = 85f560273cd9e82e6801e4cb1c8cd29cdac34a020da211d77453756b604b8fa7\n\nCurve = P-256\nX = 0c07bb79f44012299fbfd5a0f31397aaf7d757f8a38437407c1b09271c6551a0\nY = 84fe7846d5d403dc92c0091fbd39f3c5cbca3f94c10b5cae44e2e96562131b13\nDigest = fb8d12652de59e63ef5297641dfbce084808de146720e9069c2ef814bcd80b6187f7422a6cd9c706f8d64ccf80e8bc54\nR = 49e9425f82d0a8c503009cead24e12adc9d48a08594094ca4f6d13ad1e3c571d\nS = 1f1b70aaa30a8ff639aa0935944e9b88326a213ab8fce5194c1a9dec070eb433\nInvalid =\n\nCurve = P-256\nX = 71db1de1a1f38f356c91feaff5cfe395d1a5b9d23cf6aa19f38ae0bcc90a486d\nY = ecdd6ffb174a50f1cc792985c2f9608c399c98b8a64a69d2b5b7cdd9241f67e2\nDigest = 2d8c6585a3b6319a556e27b53d434f455f73e771c8fc6a115f5c92a8e9a81ce2b4336a5c3edf98910689d11f4c93632a\nR = b0443b33a6f249470d2f943675009d21b9ccbead1525ae57815df86bb20470bf\nS = 316dbee27d998e09128539c269e297ac8f34b9ef8249a0619168c3495c5c1198\nInvalid =\n\nCurve = P-256\nX = 8219b225aa15472262c648cac8de9aad4173d17a231ba24352a5a1c4eea70fad\nY = 0fee2b08ad39fbf0db0016ef2896ca99adc07efc8c415f640f3720498be26037\nDigest = a4cc3b23f54d9d48ba6b0ad3da3b2e3a0806f41348bd7844e9c9b8648753bdeef8a039e1fa4f5172c89148d65b14056f\nR = 134fb689101aaad3954de2819d9fbd12072fe2bc36f496bbf0d13fa72114ab96\nS = e65c232bd915b59e087e7fd5ec90bf636cfa80526345c79a0adfd75003045d6f\nInvalid =\n\nCurve = P-256\nX = c934195de33b60cf00461fc3c45dad068e9f5f7af5c7fa78591e95aeb04e2617\nY = b588dd5f9965fdaa523b475c2812c251bc6973e2df21d9beaace976abf5728cb\nDigest = b962b63a7743ad77f9072f2f08d277f6dda8cc3420ddd37d873746008895902bcce218fbfed1a8cb28406978dd8e5134\nR = 71f302440eb4ed2a939b69e33e905e6fdc545c743458d38f7e1a1d456e35f389\nS = 54eaa0eb9cd7503b19a9658f0a04955d9f0ab20ebc8a0877e33c89ee88ad068f\nInvalid =\n\nCurve = P-256\nX = 9e1adcd48e2e3f0e4c213501808228e587c40558f52bb54ddbb6102d4048ea92\nY = 34eff98704790938e7e0bdf87ae39807a6b77dfdc9ecdfe6dd0f241abae1aeb2\nDigest = 21b883fae159867731b123a2606e9b3320fb53a00e4a5dfe3bc3429dd53b8068197be3c7288c1e0bf28a4fc7b13bd70f\nR = ce4f0d7480522c8dd1b02dd0eb382f22406642f038c1ede9411883d72b3e7ed0\nS = 8546e1ee3b77f9927cdaccbc2f1cf19d6b5576b0f738bb1b86a0c66b39ca56fb\nInvalid =\n\nCurve = P-256\nX = 93edbecb0b019c2cc03060f54cb4904b920fdb34eb83badd752be9443036ae13\nY = b494e9295e080a9080fe7e73249b3a5904aa84e1c028121eecd3e2cf1a55f598\nDigest = fcc17b88077570c053650e1de42ae6bb1522900b38996decc87704aab6a87ab01d52f83f6442875f378a262c22d23ab2\nR = eec2986d47b71995892b0915d3d5becc4dcb2ab55206d772e0189541b2184ddf\nS = 8a6c1edeb6452627ad27c8319599c54ac44cdd831ea66f13f49d90affe6ad45b\n\nCurve = P-256\nX = 3205bae876f9bd50b0713959e72457165e826cbbe3895d67320909daa48b0ebc\nY = d1592562273e5e0f57bbfb92cedd9af7f133255684ee050af9b6f02019bbcafa\nDigest = 299a6070d32a5557010753d7559dbd8d2bde8a8feae5417616ceb5b167997fd2fac0c2bd44264106d3a9720d5e805a04\nR = 0124f3f1c61ec458561a4eaa6c155", + "bd29e59703d14556324924683db3a4cf43b\nS = 688a5c5fc0c7ba92210c50cce5b512a468a880e05acc21ca56571d89f45f603a\nInvalid =\n\nCurve = P-256\nX = 484e31e69ef70bb8527853c22c6b6b4cd2a51311dde66c7b63f097dbb6ab27bf\nY = e1ff8177f4061d4fbbacbbc70519f0fc8c8b6053d72af0fe4f048d615004f74e\nDigest = f1e9cda2e096ece9a1fc57e55eeeb56b1c635380c0f9a1800a4a1a5f105d1fc0c60e776234daaa8a6f7c0f5286bb420b3f607e7cc0a7d840ad5dcbab26c797b0\nR = 91a303d8fe3ab4176070f6406267f6b79bfe5eb5f62ae6aeb374d90667858518\nS = e152119cefa26826ea07ec40a428869132d70812c5578c5a260e48d6800e046a\nInvalid =\n\nCurve = P-256\nX = 8b75fc0129c9a78f8395c63ae9694b05cd6950665cf5da7d66118de451422624\nY = b394171981d4896d6e1b4ef2336d9befe7d27e1eb87f1c14b8ddda622af379dc\nDigest = 0527199fadea30f9e5e66166a3ebcdf6aedf906984535f48165e591eff36f1c0de6b0fa69aefb6399e8a213cc2ce53268fbe18c3471b7708bc27c426aaa769a4\nR = 17e298e67ad2af76f6892fdcead00a88256573868f79dc74431b55103058f0b0\nS = 881328cd91e43d30133f6e471e0b9b04353b17893fb7614fd7333d812a3df6b4\nInvalid =\n\nCurve = P-256\nX = 76e51086e078b2b116fd1e9c6fa3d53f675ae40252fb9f0cc62817bd9ce8831d\nY = ca7e609a0b1d14b7c9249b53da0b2050450e2a25cb6c8f81c5311974a7efb576\nDigest = c926a5026d8f83ffa2092caf863f2d8a886af391462969b13a11d3c6c5fa66bb4281bc6e60a1e99a2e1ae95d689a66282096a0f27aacc048f32d39297649a014\nR = 23b653faaa7d4552388771931803ce939dd5ee62d3fa72b019be1b2272c85592\nS = a03c6f5c54a10861d6b8922821708e9306fd6d5d10d566845a106539cbf4fadd\nInvalid =\n\nCurve = P-256\nX = bc7c8e09bd093468f706740a4130c544374fdc924a535ef02e9d3be6c6d3bbfa\nY = af3f813ae6646f5b6dbfb0f261fd42537705c800bb1647386343428a9f2e10fc\nDigest = 4d74631eb67fd1a6fa93ecb6e6112b6699e78c1d4c24ae81d0d5842efe5d93c2fd7a7863f8d45d1b2fafecbe41b7dc19c4b2bc208e014ffdc216e7eda0392a70\nR = 6bd7ce95af25abfbf14aef4b17392f1da877ab562eca38d785fe39682e9c9324\nS = 6688bea20c87bab34d420642da9bdd4c69456bdec50835887367bb4fb7cd8650\nInvalid =\n\nCurve = P-256\nX = 9cb0cf69303dafc761d4e4687b4ecf039e6d34ab964af80810d8d558a4a8d6f7\nY = 2d51233a1788920a86ee08a1962c79efa317fb7879e297dad2146db995fa1c78\nDigest = 0250f93e6932887df519921f9a8dcff110be0768dc351ef73a940a579fae2d20061759e892e289c3e4ba5f7fe17d6ebb15c5931d48db55ebc81549f6637292fe\nR = 4b9f91e4285287261a1d1c923cf619cd52c175cfe7f1be60a5258c610348ba3d\nS = 28c45f901d71c41b298638ec0d6a85d7fcb0c33bbfec5a9c810846b639289a84\n\nCurve = P-256\nX = e31096c2d512fbf84f81e9bdb16f33121702897605b43a3db546f8fb695b5f6f\nY = 6fbec6a04a8c59d61c900a851d8bf8522187d3ec2637b10fa8f377689e086bba\nDigest = f91b09107d10904d3968ec29f85e456ac4e828f32e8da3db6a13f5566bfa625e2ad03f8dad5425a073c0d61d25de63dcafa9f4fcd206f29e9cb6b0fecd74aa57\nR = 1b244c21c08c0c0a10477fb7a21382d405b95c755088292859ca0e71bab68361\nS = 852f4cbfd346e90f404e1dd5c4b2c1debca3ea1abefe8400685d703aea6c5c7f\nInvalid =\n\nCurve = P-256\nX = 633c2ee5630b62c9ce839efd4d485a6d35e8b9430d264ffe501d28dbace79123\nY = 4b668a1a6d1a25b089f75c2bd8d8c6a9a14fe7b729f45a82565da2e866e2c490\nDigest = 575c64df58c8dc517ce65b388fa3ed69470163afecbabc3fa94b497ff7f3fe36ff12fabe2b84cebbf667744195091e4e2335a71d36414e0af0d0260fc8e8ea44\nR = bf2111c93ec055a7eda90c106fce494fd866045634fd2aa28d6e018f9106994e\nS = 86b0341208a0aa55edecfd272f49cb34408ce54b7febc1d0a1c2ce77ab6988f8\nInvalid =\n\nCurve = P-256\nX = f78dce40d1cb8c4af2749bf22c6f8a9a470b1e41112796215dd017e57df1b38a\nY = 61b29b0bc03dff7fa00613b4de1e2317cfbf2badd50dee3376c032a887c5b865\nDigest = 4c097f2f5b2489c94258b34d529675bb5d77d4be083b51b01188dd42b4b5473982728763ee6fbad479375c5eacb5edaaec0b6583a10b19aad81ec88dde2d0e7f\nR = 4a96169a5dea36a2594011537ee0dc19e8f9f74e82c07434079447155a830152\nS = a204eaa4e97d7553a1521d9f6baadc0b6d6183ba0f385d8593d6ca83607c4d82\nInvalid =\n\nCurve = P-256\nX = 3fcc3b3e1b103fe435ac214c756bdaad309389e1c803e6d84bbbc27039fcf900\nY = 7f09edd1ec87a6d36dc81c1528d52a62776e666c274415a9f441d6a8df6b9237\nDigest = 1a3dd21cb6ac1fa7fc196319cf534b7608afb93805420fcb5250dff453564a5b22e22971a3ce6dd222405fea018cd0508d86c561eca15e1ac7d79c14e916b86a\nR = 1cac13f277354456ae67ab09b09e07eb1af2a2bf45108da70f5c8c6a4cbcd538\nS = 5d83752e540525602ba7e6fee4d4263f3eda59e67df20aac79ca67e8899fed0d\nInvalid =\n\nCurve = P-256\nX = 5ec702d43a67ada86efbfc136cf16d96078906954a3f1f9e440674cd907e4676\nY = 05a62044fed8470dd4fca38d89d583ce36d50d28b66ab0b51922b21da92c56d9\nDigest = c5c016f6c9b525987dd835131def77cc72d8360d364eeccdd7af8b95712b6cd487c0b846201f3b64466fd140833514ae8d765da395fbd9d3c03ca410effa9a69\nR = 75f3037298f1457dba55743999976a1c2636b2b8ab2ed3df4736a6d2934acc83\nS = 19d43ad168dda1bb8ac423f8f08876515234b3d841e57faef1b5ab27359b27ef\nInvalid =\n\nCurve = P-256\nX = f63afe99e1b5fc652782f86b59926af22e6072be93390fe41f541204f9c935d1\nY = f6e19ce5935e336183c21becf66596b8f559d2d02ee282aa87a7d6f936f7260c\nDigest = 9eb2f9fa96a1f3ffcef9600522730e86d26d328ec0c1bf2fbfe55a38754610341fda1b894fdcf10c9bc4f48819010fdcf0d24f27ff539e40c6855cafbd306386\nR = cef4831e4515c77ca062282614b54a11b7dc4057e6997685c2fbfa95b392bf72\nS = f20dc01bf38e1344ba675a22239d9893b3a3e33d9a403329a3d21650e9125b75\n\nCurve = P-256\nX = 6d11b09d2767cf8d275faee746c203486259f66dd2bfa3a65c39371a66b23385\nY = 4eb05c73e05261e979182833f20311e5366f72f4b949665ff294f959375534c6\nDigest = 0e71b28b0a1eac7aa881c09daec616c93d9a9286b5f5fdf2642d211021b125fa884b2595b73c7c3e649e61cd7157ef6660076a3b87ddf830db46533f3aa30afa\nR = 15a697cdb614e11c0810e1e764cd501fcabc70874c957587bc4883d9438e177f\nS = 7bf6244f92bc768063cecb5336c8eaacd23db930b28703560f241c7d93950dfd\nInvalid =\n\nCurve = P-256\nX = f3899caba038efb534c4cea0bd276814ffd80194473c903b81af11c8c05cb6e6\nY = 6ea6b17402fcf2e8e737d11ffc7c2ed3b2d0bc3b8f271a381f4294cff62682c3\nDigest = 104ace16689d785df09a81c5cf47a496db30fbd696aa4df080219487575a23641436e70329dd1c13290582c0d03aae200e51189d43666c86f38a5203c16cd7e4\nR = 57b99380452e1d37b133c49b9ba493dee8630940477ca3351a43d90b99871e6a\nS = df599c3a37105af3ecc159b3b685ccb3e151b7d5cf2d97147974ae71f466b615\nInvalid =\n\nCurve = P-256\nX = 1fd6f4b98d0755291e7a230e9f81ecf909e6350aadb08e42a3262ff19200fbd2\nY = 5578fef79bc477acfb8ed0dc10c4f5809c14dc5492405b3792a7940650b305d7\nDigest = 761a54f3718985b6d7bcfdd57d6c4823f854831bd29305fcb07e34e3f825d451fca28a62ce9582e3957d89ea7c1bc1afe3aa58fd2fa18566974600fc394cf2a8\nR = 97a99e96e407b3ada2c2dcf9ceeeb984d9a4d0aa66ddf0a74ca23cabfb1566cc\nS = 0ecac315dc199cfea3c15348c130924a1f787019fe4cd3ae47ca8b111268754a\nInvalid =\n\nCurve = P-256\nX = 2dcbd8790cee552e9f18f2b3149a2252dcd58b99ca7dc9680b92c8c43aa33874\nY = 5dbc8bb8813c8e019d80e19acdb0792f537980fecde93db621aaf1f6d0e6ee34\nDigest = 45b082e804443b53a82229cdf13e4c5f8f31fe93170cc8a23f63eef506cb7748388e1a971a2f81e3daa324cf2bb69118f7418f40df66a24f50c34a55e1416c3a\nR = 2bdbd8b0d759595662cc10b10236136ef6ce429641f68cf6480f472fcc77bc9f\nS = 7e7df0c8b86f7db06caf1610166f7b9c4c75447f991d5aaf4dea720c25985c8c\n\nCurve = P-384\nX = 6881154cfe3f09affbee04cd387b27b7854326faf8906c4b9c9e6ac2c632e0d59717b3f33f6d747d7b7cbb4e4dc01fb8\nY = ba295ae0966f06ad9d84b3bb4da7f99b56044c99f88d71082cfea6964ea3c63bb79806a6a41fcc314b55b3f64f82b68a\nDigest = 8a6429d55885146f7aab582a1aa9360fa9591b0a\nR = 2112385a75d4edda89ae2bc3c74524dc792544a3a52fdb588da3f0feaee6a11623db275e2ab8abdd998cc42a29c60856\nS = 8d308a3987b81c595f8cec19898b1a42da8eda97496af280033b0f915283f171fed7e2a221fa9c78927962189333f437\nInvalid =\n\nCurve = P-384\nX = 2f2f43f244ae027c3d2ec5c900393f80a8ad0e9b9a12a047195d29a39f2b7026b071688dd9a6764379d02a5ed8035ec1\nY = e43d45851bc76c37d34dbed996a65ffcfbbaf0e2cbfbc9f62d2116bdf3b330bbef5acdbcd0aa6d949f771daa17cda1e3\nDigest = 5f41322db1a276042ae807f0f0d6f1e04cb5cd26\nR = c011c52e9cb02048957a233704ff9a2c1d4c56e08ebb083aa8ba351f041a23a7d0da19088ac6c60ea2ca117531c7cf35\nS = a66ca9bf06c35d129a8253a0f793acf681e482d9994868b275a230b215286e03a66a0de77c7a53174375137fd4688556\nInvalid =\n\nCurve = P-384\nX = 9a5e1932d318bfa7986f0dac4489c6f55775427bb60fb24bac7646b9994bbc3a9b5cd15e818cc4e832afc1c3fca9abae\nY = 64c89e7c3399c136b2718ab675944207157f0bf23d9e2a807ae7ac3bef81da7ec3c56c2d2c08afc53301af2a3cc71861\nDigest = d36ef9ee70a3b61ba31cdfcd0cac6e49331a407f\nR = 4cf6c63fea6c80efc105cd99afe2b53da05ae16566ddb20b9d40a076575ffac419b6807fa336fc6e7c7416c59775ef09\nS = aec2d96054b4b23c49faaf9903ccf63bc96281fb7c1b9d14daa54bba51bb2b2f4d3a901f3b0b9cb2b62976459219350c\nInvalid =\n\nCurve = P-384\nX = b3aeff27b65540c6da10a88008404b1d49239c87fbf47932518fb87a9bb132403d", + "1f310f531d086340bb4a68c3e64b9b\nY = 567e75f442fcd81017b8adc4cce634f5ffa3cd497d38221d34dc1f43aef99133131ff1b197f7b9f37beecae5c438849a\nDigest = dd0f9c326fb50593fd0a0df31abeeb00a22eb956\nR = 3b94a2514eb915b71e18c867ad7f508a35375c5bcd4b797b86054798569870b2477e2ac14406628017d829400efc63b2\nS = 179a10441a0beea3b375248e697e0d19e24bb68184c373fe4302839b97dd7353a5a25929c2733796b0c0d8211bd67c51\nInvalid =\n\nCurve = P-384\nX = 0874a2e0b8ff448f0e54321e27f4f1e64d064cdeb7d26f458c32e930120f4e57dc85c2693f977eed4a8ecc8db981b4d9\nY = 1f69446df4f4c6f5de19003f45f891d0ebcd2fffdb5c81c040e8d6994c43c7feedb98a4a31edfb35e89a30013c3b9267\nDigest = a871caf9fff9856031a79a55b96753c1a34ccb73\nR = 8d9d3e3d0b2b2871ea2f03f27ba8699f214be8d875c0d770b0fff1c4ce341f0c834ac11f9ec12bfdb8320b1724c8c220\nS = 62150dfba8e65c0c7be7ef81c87241d2c37a83c27eb31ccc2b3c3957670a744c81be6d741340b5189cc0c547df81b0d2\n\nCurve = P-384\nX = b4b92211edbd41c5468d2ba70810bc37b5e7c954c7bd0db80c4fa89ccba10bf07cdab953828a068bc0104d28e4040c14\nY = 93ed318efce3dff98fc782b788d78658ea5ecde4f716e2d5d0ec2d87a2e761daa1f1658cfb857762caa567baaccf9924\nDigest = 765343d50541bc2c0e20193648048016a95e7588\nR = aa3978eabd196ddf9cab2815cc9cbab0b61cd639deaf70e093a10a58ddf9f410ee1ab965ff8fbb98efbe812421a613d3\nS = 02761a2947e1855806b8a25b9ebb0762be9f5517461a371e5783f34b184f32c4ea684b362119b1a2d8a3ff439f10291f\n\nCurve = P-384\nX = 63b4cc14f9efd3b8f29e65806591d1e9c54f34a3f5231339bcdbfa4109c42d946a59cdd7bbd2591fd1b2383a0819772f\nY = 55ab3d208109da6ef039c23cddd52a5af619266d8fe066dcabb1af885ad5501401a78c44ed3b5fff2892fdcb2a3ac8b2\nDigest = 4535ef8d7396b4f2af65660ebbb56f356cacefd9\nR = a3f9b840fd7201356f35b5dde39027410aad26ac61919c14fe7b0535bb74e7218cb3312bfa60aac63f14166f32ceff26\nS = 1b1bcbcb0237fad4e406c8d4e3e39b55642d8535afa9ccbc9c601cb4e01891df79f1bc792687cb3a5ee7703565c4a13b\nInvalid =\n\nCurve = P-384\nX = f82f82f8f7454ce7a94a040ec0bbb52d49e3b9f8ddd095704973c760ee6067a5c28369656f22d70d8bb1cd70ef9bfea0\nY = 0e36e256d02870ee5646a17aac4b280c9d1d2e1d4803eb3cb32e7f754cc889522120efd7c4d8a82e509a4d8f266d3ce4\nDigest = 26302c41e6da59e2df2e26c12382738880be94cc\nR = 27a2332f3c59464f5dfe7bb1201a3936248d375bde603724c048eb8f7c0c2be3ed4b56c14b51d7d68bd2554526b36d9e\nS = e1f90367b0cc530c545f95163d9ffb1208c943685d5ae221052b83ee40953397be581e5979c9855b20246e9d26d57acc\nInvalid =\n\nCurve = P-384\nX = 7d40b51127cb1642dd8538d4124138a2f49c41b4d12f702c1b0cec8deba50c3712e01c2e1e693e00438af0e86025da33\nY = e734b5939b673c45dd32baf20d234f01b7124b391d14beea231e9c604e813fc83b3a77b0cb1f2ce4873a69b0165e369d\nDigest = 0b30b209147432207a72177997d28d6f1d03330f\nR = abf16821b6657e0005071f78c679cbbb130bee6e7ca63526eef0f747fb721feefe6258dae1aa02064a700e963bd9dedf\nS = 3f7e61c34a30cc5ff7a8be375fcc9c38a76dbc0c30a4356843421ca37a7bcf24edcd41d8235903bb522fb6e5a8033885\nInvalid =\n\nCurve = P-384\nX = a5b59d59599c105e39f61354da99c7c9135c749cf996cc2252eb83b008299cdafbcb44227d2d2c4a5ffa44823922893b\nY = 0399fb0edcbfd0b76b524f22b7b87ddbb4fa02f510661615312a4492eb3f2001e0fc0e479f77c33a88f9a7e20757373c\nDigest = 44aa3083d111bbce7feb412af74a782cd320becd\nR = a4c9cac2409a9bfea1ebe28fec4e19545f08cd18fdd31048f52a3f2d32b2ed859dcae4dc12fb2fecabe542c4f03191ba\nS = b4d83f927ad1980d96cbb0ccc36aa640f786293b8b19e4dd97a797d192b420f630a5e42ac42d8736e7d42008f445dbc1\nInvalid =\n\nCurve = P-384\nX = 29178ce9127e1048ea70c7d435439e9ff9915387e51b7e5ca10bfdafe53565978eb3784d9a4226f443d4834f4d451685\nY = 5cc2970589a453488649711bdf3cdac9a200519aae65b1c6bd54fed0d965755b36b74d978d674275bd71a03e8f054b0e\nDigest = c679b4a0e61406c4869d721192bd314d77e1cb39\nR = 5d6f5e9a94d9c92a0890c558bc0408b3405cd04e33f663df16701e80520e4394f1c54d3c8225d36f4753a799aaf6ff90\nS = d895b1cc522ceec6a7867867b8f603245c6e4d48945dfc43af721ebae4683d40a3c21b905ca3bd4b974d36806825b2cd\nInvalid =\n\nCurve = P-384\nX = 9f03569f8c6ca2c16d707f0ca36a8a8cf214a9d5c14034829d709e283cd675eb4e3090c6b973429efdf476c0782e0a7c\nY = e1b842536731e91596782787d57af17db85dc92fd2fb95ac65339174aee66775ce0a4721d1faeb29da968ea5eb705e59\nDigest = ae1a63f88a59c7da5d9f512d11bbd5d75dd1f583\nR = 31ccbe22a360b1786dac89394c6ef4ed6604943e50837395f96052821f6182914840096e90f2ad650917bd91d7bd4cfd\nS = d97199a6b952dcaefb1defe23def92bf2ee236ad18046a2ccf8924d42ee10a62e70ffe7f3c909b11112278f160d98b7a\n\nCurve = P-384\nX = b85e78a935d169dd5ba8f558f964b21c07804464816f9231233184675f557463a8b00470ac0ca8278cd008f4642e7962\nY = 8edf7be8584c5f207939d479e65173e2e69673090a8538fa93efb4432127895d92b4e4cf13b7632a830e9a33b37f75e1\nDigest = 811685f7ff2701e692f6830a33d8712d0432cd5a\nR = fd2876b250a94ced71734aa7a0d32423b2c6f039c926c557e748f38e23bbdb46e17d1204832c6f76c3ea854e1da23979\nS = 76409e381799502c81194ba87540aec0b89fc4680dd683780d49f82a46a7191b40f5f06ccb02e45e704c31fcd59382b9\nInvalid =\n\nCurve = P-384\nX = 0c74aaa0527524cb6171ab741896b405a6ac4615e474cdc09c9457b18bed33c6383e1b92f2fa1306e8e5dcd1667e45fe\nY = 7b00d934dfd876f6e07dc0582b20ed650be104fa603a5a1255c62b6059d2685aa9773f1ba31254d213c815d0efc8ed93\nDigest = 328029316d73d1b8d2b8927d12332036e5671384\nR = 832c62b0f34986eda9d1ace5068a0c5318051b0d0166d3dacf137ac072cc359f109ad6e17059e700bb1958bcf4101246\nS = 6bb56f4eb550688ea66e5dd09aebe7e0b39e2716b4697ebb68f113e080f0ff26fd0fc947a34f3c5a8a2f10e07dc1405e\nInvalid =\n\nCurve = P-384\nX = 4104de08b4108ee26ee239e0a5d340c1b1aa48b1b3b40717debd6ed3ff0d777923c106f857a3830ce7f3d08d0d6d7908\nY = 00498c38393e6393edcf254804558f86e461df1f5a6557bc5144f8d2f3806413d372b6ce417d531c08a52d1e38e8b949\nDigest = a13ebaf4431c43b684d1e18e610a75fd7527200e\nR = 9924a3273248db20db007309560a0e616572ac799d773529a5215786cf4a6e03cc73bea81d4810c1eee4b5e975652eee\nS = 6cc8ea4c4c56da87c25946a198e86917227bcb90da7be1dcde7b6547bc45a98e8175dd54af15bb6ef955b4cb48b7bb0a\nInvalid =\n\nCurve = P-384\nX = b6bc9418f3da0cce38a65f1b52bb3a9d22a0368e02f5f12fa1f1303ac67df1cffa55d049a782bf5bddb5e841b125aed6\nY = 3b578a0560280a2958a14286e10faa7f5dec77fd8d90123aff5780efa8a636cee833fc9f10d7a164f1254a483b613746\nDigest = 7b44de2e448107197558cb071bb5bec9a5849467827d29b2c6625708\nR = 6602090aec001c16e5f6e7e3e488bed5d1702d36b258b6a8a2d8392a5ff30a6af12fbf4308d67eed6aaa8b7be8b831c5\nS = 65d0c3bb1910ba0b7cc108ae1ccaae63405ff01a8df91021e17cd46aa6f8ca8f4eaeac6d6fc26fc816a3ea537fd9576b\nInvalid =\n\nCurve = P-384\nX = b4ab83a4ded7d76aa15eaecb1bafe59427d3cfc38564af9123cb707da2405184acd40a6c093ba29e321ba0f67c1e0c6a\nY = 26e2902499495f8550e798617a44ac9990c4c1cc3527dc0dd003a15aee3cbd3955151f7863de1692a94aafd3730e7665\nDigest = 8f902a34f36d7cd36748d5ddcc8fba6040be223a462842d506f185d1\nR = 61e48d5a100049578e820768ea57f30f27ffd1a1f839fabc55e8f4816c9b95d042619cd3bcc7180fd99834e344f53e7f\nS = 977b81d43216f31d8bedc3ffe873047817de3441df8b80a321aa0a80931f25a15c6628f43cf8e48d5c6aeca7626b0a18\n\nCurve = P-384\nX = f886f36fcf34e8df2a7e09220051b9981a3a6f693ec5999f28864e012c13896d633c9564f0118a95631cea8355b25b20\nY = 746f9a77835325f18338dee5dc88a9b086b858ce15b4e4462a98844bb01811195f4fae0bee8f457c32823e142210dbb8\nDigest = 6a80377d3c7f0e6a50f6dc1656cef5a0d33cf7934441244f69f0062a\nR = 665390653ed280b8f6bd3718d8423f26cb38d2d7faa10fc0f094295677d9dafad45fc64cfc22ded56afdd86a77cf3c33\nS = 864f0eb3a8d93c388d987cfcb60bba76098039d46bf4ff4be083961f70a29e724c25cf56685802b7b5be048107ad52e3\nInvalid =\n\nCurve = P-384\nX = 5fc835a2f5429adb719ed22f11dfcb02731da6759a8ea75c21d1af9631187626c31e191f4dcdc183df01c48e13dbbce6\nY = 9ed2d03df1cbeaefd4478b8106e90f92e0b6e958145cb81b9648aef0b96b71d1d55918564694b1987d68cc8e7cbd7dd1\nDigest = 807f609592e2ededa12792a7006a6db641904e86a1df3cec477dfd3c\nR = 94d9dedd27f2d014ba84ea58d2e88d68f3e86ba88b93750e50255211effe88b0a0e2f62017f22965726cdc77c55bca4f\nS = 14814bd09d9b7ba81b2485777cc588b5c0a4064df95c63f18a8bfd57494cd0f40c5bda9dc6c01ea72540f57a354360ef\nInvalid =\n\nCurve = P-384\nX = 0b86851d7c19f0f04a16e5e2903a36d09bf1863e152d87936fb2d74cf916bcf6dedf3c066d242f7dd327df0fcb42270a\nY = b0c93480740bb635e6c25fb61630fdfcc462a1418366a51b1265656f721e18ba89ebf754c7dfdad865a252c884a6c4fc\nDigest = c34e896a31fc4de7596679e12bb2416a51e58e8942eabd5cb01f0737\nR = 33fa5fe3e495076e90f4b62753d3cdc7603aa7f5b407dbf89a854b9521d15e6c381d3cf28f103035dc4291ae318c5f82\nS = 30919a2a3fae71e1afe8378aedcaa08fadfab6c6bf954031452d4fe514969ede2acf0347a2f1e81abf1bfb9d8bd55a36\nInvalid =\n\nCurve = P-384\nX = 6f8f2fc40d1db28309c8850bf94d77c01c5449b4fc556e6bf50e5ee805209c4489d8ff9bd78", + "1699eb0e42f6a962d56fe\nY = a4c7c77271dbbe7e00d1c6e4287dddc5463c6803a577a18f89a5eea01c6addc12404353abbc128cb9cf2496732312d65\nDigest = c19cabc6141b2adf67fe4bd0a3fead50473dea8cb0276de1fdc467c5\nR = 327c4642019a635d80dab82f7dc22e3102a3c1ba684c2b6de67d3d3009a17d39ae3d58ca2caec9f6f03f5ba3b406178c\nS = 6b1af807cc7265cc6d3049959cd7779ae0de819036647f9510b0e9f7e4c0e3fece5fc3741b68881145a2c944dc5c54d1\n\nCurve = P-384\nX = e98ba8016a976dcc3c50127d2af792969835b1096b1644b37c004d1786f4fb1026233f33ad56cd9444ba0a332c92efb8\nY = 54bbcb78ffa3c855dd24bf182376ff5d28dd7b7551e4b05a19549c9f59c83dcc12a43092d63c5967fc0256612475b7d4\nDigest = d8d9319d3f705d03dfc992e8e7596586200fb1574f2a918350deb268\nR = 3b76a0c0ece2348085f3554fc92b9e5b0fe84801ab2adf1d239d7c81c9697b62285e8e5667774559d1bbc6e86f2ade64\nS = 91d929e42f8223ccc74d4cb09ee7eb619d3a348886c21091ec55d36164ad3cc04e1da6edd88ad89710a908ca4bc00333\nInvalid =\n\nCurve = P-384\nX = b8d7a836715635a8b095d3712817aa9e6ffdd98d24be2db751bb0c1fad42b082542500ea255cde17525ec159afca7002\nY = 1a526c876d4771157b4f66e3056485c95066d4bd1e73e991ce6d5d3642807efe80015c52ef3cf8c86e57ab9a510ec86a\nDigest = fe23e8ab9dc934144247930a48babb0d8ba57703c2bef60e0e9a1e2b\nR = 9e36f47ec1b7ffdc6e3472f3cbec913494c0bbaa0c073f597e01845b5a3107c0e23a4575de4f2b582e1c2fe3067ec048\nS = b013cf51008a89b379a2a6b519b8d229ff0374401eae21a8da350fe35756b94168e7fafbd81f0f681f21c056941a82eb\nInvalid =\n\nCurve = P-384\nX = 4ffdecf5d5f7c1164297a93742c8a685bb425b97fdfe85f630dab2064ab29e52a0df34629c2531048c288216723fc9bf\nY = 84fcff3e7e478a6932ace6f6b0ab70e61d8a5137b76886c59e721d938e0e252e2f7e57c2ab7dab90493446ad85c3fe4c\nDigest = 28d44c363bfb2e36bc59bb68c56e8b5d2587f149839fd3b8c05d9eb3\nR = 7d909d9aacf064c32d070c3149ace8b8f5d83b2006e8460b84c4bce664fc20e91c61ac8b415965b6155eddbe9238fe3d\nS = 19d909e358e71985179dab9113941ecad21e4f3608cb3a32dd065868af1657df8e06aa86855ac7ad757a7f8fb568a953\nInvalid =\n\nCurve = P-384\nX = e805e0733fc156bd582faaf794e58d4630ce73fc383cdc964dd337728f774e4989a697d79665a3282ee6e0ee343d6c7b\nY = 43821b7b9a6ce1ddf0c59ada552668a0cfc85a87a610b5c36b7a691947116b49a4099340306e53494fc6b496cb8d12b0\nDigest = fd1bb27d666e3d40f5bd19d8c026a3614404b9edc11e582eb80b044c\nR = 3d4fa4ec95b55feac607fddc618d6f4eed71da65dc49d732e64460e5c80c57dc4421c64bacf3ef1e22995fd19c2a3cf5\nS = b11898ba475f2b28402d038afc15f171b99aab93437b35a2f8a3b89f42fdb7f93a0469d9da7652882000dd5bb1e8b9a8\nInvalid =\n\nCurve = P-384\nX = e15c7ef9791b9392c3e97389f2597ee161545c267e584b94262870ef25fda348f72349f396c27ac884fa8d776387fdd8\nY = 107b4a7da8be564a14f9c45e4df5cc9b62f0671b3f2c0573c33fa37f985fefd1ae3ff2640947ebb12dffda72757db6af\nDigest = 3d9611421379fc93226fff23f5fe472a33f6bdc759d5705f7e9a2be3\nR = 9d715fd1a3668283fa83c407242e8d2a4f3fa1bf41919ca4101114bd0e0ac1b16c4379edb11de5210eee8618d42e9ed1\nS = 2dc37f453c8cfe01ea80c56d1865daf0f28847b12970132a1853c3ed80da6693e0da47a2476207947f29da34d68d604a\nInvalid =\n\nCurve = P-384\nX = efcb97dd73106b0a2be4f665c496352f6938da9d0fa97690dc0e8d018b06dce2ba8d19b93ddfe889d549a33e64497c31\nY = 66a0cb7e64f40470b6d09b9e12f217b59e9e6615af52fbdc4ddcb379e77809361eca2093a3e24c7103e971567018400f\nDigest = 5598b06acf834ffbb2e50784fe2bc493fa51967f7ffadf1ece63f9b2\nR = 4ea5d4faf8ee52540db2f4c6283cea5302a3540a56e14c8a7533441c248465be99e10f23bba85be9634efaba7a8b172e\nS = 4c98a2142ecaba7db44c78658efffc1175f810a147306ba2e6498553526adb1507d7a99a372e0f84c8dbd160ef7fd5bf\n\nCurve = P-384\nX = 4e916a3cf2561580b49ecc52321db7103292fd2fcce8dd4d6f86be6035808e0df51c3c4ac1894f0b08ef6ebf953e0d18\nY = 4e6f28895d024b4c71220b27052ddd4bf6115a260825acade48c043b3e06d2b6b8e4ebdf465980f3b013cb575d475bbb\nDigest = 1668ee6ae19c2d6f23b9184b6895ede8f55549b23095d53ef89487f6\nR = efce00544ebe0d98ba6015c07e3e9d09af808d49a0820c22ef572a3ef9c8a684b377bef1f8b3bbddb734b9b0bd0b1cd4\nS = e80d0e183b3f00098308e20e5b4ae393a07f1d1a8defda9a9d10f19b3e5236e42f593b1dc57f6718dd8d4583f0175ff7\nInvalid =\n\nCurve = P-384\nX = 3c6528c82d9d5e8dddf41a211c70f78604d81f49853bdc746270f1340a2a645dca3bc7844c3680268fa5973cd1758313\nY = 4b9e697f1caf83d3224486bb0a8cd6a7c56e47c91043d8cba3aba51b6e504441d37abcc9b7b2d49b9126463703e514a0\nDigest = 1b39217bcc5dc841b32ddf00245623c581f19cac8a4ecd03eb2c07f0\nR = 848814c01c3d18534f39bcd53a8736db16f0f77a015a0e578cbb2f831739723e83b29cb6d4eee7822c76ff056d0f467d\nS = 05beb19f766bd1d4ec5e65786042258298a2dc617e3f13d8e2f0f4b50d934565f3162c737fa791a81897397f29305943\nInvalid =\n\nCurve = P-384\nX = 80c3f6488dcd76f33cdb75e30f8452ab9a3bd6110f14e25179b0aefe4c19c60a07b4af10844b130b0b75a7024e341298\nY = 6c85a17ad4bbefb33910250e05ac02a17c892c3380712d06dd070843dff0d040e219dae78679b774cd5eff0adb67189a\nDigest = 23cd0066d1d88702c5d4461deff89aa5662b517806a04c4da30e0d82\nR = bc444deb0c7dd9f96f20a7ffd3ddb35a1189316655531860c39b5f87f09992106985e5562e083ee9f538c8e2d5363c52\nS = 91adde5d47eae80a98661f4347fd6e4778478c3d4aff3cff8aa92e2345a8e03cd4ab64adfd38e461bb98b496516439e7\nInvalid =\n\nCurve = P-384\nX = 97c3f446803a61a7014f61cb7f8b3f36486c7ea96d90ee1767f5c7e1d896dd5114255abb36c74be218c1f0a4e7ebba3d\nY = 553ed1fed72c62851e042f0171454f120029adba4ee26855ab881d9470355f1947aa1d2e806a7ff2583660fedbd037a0\nDigest = 647eb206a8477440b4bd048d00f37dca8635b15c2a8e79e2a9d74fb9a5553211\nR = 7b06d6c2b63f1cc3bfdaa897d07dc15a83bdf35d979f70c34578332b3f4920422bb24867c51bde10831324df424e04ec\nS = 4bef715161f400dc98d4b63bd13ff4ad4a6c981ead44bfc662fe9bca4b56cd790698e4deddf9a4bd69327f26bfe801e6\nInvalid =\n\nCurve = P-384\nX = 08bd5c6cdc1f8c611df96485090e20e9188df6abb766bff3c1ba341ed209ad5dfd78b628ec60998ddfdd0dd029352fbd\nY = d9831d75dec760e9f405d1aa5e23aac506dc019fb64d44bd57f6c570d017e6609f8fdbb2dc7b28ca9e00e37cd32a3b73\nDigest = 9a4985f744dd6f2774cb6f20ad6b6969e212abf4ac035b72ad3f8b1955ae1862\nR = 8b372c86ed1eec2163d6f7152e53696b4a10958948d863eb622873b471702ac5b2e75ff852149a499e61510905f98e4c\nS = b2ed728e8b30787a28f2a6d3740872e47348686c7cb426411379411310241d25f08a026b853789b1157f1fc1a7f6ff49\nInvalid =\n\nCurve = P-384\nX = 10a784abb3c549444a62c28df1c926b8aabb20c8d9aa4b1f7ca830258857cbe9718dbc9845fa9cbb78587a373baee80d\nY = a1ad0c10b5ab6780cad49c8cd3eebd27de8f1b382ddd7a604458cef8e76ca632a7e44e1c63141a742426cec598029e2e\nDigest = f5b47101b4ff9baf64aca830b6afbc4f9620035d88a1d84a12cefa6f7f99faf2\nR = d9e52be2a3f7f566899cf6daaa38116d092473066f3a1bf91f3df44d81bca1deb438d9d25ce1632599c1d3576a30f128\nS = 0cad30bce4b3d7f40b3eef762a21bb1a3bad77439838b13024b7b2c70316875a99e80723a74a9e7a404715ca06a5d673\nInvalid =\n\nCurve = P-384\nX = 8760182393132d69011edfa127e36f92eeac8272641c27f52f3337ef8af7451e6d14f4e4590c7eb9fafb76e8c92865cf\nY = ebc2b123ed871ca570ead40ae8f6f32335393c569b21b38f626d09c064a3c8668e9fb10a4667e0f0c68bf25ca98fd6dc\nDigest = 979131ca1d07e0b4ac6f27b20a978e0a230159eec4906db5dbd22b10ec71af87\nR = 1db957e5c2d294035d7f476a0cbc28a4aac2614d8212de5017076cd836bf04ffe237dce8fec91f2fb5ef82449ff1c65d\nS = 3e3b9058d0a9c5b417f9c6f86557b9d50e7a902694a7012a1be6bb70708497e4d39fc1f6d6bc60dfa52d23cab173385f\nInvalid =\n\nCurve = P-384\nX = 2b1f98d2acdda8347b9a68c75174408eae7de3d6b9c08c26e73ce9ed2ac147b8d90cd82e30ab43909d63f6b457de2071\nY = 33f5e6f5f5793201991e014cce0045d04adc352298e32f45f4e374450111c8456b5c2efaec43d157949b5c191b2bc934\nDigest = a1daaf888d93a2a7e52bcd2a66cca3ff2e02916616d1919adefdd7257490e5b8\nR = 23d046402cbce807d232bcf0dc96d53c72992e0ba1ffce0d79050c0f4c5ad9bfbbdc1c96c730d67ff3aa3edaa3845da9\nS = 2cd46a4fe5d120b3af3a6d9ea63cc78f4079e8b5520a8fa96828334a4f182ff4d5e3d79470019e4eb8afc4f598b6becb\nInvalid =\n\nCurve = P-384\nX = 86ac12dd0a7fe5b81fdae86b12435d316ef9392a3f50b307ab65d9c6079dd0d2d819dc09e22861459c2ed99fbab66fae\nY = ac8444077aaed6d6ccacbe67a4caacee0b5a094a3575ca12ea4b4774c030fe1c870c9249023f5dc4d9ad6e333668cc38\nDigest = e3bcded61cbb0bf6ec20d59f91e8e73e532f15b082b89c984c1b51fb0d1db8a9\nR = 798065f1d1cbd3a1897794f4a025ed47565df773843f4fa74c85fe4d30e3a394783ec5723b530fc5f57906f946ce15e8\nS = b57166044c57c7d9582066805b5885abc06e0bfc02433850c2b74973205ca357a2da94a65172086f5a1580baa697400b\n\nCurve = P-384\nX = 9e7553eab8cc7e2e7396128f42ab260c6dbb5457cbff2070ea7c0db21def1537939e3f02699e5dd460eca3798d08bd6d\nY = 892c0c8e47dddf858e89099a8fc1026e8b8333532b22f561f7647f63f9c79dbf5e8dd18fbfe6ff34902233119c5d5aa3\nDigest = 0f2a9b447ea5cfcfb9e67d661d7f0752befd3b4e3454fe40b9ae1eca47806025\nR = 2452da6a48c3749b66e576e0f1f768d51728be17aea149164c4e1", + "654c5ce27f625a4610c4a2eeddb3a0626d3abc6c37c\nS = 499504fb58c9db24a7ff5f7921e1312f8aa583c08a308e080f5ef1acf5cdae7927c4101573db069ab0b6de7f4f1cab38\nInvalid =\n\nCurve = P-384\nX = 0cf4dc51e71185a29c0c6fa3c075d9da5bd7ede085053344dce5dbbe8329e8ac9045f7246c9d0efed393b8e113c71429\nY = fdb7917b73974b355cf9f3bef6a0a460c2d39fdf1fe32a7744be0a54ddd1cfa8d03914cff4b5ca536b40707ff2629aa4\nDigest = 331aefe2369b9c5ee6dd9f850259b3b8512f5934434e61573f97fe2c1cd2b147\nR = 3812c2dc2881d7ef7f621993b161672329b261ff100bbd19fb5826c9face09aec2017b6843d69336b813b673c5402527\nS = 5dc102fab9d6325131c556ec00309c2959d1031a63fbc1e2d5d04996d3234ed33875c0ab98e5878e9bc72742519ed398\nInvalid =\n\nCurve = P-384\nX = 6c590434988155236b43147389c6dbfdd27dcd3387e9b4c2587ece670753a542a13a736579887791cf53d31e5ce99994\nY = 35a20194ff3f1b55f7ffb2758ddd4b98dd0d9e0cc213e10ed25e8e0430fe861066c1d4423c67f0c93f7ebd87fd3c561e\nDigest = 153475076a003545d3ca3d4a772866f12cc85f6e69f8c486a91a80fd709206b1\nR = 89ff866889245e797926509e563b1746920b78c9370a6cdae52663730d131e558e327d1f5fef8faf9e6c802fa29504ed\nS = 8dd68e2de2f788e598b3e5a60c18d81849a0cc14b3b0e3c931910639f3125e5d6045f00330b1fa989252a80f95419b04\nInvalid =\n\nCurve = P-384\nX = 499cbdf18ec4e69b88051543c7da80845fa2de8be2b9d9045fee7f104a8b5b7d04e69142de9955c5ab18c5a34ebff075\nY = a29cb8d28836b201a389922b6f8f93870f09c80a00242d00d32656a43ac1440fc55bcb123551a73290f603c3469be9ed\nDigest = 5f00b3b48c1ee8287abe6f3fbc3438b91f4268f318ae2aa1e7810369d6716020\nR = 25d4d243da6fd9b439a9242c3656fade7acb7a306e8cf23ea89e3ff4f9330be19c61aaa42d7b426d12c8e0f96b80dae5\nS = e7a99cf4b269bb4a6210d185e9654602523b5cfa1cddc94b1db92018aa557ecb6adda44c816975f5ec1756b6df3c44fd\nInvalid =\n\nCurve = P-384\nX = 9a74ea00203c571bd91ae873ce0ed517f8f0a929c1854d68abd3b83a5051c0b686bb37d12958a54940cfa2de23902da7\nY = 6f20ccf8fa360a9ec03d7bb79ff17ad885f714757ef62995f824908561dc0c3dffc49d873627936a2fff018b82879ced\nDigest = 45c3a1b29a18780234f12f5e4b64e7af9de2acf0029ce55b706cc79a7e4df994\nR = acc1fcac98c593fb0a0765fce35a601c2e9570d63ea1e612fff8bc99ac2d4d877750bb44cfb1014e52e00b9235e350af\nS = 7f53de3afa4146b1447e829ebac8f5645e948cc99e871c07280cc631613cfdaf52ccaeccbe93588a3fd12170a7ec79fa\n\nCurve = P-384\nX = e22f221809fb7a054ac799a70b3d24744eb7c5096c8671770399527c88ccf9ddaea0257a0ae9430d927ff5d9f109c533\nY = af4101d60df9b306ae92da7592f4faf3df422a3e33f1c2ed2973b2b900eefc346b4cf024de650abf537cecd12ac77618\nDigest = ef1057d83a6e6481be7caf2c12c15f085ff971f02f0db8544352558e2b9fd61c\nR = c39a8e79f0560b9f26504469a470c7b2230c0d25de07c206e87dfbde9aff0a5d85322f56dfb50d4c1fc67c67d615dad7\nS = 2ad94dd13a39cf4f4cb24c2c81d4c1181652363addd856dc9ba7455458e40ed047cd113129bc87f43949d5a98a0d5205\nInvalid =\n\nCurve = P-384\nX = fa8ebc3682d90ac7356f0b75b9e3376e76518676e0bedd176cfa7fa57fea4b3a399dbb2bf735ec90b9c1705cf9fa6f57\nY = 18c3fbca0150ec10696b3851f31fb3ba62c0b6be509d249e0d4b374c7a08e49338e0922e2a8a9319999e6569ab8d292e\nDigest = 0c7152ec620fe9b783625196b41192dd5d49df184ad26965c970ac5e28bb1c4b\nR = fb58ab09b8a7ef7a6ec05b854eae11af9b713f7c7540e25115f609846e636ad4f88dcf4dd61e311273df23ccda474f03\nS = 485be4c21b7c3a9c6b39ffc9f0c39f4050f76d2a6b3fae203d016318c541c1b4ad6cfc0d0950636ff6883895dd49e4e9\n\nCurve = P-384\nX = e5f331536a2940cd67234bedf813c12e15aefa9a1a68429f8754bf2769a47c9c2efb5c42135e7b01a110d7302e097eac\nY = 63b2398612c863febd482184e834d3acb51408c49aacbbd35d8719746f37cb13e013c9505ce034cd815aacd10d2f7a0d\nDigest = d925955406f6b6dd4df05270a2539a5924830dfbcbf6a5a34f21354db246244b\nR = 96c35f22d036785a392dc6abf9b3cfb0ad37b5c59caefcc0b5212e94e86739a2674020ff79258094d90d7d59f09d47a1\nS = 373cbc865384734c56952f7a35a1fdecd88e8b343ee3aa073d30f5f25b73506f1e5f5857f668b0080dec6edeb5e1be96\nInvalid =\n\nCurve = P-384\nX = c53ad865beb1e2b92764065f1a6bb465ee94aacabe43426a93c277d02e00fe36be1c859ba08a031fc518a0d007668979\nY = 6728d42bae9bc097151748ffa0982964bdd16076fa0e7cc15837c1f773b08d02c3dbc57339091ccc34105b84781150b4\nDigest = 6d5fa5b492406a1e93df6bb6364d7b17a24ef43807a1159acc77486dd7b49b60\nR = d4f0dd94fc3b657dbd234767949207624082ff946de9ce0aeb0d9993b8c7d7935760e1bf9d8b233bc7d6cd34928f5218\nS = 0941df05062aa8849610f4b37d184db77ed1bc19ad2bb42f9a12c123017592bf4086bf424b3caad9a404b260a0f69efb\nInvalid =\n\nCurve = P-384\nX = 1f94eb6f439a3806f8054dd79124847d138d14d4f52bac93b042f2ee3cdb7dc9e09925c2a5fee70d4ce08c61e3b19160\nY = 1c4fd111f6e33303069421deb31e873126be35eeb436fe2034856a3ed1e897f26c846ee3233cd16240989a7990c19d8c\nDigest = 8cf5e81c6858b8395421d8c913f1ac887e282b5818eab525fb79feb9bc64bca7eb98f94b9e48b705e6c28311bb0ca672\nR = 3c15c3cedf2a6fbff2f906e661f5932f2542f0ce68e2a8182e5ed3858f33bd3c5666f17ac39e52cb004b80a0d4ba73cd\nS = 9de879083cbb0a97973c94f1963d84f581e4c6541b7d000f9850deb25154b23a37dd72267bdd72665cc7027f88164fab\nInvalid =\n\nCurve = P-384\nX = cb908b1fd516a57b8ee1e14383579b33cb154fece20c5035e2b3765195d1951d75bd78fb23e00fef37d7d064fd9af144\nY = cd99c46b5857401ddcff2cf7cf822121faf1cbad9a011bed8c551f6f59b2c360f79bfbe32adbcaa09583bdfdf7c374bb\nDigest = 965b83f5d34f7443eb88e78fcc23479156c9cb0080dd68334dac0ad33ba8c774100e440063db28b40b51ac37705d4d70\nR = 33f64fb65cd6a8918523f23aea0bbcf56bba1daca7aff817c8791dc92428d605ac629de2e847d43cee55ba9e4a0e83ba\nS = 4428bb478a43ac73ecd6de51ddf7c28ff3c2441625a081714337dd44fea8011bae71959a10947b6ea33f77e128d3c6ae\n\nCurve = P-384\nX = 9b3c48d924194146eca4172b6d7d618423682686f43e1dbc54ed909053d075ca53b68ae12f0f16a1633d5d9cb17011ec\nY = 695039f837b68e59330ee95d11d5315a8fb5602a7b60c15142dbba6e93b5e4aba8ae4469eac39fa6436323eccc60dcb6\nDigest = c68382d0641ffad850c41365a8ec68e3d55acba376d1bb941e7dcdf7b71f37b8288b023b942373a40be1dfaaf4aea633\nR = 202da4e4e9632bcb6bf0f6dafb7e348528d0b469d77e46b9f939e2fa946a608dd1f166bcbcde96cfad551701da69f6c2\nS = db595b49983882c48df8a396884cd98893a469c4d590e56c6a59b6150d9a0acdf142cf92151052644702ed857a5b7981\nInvalid =\n\nCurve = P-384\nX = 5140108b93b52d9ad572d6129ed6564766f8df3755e49fa53eba41a5a0d6c1d24a483c90070583a66e3cfa52b6fb1f31\nY = ff52498446a40c61e60c97554256472625633eda0c1a8b4061481fecfbe9c4503e99dfc69e86c9e85c8cc53dca6b8dc4\nDigest = 4b945020c329a61221060e924ec682eceb842c09537fe26265ad084753b89f7650cee4e8df30b38126984d80fd25d246\nR = b2726b2ba9da02de35e9953fc283d1e78700860d4c33dce8db04dd41499d904866c1b8debb377f6c0dfcb0704252174f\nS = 0775b027068d7ad55121a278a819f52099ace750d5e996eaec9dee7be72758736cf769650148fbd5c411beb9b88f979e\nInvalid =\n\nCurve = P-384\nX = 31f4fc2fac3a163a5796f5e414af6f8107ab5e4a98c755d81efa9d5a83c10128c16c863190112fc29d3d5f3057a2edf1\nY = fe208743f3e96c3a34b5fff78c9716c074a1ce3dc01c3f0e471ddfae91cd88e7dda38dd0e5e1f91b00b8539da3cc10bc\nDigest = 2d6affdf541609f649dbe9fd5829059bf42021fcfefee42d8c9cd5c127015c06b4c3c13ef56d08767788955887752e44\nR = 706911812ec9e7370234efd57b2855975eab81e9c2fe783aa8e442dc6e7d681dab2dc0dfc6765f87ab67001108e3facf\nS = 42c89efa22d853d32f619c9fe13e9852889ac98a9fed5d4fa47fed238e1cbe70d7970af9f7bdf84e51176af4885f2490\nInvalid =\n\nCurve = P-384\nX = 1f7911dcfe63a6f270cf75b8584d9b1b4a00afc1fa43543c945945b8a821ebeb37fbc705a000f9cc7c35f7d27027b7bb\nY = f11835ec80c4ac06d99247e73bf72522109ac255e6109262de4dfbf9619244f74fb6c9ee57694537d7e79c248db34dc4\nDigest = f4b0a912331e7fc59a7071e5f47c9dafa6dc09b32c5c3d05301b3833bbe0b9168e2b63f12248849572a322b2f5423b8d\nR = 3587c9c6885adf3be1086825f9a41ccd2edfa0bd95e7fc4dba5a9710f41d539132de7772f14c18e318f8992b66d2a86c\nS = 73a844d729599d4e3e3c1b63e9c4bf5a73d1f69e0160857fe63a56c381c051f5c37ea6b4cc4caacb6ff26ef9699efe30\nInvalid =\n\nCurve = P-384\nX = 2039661db813d494a9ecb2c4e0cdd7b54068aae8a5d0597009f67f4f36f32c8ee939abe03716e94970bba69f595fead6\nY = e2d5236e7e357744514e66a3fb111073336de929598eb79fb4368c5bf80814e7584a3b94118faac9321df37452a846fc\nDigest = cae50a424395e38bde9ba31fa5ea0c107ccceaff06663719162aac2c3e15f2b2cfd376f90d371326e1d29e0392a756ee\nR = 164b8ac2b34c4c499b9d6727e130b5ef37c296bd22c306d1396c6aa54ca661f729aa6353b55d7cf1793b80b5a485115f\nS = 4e7187f8f735b7272f2c0985315b5602bb9b1a09f32233aa10570c82d1ccedef6e725800336511e47f88ddbbbdc08f54\nInvalid =\n\nCurve = P-384\nX = 46dcf8ee848c6459fa66d1cae91ccd471401a5782cb2d3b9b9264189f0e9ddf7197b05c694931bde3306240cf9d24b7e\nY = 79d9508f82c5ead05c3f9392f3b1458f6d6c02f44420b9021d656e59402e2645bf3ba1a6b244ddb12edbb69516d5873b\nDigest = 039fe89dfc54e7f2162545af700a8c49a1216b08854643656b07d74e7032516fd0c9368c", + "5e5ce54655e4d08baa29b6f0\nR = 5ffba3b5bd7c3a89ec40b47884b0b3464e8abb78608c6d61e1e62c2ca98d44fcdf61825d69dffee8408d0849d0623bac\nS = 0d2597b5fc3842ffce1957172253a8c9c0e4dbe770ce54f70f139e0545dc34ec639d609e14175bdb2b812ccfda00c9d4\nInvalid =\n\nCurve = P-384\nX = 097cea75f685cf4d54324ad2124ce3f77b1e490bbaa1ffacde40dd988f7591e1c5d158e6f232500d958762831914af7f\nY = 716d8bc056daf69ca2edd21b89a6ae9923cfcae87bfda5f9a6e514dd4b9d28d164fcc613ca2afb9660adfece59f09b66\nDigest = 02afb35f1df33b3d83df3391ca4184121ca52f520dd12ffc891aee77eab6503f232a5b1231bd997239751f46c4133edb\nR = 1c5d4561d2a3af8835839b543098c101c715c545eb7d00300c5cb05bb08dac29e732ffdc31c50915e691999ad505104c\nS = c3442f2fb1498fd47c2f959edff37a19783e3ccee80dc6955ca64db087fd188e67358e7b9223535bbb858d21ba6a978c\nInvalid =\n\nCurve = P-384\nX = d2e2b3d262bb1105d914c32c007ea23d15a98197f0ed90b46a17f3d403e406a76c8f752be1a8cd01a94fd45157f6511a\nY = e585fba180017b9983b4c853ad3a5dd52e079c5f0ef792d1a0213b6085e390b073de1a4b01749ceab27806e5604980fe\nDigest = e66b11b84f87c38526438e5e3c5b4521248c358eaab80e40526906a05fb29d14d4e5686681f03bc3f0025d45dfb83b5f\nR = 49c001c47bbcee10c81c0cdfdb84c86e5b388510801e9c9dc7f81bf667e43f74b6a6769c4ac0a38863dc4f21c558f286\nS = 1fb4ff67340cc44f212404ba60f39a2cb8dcd3f354c81b7219289d32e849d4915e9d2f91969ba71e3dd4414f1e8f18f7\nInvalid =\n\nCurve = P-384\nX = cd887c65c01a1f0880bf58611bf360a8435573bc6704bfb249f1192793f6d3283637cd50f3911e5134b0d6130a1db60e\nY = f2b3cbf4fe475fd15a7897561e5c898f10caa6d9d73fef10d4345917b527ce30caeaef138e21ac6d0a49ef2fef14bee6\nDigest = f6325d6bcaaaf1aba1197a290b33974f2fe8af200d5d726e78705904e9894ec31988e35dc76b9976834b7cd1c4c67146\nR = addfa475b998f391144156c418561d323bdfd0c4f416a2f71a946712c349bb79ba1334c3de5b86c2567b8657fe4ca1f1\nS = 1c314b1339f73545ff457323470695e0474c4b6860b35d703784fbf66e9c665de6ca3acb60283df61413e0740906f19e\nInvalid =\n\nCurve = P-384\nX = a370cdbef95d1df5bf68ec487122514a107db87df3f8852068fd4694abcadb9b14302c72491a76a64442fc07bd99f02c\nY = d397c25dc1a5781573d039f2520cf329bf65120fdbe964b6b80101160e533d5570e62125b9f3276c49244b8d0f3e44ec\nDigest = 709d1bf45b5817f5a67b859651eb47133ebed2622fda09ab66d3467b5e95da50ecc2c74d8f4d289feebec29729a4bfa3\nR = c6c7bb516cc3f37a304328d136b2f44bb89d3dac78f1f5bcd36b412a8b4d879f6cdb75175292c696b58bfa9c91fe6391\nS = 6b711425e1b14f7224cd4b96717a84d65a60ec9951a30152ea1dd3b6ea66a0088d1fd3e9a1ef069804b7d969148c37a0\n\nCurve = P-384\nX = d1cf635ca04f09b58879d29012f2025479a002bda590020e6a238bccc764478131cac7e6980c67027d92ece947fea5a6\nY = 21f7675c2be60c0a5b7d6df2bcc89b56212a2849ec0210c59316200c59864fd86b9a19e1641d206fd8b29af7768b61d3\nDigest = 5d54d236db6ab4691b3d50dc81471c5d388e5735ebdd435e9742a5a8a0ad0e841bab57326c8535a680ada57d2b3a70fa\nR = 6101d26e76690634b7294b6b162dcc1a5e6233813ba09edf8567fb57a8f707e024abe0eb3ce948675cd518bb3bfd4383\nS = 4e2a30f71c8f18b74184837f981a90485cd5943c7a184aba9ac787d179f170114a96ddbb8720860a213cc289ae340f1f\nInvalid =\n\nCurve = P-384\nX = d15ca4b2d944d5539658a19be8ef85874f0c363b870f1cd1f2dc9cb68b2a43a10d37064697c84543e60982ab62bb32c8\nY = 062fb7dfc379fc6465302ac5d8d11d3b957b594c9ef445cfe856765dd59e6f10f11809e115ac64969baa23543f2e5661\nDigest = 67cf9e6f9e9558a379ef7361771323a4f3925f2c7a5d94d9156bf2d9d45f9f8fc4d47322da622fbce92fc764a2ccc327\nR = e2cf123ce15ca4edad5f087778d483d9536e4a37d2d55599541c06f878e60354aa31df250b2fc4ed252b80219552c958\nS = 696707a7e3f9a4b918e7c994e7332103d8e816bbe6d0d1cf72877318e087ed0e230b0d1269902f369acb432b9e97a389\n\nCurve = P-384\nX = c83d30de9c4e18167cb41c990781b34b9fceb52793b4627e696796c5803515dbc4d142977d914bc04c153261cc5b537f\nY = 42318e5c15d65c3f545189781619267d899250d80acc611fe7ed0943a0f5bfc9d4328ff7ccf675ae0aac069ccb4b4d6e\nDigest = e8d6b550271b486e79f6975cff753d49519ed9393b207af7039b4c070cbc2fe7d49dd1bb87f7021e442fadd80ce8a5b0\nR = b567c37f7c84107ef72639e52065486c2e5bf4125b861d37ea3b44fc0b75bcd96dcea3e4dbb9e8f4f45923240b2b9e44\nS = d06266e0f27cfe4be1c6210734a8fa689a6cd1d63240cb19127961365e35890a5f1b464dcb4305f3e8295c6f842ef344\nInvalid =\n\nCurve = P-384\nX = d4e93c4bafb54c06814011309e9f3d8e68b76a5452e364ef05ccc3b44b271e576c9028106b1584f09271c886d467f41d\nY = db730ccfdeb6644362f4fb510d5254bfe6f23e891e936132f90f1913e93baa8b1f8c0613a0f0c61a760ce659f22babc6\nDigest = d5c82ff11f555ce21c3f20a9ecfa6047cb6895e32fa0fb379f49085a59f61b7c8fa05058ef144cf47db5738fa40f4890cb59695998a2358162bbbf6d7f53517b\nR = 8d0fd14a59c24b0c2a34b438e162f1f536fe09a698cacfe0760d026d1593265d02f2668d2a5e49ac0b21e93807aa9c18\nS = 3162ffd2adc9dd5ec1bb1d97d2b0c27b8ae234235ffb374878d0b76382002ea505e885c178d56a2d7809bd1d83117ef1\nInvalid =\n\nCurve = P-384\nX = c665feccf51e6bca31593087df60f65b9fe14a12022814615deb892eedb99d86069a82aa91319310b66588185282dad6\nY = 1e6e25bb8ae7714415b94f89def0f75dcb81d4af6b78d61f277b74b990c11aff51bd12fc88d691c99f2afde7fbd13e51\nDigest = ea056beb112fa9aad69c8dfe51ea947b772bf1c11287edcede43a98089d21492ed581edcb6d1823e2873aabba213b84291db3bffa6eac3ae43a92fc2da276a24\nR = 0e18c4063137468fe864fdc405ad4e120176eb91b4538b28ce43a22ae1a310cc22a2f7a2b3a0f3d15e0f82038b4a4301\nS = 5a1620e42041ce4357daf824befbb2ed65596bcd8214e88726149b26b1f416b9472a8877413f1c3705fc2edf4731943b\n\nCurve = P-384\nX = a6bbf85e8068151482ce855ccf0ed22988fcf4b162c4b811cb7243b849299e3390a083147fbd68683203ba33588b13ae\nY = 5c837ec9f2eda225c83ab2d5f10b1aa5bfb56387deebf27ecda779f6254a17968260247c75dd813ea0e1926887d46f86\nDigest = 81b1303e10f25d37877b09f9d82dbd894e40264992d86cc74656ebeef505b46fdf9dec312a7f0a26e3f56a7195d5b01d198c378fff9d049e00cbad9586da20c9\nR = 9c11879e59659848274fc1ef5a6a181af813d23708b09a24dc06c089b93b918828dd938a75a34d5a681b0af362dc19a0\nS = 9c362231962ba7579c4a874e87bdc60dc15cb2e0677149c8ea31162963e05a6614616f67a5269616071cf095be7ff44b\nInvalid =\n\nCurve = P-384\nX = 9c1eb5cdb1a873e4c275b7ded8712b9058ee0d9ded06c96a2a8d7c652b82e894e2f918dd8e18138e5c34821744b97952\nY = dd474c93619f02b5d4fe30ea7805c1a13fb80008a81bb5f3eeb95cd11f38841b8e34d64f2c6cc2d6cc2587365eed6b6e\nDigest = c0f9ae90fe8aaf54962e7d47a832e4ca6e60355e4066cd2b08bff78650d4e4a5d1eb1de296f9f0ef92887e09f82e0db4411aa9c3c6b109159bd39feed40419a3\nR = f17b2f2fa3b5c8e9c62a633e5d417139ddf3dafba75b464fa156c99b3948a0aca532c7fd3e14a266eb17e7fa80881da2\nS = 01c246866983fa74d6dff38b1ea091f8afd218b5a42467761b147c19a3bb20cd24be8ed1f95f1e61863a709d2d0148e2\nInvalid =\n\nCurve = P-384\nX = 20622a293edc96d83fee77cf1ee8077c61d6f8ed0073d53cfb5ee9c68e764c553fa4fc35fe42dade3a7307179d6fc9c2\nY = 710fa24383f78cc4568fe0f4ecbbe6b11f0dce5434f4483712a6d2befae975a2efb554907aa46356f29bf7c6c2707c65\nDigest = 5cb8ed471a4001e280a0927faf25183c857b9b2de21c8566e8a1bf04ee085c36db7fab9d8f627898b3bb23c10225305938b56a732659f2cab3fa857d80dfde19\nR = 45a6cf5cef06256139caa709292d1e0f963d176add188572e9c7be29af21a95853a98e23aef0a0850e58d44d60b6d780\nS = df8d71cd5ab22fc718070078103483e5258734872ab935435f21ea199018e49a69c064a63801beb0759fde6e2c4a85b8\nInvalid =\n\nCurve = P-384\nX = 83a4fecc0bf0a353b0acf6f54094b822f2b12564e172b296f3461cafa7315d7d31d0089b1b4c18ad3c86bd18f539774a\nY = e4fd57c5b2937e6fba1e7d72fc3f02352bd79c13611931935f4dfd073b9379f862f2277585137e996e212b5b6533dcba\nDigest = cd7c623c3c3b52f46be0ebb2b353ff97db3cd7dfc1a059a57668fc50101aeeb37b8aee9ddda8ab611546999a120cc9acb0e2c3df48dee66d5c31a46a7be94bc7\nR = fb02804010a570d702ebfbcf3d6cc9d55ddac2bd4b4de56d325e9790571b1737f91d3fa1d4caeec6eea806195aed3187\nS = 1fd20fe383e907e77639c05594642798619b2742090919bedeefb672c5700881baf0df19b9529d64bc7bb02683226103\n\nCurve = P-384\nX = 208a8c5a6b59458160c5b680116c8b23799c54a7ee8954a4869425a717739facfe4fe24540505cdc133fde8c74bfca78\nY = 22aa7aba797bde1e8389c3c3f8d8d9aa2a914f4d2d7aaf7187ebed9b2761975718ef97660ba0b8a71dee17f2b982e2cf\nDigest = 007b907b90fa60835d45d2f0201a4486d9782fea4f0a235d97d4968336c5369c6c2e82bded56288a10fd6741f4c15d1633bc92e0196308d9f0490fc2077d3b6c\nR = 0b4e835ed83151d2bde96e201c54544ba5f301aca853957d3c538c9858fcce796b60fc50f5600a48dcdf13e5bc029827\nS = 0270adf02d31d5428d523e13d7d315c1929a1d89bbd0f61eec0b1186abe1c307cbba6b1067a68bc3947e6196d49719a0\nInvalid =\n\nCurve = P-384\nX = 80ae47e99107d6148b1088c6694df5c1273ff336b66e45b68a7c65fed735129dadcaf2b900e9f8ec50eff70a5ba89ea3\nY = 47450efb5669bfacd7cbff1f801aafa0812ff88a6ae7b5a1f85e88e19129ed995f509fbf8dec15ce42bbbbd33814c09e\nDigest = 1cacc8f609080e7b8339529f944850a700977ef9107f40956fb3564", + "5e15fdd54ef01755f07a2582d0bf2ca0cb84ee8ab154fe0914dfc9ad7ad5fe54b857d0f4e\nR = bae6fba7b1485ecdca48219ead3c39295fa9c196b1f0941445b1ac768e33962f68d37f1f1749eaad7200064aa202fb41\nS = b411a38d02deb42d1015a7837b033c89d2f37d92c70fa8bb1f592223f7750520b950f30277abfb4155a3ab194b3beca0\nInvalid =\n\nCurve = P-384\nX = 45cb6dcca8d2e80ac04536a22f9d68ea2313245550108ddcd32799d154c0a55492e49463e826275bd9bf0d5e380205c1\nY = 6fd124f5a6c745751ccfb3ba4dd9144ea8fd41a4d9a4b34820434da66aa7385e73ffe71e6c11ed1beb6c7af22ce00edf\nDigest = dd7947a5b9a1c988dd7dff537e15335aacafd3e602adc8373765013f338334dd58aed4fb7144de0007c3410d79f5e78bcd4cf0dd63cc33ed3dd564882e299c7b\nR = 2c782c4263eeee63657fbf20fa287a1a81fcd14b1d3bae333928ba4fc31abb20edebc130714380608e38ea74309eca9d\nS = 716113d95bc9dba532bfb470112b0d43d9cd6560ad15e0de2e514994801ff339bcf19ad4ee2b8af573f57c038fbd70f0\n\nCurve = P-384\nX = 36c1459d9e9f7b6c1598778c784cbf94661a2b11370c02ee092f6ea0ca20acf81f1ed5048a28a1466a91689df26bc291\nY = d1367418c7b216bd32c6dafc8b2be99d02cab68df990758b2ddd543b7eb6ff6e285b649ffe588b1811b549cfb5f0289b\nDigest = 242ff2713c03e3d5277652f8e7fb1e5a1f0422b6652e1bdd696e46c03cdd3aaac329b1d88e7aa345ff7224ce6dc6df05c7e9d7dc2665282c817d15a15b8288fd\nR = 40c338adeb504193444bdb95336177362031aaadc5b7e151e42030df9dd8687f3cb8fe2292fd4f9206989c089d966dae\nS = be4b2ba251094c24de006c89af2b5c77e6937f36d7bb703b4f8edcfe65d45f4b2fd2486222163ae0ed9e215c0a96f488\nInvalid =\n\nCurve = P-384\nX = b5eb6670bb0b0d3aef10e533d3660756b7372a2a081d9d920130034f48202cd43b9e2d1e5893d0cfb322db65ab839716\nY = e28444770396041b489b302786a57fca9a98f19685cb4b455d219151e64645ad30dd3149ec96f3bc90879834b65e58aa\nDigest = 8d2e653807e87962883956ee3705b2167c50370c3af12eb8f6c26f0f15ede56dddc7d0c9642a1c1c2444b06571fa1a4d47e7884acc7ea3884daaa50940f782e2\nR = 0887a13df940907864b425ec0d8f91ac719abcc62b276fa08c5122b38831c8930abd3c8454e98182bb588fc72843717a\nS = a380284eacaa36a34e35f04fbf6e28ffb59176f41ea52d9c9bc1362eccd8e0d699c2e08111d93e9dc2785637b1f4f09e\nInvalid =\n\nCurve = P-384\nX = 700e8f65e052e918a63a96fa57f4eda849f9f9faca3302d6ead66ebf85838f8145a6d6718a681b7bef73170d7254958f\nY = 9e9e10357658913007803859165926cd1e5e92c3a644d834098cb1cbfab466349bf4238a5154cf50ed77c77a78263e81\nDigest = cf885fa7a96db595f825a0ccc56b70b60e0e1c30d0a15af636d1f4957328aecb7eeb734d5874bd72ddaf15c357ca36bd42abf387f7b771ea6160e2e23a08652e\nR = 59be870e0fd684b000cce95c616d9f34674354e9d20db15d204b8a6285ff55258e4eeb49da1573ef1030cd6b2626dcfb\nS = c0bbbf71d87479d82575458be9f4d686921db7ea458d620271f51ec3f4d1afe3bf25ef9c0c400eb7b92cd7058fb17346\nInvalid =\n\nCurve = P-384\nX = a9de6f029445fffcf16349b44095cc83b11e3d0d9f08654b158014803b1cc31b8dfe00b1a8167c6f704d69cdd62c6512\nY = 27336a503a669ba1d1f3619f51dc8aa2a44b2075c682a36f071be486e7dafba9adfac2ce74be0442b7251e99304ffc05\nDigest = b7e73f38767f253790e7fff019b4e0e61562aeb97b2b749afec2a61c87ab0e15916d4286c0a13989912f6bafdf3efc6f64ddc3b944f9041266e5abd4480c1606\nR = f93a4d2eb94d087f28572847e0099ae2ee944efacdad392ec268c9c1e632e6ccd670c36584e58aba52a4c2b07127d55a\nS = 941ee89cea6e7ed20213a95482fae134707ddf4d292ab1952ed5464f1f1138669dedbfc9998b696eaf469be5fb240c80\nInvalid =\n\nCurve = P-384\nX = e63500d6d13069c01fafc4518f1d429661c5bb6ad1ff0383037ca6a469a5c20c453dce03bf6e4164f7e26f849016b3d0\nY = 83b7b731c2531c3ac61b194cf3db6dc02ccdfa16d9eb49f97bc4ec3fe6c8bd865ea27f1538531ad07dc44fc5107af8e6\nDigest = afc0ed355377d0ab0c4f79d420dcf67ad4920c013d5c8afde2287525da4596672927540418a61568b21ae7799d7659f16b85f611bd6e8d2066a55903da0c48b9\nR = eb78733e73fd64a6a1f23eba5311af23d26816fb8847671e01fdbd8dc7d5fce1a0823b080ee99e8d75edb3f100e16077\nS = bcaedfe599f98b51542c0f94ae1010611c6767ac3abb2bd887399d62fd0f1b3a0e97deb24c95a76de44521bf24c8645e\nInvalid =\n\nCurve = P-384\nX = 3ebd869be687f82d844416e6816d698d82e1e22a1f451d50b6c146134deb07f05204c0b04e7dc07ebdcfd916531dc7c3\nY = 6e4d7bde063edb7254a82b9d9249d2a2b9ad8988c37a84ac9f7c09daed42b1fd28f7cca1ea8b4f91a66e878224800bdc\nDigest = 56a61339a35750e95770f28846930e3f594e8d759e07423718734a82b2a80430b0fb3378e40bdcf5c12be135be9a9bec32916b4988a763091a6da7b44631414e\nR = 575f87a8a7980555a198cfdec279cbb2f89551b5271d242397c29f6bc4bf413dc30312a7e626ef7fc77a9124a79bf9be\nS = f0b7d759246ad36ba8240c537b1eeb5d148c38d324f48028c598eaef6e49d79ff3f6cfe3a32fbbf6f3ed3aaaec31d572\nInvalid =\n\nCurve = P-521\nX = 01939b25d13ee8e04203643ba3709526a92912b0e98f06962fb217ed18d1ba52bff192640f980d3f7f92c116b5d94dfd48c25a26b72acb9425e316b3d2ac130a6943\nY = 0122d0809c5de123c6e5373c1680a4d566c565408b6750d942c024d56c0d6761807adf9dab454b84254671dc68f6917f09a442643e6db1bb35e6796816dd3e5c6a7a\nDigest = 6f89ccb8daf6d4ee583b04786812da9e2960a6e5\nR = 0144c1a1e075aced5e10f50ab7ab0f795bac07439c953ca0c749dc12d50a7e4dce21850dac1fd773e46576335a555f20d266842a8bb47fb464fe3fe297e9ee356e48\nS = 0125f3b6f1cf7eb704bd37391a43034df9260c4d5fdccd583bf65dd5ab4b007c8f837a31a0b7c5a0be3743a187b2569841fc4c69f816c8234d8ae845b92fb9263242\nInvalid =\n\nCurve = P-521\nX = 00882e2cfed1286668e62699ab20c6c40068b460917b306e51ce7f72a4d760e19b3f6cb5897de599cfd84ae70c26d1a39144772b90f8ba1ec2d0f09395265f0308cf\nY = 0020b80b99778dcdd3dc47da42b279cc289eaae369b9e2c4b0322d2eee9b1a76eed6b5b70d03d83f1db81a67ad6bea98ce71b120e9f83f0178cd6fa3f109a87b1fa9\nDigest = 838b0206f0df827b5aa38abedc972a8ed59611fa\nR = 013ec7124331d896832b77440854c043cb605ae9cc7d20cb358513a5bab26371903c6abc6e4860a0b4940bc5429755341a10251195e5f8af42494c002340ccc57bc9\nS = 01460bda2fd76ef05dcbe1cd17b9c5663b03551cce586c56e103179069fbef6ecae47f6555db755860f0b06eb1bf247312ae0f9d64c5cf13fbc42b923d6bee151b5f\nInvalid =\n\nCurve = P-521\nX = 011a5a6f7166fe435c5cc4238daf92a2d1af483543b7f505785ec4e2d93b2ca1d1eed3bccc31761aa60f7dadc97629475d2712998c2eccb82a78d6da7b0524662e9f\nY = 00c66d54768f5daf947cd414a1296a54c90e2b65a14cb94aecf0ba51c280676c160c39539955f2a8194357a983a1311845f8cac51cdca1e209bbac32cc809f0e4e10\nDigest = b14bfba79b3a36303dd4c5c7e6bb6981cf37bcc8\nR = 010f45ccf0b4de7d2af890d65395c715043dc5ca1489c79b820347d51848f599ebd4aa558c62ce8769c5d5a294679f9aa74414ca6a1b82f183f23558b0a8dc6cce68\nS = 01adaf876dc35310ac592d1e3ba89f148c3b76417799f43aa1b24c1d2e3f544c018f066ed7baef480f7488820593bcbb25ce08183fc14c6c12fce0c118743f04e281\nInvalid =\n\nCurve = P-521\nX = 00f3bd2590cbf620991d990b84efee86073f6c789deb07b89a1f278e6cc9ea573d8586ac395958ce4e1b09bda73af1b1e6f2a8c09ecc697c021974c024564ed87165\nY = 00514871935c187e57d1aac376aeb018acf57c4d005d85cc939a6c83256f38b2c9ecb1a0ec8d132e0f5169843faca4ae664459124bf5f30309fa86f87a2604058150\nDigest = d9cba47d31015f5fe70b1bf0c2a7ce40676bd1e8\nR = 0083e6155dd97bf9ba7c60dbcdcba7824b125a73df1433fcb46f57c51f63ae161ce67393d327d174aec7f0b552decb8131a192ae940deb84acc3b45be61917fc580c\nS = 001fbfe61d75dc3fd814eeabdececf361a0a066b8c06c40f0e057faf8e4e7b206dfbbd3a99ef55df67234a29fb1a618620d2e27636d35bb98eb7535d1749c4b7e7d2\nInvalid =\n\nCurve = P-521\nX = 013136c4e5dee983f761955bce7c196a000cb26863a1dea762884bb041e45363a1ab1665c0ca69d1167e555bd63bceba08f6ee14571acd06eea3e1e5d9c11a036984\nY = 011c830e1fd29ee4e10d7c6db7e90d6c1319c9858f87a944542c28679d83680747eaf71a29362ea2c22a89d78e2ce020dfbba74448d2f46b3f84b99f22604075b22e\nDigest = eb4d89e3ce396c525fdbb67e4620ca99d9585d31\nR = 0124b3bcdae17413de84721e6ebe64409d80ac07a3b6c9a603ef19c5162566076108d30ec79426d24c72ac12af6fa1caa4830d55b4e6fcee900b0e4b20cdae0eaf70\nS = 003e0724d156c3fe5cb799a17972fbb891f0e11cfb650a1c524f6f2aab134c70fb114084a7821e0e12054fe071c516cbfb393fe9d98c840e1cc9e8475d3add81e0c7\nInvalid =\n\nCurve = P-521\nX = 019eb73393f070160d871cc396cd8d6973d828d6f3c17bcec7168843f0342c1b54f3c02a1b11348da1035833df6fa469d75692ecaa2feddce9210a813bdb0e1f9936\nY = 00e030c5a11e2317ba10a20ec373cf69c96660b434445235efff0a9d23904c5d3ef49efdf0897222e51624f047b567ed61814f3f9e8c62f16ac27160897d5a09f476\nDigest = 43a5c6621edef91f6938507b2dc2092c6b17fc9e\nR = 00ca41bcf9e80780687ba70d7f5ffec7da25542dc22144d9f6843889e941cad2fd8d8771755f38c0ef77909416371726b066464d1d41f888efa39456dee859f0ce98\nS = 01770961a369ca70f9d73b61aec34662735cf228299a7c668aa24afbc9d7f621cb3acff79cee19d107361614c1e71ff1f32ae4f02b7bf94486f0fcd61b6f76f304e4\nInvalid =\n\nCurve = P-521\nX = 000c12d47011ed272aaabcb0fb6c12d8627f33bda02b2b3c3ec7b5ed60eaa577add4205d222b8ba0485b1d98ade9df18ee1e1ad9e0a9e78242322201e3c664bf8c9f\nY = 00d1b86d4a1171bc80822e0e1094a96bdf7e031201ec212ab7d0e", + "7b55394cad8335050701327a0a1a17181b586b89ff24a658e4b0ee16b8418dfcac122f2457f67b1\nDigest = 35802e4fd349e7cdff4b85c76a417977c3e40b65\nR = 00e4678311d0c068eab2118fc0a59014ec32c89cfd1e0273b966634b87783011b58a99204d266014d0236bd6f276f49c693a4d62b0601c307c936252cf718e239dfc\nS = 0149f5cc02a6aaa126a99a59b83ae34f405f8076b597540625fa76e27dd29a85b6a4b0fc3e73a245a91d64a8f2b13ac345553b7a40835af76a9528cb48ac8d0be364\nInvalid =\n\nCurve = P-521\nX = 00f50a08703250c15f043c8c46e99783435245cf98f4f2694b0e2f8d029a514dd6f0b086d4ed892000cd5590107aae69c4c0a7a95f7cf74e5770a07d5db55bce4ab4\nY = 00f2c770bab8b9be4cdb6ecd3dc26c698da0d2599cebf3d904f7f9ca3a55e64731810d73cd317264e50baba4bc2860857e16d6cbb79501bc9e3a32bd172ea8a71dee\nDigest = ca6b94a2773e9b7392b2a6b2863efb113fea8bba\nR = 001e7cbb20c9a66abf149c79d11859051d35cfddd04f420dd23bd3206c82b29e782453cabfefe792e4e3e68c9bf6bf50d5a00ba5dd73b41378fb46e91ca797dbb250\nS = 00f1e9252573c003cb77f22c8c6d56f2149f7e8d88d699983da9250c8edfd4b9f864a46c48819524651886e3fd56492f4b6c75fb50a1d59e8bfc25f9fd42dc4e1d37\n\nCurve = P-521\nX = 00fc6486a5cc9a366b2c25d57f3f1caadf93659223c7eb38c310916cd44bc49d3ecf1cfbd429b57e329e1eab5f552abaf828ad9cfbc2f7534dc8c87f54d252e7b69b\nY = 01c0010af6c5cdfe26b068990cf44b1bcf324d0940bce1e953f7366c757aadaf25ff7dee4947879f305d3deb1e9a849db3cffb83bc1c7e5e82777be140931d58d177\nDigest = adb7456d405053624755076f2654f24f2bb521d6\nR = 00a58843085162864b2246c619d6cd38626657eb8f13ed5921b73071b6bddd56640ec9a55e7f2190481ef5e356425749e626a4b988b811cc12dd21c61cea89640095\nS = 019fbd1f9b108aad0208d1a27735ead4685f04d01882ed18c217d8e0e0fc71d8a98d3c45c471327e4dfa631cf4b826ead3bd5fd4bc0426fcc95b58bd354d012cfcd2\nInvalid =\n\nCurve = P-521\nX = 000933ee70d1470acaea66626394023020ed521d5b9a52e068b827d23af283bdbbbf3999b0c2ced0abf607b467fa86ef89bee3852d4e993df3c2c73a49488740cabf\nY = 010231bba67cba896274e7af7f9c65403e48c56356fba772120aa8781611239d0f50b8958ec8709a301078379b59123b47c5edb87bc2327cf607f876154904b93e92\nDigest = 40d6902c8bdedd45f6f6789f8657e8716c66d6d3\nR = 016f79df89a498ac65bb39d62e1ce82e5578eaf778084ec5926a638d50ee5943c87955c8255340a90f800fd43d4dca125b68dfe957d148533126d5761d711412bcb9\nS = 0175198228ce2eb0222d64eeaa403c0571989046e638419ef96612a90094a26fb819ff1addd823f8912e07ff32ac72790c38c601505b45dbb9cafd1b46f352aaea0e\nInvalid =\n\nCurve = P-521\nX = 0007a5694d537eea406d753532b307c5b86e8823d31e81f6e7371e6def61f31c8f706c1b89f8655e54f68e6821096e6b96a7c3752e47d8d3ef5da135f881927ed92a\nY = 005810620b7d83d3e7e48f7338b18e03c2e97dde5dacdd5d54e4c7e75d736f159dc45431d5d3c07153a334fa60567307271bfb85cb0fcae142cbd7baaddcbdfdc018\nDigest = 6067b9f7fd22c43c4a91550c461201318220cd1d\nR = 002cba23e78a1f9c6c18bd26321cec0c26db4f1100b986d37a0f24fc42c75ce4731a2876e8865ae21700289734ad5bae3611418ea37a13fae67db2d1a58a86f85422\nS = 00c438e76249b5016e0b83ddef5447420fd13aee6f099a0b9ffafcba4e7227f70cc5dd5abba03532ebc50424fefdd4f6d258ffe044573aa51b8a5d1d5c6e5dbf318a\n\nCurve = P-521\nX = 00a00f34f4572450d93607d3ffb1fffe7c86334426ad60fda27aa647e67c34b2cb1f0a12f4707336f1f708b3ba1f3cdd599ae92a2be92f9ae5526eba9d4adc052fa4\nY = 0166808273466ec1ef2865e92b263b897131c5ea97fce1adb1ef88c8ac2e63eab97567d82db9c0825510812db1b2e4cba705ba64d33ffdce676b7f3aa2e343f7834e\nDigest = 3d0012d4148fc6bf2e703ddfec9293c27a9fc4fd\nR = 018ada7d95f4d05350ae95494b7c81e233168ec88c5ebffa2d2a3ac74cf90b6d9f80407276f92bd9b3ca949e5d5cd51166e29678aae58a284b9e6ceda3a550b08c15\nS = 01ff12f5e9b12efd941e8a445ac036d735e7bf64237972002568e8eeb0dbb887709b53cfa67186f4df215e2a9f7b9feb045270c72196e19335a9c554a19cee0a8397\nInvalid =\n\nCurve = P-521\nX = 0013a5c825a9ffe6179cd106b4a2343fd3318d83cf3be58d971704d0328486738f7536041cc69e6f9548851cf591ba080c4a1c4b4f5d95d216138d72bc56eb63779d\nY = 00e79075f5acb9f52b67f8411f310c02aac5a98dcce0275438e59f8a2a3754ebe57815247a00d3506fd342d3d43607ba67d4cb608da3a9296d57619223c02e0c4f8e\nDigest = 4ee72ed3337db64795f3b859021c9b6b405bfaef\nR = 01ad988418099c6483e6a8d62fc16a9fe571ad35c8cf111c3f35e680541a2f5ed96896715efa4943f8b46d20a0abb228852bdd5cfce1787c150d01231abc065718e3\nS = 0095c1e7dcd09375d1760700c5351ab23618b1fdf1b2b02e918c0ec341e5156300b602f7960e0eee2c027aa0076b194080e63155dc56a81699e8aea36ddfe703b94f\nInvalid =\n\nCurve = P-521\nX = 0092bf4245f0ece3a8c3a723de152c6413526c333a64f4f2455e7b45396c1614c473460246f49c65e957dcf779af0b675eaf5ed7800539d3619a6fb131f1bc610968\nY = 0047689692e52baa835ee9c49793bca7b01ed3bc4d4c396a54eaefe0520840a31fa3c35cc0d2317ce367881a15a3c06e7c26b192e90fe16c10e84c92233910d7df7d\nDigest = 8f0ab491cf25b8526f8da76e329bf886a84c279a\nR = 0141f936c6a5ca580e5a18caeb85fc13e9ff57d50d89b8447c8645ff66202e71eff4303d57c28ee6b68915de6767a124f3652c22940656f4227d61ff30b17c2b9aeb\nS = 01c7bb4c22e68920bc6b9df0626b09ac79e5b76ba29d0b632c0b892c8661087461c4131771a2b3a9834ea4b3d3bddac9910331774643ae22b613bd0b2464a12cfabb\nInvalid =\n\nCurve = P-521\nX = 0194cc7f51d9caff692137190541f5aea160977bedb0d3b67c3deed6669bff160696a96550934b3dba4129e204f068901c84c821523bec91ec40336dce0d2673e794\nY = 00709279f85ef54164fd7347afcdbfe42d8d14e6808002b3e0b59bcbed80ce0c16e2db1b320c1d98ccdd75efc50fcd6ce91df6baaa99ecbee6df41da9c142a74386c\nDigest = 4eab87203ae54fe6b3c0913cb865266d7be8bda4\nR = 00d2542223b0a5322249e8f1af6d559a87c39aa5c3c7e595b07fb7be4d3bd0184a419651f96811f3e8c9c578a4be68188a8a3a1ff0ccba4af5429ef95c64f34d645b\nS = 01ee3123fd300cceabe2ad99bd1975c4594005ac9ec31d44ee4b9fe325d39049a5a83b4ac2a7f0b603c82dd88d136507bca2d383c7e8375c36eda82a169b3e4b4034\n\nCurve = P-521\nX = 0145896c96ede10f5b049edc0475870c0c6a09ab9cc47667146deca1729d98c124bbe009e5e161b88c7ff61e79d6f85b9c4673c0664e039dab852e8f99fb0ae70a64\nY = 005afb810a0a9c7f008850e8ecc67d907a74ff9e58f6d60ed14b3ed31e4751077a60de444a43d4d9a9b944905b79ff0c0ab431b21e0fb160cce8f08784677fb58bbf\nDigest = 7cbce9271d00009eab429db9025bb4edc9ff7151ec964873f74a5277\nR = 012f63284068bb815ba935833f382ee2a8a5f64e2dbc9869be281ec7d3a28e2d7d2a84e214d79598213f82217d95ba9868da4dc3a3ec7fcfd7c8c457a053e8b0ce5e\nS = 012b62183c893455324b94b7cea2fa2e1c912362f99e5159e229ce67a80f45c7c0d27340e57b4a8f40b80a4d572345df083061d311b578a73c8faaba4e6a194b4726\nInvalid =\n\nCurve = P-521\nX = 0113a72cee148a7428065d8f8e89dce2dc7e1bffad46a130af8f6fc8d0fabf26ad76bb64ee078ee66fbf0212987e363e176f0106369eb1e43297851ff409e935e216\nY = 01a723ee3f44aa68e1b43185a50bfca99f349ad47d848dba8f9dfbd773f9f53bc0298bf43130e19ccb8021be39ed70c7b1f7295cfd034e713878f47d7508059a4f81\nDigest = 0068909a03ecb0947b2d585eea1f5496a6b3e50861089cdeb75b516f\nR = 0010b883cb3b76612b6cd8f9288459d373d58c2e0366f300623ff6b28224036ad1df47d1d9df8037a18e774e0bcb42910e96dc7d7fee0b53686d5d3af13485453c66\nS = 00a29c87d9be8e91da4333089043693425892f50333c7f93ab27dabfa5cf89697f366573621a86d523e850caf31a4c26051e76b91ad3e20a391ba724d4e58641cc00\nInvalid =\n\nCurve = P-521\nX = 005766da7e6d9ebbe7cbb5b9bcdd657edf36fc4a7d4a173b99bd1caa804e35e937289e05cec2cedf86f0f7a8de42958e6052500c8a63b496ebea88252cf1b44ee5da\nY = 00ad35038ce07b53148cd7d0b4ee8c8ad6d89a2c68c0458d0d694036120893ba24a52792e0c8097f86591dce015151659908829f323a5dfaecfc51470779f8e5a5fb\nDigest = f743f4bafec75012878f74c39b30bcdfe1a0d0e4da1ba84ba8320796\nR = 011c5357042c1d98133e76f0a696e27a22738c78ff17c903d8a5190b3c5fb186374fce58fe47d9933c2b361cb20546d730bb5602fab6c8d14e0114a64f9d2b1d892c\nS = 0115ece7d8ab1b578b0e870faa8139d009f6cc3cdacf3172c047bffc1a31e2c66b198ac1ab8c90e826af291de58990e32b18e71b26fe01b6bcbaf86db6b1a726f51b\nInvalid =\n\nCurve = P-521\nX = 00ea4254c3111118d3d859c704474251fa951b0cfbfd2f249bd32f70cecd80526e8fb72c1258c994d8067539e478890d5637ad925ef43e2caf297fd1eb49d9acac77\nY = 01ed78a277869d8bf7f2d5eb9c2753aedd89197fbfcaf36a633a4f3b2bdb5e706983641156f0aa6e13d38e907546a2603bb1cec785bc334fb03033600a77fed391f2\nDigest = e2a441ca0e946139960943cb42fd6a1d6b6d6fbfb9739d8fba72ead7\nR = 0127570a0c0141bb4c2ababef5fa879e55c1637407686b49535fd17b3b911452650e302e9186d539782cde4d48ee43c258572ec299ee63d961def2333a4f1f8d2af9\nS = 012ed61b0b4c889bb36ff9ba648318a2b11604be6fcff858adbba8e59fa49fa30e2e20df5f2d26a8b9e6d989ab4e50586732adfdd4ca49ddee11cd889f0176a59ca9\n\nCurve = P-521\nX = 00549a23bf1b24fba2e921c5c2ba78809d6b0623fb1b92a506690b668c946daa393ec42ddb113f10a34f1b11475ac1250f119e83149d5211791dbf6cfe4f591b6f44\nY = 01ecdd45de1ee27f6abc1270fe11f770d4e26d5dd12d0a7baae6f3fc9c7f074541bb05ff0137c3923e1f858d643ec63f7c50f776f45009f2998a0b4f37", + "c192210ce3\nDigest = c063ab8a65966f0b7d6c4127d45ad56f57e5922f5bb0537f71ec51d3\nR = 012bf2daa304f162454686f98330f526a21d066b430969547ccb0ace347cadb4af7bf62b473e33aa1f62b5959b7c431451913d5b1ad297b4c1f6bc5f3afc9e052794\nS = 008c7c58e4703f46fe0885f353f97bfefbecf5f10b95a02d4ac7764a0a713919004a153ff443ce417d24db60d325357408b59dbe7ad043e7fc7c1c23cda14a867d83\nInvalid =\n\nCurve = P-521\nX = 0087784b171cb62451eec46449a2a1ab769225288a092d833aeb823c99de8542ebef8c290f96636a45e2a9cab678a2c55e10283ceea6780c8d61d341952643903f51\nY = 014a9315a888dc2f774633ed1c5ba95e09b6898764dc5a9d568d727b56fb50d3b288eb77c9db3b1cd31aa204ebf0f2402fa513b782527ce5c5652a97df6bb05e35c8\nDigest = 4a06dfd0dc3fe089a1081066ae40a7297c9bf929dca9a6b6f2a41a49\nR = 0137a47e2f3e1c2916a4a590adea04e93b4d18f2d548a3cf832401bcc42b1b35ad820e88a7efbc15d1462f518342cf81d41a40abd68651bef73816f58d1ace55e338\nS = 0101e3233d8da91e092a6ed4db279c594494f73bd8d6d7bf5f6a8437146a29b1ba78fe3694502ca987cf108af9f461b6341735b8c2a21653d1b52010bf2ee02e02b6\nInvalid =\n\nCurve = P-521\nX = 00b97948459489a548f94459fdbcff544e87f5b93c3ffd8baaa997f616eba75187f7a8fb13d848ddf427aaefc3cd001553c213bd1b1c5d892847eaff2d2663d90637\nY = 000eb07b08b69af1f15260ab6a8eb84f9337d9d3f99148e61f5ee06c5a031f1eb467e897b65c0d14773018929d9da129d3cd66b8f9c11ddede32bf9f339e3de57b13\nDigest = ab236a98d4f9487b888cfd01d52f7d3746ffc189207b6eb31d4eac5e\nR = 01a31ea52171394839ce630bb1c2912b42b045c5143c3bb1c04a5b97a738887f8367c9607971b00964d5d9fc5d921877cd6b099a84e19024cd77249d263e729e7f7e\nS = 007600944031efbf27face352b6267349f3cb72eca5679d74d4a0d47fa6e84b391f4743cf2f4704afcbb9dcf7b522d812d268a1ff393d0ff1b44b11b6d75fb84d750\nInvalid =\n\nCurve = P-521\nX = 00edc8ee8d40918ab15122d92522bd862e9d46bbb6550ef22a52de0e4fbb6e4a4635be48406bf54bfb24dc385f506086c0a6e1297cea60ec847007e798a632867cab\nY = 003e92534bf025440635fcd4d40e4b97c5396f33eb16fb1e3390830f24737b6b1645262b0336fe74284afdb99ed6b8551f82a449d80911b0c0f02592c7d210958b94\nDigest = d8704904fd8939d7a1017495a039883a8b07f371eba096b2a54d3057\nR = 00a1f835da9b892687201294cf15769d7390e62e46efe1f61ce7ddc80fc47dc83c86db35a5096cee41289d66d7803f7e8e11fb9c9ca867123027af343fddf2b1b89d\nS = 000b5b9653b2533da8e52292f37b86aaef201743c6d12352470656ca165092d74a8f97ab1772299c62b93d61ec097c957ae231d3c80ef1b9dad1f40b06e0c92ece2d\nInvalid =\n\nCurve = P-521\nX = 01f1464035dcc9c6dbc5e32c318b6b3e9def33cd2feb02b7d4b7249155078915034ef823a4d55fcefecfe6a10603891a4a9c3e6ccc1a05809bc510032d5fd30030e5\nY = 00ec160b9da57cd8e55630ab9524301ae7f0f53be5d55f7e7b99270272f6e6a33d6fa5fba73195d242e7ababa5cb69f6bfe9165ae3fcc1645df5ca4b6254460029b7\nDigest = a824681278f1dcdd937c6d7d97e5c028106277a07c3926150c7bfd39\nR = 013489e2917236dce23e929f8c1ed0057b0d70c68762073c7b1787bd3cbdd084174f24aef0af10d09c77530c3f76099ce53b63598c0d8f8ce53df83a9af11b7e173d\nS = 0111e1868e71f5e83eb5e38f97fbc466a9e729e19165169ad81cfd214a1ad1e56fa47bc97ef47a93511397c849e9da3f7cee68bccfca4c5c60762d99b8c41393b879\nInvalid =\n\nCurve = P-521\nX = 001248e0953894616aa4b5573644bf4c0b1f45a5c0a47a193c3ebd2215b29dcd387d76ac98183894bed359f06c6de7bb94e975c3e6f9c1be3fbe3b763e2501b524cb\nY = 01971e69438e24b67baa6203ac5904159763202c16d6afa91298fb43eafc867bead0e61be1601a3fd70219af962f7140cd0a29cc26ebf765c22b895ad0f91aca7500\nDigest = 4d9ded4947fe2a964a6d54f6262292162a14b054b5d8606342d32523\nR = 00215d8b547b0fcb9d18eeb5acf277f90d97ab6371aaa6e8a3c1dfe66d2c6ba5fef45260028d25cf600bb24560e599238b285a823a0dec5e014db4cddfb89ce64aaa\nS = 00bc5c4dba8bea55b73866c0b4bf739c764ba67121b9b1fb261b282fc1882f22eeaecb5c89edbedf90318ae8537554dd8604930bb893d21ba36ea445d0cfeaa28664\n\nCurve = P-521\nX = 00bb34185d844a096f7f673f86b317c27e84fbd6938c1e22e4afb1120489c38508dc643a92ecc963b694dd6f2c7d0958966d49b20883daad4b00a8d0107f2b8ea2ed\nY = 01e5d3adceda7ed7c7177040b1845fa8064e187a16b9336294c1402ea2eb89e6c14bdd392bbdd2ab516aa7ff3987bc44f6dda8109452db403b39cba9536a39f1ddeb\nDigest = 2f2a916d2c907ab764986fb1ee972907379a8b66a281ff6996e1d158\nR = 00d1f2dd7534f9f093a281fb538660324fef9cec2dbabd3527b1482f980dc08cc84de25f83b062ee5cfe1d3372555b7bcf618c71fc464caeef5a8bb141f39531f15c\nS = 01a1be81c9379abd578ae9663cad8fdc892ff46144f77da469b832fec4e5eee8a6465be3f211f26e3b72de5a9e45aafa064e24d501fc1963733388af20c7b9c9959f\nInvalid =\n\nCurve = P-521\nX = 012918b48baedcb53edc782cef70d772232d1d9e1f5e995f70c76b510f3effcd5c239625e3ec5e37d202b37e4e6047a28d70b489b44bf5bfc2b2cf03c8abaabcc4fa\nY = 015ada9031e346257778a7b6a7d8285b9d66cbb27b1686ce3de3490c08a3d0a64495906f0ed6e1e4b7edf1ff657091f97bcc383e16f2ddb3c723c53d559fa0c5ffac\nDigest = b1e5176dee3fe3678e36e8471f4e5769b366271eaee73858e53d22fc\nR = 0074cc58e3fdbee1b3b09fd82621bd593118fd4fb372adfedf8895f1775add9bb38fceefb42298c16cacff33af75e38443388b448ae251ff8c049a09fc7af3cf6ad6\nS = 00c51622876dadca150cb6be19dd5de70446cffd2bcaacfb8dfae4e1c7d58c41defa4589668b45958cb5f164bec71353ee57817e0a882c8643fa7bc6339dd88480ac\nInvalid =\n\nCurve = P-521\nX = 015f8a3371c14a76d932a83f242c56097843ca370385db632fd91e05939ce0f87a94028f9f197c435e89525da4624db332ab1b36a1a59cca8c1ebba281ef5ea48bd0\nY = 01bdd578714cab38b3d07f28f286a55659cb4de6bdbf13ffc149f0cdf71be6be2d11ef800614a1ab97731886179f50360bb98a8c74ec5a222dbc9b6762a4f56734e7\nDigest = 3f9668946bb66d9f63774aa4bd7f15c9dc94da241867b13570e7e4aa\nR = 00c15e0d1c06abac899b90c86ba6e37c8b8cc982780262e303c94a0c9a1ac52554423257dfaedb70760e6ecd66f9b74913a283a2e44d05dc8eb85e5aaee5a4323015\nS = 0014783e744895c7b6084d536a58e9d05a1a53a4ab96321d09cc4c89a908f75f01515c45df3c471ea02cca0bf9f07d1873bb3404d3ba5b51dcccf30e9a5ea0bb151f\nInvalid =\n\nCurve = P-521\nX = 00af896543430ecf3b22534a1a3c1c84fa0ae28f1cc659432417426fcfa814faef9397801f16da3bd610206c2ad62f775ca01ebaf380fe64e928cfcb48213a268cdd\nY = 01bf669b84b415f99e8e997b4e67d0b9f359823e0df92688c760ca99c08350f0375b301c404eee80d86af5de31e95d64ca95d9494e2d8622edda97282732e7e2757d\nDigest = 5d90c46baf8cfe5541ab3ee8f3aa02e881db1d12692dc16b0d013420\nR = 0191e914f1520532b8b3ccc536b103e4eaf2aceda838117b7090de8b3c2ea03fbfc1f54d15d6fe8e6d2cbb794d0206ae3387e808661518bf5c6dd608b5a40756e24b\nS = 0152e95ec2ba49b5e4d65a3f50a29d140b144f10d2eeba729e439f34ecd7b97dbe672dcc25647446a49e43f5710280d79fe01c0a7b7956fd80bf35cb6d7e560cc983\nInvalid =\n\nCurve = P-521\nX = 01ccee36646013645ac83b532106a9d78828cb387819bdec3f7d982ad2744292281a00d59cd4c1290365d5b821cfeccdbaa8ebd5f10aa1b4b1342bbca27e7619023e\nY = 0171cfb6c2a95aae42458b6bb582d8efbeaf7219594dca5904b2b3c22a203eac193068e603acf1afd10125306595d0056e2bdee05aeef2d4b774498619cd5f1a3664\nDigest = e201f8ff4c18ef73b7ee6ea2ab3cc482e785bc77b71badf828d9ef29\nR = 004347e5389a6b4a3de2e543d7474c28e5fa284f5268e474f8998395a7dd154fd0c09253b8160f9bae840189161bc3c85db268d500d6aa82a3c383aa025553fc25c9\nS = 010623dda9d2c39d5e6d463d96dc1ae91f0c3f34df698dec0de2e1840467aa54a5bdbe7815426b175f6c19d1a5f09cec6f5270658a80ccbfcf58a30e10cb342e9e01\n\nCurve = P-521\nX = 015bd9bf7a35cc60147b32b64e0e4e54bf9ac2173cc6784b3d4ebd076aa5d45c1e3d0846b20b61d6342341a8801a2f63028c991831318245c2fe31f8acde6bf2003e\nY = 01afb67c9c700ed332b47a2d148e6ddd3571e138f02a81c3cfe6d4dee0f512d92e76574fe5797c5566c05b3239fabb212c735615e719e718fb40fa6783c964357f72\nDigest = 3dfb0c771418d4f1ffd092de8aae7a563af2c9e559ad0b53a5b61090ea77eacd\nR = 01a341d0e8906239faace79554b90d1445bd28f703d7c7cc8eb163337ad3d4bfb3725cb06e618991491534d399866df5c5bdef897c889947b21148d89c657e64124d\nS = 005c5b728837d44b7b6935efb2b721b4f45c1675d803d87f70158e451434176d9682034c9b356b5f9181e07599bdcb55e5bc808fdd36fef9c19ddb6342c975262024\nInvalid =\n\nCurve = P-521\nX = 009f21a6e7295b183656709089b3c647140c81f71b0b3812e6de22c52245335599ade6a3116cb70277dc2485f91c7b1f46d62afb60fc17a110358c9a02e02e010960\nY = 01e914284cea47dd6836e7ce899d0c9a88d67fc9d039ffa9fa5bee58d247e0d0dc9251be8b82afd3add327f98c5570bdcd8ad8827820032774d19db09232aeba190a\nDigest = 6b7b1a121d5e8f4d3d0294abbb62ae16561f37b6fbdd6d519209c6663669323b\nR = 00ce4b2ac68afd071531027b90d4b92d9b0e1044b824ccebb2c9ab241d5b909ead1ffa2dc3d330f57187efbea7374bc77c4f7ce7ee689aa5a1e27aa78abc3cc1e751\nS = 00aa85d84f9c7fecd25064dbae69c16d6fcff38040027bf476c7f913746272b5d4b9bd34d2482e27730522df724895b99253aed86011139928fa9a272892f8c99d8f\nInvalid =\n\nCurve = P-521\nX = 01098be00de7b2ee7390f26eff82ba5b6de8f04d7f11909193923866d2feefad9b01c5d78b699ce0a6900dc2a3073a03505ae946aa6f384ab0573ec9d17fa775dacd\nY = 0106e122e71", + "48b547a0314da646b6f834e66c2ff7f64f39da9dc7983e80e84063e23c8ce12994e8495b7786c2b3180d7f22bd2d2becf1e1ba2029cbbe8d4801b65b1\nDigest = a1aa4766ee9db4cb7bcc31a333214b096fa608623acf5a246ba0de66067d61de\nR = 01092e5ccfc4f966c3281a3924cd527606ce8e64cfd78f57373cfd702f528368beb71eb1a2cd64005bb172cb35b4ea61af88cb06bc8f1a38e2d75b235d23947dc209\nS = 01aff29a28d935d0e10bf8015f38ec128e0ec047f04020d1474366807b140e4d4a6d069aefc8dce723fcb4fc803df30b3880cc6d0dfc75c291d848d89e06ab7e24d1\nInvalid =\n\nCurve = P-521\nX = 001ec67de63455605b31a460d4faa664697cc505885577c0844472842dee78fa6d522e4b942d3c7e2de684e6399f6a44a328ccaab5e678cd99d49f015e35a934cdd9\nY = 019b41da41e7506cbcb7c31d39751669cda166fd045c86e1fac68d39d2ebb0f1ed50b8a923511e1306952888e068092b19130181c2de5f25c5e1fc4fd9ea202258d6\nDigest = f00b9327fbfba5a3fdd7bd9331582822b7bf8bd8f2fc97f0af5ba207fcc92b71\nR = 01e1882a3d98c236189a35ffddc9fecdb7cb5fc5e3d0784eabb69d9c37862dbb38eed6c5567a0abc4f74099329681b9a0921515f1df83ba8948b51d3871866a8f7ce\nS = 0025ff707889678f7cd05665c941a2bbe13622a1e75ab986cc86778658c62e527f55804ab27d0643f6bb8adaab0614eac47f33f0e1fba109c63b28fa6732a5afbe49\nInvalid =\n\nCurve = P-521\nX = 00defff5ef7cc5de0e1ac32261e7a74e8c434c0b51f76df7566b612cc5b8201e7b38c51aa6118b6307f436394bf452a72224c977e37e410eae9525df2ee00a8123bf\nY = 00263b7db73558ddc783824f0b19776802aaf5e46ccb1b1d1dda07d2d6c5843f5036ae8d381b235ccd2ed04eb90c5d51e32cbd7acdc7031cae63c06797556fb66fe3\nDigest = 63c7b65f78581fc15992ac54b1221f16545a6e50a0c740e3f3a1685f09f358a8\nR = 0089bd129a537840a52ef434d5a8ba4add952f72f22a84ac4523ea0bc02cbfa8b681ab0ed3fa2bca24ae575f23fce7efbb9bfd28e465174158a5ad2b08fd9e0b7132\nS = 0004ed533337791e05f8d097eabdf4be96b3fcc9f876d47fb8c5c7a05cbddba398cded2edf5ec9b7dbb4e32c1374b46953d66a193c211ef12de4b9d73adc369d5e95\nInvalid =\n\nCurve = P-521\nX = 0180f1e933054473e81ac82aa458094b7cb95d4b8d399600420cfb082e37980414909a133d5e42ebb7d2defddb34a9fb51fe4ab72e88526fc28608e152aaaba3ee5b\nY = 01c5cee9fd322d1c3af1726366e8a1e3f22099d9246d4bb02708eed89ecef1fc73926dc97a5c263afa235edb39a9e63d9690608846abc482397a2d8673c5d472c970\nDigest = 1f2f2957156270593c0998ba0d12c6d2adfe8728ccacf3332f9e6c936c33c805\nR = 017f1fd4df519ef432f68b5f426ff23a8f36b5729fdf7c8363d73f4e707d9800c7b50174fc3d66d89813a5265f8734602e5c998c2d7b51bdef6e90ee5a527e1357e0\nS = 010560ed68f152d649493c02c1e32bf4138aacb5f2d7f449e7685336edde24e5ce1cfaa2c54530f1419593614971896f1a877dda7bc5d56ccdbab18e770647287979\nInvalid =\n\nCurve = P-521\nX = 006d8c16536b17cab6ff41f5df4038fe416c05ccb601710909708dc561b02ceed9cf020441d9daa075e8fd604531ff58084035b1c19a498b82582f5b20f9cedf61f9\nY = 00e89d71c66e55c4f5bf245413388bfe9de83944b11d1abdb4692db7da8a086442965ee512f7089f89464dda5d7786e52cc26a8a30bc8824cc56a289fefcd42bdfd2\nDigest = 2e139493b5db177dd536c562e0c90445b59a686eeb27e0a7b7cd93d72fa4ab7d\nR = 0087f86cf4bd36e8253097ac1bc8500dedafdbccbe5767ec25e53c73c4f053f3b37acd1d5ea4c16e4058919b61d2a67393220ffefe07535d53923ace6815463c4c31\nS = 01def2582fd0df89fa28c9ce882f5c3846135f51bdf7f4b2497b190136ef04618eaa22a8c5a117b0adfc6425eac3111b6558df145a8b14ad39524b98659e01d51c21\nInvalid =\n\nCurve = P-521\nX = 01c7fb4747a409a3723177c38c9943b81b2d0aee867b8f424e227f3a664f1877c560d37953e7cc09390e05599292bde1ea345073ec365834d99ac59332f6e5bd29d7\nY = 01b7485b454d5ed5d581c7897a7e68f425d8c23cd89b934747d90765a5fda1cfc3d997af61728f328cc8bdfca8a3ae1b3b90be13cf164c343d199b8e16b0400f3e33\nDigest = 8ba31656449e19607c84d9a8d689193f30a6111aa87b8f978b9cff5abac9f827\nR = 01552ac2dfbe67c6abad8d3325713c1e28537eae620d805a73dbaa4e5e04acff6ae0498346d6e41df1cbdb20b70d8e548564da8fa239fe6c6f28b6c2a6ef57973097\nS = 00cc9e60b694d792f36cbe9adff8dc79f0f75b3ec11ff2d54419227c7566e0bd441655eb30b558c78a55ac613c1bf3c3058ea7a4bb70adbf5b49fcae15e54defd6db\nInvalid =\n\nCurve = P-521\nX = 016c0e1d1fc81e5069e9c02794fdfe1f5a8ac5008305d9ac2234eb0117e565203acc6777c570f41661c5db1adb26097d7f5f2a1762c4f8039f1b68caad75915baab8\nY = 000b3690995d6d881dc1564f792ab174cdc1a0fc6f12d69a21088d5e82de4a7d56947a2dad0ce64d9ad0675e72b6da755e3ef82c9cc6d532378c23112210236889d6\nDigest = 4d3c537785e9dc1d434091ddd3be8a48b86a02df7e6ffa269642d44cf8f32c25\nR = 01316e9a934cad1aa0f7dbade1c9ad942d61bbe1bf41b7b95e3b25b761b9899f6125790369277aa09fa57340a2b8c3c609a08ae7be5a3c09dd4d081e6cb54d9f3061\nS = 00d6b285f91c3c8d6192af624336caf793ad5300d96262f5e25228dfb60896c4e28e61be22e92ca7d6e11a02f36655441032bf291f895aaa117f6bfdfb422286f255\nInvalid =\n\nCurve = P-521\nX = 006194b1780a2416dde8c9402e3ddbf310c51ed87fc40530ad5c97931b99336c00098337fcca7b01c634e56a7874309177364e6d4c24c2ab33d6a1a09a84689ad0b5\nY = 00c5bfcdf640c0a7573ecf4a9dc1aa75db298ddf1a679609e0669182a594b9b9a8186ee961b902d84fe998e3b380c304a0be98974514966965bfef9971f05a57c162\nDigest = 23e932281d4fb08520bb7c563808e6b9ff43e83fc59977df1ff2c00ab5a0f7b5\nR = 018051118c2d8b841c6d78e2e5068c7305039cbae1f8b5a479b9bba559ebc45d8c8ac18d1f6033713871e656fa4eba9c1c0892e7263bb22c46ec3c72aae92afe2c79\nS = 00de0db6a6ba5e6a953a126be3b87d6c895f4bc2db27be223109dc67cf115bbc8c566e1c9a1bdf1a87e632f8a0e4b31331a086caeb60793e87f03b404140aba206ae\nInvalid =\n\nCurve = P-521\nX = 00397714abcc503eaa0c18abd1fd26586d28ec1b1035d37ac710f2823911ec9afa429b41ea89cec13d5bcae9d6d7147794407e409f3b267cf4dd27e8c77e7ccf4d36\nY = 00a3a4b749d19b84708e42b59e9faa5a99ac0f0a01121655fab87785fca38c8cd4277c8c2c9a0024ff608c3cce954596315dfe0e3b133aeab08bb5389eb2a4f1fb42\nDigest = 61bcad3941eeb4005c391745635dbca42b451c3222b6123af2cd1279f89f3b2d\nR = 019da96a866db12948e0aec7231f797061f345739d439bdaaba63e4d03e0bb52c3fea2fb593347d983f24a3afa6a77f476e6bb49a5de843b4c4755cddce97b8b909e\nS = 001bb442f428b2ca445a75ad88ed49d965d6659d748d02cebf78faa1ecc187b606f284d11d47791d585dc371c2d91848a55ca7b092f06d561efcf64e0de0814e1db4\n\nCurve = P-521\nX = 01af06b10d357fc3c807854b4be235f81d5036da4df1af6a054a03ff800c1aa2d59c2ad5c0e25ed25c002057cae4b4adb92b95c36cf422a46c8833fd8968e0f32441\nY = 018432172be0e535a3f3a5f6d6927dfbf6a00051cc1983ba25410ee3598a60dd1f7c38526de7ee23f8e9ee973ffddff49eb3edb28adc7d094cd95b63d52ba45ecb58\nDigest = 006e84c19a348fd59fd011cfc5c189d0bbb68bdd2ad30448e13ce2e01f2cdde0\nR = 01396b4f044919d0ba5ad43004cd37b8bb0626ea5549d57c532339358ee1794988a7c9eab91a9340dc2aa0f18e89b236a6c20d03a6e98f35c011430fc4213cd65dbd\nS = 0101e5a788a867d9b5a4444554c9651173f9f8e15c0f39f9adb66c18ef8075243f23b95d5229ccf5f56b87f5c50920b01b22ab7476ecf4c865a3d6d8f2242d422d8d\nInvalid =\n\nCurve = P-521\nX = 0176f1276918fed24a098d6d03077f3c33ae543316df1b6b06ce877e74b69b2cd4131fdf797e77e5f6391b0b32411120d03c0c59ba1721a7187d18708121d6f3a86f\nY = 010f9d38b30a2da1a745840de7c9994578e32bb10f9334b46f533b6eab550aa55048e4ac601889564ac8314e01b61613fc7b8e2bd3f1a188c5c5e869af16a8d61d9b\nDigest = c11b8b03fcd4f2ae25f60af2ec2ccc9afcbf760f61782fad21a02d69b1024cdb\nR = 019cb5639a321e95214c90a612d29c9ffd5ae5aaa2a814ee2d66ac1ce1d2ab3229009129ec9d472061444cbfbf50c7e4cba09aab65299a42740bce7af3fddf2a1f46\nS = 00082ce6bf1d809d3bb4f9f09a95590bb64b0c41bcee5fcdd332947a9b59618da5da897fff44968d92635e7833dec1e91d8d99bd8b527609393b446c83d109a32243\n\nCurve = P-521\nX = 0089565cf5838658fd36b70cf5246cbe999a394562c46e9d8057928e0aa9e04ade6002cfb83f315e06790e58ea833b3bd64fba8e93c5fdba8319c5d38be7cf25a21a\nY = 008faeff531e683d28d817045a03b2dd22e50e6168f1e5fda5b5abc71859effc5e5c45b88705b62ca090e3362a8313dc472ec2ed970bbb5029200318e7582643d613\nDigest = ae3204e3df3b8aa0265cfeec6b0facd4b3025af6af26fab931ee5f2188fb4864\nR = 006b5237ad17da6037aef116532b3aaa70172d0ca0eebdc478c35e6f8bd0f9a6472d052c5a18a23dcced7be6e5e7b6d0bcb5b3cea707000e7d114b6f41084d6f5620\nS = 005e2556425b35e6495b137f7dab522c7e7b812004c87a002f6ce4f4b6cc5f967b8f5b7d3786a17d5f717d3ac467b73e176e90cdd8c5151a6e62fc4604cbeab7e717\nInvalid =\n\nCurve = P-521\nX = 00aa42473f80d9d81f6d41ed05c8ba35c005f90e2690f71dfdb12555b7590c7a8e95b618368c39f4e84d6cba25f522c9bdd256c60d3f8c8425ad313701225a9cc9c4\nY = 01992b7966b925f42c91f810eb05d602b804301849ea278466a68e5b616e3a0bce110fc9250db14f9c8f5929347e1bb8727bcf8072c6aebc26958954fe96df04e139\nDigest = b7e0d79517efe3d961ca5bbdc0916bab7a32743f5150d53cd60300b3edceff49\nR = 00cbb35513420f206bd26b568712503b66e159a54e154c8d4e9c661aa954e0bf425871275fff5e8f368c8ccc77ffe6adf84ba88a84483d8ba5cc862bd408f6a192c1\nS = 002ffb4e461e3161c801ad217a0483045181013deed29eec29cca94776139ddf5fe9d7771e5ac7b637a4bf7e5276940489bd8ae36f41ef6", + "be93cff4b96bd0e1f3e59\n\nCurve = P-521\nX = 00984cf3de2bbaf1b37ad4e9121a1294a0128d8a031ddfac7a8c5d7c9db83699de26c50012d42223d902cbd4be7e6fb611f4502ce8444d43d3eb0685aee07349d0c5\nY = 017165e8feaada26cc599ee394dfb5de7e2201004f755ebecb92ffda0a24be55aba88ab9b3c7a575884ffa7b78b631806f54e01ef875c5819fd2d52dd6369d649615\nDigest = a0f94fba76704fb2749e4cd454312e47f7606ece0b2013748096de2ff30626c3c7c7aaa855f33908ed60fc8943101625\nR = 0036c8554602661d9d8f4bfecbb099f01e9e314136e50c6d026de2297bbaf66213ea72fce13b73bb07e6e333523f19d3910983ea5842a1b634b3e3ec8157d270b496\nS = 0129b439d3ba2d66c89c34be2a674013128dccfcef33f5d3844c4465381453c361ce80e1b52b6a611749bc70933655caa56da2c5dd6b04defcd8baeb2d9be06f3caf\nInvalid =\n\nCurve = P-521\nX = 00f976d58a015d3015a14997fa3f59ca8d762a6541861be923d6110c9e742a0a2a77d59a6a9335c67f13a626d9545b27c072349c3d20b80c35b0a9490f3e6c5c1b3c\nY = 00425c22ac0755c58fe3497c1f1a9f537d5e26127d9b031359c2378fd4b13f83691a854444eac3fa346bb5a63bb9567c122945ce99d2aeb0bb1b956ad348f7c9c461\nDigest = dd84b1706091da5e5e27099894e439027b9f45c56e0f31ea0cc528dd587f13a45b9dc87aeb90bb2003e16f56c60b8ad8\nR = 01ca7346a2efe39e03e627ee9480a9b7c925a6677dc80932ffd67ca52b7e46acd2063402545d678d218ac579a64cf1fa4eff4f32f92d3fa4510eea22472dbd3daa72\nS = 00893d86a6502d5973f6c766413e7c7ecbc4583577c58672ef36a76c83755a0ab65af0e0af0ad0f3e6cb8f9ef67669132ce7e996d6122cbbe1dec710a7ba9c9d1ff9\nInvalid =\n\nCurve = P-521\nX = 0066ad5c073425bbbe3a1d97ce6e1a9f2c298392c5afb95c60eee1393f7cd5c9a12c283258b1a53f2ed4abd13ba1287f3a1b051a09cb0f337cb6cf616dffd16aacc2\nY = 009d2b2afc181bd82043b13b8222cd206b9264d73b229c71d9abcf74a478a7f7088bc8c7bb1e54882fee693340a3cf1aa56ccc2fb81d2675b19bba754dae0c2f00c3\nDigest = 89990b6ae2d21961eba4f7c9efd2e910ecf1c7809e1171d219236f2a8a38bceaefb553bbef7083114af5ea891fe44e89\nR = 004e6f08380c43f225169acb0e9f3ff61cdd2e9b713d149f63b5b6a4510d381409648fc1d442fa1bbbce2a8fe1ff7d1de0597f72d7681c79d3a876db6d3ef89ed192\nS = 011745ab4dec3542cbf37d10090d6038bd1ef9cce8216a4069b21e4a08075e7e8502ec97b99d3b18fd314d6ab6826bbbfaa2343ada1abc7c3b551c0b854dc45ffa75\nInvalid =\n\nCurve = P-521\nX = 0068801cdbb1e07f4b72218c52aa24bda872f1b2ab4e0c13b686cb8b10096ff88018e82196769359227192752a1c4c884f08cfa7f947ac428651f528bd41d1034073\nY = 01aeb335cb89ecae3cbc05681e2170870dcf40d486db4011c4d7bd84c58c6b3204161d9ca3516760b0c42466605077c96c0540939c635bf5d7d11e1407b6da30c094\nDigest = ad6637c97ce73a8476c08eab09a8e98f42ae6253517f9abed3b3527942075dac7132122d96978a68324ca4dc11193d47\nR = 01ce67a3509d59f8a0f171b86559f1d84589ff2693ff7d3ad3ae64b0e5af85db2fd99bfd7eda6e8f984a87f16767231cbd9026bed0a9a49d74ea5047201227c98f41\nS = 0032b0e4c043df8e81ff22c9bead36f704c992ec160d6be7764640200e1307002421b5d73154eccde012b463aeefd11138c5b9b705623c2c849736da23c122df06f9\n\nCurve = P-521\nX = 001dd34056fd2ff3009bca2d0bbfa70ea0fb678597d41dc545358263ce2cef9a2efc016622c12099c2a50257609d6a14f3c5ffac8a52661e4a34689a3aebdbe86163\nY = 017926740659acf72f7c7a147a3a320d501efadef8519bb289ebc33e348d6b9efd65fa516048101678548898619d311b8ef2a0d4a6f59f86810e9e6534176a24faf9\nDigest = 1cd3273e0dd337d53131614aaab0b6ffaba8d4c17863a1ddf1e7cf4965bc548628e7230f7331e1ae72b1ed9d1d2f8ae8\nR = 019043db42f44b957784a0e1f09d2e0a0dd548b865947f93b516f249ef1757402544ce5dc402cf8c1f180e9a3be01657258a1dfc14b25ef564805651763d6f609d43\nS = 01e0b45e00bde9c4e8dfe094f9bcd7af5a19b631db850a69bf0b6291fd3df6e26f4c712e3b5d4b7b8572f637874057d5652fa2bcd1977065a695d26a80669a23f0e9\nInvalid =\n\nCurve = P-521\nX = 016e5b4f4ff81c1b1e7956103c5cde951c56b37259fb8bf735b386e4d8b3d44063ef062d6e179f618a506ec8ad9773cfe99044748e2c8ae229a51bca6262aaefe2f5\nY = 000069bfdb9123885d8ce4ce67c63311055aa9a1a5150197717a853d0549bd17d2683e427fc90a0b78af5dc96465ea3f2862cf98e8f3ee2a07089e8837aa8d09d97f\nDigest = 9949e2a22eee8ae6aa35dae08f3c81a11e0e2c546ccc11428133c65c43d36686c40b17bfb6ecdb47f3279c01defec943\nR = 011550cb365daec01901b5a5cabe7930c10d79128c5e510d58b7593c88647eee811e6fa736b26351558cbe7f17d7c882bfd1ffa72ca3bf4bc1cf1c05f31f5e8bc057\nS = 00d6fc97ad14639a5157c92b39cfd1315d7e940a454f1289c8e95c8cbbce8731ad37180554e7a91565d86cffb3f5caf4ef883184d717e03eb776af714a32234e3f5f\nInvalid =\n\nCurve = P-521\nX = 00202896ccf6710cf780bef8908a2783b3c8d5b8356f1546a1b6b909b0d65ffd7999a16112d8d68c837597656e520a56c2f6578e322df6dd794d2c08bc5d8f9f4c37\nY = 00576152d30218c941e83080a502cdfbf9de7ca2c394969e779b76c359ffcb84902ff89e37125dea7dcdea0ba928ce2305c619b1906955e6be5ce40d087c5245eb45\nDigest = 90de70a32a54280bcf6acec4f4d2ff996855de0a224f538e2002106c06b695c8d9d143cfe0c90a1679a2fca7a15bf3ed\nR = 00bc6a7f5d77cb6ebb36a261e80d739f42b67ddc7a6496acc0ba7804d14b4850cf3fe4d8b56cdd8c019ef9f0d33aa26746018fbb4c69f4587b6da1adcf2feee2b438\nS = 00f09c6a94a8550a2781e70b4542096407fc07617f537cd27f1a1ddd15c599d5a9e3fa41da57094456277b44b89d40b26f2cc054fbe657788fa9d71659008d0d698c\n\nCurve = P-521\nX = 006ee95783b768c895e2af569bb84b0b1b00c8b72eec022df255892527987ffecdd81bd8afe267408a8912cce80982bad79c30610571a37d2a0e027e73ad23923b8d\nY = 01ca3f60a37b18bd8b08529da1e39f93d518ae3feead5d00e07150d80d641b20e887c62e8e910ca1c2f64cdcfa678c89b2e3012e3d9b96088ae31dd660dfe6369cb6\nDigest = 8a27d78796a750bf11f75bbed9fa9807633adb4d907125004f69d29b881ec79d14feac2f0e0ed5f113932563eb38c63f\nR = 006823e8f6514e42e79d50a112f0f320ecd53963729038ef0d66d5fb59e1c664fda493027678a02b139fcf290657fffd7a529f4f38ac73542f316e1b0b25b3b88cfd\nS = 01b3bf9e54b0f48bfcc7289d187e831d94d165949db3c660cb63106be1b933e10614e3673bb8078bd8b80ba052c63d566899e618ea31e2a37e0c9c10da111ad11560\nInvalid =\n\nCurve = P-521\nX = 01ba73e2af308df78d4f2a9e552c3b9fd35d35bf20126fdf751d8ad9917cc58d734fb9de27553cd07c02eabc077f16ad4532871a8aeb59bbec82e46ef1581e4abac0\nY = 00cf888c75582fb50bd0de724a9f4834ea127a1eea437b9a05935d1ec06815bace3464c230314b7f796423ba9fa983b2e6d1eb0260a32cf2f163a5ff46a9623ff149\nDigest = c9a34291213a5edc7474aee794f9de901be35159890bb660f9596efaf8ae7b02118457dfc3d8d2649cfd0bf5c7eea0eb\nR = 01df7e724658f1666aee8d5d75609e3f5215228ac32b978ea53434b7d154dd4edf661c688083d0937e43836c3611526c75f6f26b08f7844a95113ea4a6f1ab824a0b\nS = 019d40a7e03bd69ca568f70a066a4a57c0e6ab82dc8c2c8aa52b00c3ee4c327a87eeb7d837b0c4de68e25f7ac7cf6c0d8bbe0393b98dd61ac4961c7f8c70b40082e0\nInvalid =\n\nCurve = P-521\nX = 01419bc65174998ac21026f81e6807d8b42f0477396e7ff8a330e17c1d84bdc9b39b2a310767b46c41711f3f2fe503504350c86bf3d2b39473b64822ee32dec526e4\nY = 0184c968f6ad79bf0da00520e5339751cd9c50e41e7cd21ef37756bd0e36e23a8071e5f0240988b73acb3bb2b6002002e09bc7ef70ffcfc7cf42d6b7c65110f54ae0\nDigest = c1c0b91842d461d466e94b411c673069d3737c898435972eda2f6ba1118ce9db013d57d3970b137071446a1fa2477930\nR = 00d785b38c5283466f796988242aba08398ed2493aaabf959ed0e8b7b915cbb711d7694f94206db74641a518642d43c843ea7f43b8354a956a3695764021cc5d2774\nS = 012c20c6ab988ae911c7cdea0549de2e40e3e68c47cfe58fb777ebc204641bbb44f2c8b6a0196d330ea2ffa1d8cdc1dd9be353f1c657e43f7fe3c094898a569c45b6\nInvalid =\n\nCurve = P-521\nX = 010f3bb1c96a753d278ddf6435e7a79a53bc2855d26d9f8d5c1337b0fd7d70bccf204377a02a1cbe95cb63e21a9e8a3ce8ee7c8d4ade16ff4083dcacbc6c4b2a350e\nY = 01f98a0273c48fa78a91c0f8c1a43f59c7bccb74780fa38b08989d334f2ba0353a3619e6d4a1072e4e052720ed10e4f2c07e12d0c81a062fe912708dc51d4cdba97c\nDigest = 38688d539ee5c3792c29a505d8f8c01ad86efeb2fa3292e49cb921a76eca20dc536ae3feddf2e473dbe798926eb73fa9\nR = 014c4b9e23f51df21b4e02ed7611a8530466d1ed799b50b34b5fcac3bd1d63fa345925122414119cca76d22c167c18ad0fa8e1b47b53ab0f201bd4ca7ea25e011965\nS = 00ce91a050938119f80b5f584a9d9515c998212f6e122780f1607cebdb9b538dceb2d4039ab5e1b13736f4166e73d86c720516f20ad8f24e4b9fadd459c2988534ed\nInvalid =\n\nCurve = P-521\nX = 00819178ace7bf1e6e942fd6ed69193386f6c90cf65b42e9204d34ec96a0ce8fb92552ca57a7ba658422dc8b53bee150170362e6e74bdda24fb458271602aaa9b832\nY = 014af772624921f61b3d1275591ec2d68702fbf348382e9e552a9b6c110eebf6e93f20c8bff287d504fa08ae3628e611fc1262736916fa9edd87db1c78ed2426cab2\nDigest = dda4a591219b9762f682a9c9a626f172b9cb78ce191cf8acacf137ebbd3e28857e768a9e4f2407c990b192f07c5cf5ed\nR = 012c45d6ac0b5dbd9647211f770c3cca4411666aa39b6988a968bab345129237597b6c9b3bd788c5f9f39a38463a8afb159ad72f19e7e33e7f9ce8d67d611c3d9b46\nS = 01684000b3d7381aded85b18576832c4a89b4faeea0515454677e29e3f072097e786fef11f72f229b63defa1c2fd3c07090b34f9147647035854cf2950c12a8b16d8\nInvalid =\n\nCurve = P-521\nX = 011f8e50ed6905b029ce4b1", + "6c8acb8ed9136b1c5adf6f11bfb5f3dd8bb1e208ca8329a0aff9bf286e3be90e4d61d5147bcaf2293f934862cca6aead51d6e0a083093\nY = 01963e84a2f06a9cb273a424ee5fa1ae5900fef348371cc91c99323f58bbcd8742a4495a4f7ef52677501a4d5d663658c1f6c8f6edef8b7880e6894ff9e52bb617da\nDigest = c55e6d3091b6eb8f48794749ae0c7e9394ca3cb7b083ad65177f8f8db938a76ed6d3c1286a3d51b333c74d1c0f8032b7\nR = 012fc3e0c18c4edbcda4f82b5136c893a6307c3f60affa15d0d99fc0e4a3576b7daefa363b3a362014d14f631c35619f6861bdff9a7b503825bf9f027fcb9a31fd8a\nS = 01a138d6b02fd2a7ba45f7f952b2f329ba6a8e25697379330dddd91d1d6e865d3df1541bc4717d3e09b10a57cf38dcef587ac31b4a8abedef43e4f6cdf6ec3f49eea\nInvalid =\n\nCurve = P-521\nX = 01efc81c1efc7a9bc36ed49a5ef6fa1ba641360fa5c0f96cc1e4a3f4d973c95e86935d979fc2101370777637ab210a56fc4173a50a758725d60e9f925f2066d2bc00\nY = 0108225fc94ab33c74aff785dcc68c45cfc3cbbdfa3481fd2a3f97308be671fb32fc8d268c129d97f140210def188dceecc9d712ac397793dbc39c5cac332671ec54\nDigest = 5fe56235e4684bd7419e321db508565d30cd351086ef67d943aa5b932f93efdce875be295920ce5210b7d3f092f401e6\nR = 00480c48a24e7a7ef832547d107769254fcdb4e7982d0e6abd16822837fd4f3b66d81e1d4a018606881abebd220ed8ca865d7e00499ac9651a98c65502baebf34a98\nS = 00ccd22d1b44a1701c99f662535aea9abff7e27f73628101f42708737db8b07effdc2b0b05d4ef233c5910b6261ae9d9c540115f27d2af766c0494c33d31bd56b3db\nInvalid =\n\nCurve = P-521\nX = 00a15c8040f94235b8b444f7a74ca293ed1b718449911eefbdb74332687850a644395394c690aa98e8064f6eca600fc3f659208c0f8a21a1e7113bed0c6e00e3176e\nY = 004bebea7037b731d175043dec3630b2ee85c680a81256921a89407c14507c10ac043deb5d474602211ad58cb569a8b805686bdac3ef7ff62a4d25b27200706b603d\nDigest = d27a626bc9154bfc85b03724329b8a06454d5dc005997bd565f64a80134c865e73a2e123d2b433927efcbdfa3eafa827\nR = 00c1a70919025aceb29dbabdfc2a43715192cc60fc3d1ceababb40f91e3110b2cdd8f6e9c1bafe7415a26fa4179f8fc261b143ddb094fe61117afb13adae9db8943d\nS = 00197d7f87aea8d6ccd2178614b147b290ec780c8075f8439137803c0e9a589e415d84fa23f5f31d61c1674f87142d4ba4f8473fc92d7715c281dcf3f1ee5c2f1390\n\nCurve = P-521\nX = 012a593f568ca2571e543e00066ecd3a3272a57e1c94fe311e5df96afc1b792e5862720fc730e62052bbf3e118d3a078f0144fc00c9d8baaaa8298ff63981d09d911\nY = 017cea5ae75a74100ee03cdf2468393eef55ddabfe8fd5718e88903eb9fd241e8cbf9c68ae16f4a1db26c6352afcb1894a9812da6d32cb862021c86cd8aa483afc26\nDigest = 7679eaaf0495725fa99c51a2dd0c35c8882b840e1c2340ba793013b1e2567471cba35c0dd6247cc2c2ca14f6556912a5687023fb2f0ee02114393bed4c598742\nR = 01aac7692baf3aa94a97907307010895efc1337cdd686f9ef2fd8404796a74701e55b03ceef41f3e6f50a0eeea11869c4789a3e8ab5b77324961d081e1a3377ccc91\nS = 0009c1e7d93d056b5a97759458d58c49134a45071854b8a6b8272f9fe7e78e1f3d8097e8a6e731f7ab4851eb26d5aa4fdadba6296dc7af835fe3d1b6dba4b031d5f3\nInvalid =\n\nCurve = P-521\nX = 01d6aef44370325a8a5882f4667c21172cdc8fa41d712562883ececff53883ac8ee276124e825088c79d6c9d96323cb7b8c0b7ea44d3f0026e2538f4b62d785bb1af\nY = 0027203959a6e944b91fe6306debe74dc5dde9831fd0ec27e8be2d0b56807d63151b15f6495b8632e919e1e6b015f5ae5f2b6fb8cf75b5f848f00cf4ee457cebed3a\nDigest = b99c410653ce928e365d3613331b5df067020e92f634696279d5cee80f1f4a82f7d976a059e318b36eb25314b56f8765a81070d0944f4c86e8407d9c3e2aa7da\nR = 004417ff74889dde6bb1820b5d13da5c81dcf9b0723ee89bb1ff0d3faa90d497685709f315b2cbe55481dee43ebb6d25b1501ae69494dd69e7bffb72f987d1573b93\nS = 00fd7aa027c665458c7ac11d54d4f32cb4a1e727b499ce27b08d3d647c636cc3222a4f0a6057732249ddc22574d7cb80c3769c3ea9de3d33db3edd8ea90cb3f8dc8a\nInvalid =\n\nCurve = P-521\nX = 0153eb2be05438e5c1effb41b413efc2843b927cbf19f0bc9cc14b693eee26394a0d8880dc946a06656bcd09871544a5f15c7a1fa68e00cdc728c7cfb9c448034867\nY = 0143ae8eecbce8fcf6b16e6159b2970a9ceb32c17c1d878c09317311b7519ed5ece3374e7929f338ddd0ec0522d81f2fa4fa47033ef0c0872dc049bb89233eef9bc1\nDigest = 97ff5a81fc88f7ddd3bc58154ffd2695912fe50ce7c63b62bd798fb673c6aa49f54bc7301fb7bddc6edc51b7e0d0b4dec9f80851fff02a33671ad9a406bbabe5\nR = 00dd633947446d0d51a96a0173c01125858abb2bece670af922a92dedcec067136c1fa92e5fa73d7116ac9c1a42b9cb642e4ac19310b049e48c53011ffc6e7461c36\nS = 00efbdc6a414bb8d663bb5cdb7c586bccfe7589049076f98cee82cdb5d203fddb2e0ffb77954959dfa5ed0de850e42a86f5a63c5a6592e9b9b8bd1b40557b9cd0cc0\n\nCurve = P-521\nX = 01184b27a48e223891cbd1f4a0255747d078f82768157e5adcc8e78355a2ff17d8363dfa39bcdb48e2fae759ea3bd6a8909ce1b2e7c20653915b7cd7b94d8f110349\nY = 003bd6e273ee4278743f1bb71ff7aefe1f2c52954d674c96f268f3985e69727f22adbe31e0dbe01da91e3e6d19baf8efa4dcb4d1cacd06a8efe1b617bd681839e6b9\nDigest = ee21776d7174103b7fb65f03fd5d78744d2706c6726ece81e3943cf90f60fad6d8978af6cae9bc059aee2412ef86d0600694447a10b9d21079b9ca77500634a9\nR = 004c1d88d03878f967133eb56714945d3c89c3200fad08bd2d3b930190246bf8d43e453643c94fdab9c646c5a11271c800d5df25c11927c000263e785251d62acd59\nS = 012e31766af5c605a1a67834702052e7e56bbd9e2381163a9bf16b579912a98bebabb70587da58bec621c1e779a8a21c193dda0785018fd58034f9a6ac3e297e3790\nInvalid =\n\nCurve = P-521\nX = 01d9020b8e6717254eebe619d46dd5a9dda7ba5491a7d1b6820fba888e236fafd71179200437f4d61284fb5a3dfbada66bac3e6909ccbeee03c2b93a8bebe41a73f4\nY = 0048a5f09174fda12704acdd8ed560695dec42864b6300a030768a0be7f09d25f82d7b126125e41417a145641937807ed8d1af7a53f5bc3fc3c57427d755dcce3e25\nDigest = cc4e8efb1e9061500bd2dcc5233c2bfa3d3bd89067c26cfee4fff4a5a7c9c9b15151aec1fa91e78b67cfe3efd966ce65681dd3daf36b887d844033a473be592d\nR = 0092df2dcb457fc7578eaacc98ffd73ade07d764e9553506f3dc958cdb3f65d37665528cb2f5f8bded0db0a57e6fa73bfad1aaf94718379d1655db4f32d4c505a785\nS = 010e0c31479c2b29dc2726fe9f75b397d9e37a17619e96bc631c62e9ece71f05b199804cc803940d43ddee41171dd7787668c7db05049dd5b63e4f63562aa700ca81\nInvalid =\n\nCurve = P-521\nX = 0007067d2cf7b7619b9fcff2c898246ae0950439b8bab92d809624970eda18456cb99953ce1ae45ee5d36ef02fcd5caa4d951de8581f0c21e572caad56d6dce60da3\nY = 01913c59007a309005f226b6a30122828d60b4d0390359e1977f88b5347dacf2056dd362648e8b1d6fc038a3bd3fde6f1140c740efa9075ab8b4a64b334c5cd43f09\nDigest = 996010910456dee59309f1631f30e3dbf7ac2da7d5d7f69223c8a18f491cb18f7e11d0ca09352b715354a071e6d392a8c1dc0751569bdfcf36c158c8b07a5ba6\nR = 012aa4a532c108aa3cfb1753f95ca626bb72bd96a423d727656d4ebdc3f406d6cc6c44d3718f9abae8a0b46be9b57f8fd3a540326b63d0d4a8a93165715920437787\nS = 001badaf38e16efd75915f4806f054d40abd2d11e402039bd48c832f66cbfd145e4dac93357d476b7e608d7b75a017374ae76eee86c505f2cc16eaa19075827ccd60\nInvalid =\n\nCurve = P-521\nX = 00365388d9589c18ae608124b4cf746ff488183a912e07d26b6e867c5defb552a5a0df5a16b6342014dd1b0b6760072bcd60045d6a9a514fc74d16047c2e8765636d\nY = 01a5319b26fd555f2a12e557418f6aa65a3461aeaea5c0c6d8698ceaa5495eed7a7d2fed0b76e77b5be11834f36e413d5288e47231c0eb0e9007d4b042bb7a1b6014\nDigest = f8e150be2f657c8266fadc9bdb04648fc5a51f3c3f7521022aaf58d24165f8af4ad66319d8aa2dab48fe8a2f773c8d0e6c8c4f732e0fdfbae4b91918530c1f91\nR = 01d9ef377063a592cf81e27815a2c20789ff9b60f7f125e618b52d90b35abdd41cd7f437cfad337953ab0314fe8e79a2f2d27fa08597d4b28313358f714a737321fb\nS = 00f01d4f150e0a174674a6a61a58a4ba781406024f6dd1b5252e04807b8a807a4ff8d52883eaa258286e506ef4b04ca890e6f81a79ed9a0cd5ed585094fea0bc5c43\n\nCurve = P-521\nX = 00fd0cac24aeb75ca50c50a72340256b43649050e0fa155f72342877bf49c3d57ac2b51b828385ee6aea94bae38587e63390f5ef4ac5540a9e6fc6f1c1e79b524693\nY = 0107b227bdd307efd7a8d4034f733d150c41601215e76eea2bac62ad2427dff52f75f46da3d5fe31bfaedf071d2a8bb5e3c82bf6c84ecdf89ca233c92d599d376309\nDigest = d0d8c24bc5b6f34bf35b08f25dc2d6ebcd36b565f96bee9c1b47030428f10c3ad2904de19247b29650690c08517404e8ca55f366ab176e5089a4c9c661f90eb2\nR = 01c00196aa5dcbc4c4404fa76504a5eacbc96aa66c3ba531a3a679f3fb675ce58f863e08b0d2bdeae74d96ad93a39a78ed4bb3749e26567d0ca5c48a71079925b617\nS = 00f1188eba4f0943f4003ddad6a54606c13af26014db2eb8e60534fad3dae8f07c021cea0990987f1e02dce03fe53360472c3dee3c305bb3ef4b0b53ea6625bf152a\nInvalid =\n\nCurve = P-521\nX = 0104a96beea09d88ea6789a9925880c8a9ece8d764be931675640c1bf847ac8e7a8b14f408ba6722c2bf6295db9132d6ad2fe287fa6e6855f7c58ed238148a896944\nY = 01b5e8e643fae552261427ea7d521f380adf605579462315c75e9203203ebdc9ee33dd7ba885b6cccccbd2327462988223c4b31485311c935a341ee87ba1ee820ce0\nDigest = e9ea3c8aeae3133be537da09b98c096b9a9eb287a02b3542efd30f0026ea9cb3f242b842b2cedbf02e70b44ff8a0b1bcf6f31956eaf6c0dd9a023bea36440068\nR = 00ba2c57827baae684d2c637590275c782a6db263a5358c8e1a08b5460ca3cf0f5ff8d4119a6b0d55fc68a75c793098e0a5622a0b4e2", + "fcb0f17943440138d751797b\nS = 01594beb73b2ebb7c573ff07b5c43e722dc05979df0eef53587e9fe06a920f61d2efcc7671e6cb875df4e4d92cd4d37cc3eadcb9b6aee8f2097790ce24d6dcda8706\nInvalid =\n\nCurve = P-521\nX = 010d587aa82a4d8e690672c00e3fd71826d892862d14dc4fbad4935aaab86924dc7ee6f7fd3e2bbe86a8652589448494dab83d363d1d623cbae59f6c2670706a0576\nY = 01a9734c99b6ff21267050738937c30971d0f6fe07e29794748a5017ea1036c975c9a52e6d3739ca0e8d70e784529cc1a7437aac5d75c69121b69020a95356137f1d\nDigest = 8814a9dbef9e6d9b8322bdf8d471b207388bb7bf831d9fba8ad29da52d528d5d5108c01e4459f5ca13e26bf5da3c848195558828d7a00f53abb9fce47ef35091\nR = 0188dcb840dfc573a97117009226d58dbb930ba8ec848931786abc770611f3519c8ba73cceb5b489170805bcf04974672fe66c908ba379aca99fa67fec81a994c2d1\nS = 000b1a185512dc6a65e454ea2bdb8049ef8f012a53ae87b759fb5d9edba51ea32e254e80545a99eb4b7c58af96b7c433535fa3f009cc644b1c97666d88355af9fc19\n\nCurve = P-521\nX = 0182c957a62e2e27aa28acee2e2f7b1ed6aef81c68001d2648da47d2b621e8b8bd18d991cd1e3fb9afb84f639fbed1050584428cd2a1d50f877532ffdefdd4e6f7ba\nY = 005fadeef58cc0d79362b599e94636f9c70e3e5580c085b7ea52a5fd24fe4a892120b8f28ba53ec249c42d6d3b36268b8ca8464e54b72d37327d7504d9b7ce534d95\nDigest = e1838cf6ab5daf5ed28dc1b3365eb03466e01cc30f6fec9756c966cc7b89ef5ddb32754302a33b5aa309c871f98de082a21cf734ba8a368794d89b0cde1cfcf7\nR = 01e3a78e973fef6b6de8a0356401e89f435ae5f49c0173f073c4dbb9c91463e420f5265eade8305f11d30fa8d97e5b4c5ab33975f73385aea81fbdde2f7ddf7fdf16\nS = 00efeca10b5362e05a8f2e3df6661d0d536b32ca1e0a62515df2d94eb314aadb5eb40468483e24b16efe85c503d6c231ef860aabe674b72ed1ddd93853338e5e4e50\nInvalid =\n\nCurve = P-521\nX = 009911b41f9af525c874e05bfdf050331bf830296911bcb18eec16275027d63fa106c8989b07921c7e58b02711b5b5880cc4e6d9174e0d31060548cf643bf7ed4f0c\nY = 0184fc0fac3c2c80c69c1c0293f4e5e22fa08c267b1f36ac5ad6dfdf4da1754f7942f48cb56f56cba05e22b91508fe4db3703066e8f697aca56f974f3fe530c9640c\nDigest = 365868aac67d82cc0510bcfb012f9035f99b5841329344f1b45f0489463cfe22c2f3641f7d6c59a3703aa2804323db8fec4fb3804f521149e5f7d38c9e1e94f2\nR = 017b8a22fd8f73112310867909f234fad6aa82999c28ea5a2e74b4b4bc79b2f89008b4d361ef7e797c7656f7d9317eff3e5a4982799b8cc0db82618bd2aa3959f617\nS = 01edacc6d1c0004b2090d2025d615de1fd53a96e826a3930c7cafaf3c87f34b2583997534cfa127485600a7ae04e6af4a2e98c77fd04507195e520e80014aa982a3c\nInvalid =\n\nCurve = P-521\nX = 006da3b694e3123ef96b3fd2ab964f85a36110590720dc1724a5d50d3050498957211c6a1535032cf1f31240bfab967cc0cf3b442c35a1bfa3e72470df1863d2593a\nY = 017d0a5dc460c85d0365c7bdc2e9300e276b8aa97368af9972744f4422442afc601ecfe7903a33b0354c901c7b61f29d2d3c5610192cd188291c5651754b385b87a8\nDigest = 4e992e9e5403eb9822958f2737b70fa8096474a845a0f37244af744a6009e3b6e6e008faa7192fc01755bb785e03e4e3d2caef03eeadfe32a7fbc7e3bda49f5e\nR = 01f9cb1f4e2e65282a929acd8b685ab34da176f5c73bcb374fd1b09bc995385ce3902d6c5496b02916fd5a28f6f8bb662828a76aa0ad14b01bc24a63b328c7bb949b\nS = 001d6b3a2f34e3b7bf63d06b11ace172ca61ac5a911a4b408d766eb586c9ab820d42f555e546d892643e12a6752465427c213e3839e4f8cb3a7e4fd83642843e8544\nInvalid =\n\nCurve = P-521\nX = 00b7e03f0d623a0998add5360dfb0bfe836fcb0a46b0d6f697ba6b3766bd8698ac8c7af62f50511c6aa5e613f4a99fa28f70b220ba1cddb22482be74c969953ae6e5\nY = 00d4ee40ee4441dc85356760f87ba32e2e7c269a2e53a2e8425d5ff02f5e4fe8d65cefe20e162c3915d2eb9ad1354bd28595a86dbdc94a5d40c5b44b1e3aa3965455\nDigest = 8ebb37c7b60ba4622070391864a70b5e797dc2464151304b1d9614b77f0bcb92fce230f42cf98f9b2612f481c21f70564f5cbfc4e81e48e08ae27b466f717e02\nR = 01fcba4781de6506f7c3f26521f0e036b5225f651e69e115d6784b2176a666edf69d759627468400a73a136f599fb8db4643fcc16bdeeef6384a1875e1c81c36b962\nS = 00a21cfaa7e1ee0eff7efc3d7e936378500283b00687363070974483ad474c58c6b55b77f678d78e7cb44d9745f79394659bdd26b72663608384b5ae9cac1c888d13\nInvalid =\n\nCurve = P-521\nX = 001bb7c623fde41beec7ddfb96f65848c2f52b50b39576bf06de6ccf157b8ec49889528728480928236300447da7171f58c8f0e0ba8fd3e2cf378b88619aa6c1e0bc\nY = 01f8b20a1a7df319bf78c2cee03581a1ffe8ca5107fbfd40760fbd5ef5247e2df1092d5caf504a9ee653ded2995f0cdd841d6af29c9f720770056ebbc128705f68e6\nDigest = c18be2e3f935561d1ad1cacf6ae06e733a463c7e5063cbb0cfaf162a579522786755dff879d2bb0b63d4eea9120a2ed648d601a5cb2dee936dbada679bcc134b\nR = 0000db4c31f316912295c5b9506aabc24b0b2dc2b2358e6b023148889d9200bcf44762e88575e359b4868b2d93ba7bdb24800b09fc22eade0744b9832b71ee784e9c\nS = 018c84437fac7cd82099a2a4230084ac27ec7ea9c92e1c9d9a71290df9b37dc881f9ba59ed331c22dca4b2cbb837cd916e0a78398d2b7aaf8e88f113a942beac48c0\nInvalid =\n", +}; +static const size_t kLen35 = 143692; + +static const char *kData36[] = { "Key = 00000000000000000000000000000000\nPlaintext = \nAdditionalData = \nNonce = 000000000000000000000000\nCiphertext = \nTag = 58e2fccefa7e3061367f1d57a4e7455a\n\nKey = 00000000000000000000000000000000\nPlaintext = 00000000000000000000000000000000\nAdditionalData = \nNonce = 000000000000000000000000\nCiphertext = 0388dace60b6a392f328c2b971b2fe78\nTag = ab6e47d42cec13bdf53a67b21257bddf\n\nKey = feffe9928665731c6d6a8f9467308308\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255\nAdditionalData = \nNonce = cafebabefacedbaddecaf888\nCiphertext = 42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985\nTag = 4d5c2af327cd64a62cf35abd2ba6fab4\n\nKey = feffe9928665731c6d6a8f9467308308\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = cafebabefacedbaddecaf888\nCiphertext = 42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091\nTag = 5bc94fbc3221a5db94fae95ae7121a47\n\nKey = feffe9928665731c6d6a8f9467308308\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = cafebabefacedbad\nCiphertext = 61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598\nTag = 3612d2e79e3b0785561be14aaca2fccb\n\nKey = feffe9928665731c6d6a8f9467308308\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b\nCiphertext = 8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5\nTag = 619cc5aefffe0bfa462af43c1699d050\n\nKey = 000000000000000000000000000000000000000000000000\nPlaintext = \nAdditionalData = \nNonce = 000000000000000000000000\nCiphertext = \nTag = cd33b28ac773f74ba00ed1f312572435\n\nKey = 000000000000000000000000000000000000000000000000\nPlaintext = 00000000000000000000000000000000\nAdditionalData = \nNonce = 000000000000000000000000\nCiphertext = 98e7247c07f0fe411c267e4384b0f600\nTag = 2ff58d80033927ab8ef4d4587514f0fb\n\nKey = feffe9928665731c6d6a8f9467308308feffe9928665731c\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255\nAdditionalData = \nNonce = cafebabefacedbaddecaf888\nCiphertext = 3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256\nTag = 9924a7c8587336bfb118024db8674a14\n\nKey = feffe9928665731c6d6a8f9467308308feffe9928665731c\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = cafebabefacedbaddecaf888\nCiphertext = 3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710\nTag = 2519498e80f1478f37ba55bd6d27618c\n\nKey = feffe9928665731c6d6a8f9467308308feffe9928665731c\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = cafebabefacedbad\nCiphertext = 0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7\nTag = 65dcc57fcf623a24094fcca40d3533f8\n\nKey = feffe9928665731c6d6a8f9467308308feffe9928665731c\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = cafebabefacedbad\nCiphertext = 0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7\nTag = 65dcc57fcf623a24094fcca40d3533f8\n\nKey = feffe9928665731c6d6a8f9467308308feffe9928665731c\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b\nCiphertext = d27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373b\nTag = dcf566ff291c25bbb8568fc3d376a6d9\n\nKey = 0000000000000000000000000000000000000000000000000000000000000000\nPlaintext = \nAdditionalData = \nNonce = 000000000000000000000000\nCiphertext = \nTag = 530f8afbc74536b9a963b4f1c4cb738b\n\nKey = 0000000000000000000000000000000000000000000000000000000000000000\nPlaintext = 00000000000000000000000000000000\nAdditionalData = \nNonce = 000000000000000000000000\nCiphertext = cea7403d4d606b6e074ec5d3baf39d18\nTag = d0d1c8a799996bf0265b98b5d48ab919\n\nKey = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255\nAdditionalData = \nNonce = cafebabefacedbaddecaf888\nCiphertext = 522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad\nTag = b094dac5d93471bdec1a502270e3cc6c\n\nKey = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = cafebabefacedbaddecaf888\nCiphertext = 522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662\nTag = 76fc6ece0f4e1768cddf8853bb2d551b\n\nKey = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = cafebabefacedbad\nCiphertext = c3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1f\nTag = 3a337dbf46a792c45e454913fe2ea8f2\n\nKey = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308\nPlaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39\nAdditionalData = feedfacedeadbeeffeedfacedeadbeefabaddad2\nNonce = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b\nCiphertext = 5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f\nTag = a44a8266ee1c8eb0c8b5d4cf5ae9f19a\n\nKey = 00000000000000000000000000000000\nPlaintext = \nAdditionalData = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad\nNonce = 000000000000000000000000\nCiphertext = \nTag = 5fea793a2d6f974d37e68e0cb8ff9492\n\nKey = 00000000000000000000000000000000\nPlaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nAdditionalData = \n# This nonce results in 0xfff in counter LSB.\nNonce = ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nCiphertext = 56b3373ca9ef6e4a2b64fe1e9a17b61425f10d47a75a5fce13efc6bc784af24f4141bdd48cf7c770887afd573cca5418a9aeffcd7c5ceddfc6a78397b9a85b499da558257267caab2ad0b23ca476a53cb17fb41c4b8b475cb4f3f7165094c229c9e8c4dc0a2a5ff1903e501511221376a1cdb8364c5061a20cae74bc4acd76ceb0abc9fd3217ef9f8c90be402ddf6d8697f4f880dff15bfb7a6b28241ec8fe183c2d59e3f9dfff653c7126f0acb9e64211f42bae12af462b1070bef1ab5e3606872ca10dee15b3249b1a1b958f23134c4bccb7d03200bce420a2f8eb66dcf3644d1423c1b5699003c13ecef4bf38a3b60eedc34033bac1902783dc6d89e2e774188a439c7ebcc0672dbda4ddcfb2794613b0be41315ef778708a70ee7d75165c\nTag = 8b307f6b33286d0ab026a9ed3fe1e85f\n", }; -static const size_t kLen33 = 9174; +static const size_t kLen36 = 9174; -static const char *kData34[] = { +static const char *kData37[] = { "# These test vectors were taken from NIST's CAVP tests for CTR-DRBG.\n# Specifically those for AES-256 with no derivation function.\n\nEntropyInput = e4bc23c5089a19d86f4119cb3fa08c0a4991e0a1def17e101e4c14d9c323460a7c2fb58e0b086c6c57b55f56cae25bad\nPersonalizationString =\nEntropyInputReseed = fd85a836bba85019881e8c6bad23c9061adc75477659acaea8e4a01dfe07a1832dad1c136f59d70f8653a5dc118663d6\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = b2cb8905c05e5950ca31895096be29ea3d5a3b82b269495554eb80fe07de43e193b9e7c3ece73b80e062b1c1f68202fbb1c52a040ea2478864295282234aaada\n\nEntropyInput = edfdb55e77d418a63e4414dfd42225ed257cf74e99325fba26e8f3a4524a71bc80a731af23256908cb4675a9c253ea6f\nPersonalizationString =\nEntropyInputReseed = a9372fea93d607fbbc75a97b7f65f2d4ae8c06bd184981572e888a35c5794d2bb380a4ae04bba27f2efcc9e7914b96dc\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 11b1a0f0bb935ec0c54e089e0cd20832d1f00e7069f30e9ea2e35b7f15ecf0577d0e90035bf0f91ffd9e8a1fa8a507503739afbec19393e02c9b7c230cdea36f\n\nEntropyInput = f253fd442b105434c0f47ba9b6798bc20c8832a142a2a6d965678485a3ac52393528a5e092341d60ad74429f4005f8bb\nPersonalizationString =\nEntropyInputReseed = 600c822b198dbdcd9d13ee25bd4b846e5d8665725eac5347b4cfe7512c1f3fbdc4c51c85d977ca58e9e6485a17c533bb\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 076419bdd354d6a1f1415a0a71bed94db29cad22f0205d983c841874497875a4857404e573545366850fe6eb5286e0deb87ddd63bb3317b4556a82920412aeef\n\nEntropyInput = 8dbf2c37dbbf3862f05af4b32e98edd3d8cd7bd34d8a23daa2d15200daed6e9d238387ba85ddfd35a2986bdf5790e1a7\nPersonalizationString =\nEntropyInputReseed = f67aed05dea08baa16cbb669ae310a0b8e019da0a7fe2762abf684121292186a50bc13d568576ce5d7aeb080e4604a1e\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 69666e65c5623140da35927ec39189fcfda0891674efdcd2a7d6f2628921a37bd49a164590413c04f6090a50336f040b015dd8c45452991bcdd96994c5ecc6bd\n\nEntropyInput = 2fac25dcea5274a7dbd6af112d757b59a4447f5dcbda972666af071c5d8f71583ec6914a1e685f610b8a43ffada0b411\nPersonalizationString =\nEntropyInputReseed = 52f5b1f927c0873ae375d6a6e140fe594fd474a63bcdcd6a98109e32ad980ce534714ec626dad7acd43101415e5817d2\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 3096cf20137eb6f94d9d26a4871eddf10285c6984776847105ca9294aafc68925ad8bd7f36bb68fe371476114649ead11b926f9f0fc1d21c744342ff5c44c8e3\n\nEntropyInput = 4133a0e6ce837125f46f2a44e05c4f64d76879156ea16a1d16db1d3ec460cc53609fa9e4b3081f9dde0b79f00c93ac5a\nPersonalizationString =\nEntropyInputReseed = 4613b2327dc9054f34faf933d62bf7b12ec8b34626c07ef7512cecd8aedcbd4023f26b859a941c5af77ec1e2e02a1d9c\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = be02e94fd18c488741fd90b6980118dffba1cda5bd25aa23d44414392201c5a78c3ea68252f92afaaf540b298d3f80a94818f1d1ca84c2be5f66a46191a7548b\n\nEntropyInput = e312fd67b5009ab1c896ba8f85d53fb29517ed2a26d20a4b9d09505ec004bef5739cc94e7f368989c675eee1f40501a2\nPersonalizationString =\nEntropyInputReseed = 176ec11c0d4462ea26b1bdee41208e3ff3b430de11f12567ebe982c16d709f681fcd9f5bd5309f3f2a9d80b3a426929a\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 07cb9f51e34be38fe1d1c18858ee44db227c1e6a6c2f7d09e9143e87e9e09df0af9a5cb7a183e5d26359509fe619e52e59e3333d3620373d3ae5a008b51ef786\n\nEntropyInput = 3eaf30117135d9167c829e35bd8da227a6302471b649381858085e67c65496058ded0ab176a38b3888f4e3c2e65269dd\nPersonalizationString =\nEntropyInputReseed = df60a1b9fb2f8501756edd09e489fc98a60ed08646f5a2e018f55b71c76b9b7718ac4ae61b41241593829108ddeb0ef0\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 29c4d540354e97f50f3fb1de84eef471192cd76a670de34176c6465523ff249ed5eafe2c09f091f5ed101cf8a971d782f150a2642ed291e850906e29328d6b8a\n\nEntropyInput = 99d5543c192c6a1069bf548d80d678bc42c1f020f0b29a0ceeba424c03f8a8aa38df1c0fe100ee4c1b0bc870b4afa3d2\nPersonalizationString =\nEntropyInputReseed = a0fddd29c792f6f411b5d532fff2564d492ca15ac8b7fe1b4575e9b59806823665ad7ac4e2adcd2803ccaabe87ab75ed\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 3d58e98a1f4beda50f84f773c405d106b28f4be6da2a2942098403843bffa3323c53661a7f072a020c68f55ea2b3a9cf9157b7c4cdff5e642ee9be1f436f9c18\n\nEntropyInput = 2151ba6cf2ed6a7366991e516443162b6ed4e7f8ef2d6c81ec5e5feb0061e20ced65da27847956194dc6177b5e0befa9\nPersonalizationString =\nEntropyInputReseed = 73418efab1c6039145dc6ce09b84abde4ef4f8eaccbac250213bdd75e2a5e8b42ffb1367bd8d1281e3b0051651f78a05\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 5b219cb285c820f3bce52b9eff15afa042de3036f1a52896eab34e4476c28c60127cf8daddce0809efafab03c9269cd220a49f79220e14db9d208311d2a22a1b\n\nEntropyInput = 7c7321b69fdefdece32c45e47cce07a0d599e83ea8ee5781e2f2ff341f292c0bdb848e5ab379771639e811fed45f63d7\nPersonalizationString =\nEntropyInputReseed = 4b04652d3d0515b305f4da346754c0d398c8cfefe8e5c1edacb79cb8396018bda12ad7d42bf86e801159bb62c34fff68\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 379c12dc2c8a884c6f40df5353047d74efbd9c626795b86256abec4a6f42ba26529f19e4b043f53776180c7ab16a3817b4a50c09bb3355234786e714edb9e2b4\n\nEntropyInput = 3a56329b07dffb8bc7761c0c2b4ec4ec3b7ed2513f0cc3d9be3eb9a153e8e1605d9392dbb951e4b0989ef473301f6f57\nPersonalizationString =\nEntropyInputReseed = ff6efb9b946748af0992bdc38eeb15d4991bb610692e1fe53ff828405924a544ee0e4da70aa1d0ae55e7925a58cf5597\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 9f32e40391217833176ca768beedd2839892c6fc17dec5c250f0820c576e4ed615729653515ae13292a2e4aedaa2df74c6535d8c625dd1cab479d3c5ae7bf955\n\nEntropyInput = d550f48af436ae42ea48a8cb0cd615be8db51691b365ef20ed826b28561fbacc9deb28cd3d83655033068948c55683da\nPersonalizationString =\nEntropyInputReseed = 76ea2e732f77b337ddd402e367c158dacc3433feb40d7b4376fb8dc449891336b00841580ea189583ada95cef783d540\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 8433b2ac45da6fdcbeaf3e6f76e66beb5b90a89a9cb197cfbe405ed53b1dd51a42cfc9aec5fe7cf778f88031fb7b15b0874d4d1ea87ef3895848721b34fb1a35\n\nEntropyInput = ce6137f720affd106396d9b66540580ae216d5d7dab48ed2729cdb3e587c7d8da13ce39ea8d9d8c22220a96b74e7ee9d\nPersonalizationString =\nEntropyInputReseed = af9f12fddeef001b08a5993f62da5e7c3aff23f882ae874b9f66f28eca1106e6386dd82f07ae1fb6868f186e2ec4f449\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 219fc160dbc136cdc9a7c3407eafde4639602cc58101c512dfbd85cc26b61fc9a94cdf76f15a1de7a46e36ab64aca3eeae36acd6e3d0b3fe59b75958b3eddd24\n\nEntropyInput = 1accff5a19861164c5d2cf542cf41a789f143c7956518ae158d4449ff0c257a00966faa862ccbb363bcf4aeb31089134\nPersonalizationString =\nEntropyInputReseed = f2fa58209759d84bf38a1656bae655669767a902ade22a830df56b32ef9e1c992335eb4cb27eeb142bfd21b5d31451de\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = f214b4055d182cb258d9e9b61251bebc9bf090db662c4e36023cc156964fbbe1cedf691cd0c3d7db4262fb65a5d34b942f909b0f31fc18009766413523dcaf40\n\nEntropyInput = 99903165903fea49c2db26ed675e44cc14cb2c1f28b836b203240b02771e831146ffc4335373bb344688c5c950670291\nPersonalizationString =\nEntropyInputReseed = b4ee99fa9e0eddaf4a3612013cd636c4af69177b43eebb3c58a305b9979b68b5cc820504f6c029aad78a5d29c66e84a0\nAdditionalInputReseed = 2d8c5c28b05696e74774eb69a10f01c5fabc62691ddf7848a8004bb5eeb4d2c5febe1aa01f4d557b23d7e9a0e4e90655\nAdditionalInput1 = 0dc9cde42ac6e856f01a55f219c614de90c659260948db5053d414bab0ec2e13e995120c3eb5aafc25dc4bdcef8ace24\nAdditionalInput2 = 711be6c035013189f362211889248ca8a3268e63a7eb26836d915810a680ac4a33cd1180811a31a0f44f08db3dd64f91\nReturnedBits = 11c7a0326ea737baa7a993d510fafee5374e7bbe17ef0e3e29f50fa68aac2124b017d449768491cac06d136d691a4e80785739f9aaedf311bba752a3268cc531\n\nEntropyInput = f963096540d0023d6703e18248755ad16aea91852a2db0dd0f6a414d2a5822f3224ac8b1d47b01aaecc93ae299081d7d\nPersonalizationString =\nEntropyInputReseed = 399ed54bd846de00d42fb1f92d1ade93e81e32cd6ce73825f0bf86179dd46fd79bc8cbbd3b8834e58cc86619e19b08b4\nAdditionalInputReseed = ee073f9f6145d0a7c09a5e4a12d65baeba360bc9b5d7cadf93e7d2454dfde507af37e49782cf8550dd3a548e8cf98563\nAdditionalInput1 =", " 6a42ffe56dac0b4dc5d84b49698859b3645c920151565bf29f56b6322244bcaa7cd1ebb8ee9936d8ee1d280f547ae245\nAdditionalInput2 = d057c418a758d99a8ee855093da9bc1734a5168a6df9d9c9924e8bb472b5945563d86350dcf3e11aebcbd06a22b9ef78\nReturnedBits = a0cd72e63f49ce4c1d64e21e92546afced2af268549ef48d3ca88afe4d4097f91a52ecd0e7ad12ec0a1f67dd8c5325b78ee507c0a63cf90d64e9c47862acedf3\n\nEntropyInput = 333a0269eb0fb1d9d1e92f55de9e13cd7e24de64f5f276382d3eb2ff356a66679a9a75d2da31d39a940a09cc85d9d531\nPersonalizationString =\nEntropyInputReseed = cbf504cc473c9a6e66493b71b9684e8df458e65d2cc676e4e6ad43eb59172932c0956d0623134a6a3bba23906ec9da0a\nAdditionalInputReseed = abc86c71ae0585827ffe0d19a9fe97f23cdc4afd67978e553e0669d4635ca1df30250843fefd4d1288f6fbc3bfe04a72\nAdditionalInput1 = 15d15fbe7c060e6811bf47c21e93639c00cdcc562f4e02c88f7e347ec14a2c8410fdb2ddc3dfa62ba9ed1758f12017df\nAdditionalInput2 = fff311ea4c5cbd8ce53c45fe8d8106c28eb06d01ec9d8245c29f95b50b13085a0ec28803d733bd0d8a75193e63e21d5d\nReturnedBits = fcdb52bb6e2ba8d896973b9284b32af6364a34a2b80b3e3c7684c200c9e0a02f7bc6c3cd32b159df9b98da07a17baab9b0b07eab214544d5c562e454ec643de1\n\nEntropyInput = 86e4c30c5a7dfcca86eda7723930ab3272635f0ad9e2fd70a2d7a69b6a07dc0cddeabffa9c411198e3cb7589cb29d3f2\nPersonalizationString =\nEntropyInputReseed = e1af1c42cd29dd002e10e5839e8b679d3c5192da5e1b655123132ff1ade22b35651ac6df66fa14f36e1832be7a176895\nAdditionalInputReseed = 5f619073fa2e98b9f06bb4676bb972379ceb727e1e8768ef09e532cf3d8fed5ce92a7528eb55ae552959d74f75dd0324\nAdditionalInput1 = 330e316bec4955d907d7d7bf2b7149f0aaf4285ed1a2b7e387376ea1a4e0858c114ec3ddddf7a1edd7c8a29b1f12b998\nAdditionalInput2 = 405911cf7c6779e02e4740fa9737f189370292494c80621cfaa9f7d16d68219e72d474f8d5a54aa8ea8020dff9c36650\nReturnedBits = e359c3e23315c9c1d69ab2ec96ec3c6c5aad868e58709e101b0fa08c4041248e4d538d038993250d395d9651513514fca5760dcb9970dce53d2d1c2712bc56d0\n\nEntropyInput = d8cc5d13badedbdc2fd41852247a9f2879b0103b4a8186f0a08da7d55453b7484f642a9e5a5182340584d2ca7cd5ed10\nPersonalizationString =\nEntropyInputReseed = 35788b8369fdc3dfd206efb873b5c5215f5b8ecb0541fc0a0e027e868a91053b5d58cc8ca0751e0c0893c868e2322471\nAdditionalInputReseed = 6afcdc760fe62b080f141886b516623971f8014ede86e50d62d307a90cf3512da5fefd37b3932d3d9d86ad0c03447be4\nAdditionalInput1 = 72105702fbf1da4c10ff087b02db764804963fd986de933b757b8fe5a6016e0f2700573925aced85c09e2ad9f9f7b2c2\nAdditionalInput2 = 65f9a3fe4e1953b7d538f6d6ca3c0a73bda2276fe8f80860c07b7ed139d748c3c45db5d96598f77ff863a43977ba390c\nReturnedBits = 7c2b600c3f550671215b03ad7aebf71086ec59aa4f45cf6b3bac9bba2e108f801f6478b098fcc4e063454cd3f64a951ed70f619866c1a4e70b5c47458c09e083\n\nEntropyInput = 07d14a0d9fbc76a155047a93bc0bb2b578fa7dd75cfe9a44bb8709fe3cc2302fdcc06a9c6751f4602a3a4955c0f38c7e\nPersonalizationString =\nEntropyInputReseed = 8babab6b9f8429f554156da3905122cb48c0b901fb6eaad8df771e8d583ba885dfbad02e47524b1981768593bde88260\nAdditionalInputReseed = c185c45cb07e8c8ba8eb31d3bd48a7c864137c689214c2fb3b1d6d6abcda84f2922a862a0955e67695391d60d6f2d1bf\nAdditionalInput1 = 326a5c9c4a1a2b6fdc369fe2a171bf625dc26e23d1a34faacf59bd33be98ff7ac7f16e485b6da3145ea4db37ee4ffefa\nAdditionalInput2 = de096ad13dcc1ee1449c3a0661edee028603590f087474161a7ab8fcfac896a924e14b0a57aeac17fed676f4b9c7168c\nReturnedBits = 60911e6e6455bf4d85a4f76378390f6cd537d7cce88228cf34e4a4889adf62a9cc1070dfc39c254e81a8557bb2c350fe3f462199e377d3796ed139117b6b0f45\n\nEntropyInput = b3458c6b38ca70c44fc6c601e088863fafc953c6b5d3ee57fb1a07f3f65dd5e6dc19aed17aa5530913aca598b26a40c0\nPersonalizationString =\nEntropyInputReseed = faa8d3feabf972e482e5a0b3821c23ba067c45267e3715a4c10f65716a348030d7fa5637e9f000b3e47d786c013fc035\nAdditionalInputReseed = 901ef89ea38203b83249a34a1a8cbd0da4773ccd503d60a395be3a3db113613e6c571a49960a4e99d302b6f237f64d54\nAdditionalInput1 = f2f87693d1f28f95b0a6459c538e82be99a8cefe8a2c7ca037822072e63670dd141873f3dc9e309c6ead40783f46794e\nAdditionalInput2 = 93cfefbb7624a137cbd7b177918823893e77251fc5660a76ab0cfaa3b340ae822a8a75365056f06b0a7e76afc39f6819\nReturnedBits = 5bbcdeb5d7d1ae19e4ef7878abd1ca4f2641d42c765b94a7689172a4e90baae46ebcfa5427a882c1614cab36f186a98dd3a15febc4b23add955f69dbfd5e5d2e\n\nEntropyInput = 6dbcf6f2f3997ed55471f779039982bc84a1c052fbf5883d6f62c0a61db108386e74759d7237bb0efca030aac76bc7e6\nPersonalizationString =\nEntropyInputReseed = 1a16753c195fed27a1abbe067b2b22aff4c49ae7832d18d01cef5ea5c7d5833008036f71e9c77c1629b6f61370b57f7b\nAdditionalInputReseed = ec54395931ac0aea2a8739d4c51e33c8425906005c341db373247e73b968c2c79257cf7ac74353c00fd81a80f4c95b8c\nAdditionalInput1 = dbd6bb5579a10e395b534431f3ab7c8025527bf99e4f7c162d681f8d35a56f6a03729f07ab43897ad0e80146044b1614\nAdditionalInput2 = 5d35742c25620bb795eae41178d7fc86d9cbe050ea702573ae6adb61e16c411b7445548dc535d57371bb11e2cdd59597\nReturnedBits = ba3905bfddcabf6dae311d1fc19fff1f6fc1ce779e38f864b7ccd2aeb1b3d6ec1845305c29d39b8736b3977277ecaf5735d0e4acefccf7778ac3542af815fd41\n\nEntropyInput = 3a9e8099007c67f6e5f98525cc4295a68c5d5135d01f5f66305c7048ca02525caa3f790b2d12a8520e9963a9cdd597a8\nPersonalizationString =\nEntropyInputReseed = 15993dba9775db8a5bf79778a316f2910d4dc0be59c3b21c650e3aa89c8c89b33fc69e9e5d642e7fee16d61b691de2bf\nAdditionalInputReseed = 946121bae27e5804daeba0d7dc7ae0c1c397bfab106e13b8b7c5462b540d147119af5b7c4f9c198161e5aa9be34e2d28\nAdditionalInput1 = e9799421e75bae7086731a21242dc101c93b768fc747734a357454fc0f7c082cfdb79b8bbcea2d1122d89316a7bfbd3d\nAdditionalInput2 = caa04f94b4b9d694e2c4bfa1e8e708b9c00d9c3d645243acfcb879d2e2ba723d9e48908738114eab7d15f8cf36b043ae\nReturnedBits = 9bd50f3c5384eb28d931f03a64eb97ef140e1e81f4c1d9c910cd7d79a40494e1fcc53d82cd32df35d53b05a450e54b7ec71e28359c1273848e5ab117d5ded88f\n\nEntropyInput = 7f2a0213de6738ec62bedab769a5f01732dad2d35dd4cad7a765dbbb6f9101f57b65ec8fc4e23fb3479ce6211ca3d84e\nPersonalizationString =\nEntropyInputReseed = aeb097e9ddc4dfe87874ddb1a856ec3d00fff1b38c8f954681c11e61bac8b6b2e2d8d010e6820f9c4d807b295acb8ab0\nAdditionalInputReseed = b33ad3dec7d529b71e39d59147f79b4884039d1112804fe8c70e174fdd9828c06a4d44d20aa5fc1918c3ee8082a2bf93\nAdditionalInput1 = 8632d221757132bb7b883b7dc26755f62ec2ffab0876168d11ea7b92774c15c553b11320393d64a2262133608ca92a18\nAdditionalInput2 = ccaf3bc3ae9cdbfa885aa8414c1f823c6a3ecc020b619201a52ce0b7516ba1f49755c450c532bfe11c06b9d0e049ccae\nReturnedBits = 4b1c065a288e5eec56b67fb341e25fc7521b794b52b94f9570bdb16583bb6f7a780aea5297496355ffb4bf5a444c277c96394619cc33cbb5a3b2a9f49b00f9df\n\nEntropyInput = 80773d0272ff48ba84b98c817365b097f21258624d0de8529381977950a5e49ff2b79d0f2522269970ea6d484198922c\nPersonalizationString =\nEntropyInputReseed = 9b101ac018be88da3611a236dfb1300c0049947e9f6ebef7a3ad6e1499efeca0b142826fa06f427e271865232a18dd29\nAdditionalInputReseed = a67ee22453dcaa5e4726e3084872145ab60489bcb6e83346c108f3efcce5b3d988b84d58786658d87c2dc3b9035e9d88\nAdditionalInput1 = 546515bf86e48dfb2b4dd21c2b46f10c1e797ab799b51822e8e7cd99ccebcca00b8899ef6af5cb395168aada9056a6c9\nAdditionalInput2 = 57bedda63fc5f792a608be111141a12e522496c086194515909bddcd868be997e718e7c5899e28dd6b123cbcc3f2a8f2\nReturnedBits = 4075461e459f15cd32030551be47528223693c2f44e32443cbe9271eefe74fa0a6e1ec04f4b8f41d7ed6c5f455281a3cba56d952b08b7753f6a3d7da3517317a\n\nEntropyInput = dc132c15af0e214d1b56eb88849e96b81dc17f238eb3d1bb9a659219dbd77eba38ca2796a8011e29cfad76f8cbbf099d\nPersonalizationString =\nEntropyInputReseed = cba23d4fdbb6c11e38012b71ca264bff9d1264bb20a39bb27d86dcdf7d72ce7a4f5c124cdf2aca6aaee20832495181e6\nAdditionalInputReseed = 07e043add7cc14612a82926c09934dea092f4618cce25674972b1f50b2907c7e3d40a25722ea49b0c7ceb6b57ff2d870\nAdditionalInput1 = 0017ff834967cff8827598ff6c00a9c97f0347c34f2523a85dd7d18ff5575756c1f5383de50338d0ab0505841d70a193\nAdditionalInput2 = c404dbc3cb0851b08530f96500f5a2c10d8985c82dec2ba31d4199fd07687ccf124382fbee3fa119938f0c72ac586102\nReturnedBits = 1935cce86bde7087fcab30b5dce0e072ad741c2f281902e1801e56c08ae8b256d27514de92dd48a838ca426820002c1206f86cad37cfd99d3a935e05f56a7507\n\nEntropyInput = e48495930a7fc86ecbfad807d40ca84ba35e346c812090def8f44d9e48b0a40704ac67ec80ae15b12e858ae85a7ed9cf\nPersonalizationString =\nEntropyInputReseed = f4735954d17e99077061c9604e8f1734d61dd662e54e37256c0f8bf276e025d59d21cacc0869ededb44a2aac9fcf2ccc\nAdditionalInputReseed = e796322fc0ef503251f6d4bd72dc5ea8100", "c5a59f1a4fe4837fa8eb2623bc650a0cd48c306f139e0ecd169a51deb2cd0\nAdditionalInput1 = 1c844d24b7cd9512e5035bc457612ebf6d3df6867aa909038bcbc1f474f7d0783ed474e34525a817bea1fbc883961e31\nAdditionalInput2 = 5c5671ba79bd0b83f74d0ed98e9c8b369a2de34188d8b7cada20b3363738d1252ece1e6a26d007acdfc5b6108412766a\nReturnedBits = 40f17e2bf6084a6447f2c40d601e16a43098dadd9f9614d518874623e8e684438c02e127e582b000dfd46df03dd5435edc4f0f47098320fd311afdbb8542c4db\n\nEntropyInput = df4a888ec7363fadd99ce2223ed39577a41bc220d20b253f98dbfc617aff8fe4ac66e5da1b5097228422cf8242baaf53\nPersonalizationString =\nEntropyInputReseed = e16dca80b2061706e8180dce8f59e888f150836a0bbceac179a4b8d882eead78709ed9951102728abbbbf9226a2d913e\nAdditionalInputReseed = febc9f6b9f2b90b4320d5d41e5c5506fa32b164d86d5e7f91d4a360fe179c127bd2bdeb78fe760174e856a5e04ed898b\nAdditionalInput1 = 0aba74cd299e75886c9e7e5293e5915d720da2c8c1cca7f0e1d6f2b672b4014eb4582e97a877121c87956185736ba0e9\nAdditionalInput2 = e451eac802660ac843fc72b66d59f1e1ca831f22d6a361929043f7626f1d82133f512fb1f2d8ca51004f80ed600609e4\nReturnedBits = 968b708ed6b54d2e5a66d46f22998748dfb5cf47e817732a40938bf3593fb251ccf8f2076837715d14b316bfb52560135602ff98338593696bf80a462b214c4b\n\nEntropyInput = 43bc561c4dd1b904a5333a092a670d0d1b61128a13be2e538a329094574819284e414b938dc8b1860b385c293c03010d\nPersonalizationString =\nEntropyInputReseed = eb362136f4ccc9e302505d525befbfa99d8c3336187d5902b03ed75641913ce973743757f97dae9366874ba62bd87013\nAdditionalInputReseed = a901f4daaa638804177a0b263e8cbc81688df3beb218b02316da83b729230a9e5112fb3896b727298755bb9ac6b6250a\nAdditionalInput1 = e33d181f3159fb0874eff5ef8ddd2b51a60b13ccf046f7e637ed27bed81bb604277f7345e6b8f0e09f925793ce417fff\nAdditionalInput2 = 3ecf6233820e6cceddac7b024c490c5ee14c73d5b598c92cda30940471b6ed450019120689aaf157fd87b71b13afea25\nReturnedBits = 9d793dd96b870dfa0267623bd1c2d8bd3e2c63e9f211340f630fea01358011394154145a10659c4d98274a525c48a90da0126a99b85ed5b4b903195f0dddc762\n\nEntropyInput = ffad10100025a879672ff50374b286712f457dd01441d76ac1a1cd15c7390dd93179a2f5920d198bf34a1b76fbc21289\nPersonalizationString = 1d2be6f25e88fa30c4ef42e4d54efd957dec231fa00143ca47580be666a8c143a916c90b3819a0a7ea914e3c9a2e7a3f\nEntropyInputReseed = 6c1a089cae313363bc76a780139eb4f2f2048b1f6b07896c5c412bff0385440fc43b73facbb79e3a252fa01fe17ab391\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = e053c7d4bd9099ef6a99f190a5fd80219437d642006672338da6e0fe73ca4d24ffa51151bfbdac78d8a2f6255046edf57a04626e9977139c6933274299f3bdff\n\nEntropyInput = f1e0d7b1ac7e4e155bb588500f57d0c59969267ea5427e2d7fde1f9c54e67b7f6562bfc1019b8b5799d2a833fdccac79\nPersonalizationString = 86da37245d9bd1fb59a4bc7abd289ea2999258042c5fa696f2da7344bb6ebc5b770ca284bfe642570b52ef47b780d5c9\nEntropyInputReseed = 9c2c9c07cab12cf50f8846148034a416c83366c1e20776073751553cae69da8d1f6bce6bde27087659d69a62e2ba7c3c\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = e0ac06d7eae89469b6c14a31e7f0464ee21f7b30d2264c2de3e435cb40d0e5043ee13dfbc0342156750880b2d5dddb3bebb43b162a8478235c8b87f96d0284fd\n\nEntropyInput = 1dbee767e9916ab322ba461fbf9f7515cfbcb45944a7b471577da087690d94d967018b631e0c1f64da3c805d049f449a\nPersonalizationString = 966b5cd94019d4d90b48ea7f540a698cfe30d7eb25f5f7e5fe42d9f53ebed6e94e733b0794fc6bf30627911e20cc18e8\nEntropyInputReseed = 96e828128f183c76c90ec8341a43561368b77114048ccb05db66128d54c9539d1adc1d72f7fb0950e41b1343a9e4df76\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = c4d3f5c55d3979b174020650ad7a46b423ec446dff2a9e9fe0a782bf65a72d5fcb1896bc1092a8c73f41295e2e7044434f88aa0aca78f7eac40e322cb7c25563\n\nEntropyInput = df588bff3a1fc97a908067da6a7fef08c889ac29ad7d639bd047157bacab4dbdee3dffe575f37d071af94cbd7628d398\nPersonalizationString = 548715cfb28c1bc56453b8c39e24cfd64077c0f6e9d959d51b9f0667b97d3c4e1a179d1a554df845b24c26daec85845a\nEntropyInputReseed = f8c165b5ebd8347a2ffef2218f993877027e977598b4fdac2f65d8d994c7432900f8407ab5aed1885dee5aa2458f5998\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = deed18220bd8f72a34559924f3cad925ee717690f76bc223d5ffeebbb554b61b9d9eb6ac5697b06331e236672677e2e01d6e3fd581a4fa1ebad289797b68955f\n\nEntropyInput = 98555093e443fe8e2bc8d2eb4d3a7abb8eba00b25683a6b31191fff7c043665ec2cad3e99e55bbc241b8edc699dbc9ed\nPersonalizationString = 5627a0a55457db05e3903d4b69ce15f55f933168d6eb374c044e8f1040f61ed7eb24f87f91c68cde050f504b8965dd81\nEntropyInputReseed = 18d17e1b68378801f83e7aa9a6d4b84d3960022c740e6c845869a5db553d2e02479cd92f3c0d8abd3e92fc9c9fbc6a3f\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 7a7f0ab07a540b4e9a3eda3f8bd1262015d8ea6d512dbea05942421f5a73242ac236009ef083bf2e51b19c40d1a019367a6b96fb52d254e4d881550aef0549ed\n\nEntropyInput = 07793bac6461f23e5eb0d1bc60b5f735515458d1530540df1c8e6fc5c3ebfb06b9db60a8947eb629ff7a375fe680d696\nPersonalizationString = c1e2132b77b6c15742e06e856c1549c4ccebd1b2eda93e2c43391b52cad51490fe34157f57be9eb4eff463b059986680\nEntropyInputReseed = 23e47e0c41462f7c619bbcd5b73f9ab1c68c7cdf1ec92c4c37126402958e110e329107742e70db611b93974c393936a6\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = e6dab4a887f48ec33cb293ffdab5fc69595f94c72c5a9bb43f468f75490190b7e0f14f5c04550cb62a6d0ee0c3d834be3434c8229c124087bb985a06b9a37267\n\nEntropyInput = 25cefa0512921fd4a3a4e5e7c48c6201185a6968419ae5bcc6667bb74c35de4f91988a33f25ea88a8443c65643cc73dd\nPersonalizationString = 07ddf125960c346680b4b361c0a9c6dc1008a85ce1861b45ff18907e6e7db41b046e5f016617e6c5b0ceb5575ac278a8\nEntropyInputReseed = 8cf41e5413b0c8ffacbc4dfc119f10b47569359b911448f45c7ad63dd58e872410c25176b986fee8b83966d0098d996a\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = ab58ec5c35600566dd2ee187a5b67dfa65bebe13333670d2a198fa5af0c20294c6cb69d37564d2b2587ea5587e12341e77f47f173d6cc9f9b9e5dedf0ee1a8d0\n\nEntropyInput = 929f1dec0a6d14de483a2fe114a430796d0b449fca56a4ddbbe661bdc26a8df85cafad7b677ccbf1fe4cb0d5e8cb57a9\nPersonalizationString = 0bf8c590a66653c0494750d10274b583d86e540b517bfc23bb3b0c9fde373e456558468603c2115c97d3662e6825f4f2\nEntropyInputReseed = 84030628534b7525dbd4023aed1ab08c4f2b86a7c2fa3bc9559b425cce07c34fac14e963256aea03f74f1122a7a30483\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 199f2dce5bbe32c693151a216fb36ccea7996c313f6b78fa30ad812a0e603965023fc29706a71b753d79244cb9e8fdaff467e0f963426b10ad89a98e987af316\n\nEntropyInput = 7bc5d970186b9e1b0052b7564dbabf61c89cb3d64ff42f9a62d625112aca0486cdf0336c3612254b40cbfba83ab65b42\nPersonalizationString = a25326fef30f9c94423d99759a1ee575536a9715df9526de9a0b8dbcc3a2234cd835615f5dfe7823927355f569ec6f02\nEntropyInputReseed = ef8a0137013be212402e42b28c03ed6420881aa38b3a3e6e90a861116516df1ef732a19e8935ffcd9be7a2fc236783b7\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 29f81ecf3f41d278c01bba9af9bc0fe6009539682f46723ce5b0ff75fed217ad71580b5dac46289e324d824094c332c3955c528257701a14ec2bfecce4f62a6c\n\nEntropyInput = 0c841a245a19295281163b07541590376d31d86a9be99e66cc22352dabb29f95e113ee233d74d3f2b7f2f608830525f0\nPersonalizationString = 28d3581054d87f153aee12edca47bad80bfc9b066ad1e8b9d96c851dc7b8ed768cad007b891d1c9447d43065b483d085\nEntropyInputReseed = 587a1dae75c2a1f2dea7fb42ef7bf38646b76a964ecd7043d8b62fdd9e6a5c007882f02f78fd040561d15a337e59f257\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = ba7bce080963fe2b4e8f0e1aa700e92b3908e18dc78728666904b0220e4077fef2cd18bbea29a2755a3499798cca445bb75269a5adca2f291dd3875457c69a89\n\nEntropyInput = f4afddabe515ca3e776730e7d44461b27e8f72407ca398d3fb578365e09ea8c24d6c4b09724907a610d755407d38667f\nPersonalizationString = 846bcbc7014ca8c6fb042a80d4a8c3aa50b6c5eff15e4b12f966ab17e6514cbb22fb2eed628ee5c2a8acde821a956078\nEntropyInputReseed = b2aeab1165b150908c9bb52c2b7167c149ea4fb4710edc8acfbc63f7652bb552d636a7e6fc3d1e74d3f65461baaac087\nAdditionalInputReseed =\nAdditionalInput1 =\nAdditionalInput2 =\nReturnedBits = 2a0335c3caeeec7c797f99fbc145654d3985c3c71025c8e4bd4b098801f15d21c272420417d805b0ad1ce68f904502a46130246315957bc07a5db4f3447a84e7\n\nEntropyInput = 6942413e05ac487cf539bc61aa6866ef8cbd9d0f15e1385f37bba5a951a29fc956d46f8740603af7c71800048c8312ad", @@ -2439,14 +2594,14 @@ "887d92419e3c839b8b1dc43c6507026f1f851e\nAdditionalInputReseed = 857848c62203307b39728acf11ac8462302d3a41d186778b3f112a86270252f058fbe5767496e47662186b8d0817de02\nAdditionalInput1 = 9a08df0de742fd2e2d55121a58b700dfbff250a4881b02fc3b8952b48ecd4d034d6e7c757cdf91bf7c31dfaf70b1da22\nAdditionalInput2 = 3bf0e4f1291a8bc272cc985878335882c75831510f27963c7c01a879c60c5b67a9a14a656a746a80a091adf6ffb1adf6\nReturnedBits = 69361d61f4cf5ed489888934f320a9acc5383e719f09a1e30b6029bf71d4b4cb54859798ace2d8ee5e681d4acb223b9c119dab2dd07e6db3f7f844c2b46b9c47\n\nEntropyInput = 6f45b55ac62d5ffd452d36b1e4b18cc6abd6ad93e87558b79fbe99b4f4a962b74bad00821019bd126d6f9dd73912acf7\nPersonalizationString = 913a783046baefe428346085fd640caa1874d4aa6974832cacc5b51e78514bcfedd174606bef1721df7a1194a0ccd1e3\nEntropyInputReseed = d9e19ce3197004ab3a4bf995a481149b6d8e59a3970161cb0d3917374c0c86bb5e9bc509bd01b6796fa1e77e5fdddb16\nAdditionalInputReseed = fd31068c90614e04463acdf856b034293a079a816f1c5f3de63b870a9876f7397d2f93bd3f6776b56a78f7178e1fbb87\nAdditionalInput1 = 068e3791b91adb820b27c45a5d8544eed3133486a7d2d0bc503d8abad8b7093f3df214f1e0ac4ff2d347c760b2a605d5\nAdditionalInput2 = 6c55927a349d321d1a2141aeccc3543e9726ffcf3d8fdfe1aed63c61972a213c12ea65d648e476268611e9b08486a648\nReturnedBits = 552b4c4035d964b5eb26e3036445793df67b7321d36e8d2362fe284503b587c961a33b816b40b93d4b006769177c6593c553b6e669076f25a3e2a7214156c249\n\nEntropyInput = 8d492df46257a62e717302992682e28494f84d0f3237c16439efbbd16a94b3356eb7f7c2a0206892045a0d7d36d69f03\nPersonalizationString = b915f3311feadf6676df2389baacccdafc74cf200ed7b99167b33dafa875ce4aac1a61ce54972ec54f9b0901a3b050ee\nEntropyInputReseed = 2e345fe3a471c5066b20f4aaeaaf73921426ac1bc0509e93671535a8fbc016f5967403d6d13b4760491bf973c47a8ed5\nAdditionalInputReseed = 2e8f1f01a7664890feef93152f7b7f05032b4c70c58b5f261ef0a9c2aef23f2a14ee57c3d3465af24289b1c850e52ef8\nAdditionalInput1 = f8c218c996284f757c491cba025fd84cc701f9f83a16f03c314712c2354fee39214ed5994ab24641826bc15ed1bb5f61\nAdditionalInput2 = 146c53dc4af90f26d8c85822810d9bde2949495c23ca2c7c13ceee8221cbe8105491d560e0044c8d50d7e365da41890b\nReturnedBits = b19dd18494235abdcb3b4e99c9355d19d543c7fb7e1048d63d9e25abcc12dcb31549cec2818667713ad1dc35142072ca8daa511927aca71303493e500503be8b\n\nEntropyInput = 2a595f08947d0056ed19ecc8a547867834c125cf1740230a1325b93bf29951cbedcaa6a8f5cbe69801fb9a197ad576c6\nPersonalizationString = c0fb9dbea13863dfbfdb2c0dd864887413794a07a4dd228836f0f6afab901496486a2d508a3f4b784d83382629cddbc1\nEntropyInputReseed = a3ddfc3aefc94dcaf656f4d8eef0065a6d233a76e0a4c26e2d8bbb86459c9e4a173ff8cbec85ebc14712640741427668\nAdditionalInputReseed = d4eb9b12fc2a6fc75a69701c8b5ece02e47f813effb705dbdef0294e38907f5aadf40bdbcc067d0ebc0bf3661a2e0990\nAdditionalInput1 = d3c4bf4f8a3f61413fe1953523ba83bc02ae6d7eea1c8ba288f8e06f0d0276e61667a410f90548d283c4f1ae79483961\nAdditionalInput2 = e6fc29680eef141e1372e17729c9f4407b3f7a57057be1081ce46c78693334bf56867791072d9d18a7b4835bf251712d\nReturnedBits = 08475bfb8e621e12e212f4960e737023f7a3de3b204b6ffeeb929f424ca78c6ae2e0d726237915e5e244616713e88a39df302208e3a324f5444213b70b2e9c09\n\nEntropyInput = 3d5332b91dcaad893df504c7c675b69890b28055dfd3ec7d0ba56990dcda175096ff8f8f9f9ecd6dddeb96b829b98c3e\nPersonalizationString = 34753432b3c6bedc4d2296dffce8a66591b400867f7edf10cee447046f5f767036da9f3f4a02f7b8cba7bdd4365c1fef\nEntropyInputReseed = 1a69af0ff696f9a2fe0fddd26ccf6fae215faf91804461928c884eec13b1dd1501862a738373454e1b449c6026cebceb\nAdditionalInputReseed = dc47e104175f3c9812feed9e143da5cd7e553e3423db5bc8be3b652f577100267ff795804aaf42c3991589e7688a977b\nAdditionalInput1 = e64c0cad3dfc0bf0eba3317cf37b7779b91bf3de3e0ba36d3e16feb0014286596edd364c197847e8732925f971294dfa\nAdditionalInput2 = 1ff3a6bdb7e319a86b35d062cf017ed270c6b5511bc3d63083272e76bf4db9d90e836f18d98f1f79c2e91eeb0bc635e2\nReturnedBits = fdef7e67c3d19f5f74784bdc64d2c23d0a3f027846da2b2afba940fdc2f066d89b63d27e55d3d0a88bddb97e29676894ec8a18268e4bc27d181a867c5a80fe2c\n\nEntropyInput = 156c8c0f44f4a8f17044957b572ed16d54b73a9510d2b260a036ad6ef223f45e124c4ae9dae0fdf5684792da0ff5ea0a\nPersonalizationString = 1472f56d5498564a5b53d2eae27103f41f565d7873b37c37c30472075f1d84d69a8d68c92636ae06aa61678358cc47d4\nEntropyInputReseed = 6bc2bfd44f72982b23b6d22c85f7d601d5941ebe6e9ee9d06a8efe652539ec00b1136adbc4e43aaab76c3ad6a57a267e\nAdditionalInputReseed = a83b1547fadb97e491ef0bdb8b0d006ab16638fdb211613051f0f57586c146882f1062b7f71a8c15bb27200fa83ffcaf\nAdditionalInput1 = ac188da8a895e0807bab61b1ebd73acbe43f99f375c7d29174f675e1667237cedf1d41fc50da277a0db21ee2891a5abf\nAdditionalInput2 = adf9a30b6cd9dac23f193f66df9d606a5765b96cc42c099530c53c26a6d6bcf0779ae060d188e1cc5bdab6c312892267\nReturnedBits = fcc79828bf2c9d3d799d7a0e83583c70aeb156e25df0b2fde030c2775c9986c8054e848128ba38ff5e5b0b1e5b72f9e41726b960008408f5152b1a47072fbdf7\n\nEntropyInput = 5e0dd8e37aa23d0fe79efcb8e5538ee90ffb5733decc83f7677488c4f64c2e0d2a918968a5c7351de9360f23fe606a4a\nPersonalizationString = 5161b794e4a13371b320ae4b2b6b698e4df507402a7582555598089dd9484358d37f891294948512e4198a79de8ca3d9\nEntropyInputReseed = 850ffb89bc23562f3ea03947c1afa7309a0ccdc0b714bc94ff45d66884b74fba0bffce97887f2efc178388f36f0ea95e\nAdditionalInputReseed = 50f605cb940f573c4ef3ddff8caa9a3f544f40fdf583b82cd79338523d896f72f86be1f9bb37d9aca02a2856f713c812\nAdditionalInput1 = da7bcf6810a6b3820548065edbec0fa2fd4bc03e5d50666f98a8bea6b744e04aafa0714582f11b6608852c45ee51df6b\nAdditionalInput2 = 4e9c0c770699656217a0b2dbb466a0fcb0cdb5d4a4a05da40fa2eb546f2f0f28aea575a0bdf6e89352d519db44f47dc5\nReturnedBits = 40ec0e8e3e54cd4fd78f5e006bf3134c378ba619ccf9e7530c79217da631458b5f9135bc8b0d6f2e742c53b58d0ebc18263f9d2ef37a2fa0fb086d2193857863\n\nEntropyInput = 219a364ad362fd8a1d69c1284fd64cc9ec05e6bfbdd133ac9170594b5d95946d3dda2ebcc58deeace86f9dca5ad99c18\nPersonalizationString = b0b27b03fc65effe4610e61916f2e9bd252d47efcc08b84aa505b1befd3a7e9295ca764ac88f099bbecc28301f0f298e\nEntropyInputReseed = 1bccdb4b2ce863fbee104d7a56f2cd88a44a088392883a6db30e6fc7bf5611759c71d53a61fe62b6314d7426e510a722\nAdditionalInputReseed = a06eab3b05eb3649a01be82a356030effdbf45fd71f49b1862ecf33fdb28a7191a34f104b9eda1da4ba48daf9da381b6\nAdditionalInput1 = 88b17e13e02a7e9a3f8263946fae0b6a9052692c3c5cbe858369c4d0b198b9c6a8f4c87ff5e6b2835a7944b911266aa9\nAdditionalInput2 = 828222c8a275427a5f8a963d0d65e92f6170d5089c9a162429c093a28dd69f71135342f16b3baea9a4764e2cc3762267\nReturnedBits = a739f9fee9a40049e42b00b381a1f663877abb776ec655e3a7870bd94bea1a25d3c6d380eced435e498044daf78b349bc1868e4bff6257cf2711ed08e2357201\n\nEntropyInput = f8513c2f6e46f75fce3671ccb3c69158583a873b0dda83d8b1cd548f4e5efd75642f2c23cf8792d51023f31d795f6f5b\nPersonalizationString = e94f7212257885511b15a873d0158fa5ea648846afbcf9d62a7abc4e6909dd43c671fa18bc289f47e2301e9aa69c3e88\nEntropyInputReseed = 487b9c1866ffdaaf6760cdee3df5a930196d30b0ac8db780656577ddfc1ff3508c451ef2b0b478a2cf0c73027597b2ae\nAdditionalInputReseed = 7387b59f8c78e79d36edacbb428fd515ef9e58086059bf7fd642053b0f5706cfe86eb3c35ca0b6f02e5d1304e476e3cf\nAdditionalInput1 = bafc59ef40e59d8c28851212e1c357cce0d06f02c69d14585170ca8eb18396a331d635cf0651319842cee2f7c87285c2\nAdditionalInput2 = 82d905ba69b6c45ca28107beb6698a152631ab48614235f6a9f12e019f66bf326151d9ee84e0cd42b6566dbffb46ec35\nReturnedBits = 163f48d09f3e9ebf9f8647766a0b2e189a2f3a21a5a4e31c8a4f3bd138cc50030ac8bea1c4d9e9aa0b67f34926239fbcedfd1992da165b941cf03b56737737b2\n\nEntropyInput = 0a8f092764d473d48215e947ea8a32b5da8ea86d8ed0d83bce31b1b5a21e7c5f1af2186a39caf9afa61644caef02ef9b\nPersonalizationString = 84637faba756917b0f44ba2e0e26546f5239782e4d9f952ee251367081629e71c20a7459995a7563810daeab74220664\nEntropyInputReseed = eacaded3d89a63b94a5c14c3087306e670fc4ee7d56cafef4c5aa7d553ca89ed34418056a44f5447e2b07dd541ac4645\nAdditionalInputReseed = 104a1541313fc4be9d34bced288c1c1b6fa793e9096f8be5673a2c6825dabef91fd88e45a061b2d897f9b5e8a8ae0ad3\nAdditionalInput1 = e30c9d8aba0bd5dc63d911897e4dcadbeacc3ed9392d8e361b356e02a81d65bdab91f7e9f8dd2b2bf9af0da5100e77d4\nAdditionalInput2 = 2bed42b8c05461ba2756a5f38393d5538d20eb9cf1c06775e7fef7284341f61ccd34b0148d1e870c1992dfd065560ed6\nReturnedBits = 855a6af3e6dddf194ceaafcef6f7ee91f489a61a73b759d41be4d5298510b9902f5b78b1162cba417684519634b578afda9802bd782f04b3a25106f3586ad8a4\n\nEntropyInput =", " ed63e3b88a2f0d6a40b7b36a06cd8d40ec10158ab6c4f8dabdb879e45d22db573320d2641bfd7db31eb6bbf4c6330b9f\nPersonalizationString = f82a5ee81f349a69dfa6a6e53b406bb560cb0339f61b3886237023ae4582b9725b8774a8044ec5134ebd4d7606f18188\nEntropyInputReseed = 7104522c2a69bec7e010d9670d7ab92dd817ac7ff05d63ab0e12d431d4c9aef4d715421c1fb5d05d3aecba36859a6038\nAdditionalInputReseed = 3b83034ea440604d0b7d04857623e9adc0eb9aad4a45b2079863eed3d72e65abf67d255673e769a2e2584eea59f1ebaa\nAdditionalInput1 = 8678e4f831887e96a27c3a8ce0963f4b34bbca25791b06526cb6c55624c33d98a0356be624238cecacba3535e872c4c7\nAdditionalInput2 = ec3452ea2722984bbe6a5b7c22ad58df37a854abc8630b9e21bcd0469eb207e5f44e044f5f666920dd55e81a393500de\nReturnedBits = c340765fe7a3479bef2d7d59e321066f8ad0db53aed4c517bf8339566bf877d53921e6de2650d0080529004a5fd32124ce8e58a040e2d55656b37d9ea827cb91\n\nEntropyInput = 882ed05487dce4b4f9e58ec4f2da1fa5d8ebb4ef9fcbf7b0a0e15c4dccb8e19788f86dcf2885e71a20cbd9ac10a6648e\nPersonalizationString = 05f5bc41687ea1e4c34a69944fbae283cfee4c42b1bbd78fddb0973d0fca948539b6843658b67c30b73191b9a0bf2921\nEntropyInputReseed = ca1603d4c8711404c7bdc12c7c75b2943a4b042ea1d2eb54506a6876952157caf3b152dc75f27f2213645a141577e8ba\nAdditionalInputReseed = 83cda53380888d53515e58154f89d5528ab69f31fbcfca34988cf03c4cae5f60aa6291f32d99ab2a726b6e08d2502cf5\nAdditionalInput1 = 5bf5ca9f964edd91e8ef491fd3cd32faf9cb9d1993d8221914d1751fb0d4252a5ca950e213f088050900b2bd74f5e336\nAdditionalInput2 = dba28dc1d8d615651547867d4ef42519045ee16378143685101da47a27b55498078e8a8f4854052f7cc6f5b02e571ae8\nReturnedBits = 01f11971835819c1148aa079eea09fd5b1aa3ac6ba557ae3317b1a33f4505174cf9d7e940821c9b0e5527a1d3e186a7a83f187c62d3223cf5964ff9526d8484c\n", }; -static const size_t kLen34 = 157331; +static const size_t kLen37 = 157331; -static const char *kData35[] = { +static const char *kData38[] = { "HMAC = MD5\n# Note: The empty key results in passing NULL to HMAC_Init_ex, so this tests\n# that HMAC_CTX and HMAC treat NULL as the empty key initially.\nKey =\nInput = \"More text test vectors to stuff up EBCDIC machines :-)\"\nOutput = e9139d1e6ee064ef8cf514fc7dc83e86\n\n# HMAC tests from RFC2104\nHMAC = MD5\nKey = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b\nInput = \"Hi There\"\nOutput = 9294727a3638bb1c13f48ef8158bfc9d\n\nHMAC = MD5\nKey = \"Jefe\"\nInput = \"what do ya want for nothing?\"\nOutput = 750c783e6ab0b503eaa86e310a5db738\n\nHMAC = MD5\nKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nInput = DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\nOutput = 56be34521d144c88dbb8c733f0e8b3f6\n\n# HMAC tests from NIST test data\n\nHMAC = SHA1\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F\nOutput = 5FD596EE78D5553C8FF4E72D266DFD192366DA29\n\nHMAC = SHA1\nInput = \"Sample message for keylen<blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F10111213\nOutput = 4C99FF0CB1B31BD33F8431DBAF4D17FCD356A807\n\nHMAC = SHA1\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60616263\nOutput = 2D51B2F7750E410584662E38F133435F4C4FD42A\n\nHMAC = SHA224\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F\nOutput = C7405E3AE058E8CD30B08B4140248581ED174CB34E1224BCC1EFC81B\n\nHMAC = SHA224\nInput = \"Sample message for keylen<blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B\nOutput = E3D249A8CFB67EF8B7A169E9A0A599714A2CECBA65999A51BEB8FBBE\n\nHMAC = SHA224\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60616263\nOutput = 91C52509E5AF8531601AE6230099D90BEF88AAEFB961F4080ABC014D\n\nHMAC = SHA256\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F\nOutput = 8BB9A1DB9806F20DF7F77B82138C7914D174D59E13DC4D0169C9057B133E1D62\n\nHMAC = SHA256\nInput = \"Sample message for keylen<blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\nOutput = A28CF43130EE696A98F14A37678B56BCFCBDD9E5CF69717FECF5480F0EBDF790\n\nHMAC = SHA256\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60616263\nOutput = BDCCB6C72DDEADB500AE768386CB38CC41C63DBB0878DDB9C7A38A431B78378D\n\nHMAC = SHA384\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F\nOutput = 63C5DAA5E651847CA897C95814AB830BEDEDC7D25E83EEF9195CD45857A37F448947858F5AF50CC2B1B730DDF29671A9\n\nHMAC = SHA384\nInput = \"Sample message for keylen<blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F\nOutput = 6EB242BDBB582CA17BEBFA481B1E23211464D2B7F8C20B9FF2201637B93646AF5AE9AC316E98DB45D9CAE773675EEED0\n\nHMAC = SHA384\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7\nOutput = 5B664436DF69B0CA22551231A3F0A3D5B4F97991713CFA84BFF4D0792EFF96C27DCCBBB6F79B65D548B40E8564CEF594\n\nHMAC = SHA512\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F\nOutput = FC25E240658CA785B7A811A8D3F7B4CA48CFA26A8A366BF2CD1F836B05FCB024BD36853081811D6CEA4216EBAD79DA1CFCB95EA4586B8A0CE356596A55FB1347\n\nHMAC = SHA512\nInput = \"Sample message for keylen<blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F\nOutput = FD44C18BDA0BB0A6CE0E82B031BF2818F6539BD56EC00BDC10A8A2D730B3634DE2545D639B0F2CF710D0692C72A1896F1F211C2B922D1A96C392E07E7EA9FEDC\n\nHMAC = SHA512\nInput = \"Sample message for keylen=blocklen\"\nKey = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7\nOutput = D93EC8D2DE1AD2A9957CB9B83F14E76AD6B5E0CCE285079A127D3B14BCCB7AA7286D4AC0D4CE64215F2BC9E6870B33D97438BE4AAA20CDA5C5A912B48B8E27F3\n\n# Additional HMAC tests from OpenSSL.\nHMAC = SHA1\nInput = \"My test data\"\nKey =\nOutput = 61afdecb95429ef494d61fdee15990cabf0826fc\n\nHMAC = SHA256\nInput = \"My test data\"\nKey =\nOutput = 2274b195d90ce8e03406f4b526a47e0787a88a65479938f1a5baa3ce0f079776\n\nHMAC = SHA256\nInput = \"My test data\"\nKey = \"123456\"\nOutput = bab53058ae861a7f191abe2d0145cbb123776a6369ee3f9d79ce455667e411dd\n\nHMAC = SHA1\nInput = \"My test data\"\nKey = \"12345\"\nOutput = 7dbe8c764c068e3bcd6e6b0fbcd5e6fc197b15bb\n", }; -static const size_t kLen35 = 6201; +static const size_t kLen38 = 6201; -static const char *kData36[] = { +static const char *kData39[] = { "# RFC 7539, section 2.5.2.\n\nKey = 85d6be7857556d337f4452fe42d506a80103808afb0db2fd4abff6af4149f51b\nInput = \"Cryptographic Forum Research Group\"\nMAC = a8061dc1305136c6c22b8baf0c0127a9\n\n\n# RFC 7539, section A.3.\n\nKey = 0000000000000000000000000000000000000000000000000000000000000000\nInput = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nMAC = 00000000000000000000000000000000\n\nKey = 0000000000000000000000000000000036e5f6b5c5e06070f0efca96227a863e\nInput = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f\nMAC = 36e5f6b5c5e06070f0efca96227a863e\n\nKey = 36e5f6b5c5e06070f0efca96227a863e00000000000000000000000000000000\nInput = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f\nMAC = f3477e7cd95417af89a6b8794c310cf0\n\nKey = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0\nInput = 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e\nMAC = 4541669a7eaaee61e708dc7cbcc5eb62\n\nKey = 0200000000000000000000000000000000000000000000000000000000000000\nInput = ffffffffffffffffffffffffffffffff\nMAC = 03000000000000000000000000000000\n\nKey = 02000000000000000000000000000000ffffffffffffffffffffffffffffffff\nInput = 02000000000000000000000000000000\nMAC = 03000000000000000000000000000000\n\nKey = 0100000000000000000000000000000000000000000000000000000000000000\nInput = fffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffff11000000000000000000000000000000\nMAC = 05000000000000000000000000000000\n\nKey = 0100000000000000000000000000000000000000000000000000000000000000\nInput = fffffffffffffffffffffffffffffffffbfefefefefefefefefefefefefefefe01010101010101010101010101010101\nMAC = 00000000000000000000000000000000\n\nKey = 0200000000000000000000000000000000000000000000000000000000000000\nInput = fdffffffffffffffffffffffffffffff\nMAC = faffffffffffffffffffffffffffffff\n\nKey = 0100000000000000040000000000000000000000000000000000000000000000\nInput = e33594d7505e43b900000000000000003394d7505e4379cd01000000000000000000000000000000000000000000000001000000000000000000000000000000\nMAC = 14000000000000005500000000000000\n\nKey = 0100000000000000040000000000000000000000000000000000000000000000\nInput = e33594d7505e43b900000000000000003394d7505e4379cd010000000000000000000000000000000000000000000000\nMAC = 13000000000000000000000000000000\n\n\n# Additional test vectors that are long enough to ensure OpenSSL's SIMD\n# assembly is fully tested.\n\n# Length 2048.\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nInput = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72", "c924bba2a8b4e8354188ebfed\nMAC = 69d28f73dd09d39a92aa179da354b7ea\n\n# Length 2049.\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nInput = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc8\nMAC = d6a26654b88572e875d9661c83471c1b\n\n# Length 2050.\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nInput = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe", "23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852\nMAC = 9fbbb7f7adcd0cd5b46a4a520b22499a\n\n# Length 2051.\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nInput = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f5\nMAC = eb7cdceb97ade2a07622f8f5a4b1ce15\n\n# Length 2052.\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nInput = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f9", @@ -2458,7 +2613,7 @@ "90485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a28c99e21\nMAC = c6e5d1810fd878ac6b844c66cef36a22\n\n# Length 2063.\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nInput = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a28c99e21df\nMAC = f6eaae369c3cb5c05748e8d919178e00\n\n# Regression test for https://rt.openssl.org/Ticket/Display.html?id=4439\nKey = 2d773be37adb1e4d683bf0075e79c4ee037918535a7f99ccb7040fb5f5f43aea\nInput = 89dab80b7717c1db5db437860a3f70218e93e1b8f461fb677f16f35f6f87e2a91c99bc3a47ace47640cc95c345be5ecca5a3523c35cc01893af0b64a620334270372ec12482d1b1e363561698a578b359803495bb4e2ef1930b17a5190b580f141300df30adbeca28f6427a8bc1a999fd51c554a017d095d8c3e3127daf9f595\nMAC = c85d15ed44c378d6b00e23064c7bcd51\n\n# Regression tests for https://rt.openssl.org/Ticket/Display.html?id=4483\n\nKey = 7f1b02640000000000000000000000000000000000000000cccccccccccccccc\nInput = cccccccccccccccccccccccccccccccccccccccccccccccccc80ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceccccccccccccccccccccccccccccccccccccc5cccccccccccccccccccccccccccccccccccccccccce3ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaccccccccccccccccccccce6cccccccccc000000afccccccccccccccccccfffffff5000000000000000000000000000000000000000000000000000000ffffffe70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000719205a8521dfc\nMAC = 8559b876eceed66eb37798c0457baff9\n\nKey = e00016000000000000000000000000000000aaaaaaaaaaaaaaaaaaaaaaaaaaaa\nInput = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa000000000000000000800264\nMAC = 00bd1258978e205444c9aaaa82006fed\n\nKey = 0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c\nInput = 02fc\nMAC = 06120c0c0c0c0c0c0c0c0c0c0c0c0c0c\n\nKey = 00ff000000000000000000000000000000000000001e00000000000000007b7b\nInput = 7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b", "7b7b7b7b7b7b7b7b7b7b7b7b7b6e7b007b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e7b001300000000b300000000000000000000000000000000000000000000f20000000000000000000000000000000000002000efff0009000000000000000000000000100000000009000000640000000000000000000000001300000000b300000000000000000000000000000000000000000000f20000000000000000000000000000000000002000efff00090000000000000000007a000010000000000900000064000000000000000000000000000000000000000000000000fc\nMAC = 33205bbf9e9f8f7212ab9e2ab9b7e4a5\n", }; -static const size_t kLen36 = 74392; +static const size_t kLen39 = 74392; static std::string AssembleString(const char **data, size_t len) { std::string ret; @@ -2572,18 +2727,27 @@ if (strcmp(path, "crypto/fipsmodule/aes/aes_tests.txt") == 0) { return AssembleString(kData32, kLen32); } - if (strcmp(path, "crypto/fipsmodule/modes/gcm_tests.txt") == 0) { + if (strcmp(path, "crypto/fipsmodule/bn/bn_tests.txt") == 0) { return AssembleString(kData33, kLen33); } - if (strcmp(path, "crypto/fipsmodule/rand/ctrdrbg_vectors.txt") == 0) { + if (strcmp(path, "crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt") == 0) { return AssembleString(kData34, kLen34); } - if (strcmp(path, "crypto/hmac_extra/hmac_tests.txt") == 0) { + if (strcmp(path, "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt") == 0) { return AssembleString(kData35, kLen35); } - if (strcmp(path, "crypto/poly1305/poly1305_tests.txt") == 0) { + if (strcmp(path, "crypto/fipsmodule/modes/gcm_tests.txt") == 0) { return AssembleString(kData36, kLen36); } + if (strcmp(path, "crypto/fipsmodule/rand/ctrdrbg_vectors.txt") == 0) { + return AssembleString(kData37, kLen37); + } + if (strcmp(path, "crypto/hmac_extra/hmac_tests.txt") == 0) { + return AssembleString(kData38, kLen38); + } + if (strcmp(path, "crypto/poly1305/poly1305_tests.txt") == 0) { + return AssembleString(kData39, kLen39); + } fprintf(stderr, "File not embedded: %s.\n", path); abort(); }
diff --git a/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py b/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py index 6a39167c..ba9ad54 100755 --- a/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py +++ b/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py
@@ -32,6 +32,7 @@ assert [] == proto_file.GetDependencies() self.Output('// base dependencies') + self.Output('#include "base/memory/ptr_util.h"') self.Output('#include "base/values.h"') self.Output('') self.Output('#include <memory>') @@ -116,8 +117,7 @@ def RepeatedMemberFieldWriteToValue(self, field): prologue = ( - 'base::ListValue* field_list = new base::ListValue();\n' - 'dict->Set("{field_number}", field_list);\n' + 'auto field_list = base::MakeUnique<base::ListValue>();\n' 'for (int i = 0; i < message.{field_name}_size(); ++i) {{\n' ) @@ -131,8 +131,13 @@ middle = ( 'field_list->Append{value_type}(message.{field_name}(i));\n' ) + + epilogue = ( + '\n}}\n' + 'dict->Set("{field_number}", std::move(field_list));' + ) self.Output( - prologue + Indented(middle) + '\n}}', + prologue + Indented(middle) + epilogue, field_number=field.JavascriptIndex(), field_name=field.name, value_type=field.CppValueType() if not field.IsClassType() else None,
diff --git a/third_party/dom_distiller_js/test_sample_json_converter.h.golden b/third_party/dom_distiller_js/test_sample_json_converter.h.golden index 37e2adb..6969164 100644 --- a/third_party/dom_distiller_js/test_sample_json_converter.h.golden +++ b/third_party/dom_distiller_js/test_sample_json_converter.h.golden
@@ -3,6 +3,7 @@ #include "test_sample.pb.h" // base dependencies +#include "base/memory/ptr_util.h" #include "base/values.h" #include <memory> @@ -150,11 +151,11 @@ static std::unique_ptr<base::DictionaryValue> WriteToValue(const dom_distiller::test_sample::proto::Repeated::Message& message) { std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); { - base::ListValue* field_list = new base::ListValue(); - dict->Set("1", field_list); + auto field_list = base::MakeUnique<base::ListValue>(); for (int i = 0; i < message.dummy_size(); ++i) { field_list->AppendBoolean(message.dummy(i)); } + dict->Set("1", std::move(field_list)); } return dict; } @@ -252,48 +253,48 @@ static std::unique_ptr<base::DictionaryValue> WriteToValue(const dom_distiller::test_sample::proto::Repeated& message) { std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); { - base::ListValue* field_list = new base::ListValue(); - dict->Set("1", field_list); + auto field_list = base::MakeUnique<base::ListValue>(); for (int i = 0; i < message.float_value_size(); ++i) { field_list->AppendDouble(message.float_value(i)); } + dict->Set("1", std::move(field_list)); } { - base::ListValue* field_list = new base::ListValue(); - dict->Set("2", field_list); + auto field_list = base::MakeUnique<base::ListValue>(); for (int i = 0; i < message.double_value_size(); ++i) { field_list->AppendDouble(message.double_value(i)); } + dict->Set("2", std::move(field_list)); } { - base::ListValue* field_list = new base::ListValue(); - dict->Set("3", field_list); + auto field_list = base::MakeUnique<base::ListValue>(); for (int i = 0; i < message.int32_value_size(); ++i) { field_list->AppendInteger(message.int32_value(i)); } + dict->Set("3", std::move(field_list)); } { - base::ListValue* field_list = new base::ListValue(); - dict->Set("4", field_list); + auto field_list = base::MakeUnique<base::ListValue>(); for (int i = 0; i < message.bool_value_size(); ++i) { field_list->AppendBoolean(message.bool_value(i)); } + dict->Set("4", std::move(field_list)); } { - base::ListValue* field_list = new base::ListValue(); - dict->Set("5", field_list); + auto field_list = base::MakeUnique<base::ListValue>(); for (int i = 0; i < message.string_value_size(); ++i) { field_list->AppendString(message.string_value(i)); } + dict->Set("5", std::move(field_list)); } { - base::ListValue* field_list = new base::ListValue(); - dict->Set("6", field_list); + auto field_list = base::MakeUnique<base::ListValue>(); for (int i = 0; i < message.message_value_size(); ++i) { std::unique_ptr<base::Value> inner_message_value = dom_distiller::test_sample::proto::json::Repeated::Message::WriteToValue(message.message_value(i)); field_list->Append(std::move(inner_message_value)); } + dict->Set("6", std::move(field_list)); } return dict; }
diff --git a/third_party/freetype/BUILD.gn b/third_party/freetype/BUILD.gn index 694111c5..6fdcc02 100644 --- a/third_party/freetype/BUILD.gn +++ b/third_party/freetype/BUILD.gn
@@ -19,14 +19,7 @@ if (is_clang) { # The reduction of FreeType files to a minimum triggers -Wunused-function # warnings in ftbase.c - - # "-Wno-int-to-pointer-cast" tracked by - # https://savannah.nongnu.org/bugs/index.php?50560, - # TODO(drott): Remove this once we roll past 7aeee3c50f2656b65f. - cflags += [ - "-Wno-unused-function", - "-Wno-int-to-pointer-cast", - ] + cflags += [ "-Wno-unused-function" ] } }
diff --git a/tools/battor_agent/battor_agent.cc b/tools/battor_agent/battor_agent.cc index 6041a8b..45a4d542 100644 --- a/tools/battor_agent/battor_agent.cc +++ b/tools/battor_agent/battor_agent.cc
@@ -188,7 +188,7 @@ PerformAction(Action::SEND_CURRENT_SAMPLE_REQUEST); return; case Command::GET_FIRMWARE_GIT_HASH: - PerformAction(Action::SEND_INIT); + PerformAction(Action::SEND_GIT_HASH_REQUEST); return; case Command::INVALID: NOTREACHED(); @@ -272,9 +272,6 @@ case Command::START_TRACING: PerformAction(Action::SEND_SET_GAIN); return; - case Command::GET_FIRMWARE_GIT_HASH: - PerformAction(Action::SEND_GIT_HASH_REQUEST); - return; default: NOTREACHED(); return;
diff --git a/tools/battor_agent/battor_agent_unittest.cc b/tools/battor_agent/battor_agent_unittest.cc index 6270960..1bb9a9f 100644 --- a/tools/battor_agent/battor_agent_unittest.cc +++ b/tools/battor_agent/battor_agent_unittest.cc
@@ -297,15 +297,6 @@ return; OnBytesSent(true); - if (end_state == BattOrAgentState::INIT_SENT) - return; - - OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, - ToCharVector(kInitAck)); - if (end_state == BattOrAgentState::INIT_ACKED) - return; - - OnBytesSent(true); if (end_state == BattOrAgentState::GIT_FIRMWARE_HASH_REQUEST_SENT) return; @@ -1046,43 +1037,4 @@ EXPECT_EQ(BATTOR_ERROR_NONE, GetCommandError()); } -TEST_F(BattOrAgentTest, GetFirmwareGitHashFailsIfInitSendFails) { - GetAgent()->GetFirmwareGitHash(); - - RunGetFirmwareGitHashTo(BattOrAgentState::CONNECTED); - - OnBytesSent(false); - - EXPECT_TRUE(IsCommandComplete()); - EXPECT_EQ(BATTOR_ERROR_SEND_ERROR, GetCommandError()); -} - -TEST_F(BattOrAgentTest, GetFirmwareGitHashSucceedsAfterInitAckReadFails) { - GetAgent()->GetFirmwareGitHash(); - - RunGetFirmwareGitHashTo(BattOrAgentState::INIT_SENT); - OnMessageRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); - - EXPECT_FALSE(IsCommandComplete()); - - RunGetFirmwareGitHashTo(BattOrAgentState::READ_GIT_HASH_RECEIVED); - - EXPECT_TRUE(IsCommandComplete()); - EXPECT_EQ(BATTOR_ERROR_NONE, GetCommandError()); -} - -TEST_F(BattOrAgentTest, GetFirmwareGitHashSucceedsAfterInitWrongAckRead) { - GetAgent()->GetFirmwareGitHash(); - - RunGetFirmwareGitHashTo(BattOrAgentState::INIT_SENT); - OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, - ToCharVector(kStartTracingAck)); - - EXPECT_FALSE(IsCommandComplete()); - - RunGetFirmwareGitHashTo(BattOrAgentState::READ_GIT_HASH_RECEIVED); - - EXPECT_TRUE(IsCommandComplete()); - EXPECT_EQ(BATTOR_ERROR_NONE, GetCommandError()); -} } // namespace battor
diff --git a/tools/binary_size/libsupersize/diff.py b/tools/binary_size/libsupersize/diff.py index 910d72c..7002afb7 100644 --- a/tools/binary_size/libsupersize/diff.py +++ b/tools/binary_size/libsupersize/diff.py
@@ -182,8 +182,12 @@ """Diffs two SizeInfo objects. Returns a SizeInfoDiff.""" assert isinstance(before, models.SizeInfo) assert isinstance(after, models.SizeInfo) - section_sizes = {k: after.section_sizes[k] - v + section_sizes = {k: after.section_sizes.get(k, 0) - v for k, v in before.section_sizes.iteritems()} + for k, v in after.section_sizes.iteritems(): + if k not in section_sizes: + section_sizes[k] = v + symbol_diff = _DiffSymbolGroups(before.raw_symbols, after.raw_symbols) return models.SizeInfoDiff(section_sizes, symbol_diff, before.metadata, after.metadata)
diff --git a/tools/chrome_proxy/webdriver/protocol_fuzz.py b/tools/chrome_proxy/webdriver/protocol_fuzz.py new file mode 100644 index 0000000..7a28a34 --- /dev/null +++ b/tools/chrome_proxy/webdriver/protocol_fuzz.py
@@ -0,0 +1,359 @@ +# Copyright 2017 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# +# This test checks that Chrome does not crash or otherwise wildly misbehave when +# it receives unexpected Chrome-Proxy header values and/or directives. This is +# done by fuzz testing which is configured through a dictionary object at the +# top of this file. +# +# The fuzz testing generates URLs which are requested from the Chrome Proxy test +# server which will modify its response based on the encoded data in the URL. +# +# The fuzz testing is configured in a dictionary-type object of the following +# format: +# { +# # This specifies a header that will be fuzzed. Only one header is fuzzed +# # per test. When a header is being fuzz tested, any entry it has in the +# # STATIC_RESPONSE_HEADERS object will be overwritten. +# "chrome-proxy": { +# # This specifies the directive key values that are possible to use in +# # fuzzing. +# "directive_keys: [ +# "page-policy", +# "foo", +# ], +# # This specifies the directive values that are possible to use in +# # fuzzing. Any one of these values may end up mapped to any one of the +# # directive_keys above. +# "directive_values": [ +# "empty-image", +# "bar", +# ], +# # The maximum number of directives to use in this header. If this value +# # is greater than the number of directives given above, that will be +# # used instead. +# "max_directives": 10, +# +# # The maximum number of directive values to use per directive. If this +# # value is greater than the number of directive values given above, that +# # will be used instead. +# "max_directive_values": 10, +# +# # This is used to join the directive values when multiple are used. +# "directive_value_joiner": "|", +# }, +# } +# +# If the above configuration was given, the following values would be generated +# for the chrome-proxy header: +# <empty-string> +# foo +# foo=bar +# foo=empty-image +# foo=bar|empty-image +# page_policies +# page_policies=bar +# page_policies=empty-image +# page_policies=bar|empty-image +# foo,page_policies +# foo=bar,page_policies=bar +# foo=empty-image,page_policies=empty-image +# foo=bar|empty-image,page_policies=bar|empty-image +# +# Randomly generated values are also supported in the fuzz_header field +# ("chrome-proxy" in the above example), directive_keys, and directive_values. +# Randomly generated values can be specified using these formats: +# {{RAND_STR(N)}} +# Creates a random string of lowercase and digit characters of length N +# +# {{RAND_INT(N)}} +# Creates a random integer in the range [0, 10^N+1) with leading zeros +# Example: "Num cookies: {{RAND_INT(4)}}" yields "Num cookies: 0123" +# +# {{RAND_DBL(P.Q)}} +# Creates a random double in the range [0, 10^P+1) with leading zeros and +# up to Q places after the decimal point +# Example: "My money = ${{RAND_DBL(3,2)}}" yields "My money = $001.53" +# +# {{RAND_BOOL}} +# Creates a random boolean, either 'true' or 'false' +# Example: "I am awesome: {{RAND_BOOL}}" yields "I am awesome: true" + +import BaseHTTPServer +import base64 +import itertools +import json +import random +import re +import string + +from common import TestDriver +from common import IntegrationTest +from decorators import Slow + +# This dict configures how the fuzzing will operate. See documentation above for +# more information. +FUZZ_HEADERS = { + "chrome-proxy": { + "directive_keys": [ + "{{RAND_STR(10)}}", + "{{RAND_STR(10)}}", + "page-policies", + ], + "directive_values": [ + "empty-image", + "{{RAND_INT(1)}}", + "{{RAND_INT(4)}}", + "{{RAND_STR(10)}}", + "{{RAND_STR(10)}}", + "{{RAND_STR(10)}}", + ], + "max_directives": 3, + "max_directive_values": 3, + "directive_value_joiner": "|", + }, +} + +TEST_SERVER = "chromeproxy-test.appspot.com" + +# These headers will be present in every test server response. If one of these +# entries is also a fuzzed header above, then the fuzzed value will take the +# place of the static one instead. +STATIC_RESPONSE_HEADERS = { + "content-type": ["text/html"], + "via": ["1.1 Chrome-Compression-Proxy"], + "cache-control": ["no-cache, no-store, must-revalidate"], + "pragma": ["no-cache"], + "expires": ["0"], +} + +# This string will be used as the response body in every test and will be +# checked for existance on the final loaded page. +STATIC_RESPONSE_BODY = 'ok' + +rand_str_re = re.compile(r'{{RAND_STR\((\d+)\)}}') +rand_int_re = re.compile(r'{{RAND_INT\((\d+)\)}}') +rand_dbl_re = re.compile(r'{{RAND_DBL\((\d+)\.(\d+)\)}}') +rand_bool_re = re.compile(r'{{RAND_BOOL}}') + +def ParseRand(key, val): + """This helper function parses the {{RAND}} expressions in the given values + and returns them with random values subsituted in place. + + Args: + key: the header key with 0 or more {{RAND}} expressions + val: the header value with 0 or more {{RAND}} expressions + Returns: + A key, value tuple with subsituted random values + """ + def GenerateRand(length, charset): + return ''.join(random.choice(charset) for _ in range(length)) + def _parse_rand(v): + result = v + had_match = True + while had_match: + had_match = False + str_match = rand_str_re.search(result) + if str_match: + had_match = True + mag = int(result[str_match.start(1):str_match.end(1)]) + rand_str = GenerateRand(mag, string.ascii_lowercase + string.digits) + result = (result[:str_match.start()] + rand_str + + result[str_match.end():]) + int_match = rand_int_re.search(result) + if int_match: + had_match = True + mag = int(result[int_match.start(1):int_match.end(1)]) + rand_int = GenerateRand(mag, string.digits) + result = (result[:int_match.start()] + rand_int + + result[int_match.end():]) + dbl_match = rand_dbl_re.search(result) + if dbl_match: + had_match = True + magN = int(result[dbl_match.start(1):dbl_match.end(1)]) + magD = int(result[dbl_match.start(2):dbl_match.end(2)]) + rand_dbl = GenerateRand(magN, string.digits) + '.' + GenerateRand(magD, + string.digits) + result = (result[:dbl_match.start()] + rand_dbl + + result[dbl_match.end():]) + bool_match = rand_bool_re.search(result) + if bool_match: + had_match = True + rand_bool = bool(random.getrandbits(1)) + result = (result[:bool_match.start()] + str(rand_bool).lower() + + result[bool_match.end():]) + return result + return (_parse_rand(key), _parse_rand(val)) + +def GenerateFuzzedHeaders(cfg=FUZZ_HEADERS): + """This function yields header key value pairs which can be used to update a + Python dict representing HTTP headers. See file level documentation for more + information. + + Args: + cfg: the configuration dict that specifies how to fuzz the proxy headers + Yields: + one header key value pair + """ + for header_key in cfg: + fuzz = cfg[header_key] + dirs = fuzz['directive_keys'] + vals = fuzz['directive_values'] + max_dirs = min(fuzz['max_directives'], len(dirs)) + max_vals = min(fuzz['max_directive_values'], len(vals)) + def GenerateFuzzedValues(): + for n in range(0, max_vals + 1): + for c in itertools.combinations(vals, n): + yield c + # Yield an empty header key,value pair before doing all the combinations. + yield (header_key, '') + for num_dirs in range(1, max_dirs + 1): + for directive_set in itertools.combinations(dirs, num_dirs): + for values in GenerateFuzzedValues(): + value_list = list(values) + if '' in value_list: + value_list.remove('') + value_str = fuzz['directive_value_joiner'].join(value_list) + header = [] + for directive in directive_set: + if len(value_str) == 0: + header.append(directive) + else: + header.append('%s=%s' % (directive, value_str)) + yield ParseRand(header_key, ','.join(header)) + +class FuzzUnitTests(IntegrationTest): + + def testParseRand(self): + tests = { + "{{RAND_STR(1)}": r"{{RAND_STR\(1\)}", + "{{RAND_INT(1)}": r"{{RAND_INT\(1\)}", + "{{RAND_DBL(1.1)}": r"{{RAND_DBL\(1\.1\)}", + "{{RAND_DBL(11)}}": r"{{RAND_DBL\(11\)}}", + "{{RAND_BOOL}": r"{{RAND_BOOL}", + "{{RAND_STR(0)}}": "", + "hi{{RAND_STR(0)}}": "hi", + "{{RAND_STR(0)}}there": "there", + "hi{{RAND_STR(0)}}there": "hithere", + "{{RAND_STR(3)}}": r"[a-z0-9][a-z0-9][a-z0-9]", + "{{RAND_STR(3)}}there": r"[a-z0-9][a-z0-9][a-z0-9]there", + "hi{{RAND_STR(3)}}": r"hi[a-z0-9][a-z0-9][a-z0-9]", + "hi{{RAND_STR(3)}}there": r"hi[a-z0-9][a-z0-9][a-z0-9]there", + "{{RAND_INT(0)}}": "", + "hi{{RAND_INT(0)}}": "hi", + "{{RAND_INT(0)}}there": "there", + "hi{{RAND_INT(0)}}there": "hithere", + "{{RAND_INT(3)}}": r"[0-9][0-9][0-9]", + "{{RAND_INT(3)}}there": r"[0-9][0-9][0-9]there", + "hi{{RAND_INT(3)}}": r"hi[0-9][0-9][0-9]", + "hi{{RAND_INT(3)}}there": r"hi[0-9][0-9][0-9]there", + "{{RAND_DBL(0.0)}}": r"\.", + "hi{{RAND_DBL(0.0)}}": r"hi\.", + "{{RAND_DBL(0.0)}}there": r"\.there", + "hi{{RAND_DBL(0.0)}}there": r"hi\.there", + "{{RAND_DBL(3.3)}}": r"[0-9][0-9][0-9]\.[0-9][0-9][0-9]", + "hi{{RAND_DBL(3.3)}}": r"hi[0-9][0-9][0-9]\.[0-9][0-9][0-9]", + "{{RAND_DBL(3.3)}}there": r"[0-9][0-9][0-9]\.[0-9][0-9][0-9]there", + "hi{{RAND_DBL(3.3)}}there": r"hi[0-9][0-9][0-9]\.[0-9][0-9][0-9]there", + "{{RAND_BOOL}}": r"(true|false)", + "{{RAND_BOOL}}there": r"(true|false)there", + "hi{{RAND_BOOL}}": r"hi(true|false)", + "hi{{RAND_BOOL}}there": r"hi(true|false)there", + "{{RAND_STR(1)}}{{RAND_STR(1)}}": r"[a-z0-9][a-z0-9]", + "{{RAND_STR(1)}}{{RAND_INT(1)}}": r"[a-z0-9][0-9]", + "{{RAND_STR(1)}}{{RAND_DBL(1.1)}}": r"[a-z0-9][0-9]\.[0-9]", + "{{RAND_STR(1)}}{{RAND_BOOL}}": r"[a-z0-9](true|false)", + "{{RAND_INT(1)}}{{RAND_STR(1)}}": r"[0-9][a-z0-9]", + "{{RAND_INT(1)}}{{RAND_INT(1)}}": r"[0-9][0-9]", + "{{RAND_INT(1)}}{{RAND_DBL(1.1)}}": r"[0-9][0-9]\.[0-9]", + "{{RAND_INT(1)}}{{RAND_BOOL}}": r"[0-9](true|false)", + "{{RAND_DBL(1.1)}}{{RAND_STR(1)}}": r"[0-9]\.[0-9][a-z0-9]", + "{{RAND_DBL(1.1)}}{{RAND_INT(1)}}": r"[0-9]\.[0-9][0-9]", + "{{RAND_DBL(1.1)}}{{RAND_DBL(1.1)}}": r"[0-9]\.[0-9][0-9]\.[0-9]", + "{{RAND_DBL(1.1)}}{{RAND_BOOL}}": r"[0-9]\.[0-9](true|false)", + "{{RAND_BOOL}}{{RAND_STR(1)}}": r"(true|false)[a-z0-9]", + "{{RAND_BOOL}}{{RAND_INT(1)}}": r"(true|false)[0-9]", + "{{RAND_BOOL}}{{RAND_DBL(1.1)}}": r"(true|false)[0-9]\.[0-9]", + "{{RAND_BOOL}}{{RAND_BOOL}}": r"(true|false)(true|false)", + } + for t in tests: + expected = re.compile('^' + tests[t] + '$') + gotK, gotV = ParseRand(t, t) + if not expected.match(gotK): + self.fail("%s doesn't match /%s/" % (gotK, tests[t])) + if not expected.match(gotV): + self.fail("%s doesn't match /%s/" % (gotK, tests[t])) + + def testGenerator(self): + test_cfg = { + "chrome-proxy": { + "directive_keys": [ + "foo", + "page_policies", + ], + "directive_values": [ + "bar", + "empty-image", + ], + "max_directives": 10, + "max_directive_values": 10, + "directive_value_joiner": "|", + }, + } + expected_headers = ['', 'foo', 'foo=bar', 'foo=empty-image', + 'foo=bar|empty-image', 'page_policies', 'page_policies=bar', + 'page_policies=empty-image', 'page_policies=bar|empty-image', + 'foo,page_policies', 'foo=bar,page_policies=bar', + 'foo=empty-image,page_policies=empty-image', + 'foo=bar|empty-image,page_policies=bar|empty-image', + ] + actual_headers = [] + for h in GenerateFuzzedHeaders(cfg=test_cfg): + actual_headers.append(h[1]) + expected_headers.sort() + actual_headers.sort() + self.assertEqual(expected_headers, actual_headers) + +class ProtocolFuzzer(IntegrationTest): + + def GenerateTestURLs(self): + """This function yields test URLs which will cause the test server to + respond with the given given headers and body. + + Yields: + URLs suitable for testing fuzzed response headers + """ + for fz_key, fz_val in GenerateFuzzedHeaders(): + headers = {} + headers.update(STATIC_RESPONSE_HEADERS) + headers.update({fz_key: [fz_val]}) + json_headers = json.dumps(headers) + b64_headers = base64.b64encode(json_headers) + url = "http://%s/default?respBody=%s&respHeader=%s" % (TEST_SERVER, + base64.b64encode(STATIC_RESPONSE_BODY), b64_headers) + yield (json_headers, url) + + @Slow + def testFuzzing(self): + with TestDriver() as t: + t.AddChromeArg('--enable-spdy-proxy-auth') + t.AddChromeArg('--data-reduction-proxy-http-proxies=' + 'https://chromeproxy-test.appspot.com') + for headers, url in self.GenerateTestURLs(): + try: + t.LoadURL(url) + # The main test is to make sure Chrome doesn't crash after loading a + # page with fuzzed headers, which would be raised as a ChromeDriver + # exception. Otherwise, we'll do a simple check and make sure the page + # body is correct and Chrome isn't displaying some kind of error page. + body = t.ExecuteJavascriptStatement('document.body.innerHTML') + self.assertEqual(body, STATIC_RESPONSE_BODY) + except Exception as e: + print 'Response headers: ' + headers + print 'URL: ' + url + raise e + +if __name__ == '__main__': + IntegrationTest.RunAllTests()
diff --git a/tools/json_schema_compiler/test/additional_properties_unittest.cc b/tools/json_schema_compiler/test/additional_properties_unittest.cc index f62729c..5bf76da 100644 --- a/tools/json_schema_compiler/test/additional_properties_unittest.cc +++ b/tools/json_schema_compiler/test/additional_properties_unittest.cc
@@ -21,7 +21,7 @@ new base::DictionaryValue()); type_value->SetString("string", "value"); type_value->SetInteger("other", 9); - type_value->Set("another", list_value.release()); + type_value->Set("another", std::move(list_value)); std::unique_ptr<AdditionalPropertiesType> type( new AdditionalPropertiesType()); ASSERT_TRUE(AdditionalPropertiesType::Populate(*type_value, type.get()));
diff --git a/tools/json_schema_compiler/test/arrays_unittest.cc b/tools/json_schema_compiler/test/arrays_unittest.cc index 69d46dcc..91112f2 100644 --- a/tools/json_schema_compiler/test/arrays_unittest.cc +++ b/tools/json_schema_compiler/test/arrays_unittest.cc
@@ -10,6 +10,8 @@ #include <utility> #include "base/macros.h" +#include "base/memory/ptr_util.h" +#include "base/values.h" #include "testing/gtest/include/gtest/gtest.h" #include "tools/json_schema_compiler/test/enums.h" @@ -19,31 +21,31 @@ // TODO(calamity): Change to AppendString etc once kalman's patch goes through static std::unique_ptr<base::DictionaryValue> CreateBasicArrayTypeDictionary() { - std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); - base::ListValue* strings_value = new base::ListValue(); + auto value = base::MakeUnique<base::DictionaryValue>(); + auto strings_value = base::MakeUnique<base::ListValue>(); strings_value->AppendString("a"); strings_value->AppendString("b"); strings_value->AppendString("c"); strings_value->AppendString("it's easy as"); - base::ListValue* integers_value = new base::ListValue(); + auto integers_value = base::MakeUnique<base::ListValue>(); integers_value->AppendInteger(1); integers_value->AppendInteger(2); integers_value->AppendInteger(3); - base::ListValue* booleans_value = new base::ListValue(); + auto booleans_value = base::MakeUnique<base::ListValue>(); booleans_value->AppendBoolean(false); booleans_value->AppendBoolean(true); - base::ListValue* numbers_value = new base::ListValue(); + auto numbers_value = base::MakeUnique<base::ListValue>(); numbers_value->AppendDouble(6.1); - value->Set("numbers", numbers_value); - value->Set("booleans", booleans_value); - value->Set("strings", strings_value); - value->Set("integers", integers_value); + value->Set("numbers", std::move(numbers_value)); + value->Set("booleans", std::move(booleans_value)); + value->Set("strings", std::move(strings_value)); + value->Set("integers", std::move(integers_value)); return value; } std::unique_ptr<base::DictionaryValue> CreateItemValue(int val) { - std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); - value->Set("val", new base::Value(val)); + auto value = base::MakeUnique<base::DictionaryValue>(); + value->SetInteger("val", val); return value; } @@ -61,12 +63,12 @@ TEST(JsonSchemaCompilerArrayTest, EnumArrayReference) { // { "types": ["one", "two", "three"] } - base::ListValue* types = new base::ListValue(); + auto types = base::MakeUnique<base::ListValue>(); types->AppendString("one"); types->AppendString("two"); types->AppendString("three"); base::DictionaryValue value; - value.Set("types", types); + value.Set("types", std::move(types)); EnumArrayReference enum_array_reference; @@ -86,19 +88,19 @@ TEST(JsonSchemaCompilerArrayTest, EnumArrayMixed) { // { "types": ["one", "two", "three"] } - base::ListValue* infile_enums = new base::ListValue(); + auto infile_enums = base::MakeUnique<base::ListValue>(); infile_enums->AppendString("one"); infile_enums->AppendString("two"); infile_enums->AppendString("three"); - base::ListValue* external_enums = new base::ListValue(); + auto external_enums = base::MakeUnique<base::ListValue>(); external_enums->AppendString("one"); external_enums->AppendString("two"); external_enums->AppendString("three"); base::DictionaryValue value; - value.Set("infile_enums", infile_enums); - value.Set("external_enums", external_enums); + value.Set("infile_enums", std::move(infile_enums)); + value.Set("external_enums", std::move(external_enums)); EnumArrayMixed enum_array_mixed; @@ -132,12 +134,12 @@ enums.push_back(ENUMERATION_TWO); enums.push_back(ENUMERATION_THREE); - std::unique_ptr<base::ListValue> types(new base::ListValue()); + auto types = base::MakeUnique<base::ListValue>(); for (size_t i = 0; i < enums.size(); ++i) types->AppendString(ToString(enums[i])); base::DictionaryValue value; - value.Set("types", types.release()); + value.Set("types", std::move(types)); OptionalEnumArrayType enum_array_type; ASSERT_TRUE(OptionalEnumArrayType::Populate(value, &enum_array_type)); @@ -145,10 +147,10 @@ } { base::DictionaryValue value; - std::unique_ptr<base::ListValue> enum_array(new base::ListValue()); + auto enum_array = base::MakeUnique<base::ListValue>(); enum_array->AppendString("invalid"); - value.Set("types", enum_array.release()); + value.Set("types", std::move(enum_array)); OptionalEnumArrayType enum_array_type; ASSERT_FALSE(OptionalEnumArrayType::Populate(value, &enum_array_type)); EXPECT_TRUE(enum_array_type.types->empty()); @@ -157,13 +159,13 @@ TEST(JsonSchemaCompilerArrayTest, RefArrayType) { { - std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); - std::unique_ptr<base::ListValue> ref_array(new base::ListValue()); + auto value = base::MakeUnique<base::DictionaryValue>(); + auto ref_array = base::MakeUnique<base::ListValue>(); ref_array->Append(CreateItemValue(1)); ref_array->Append(CreateItemValue(2)); ref_array->Append(CreateItemValue(3)); - value->Set("refs", ref_array.release()); - std::unique_ptr<RefArrayType> ref_array_type(new RefArrayType()); + value->Set("refs", std::move(ref_array)); + auto ref_array_type = base::MakeUnique<RefArrayType>(); EXPECT_TRUE(RefArrayType::Populate(*value, ref_array_type.get())); ASSERT_EQ(3u, ref_array_type->refs.size()); EXPECT_EQ(1, ref_array_type->refs[0].val); @@ -171,12 +173,12 @@ EXPECT_EQ(3, ref_array_type->refs[2].val); } { - std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); - std::unique_ptr<base::ListValue> not_ref_array(new base::ListValue()); + auto value = base::MakeUnique<base::DictionaryValue>(); + auto not_ref_array = base::MakeUnique<base::ListValue>(); not_ref_array->Append(CreateItemValue(1)); not_ref_array->AppendInteger(3); - value->Set("refs", not_ref_array.release()); - std::unique_ptr<RefArrayType> ref_array_type(new RefArrayType()); + value->Set("refs", std::move(not_ref_array)); + auto ref_array_type = base::MakeUnique<RefArrayType>(); EXPECT_FALSE(RefArrayType::Populate(*value, ref_array_type.get())); } }
diff --git a/tools/json_schema_compiler/test/choices_unittest.cc b/tools/json_schema_compiler/test/choices_unittest.cc index 708c900..081d2ee 100644 --- a/tools/json_schema_compiler/test/choices_unittest.cc +++ b/tools/json_schema_compiler/test/choices_unittest.cc
@@ -112,13 +112,13 @@ std::string("of"), std::string("strings")); - base::ListValue* strings_value = new base::ListValue(); + auto strings_value = base::MakeUnique<base::ListValue>(); for (size_t i = 0; i < strings.size(); ++i) strings_value->AppendString(strings[i]); base::DictionaryValue value; value.SetInteger("integers", 4); - value.Set("strings", strings_value); + value.Set("strings", std::move(strings_value)); ChoiceType out; ASSERT_TRUE(ChoiceType::Populate(value, &out)); @@ -132,14 +132,14 @@ } TEST(JsonSchemaCompilerChoicesTest, ChoiceTypeToValue) { - base::ListValue* strings_value = new base::ListValue(); + auto strings_value = base::MakeUnique<base::ListValue>(); strings_value->AppendString("list"); strings_value->AppendString("of"); strings_value->AppendString("strings"); base::DictionaryValue value; value.SetInteger("integers", 5); - value.Set("strings", strings_value); + value.Set("strings", std::move(strings_value)); ChoiceType out; ASSERT_TRUE(ChoiceType::Populate(value, &out));
diff --git a/tools/json_schema_compiler/test/crossref_unittest.cc b/tools/json_schema_compiler/test/crossref_unittest.cc index 21e52aa..67c06d5 100644 --- a/tools/json_schema_compiler/test/crossref_unittest.cc +++ b/tools/json_schema_compiler/test/crossref_unittest.cc
@@ -7,6 +7,8 @@ #include <memory> #include <utility> +#include "base/memory/ptr_util.h" +#include "base/values.h" #include "testing/gtest/include/gtest/gtest.h" #include "tools/json_schema_compiler/test/simple_api.h" @@ -15,11 +17,11 @@ namespace { std::unique_ptr<base::DictionaryValue> CreateTestTypeValue() { - std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); - value->Set("number", new base::Value(1.1)); - value->Set("integer", new base::Value(4)); - value->Set("string", new base::Value("bling")); - value->Set("boolean", new base::Value(true)); + auto value = base::MakeUnique<base::DictionaryValue>(); + value->SetDouble("number", 1.1); + value->SetInteger("integer", 4); + value->SetString("string", "bling"); + value->SetBoolean("boolean", true); return value; } @@ -27,9 +29,9 @@ TEST(JsonSchemaCompilerCrossrefTest, CrossrefTypePopulateAndToValue) { base::DictionaryValue crossref_orig; - crossref_orig.Set("testType", CreateTestTypeValue().release()); - crossref_orig.Set("testEnumRequired", new base::Value("one")); - crossref_orig.Set("testEnumOptional", new base::Value("two")); + crossref_orig.Set("testType", CreateTestTypeValue()); + crossref_orig.SetString("testEnumRequired", "one"); + crossref_orig.SetString("testEnumOptional", "two"); // Test Populate of the value --> compiled type. crossref::CrossrefType crossref_type; @@ -85,11 +87,10 @@ TEST(JsonSchemaCompilerCrossrefTest, TestTypeInObjectParamsCreate) { { - std::unique_ptr<base::ListValue> params_value(new base::ListValue()); - std::unique_ptr<base::DictionaryValue> param_object_value( - new base::DictionaryValue()); - param_object_value->Set("testType", CreateTestTypeValue().release()); - param_object_value->Set("boolean", new base::Value(true)); + auto params_value = base::MakeUnique<base::ListValue>(); + auto param_object_value = base::MakeUnique<base::DictionaryValue>(); + param_object_value->Set("testType", CreateTestTypeValue()); + param_object_value->SetBoolean("boolean", true); params_value->Append(std::move(param_object_value)); std::unique_ptr<crossref::TestTypeInObject::Params> params( crossref::TestTypeInObject::Params::Create(*params_value)); @@ -100,10 +101,9 @@ params->param_object.test_type->ToValue().get())); } { - std::unique_ptr<base::ListValue> params_value(new base::ListValue()); - std::unique_ptr<base::DictionaryValue> param_object_value( - new base::DictionaryValue()); - param_object_value->Set("boolean", new base::Value(true)); + auto params_value = base::MakeUnique<base::ListValue>(); + auto param_object_value = base::MakeUnique<base::DictionaryValue>(); + param_object_value->SetBoolean("boolean", true); params_value->Append(std::move(param_object_value)); std::unique_ptr<crossref::TestTypeInObject::Params> params( crossref::TestTypeInObject::Params::Create(*params_value)); @@ -112,21 +112,19 @@ EXPECT_TRUE(params->param_object.boolean); } { - std::unique_ptr<base::ListValue> params_value(new base::ListValue()); - std::unique_ptr<base::DictionaryValue> param_object_value( - new base::DictionaryValue()); - param_object_value->Set("testType", new base::Value("invalid")); - param_object_value->Set("boolean", new base::Value(true)); + auto params_value = base::MakeUnique<base::ListValue>(); + auto param_object_value = base::MakeUnique<base::DictionaryValue>(); + param_object_value->SetString("testType", "invalid"); + param_object_value->SetBoolean("boolean", true); params_value->Append(std::move(param_object_value)); std::unique_ptr<crossref::TestTypeInObject::Params> params( crossref::TestTypeInObject::Params::Create(*params_value)); EXPECT_FALSE(params.get()); } { - std::unique_ptr<base::ListValue> params_value(new base::ListValue()); - std::unique_ptr<base::DictionaryValue> param_object_value( - new base::DictionaryValue()); - param_object_value->Set("testType", CreateTestTypeValue().release()); + auto params_value = base::MakeUnique<base::ListValue>(); + auto param_object_value = base::MakeUnique<base::DictionaryValue>(); + param_object_value->Set("testType", CreateTestTypeValue()); params_value->Append(std::move(param_object_value)); std::unique_ptr<crossref::TestTypeInObject::Params> params( crossref::TestTypeInObject::Params::Create(*params_value));
diff --git a/tools/json_schema_compiler/test/enums_unittest.cc b/tools/json_schema_compiler/test/enums_unittest.cc index 715b4ae..fffe9b4 100644 --- a/tools/json_schema_compiler/test/enums_unittest.cc +++ b/tools/json_schema_compiler/test/enums_unittest.cc
@@ -16,7 +16,7 @@ { EnumType enum_type; base::DictionaryValue value; - value.Set("type", new base::Value("one")); + value.SetString("type", "one"); EXPECT_TRUE(EnumType::Populate(value, &enum_type)); EXPECT_EQ(ENUMERATION_ONE, enum_type.type); EXPECT_TRUE(value.Equals(enum_type.ToValue().get())); @@ -24,7 +24,7 @@ { EnumType enum_type; base::DictionaryValue value; - value.Set("type", new base::Value("invalid")); + value.SetString("type", "invalid"); EXPECT_FALSE(EnumType::Populate(value, &enum_type)); } } @@ -52,11 +52,11 @@ base::DictionaryValue value; ASSERT_FALSE(HasEnumeration::Populate(value, &enumeration)); - value.Set("enumeration", new base::Value("one")); + value.SetString("enumeration", "one"); ASSERT_TRUE(HasEnumeration::Populate(value, &enumeration)); EXPECT_TRUE(value.Equals(enumeration.ToValue().get())); - value.Set("optional_enumeration", new base::Value("two")); + value.SetString("optional_enumeration", "two"); ASSERT_TRUE(HasEnumeration::Populate(value, &enumeration)); EXPECT_TRUE(value.Equals(enumeration.ToValue().get())); } @@ -65,7 +65,7 @@ base::DictionaryValue value; ASSERT_FALSE(ReferenceEnum::Populate(value, &enumeration)); - value.Set("reference_enum", new base::Value("one")); + value.SetString("reference_enum", "one"); ASSERT_TRUE(ReferenceEnum::Populate(value, &enumeration)); EXPECT_TRUE(value.Equals(enumeration.ToValue().get())); } @@ -124,7 +124,7 @@ { OptionalEnumType enum_type; base::DictionaryValue value; - value.Set("type", new base::Value("two")); + value.SetString("type", "two"); EXPECT_TRUE(OptionalEnumType::Populate(value, &enum_type)); EXPECT_EQ(ENUMERATION_TWO, enum_type.type); EXPECT_TRUE(value.Equals(enum_type.ToValue().get())); @@ -139,7 +139,7 @@ { OptionalEnumType enum_type; base::DictionaryValue value; - value.Set("type", new base::Value("invalid")); + value.SetString("type", "invalid"); EXPECT_FALSE(OptionalEnumType::Populate(value, &enum_type)); } }
diff --git a/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc b/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc index ce7a2f9..858f052 100644 --- a/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc +++ b/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc
@@ -4,6 +4,8 @@ #include "tools/json_schema_compiler/test/functions_as_parameters.h" +#include "base/memory/ptr_util.h" +#include "base/values.h" #include "testing/gtest/include/gtest/gtest.h" using namespace test::api::functions_as_parameters; @@ -19,7 +21,7 @@ { base::DictionaryValue value; base::DictionaryValue function_dict; - value.Set("event_callback", function_dict.DeepCopy()); + value.Set("event_callback", base::MakeUnique<base::Value>(function_dict)); FunctionType out; ASSERT_TRUE(FunctionType::Populate(value, &out)); EXPECT_TRUE(out.event_callback.empty()); @@ -30,7 +32,7 @@ { base::DictionaryValue value; base::DictionaryValue function_dict; - value.Set("event_callback", function_dict.DeepCopy()); + value.Set("event_callback", base::MakeUnique<base::Value>(function_dict)); FunctionType out; ASSERT_TRUE(FunctionType::Populate(value, &out)); @@ -40,8 +42,9 @@ base::DictionaryValue value; base::DictionaryValue expected_value; base::DictionaryValue function_dict; - value.Set("event_callback", function_dict.DeepCopy()); - expected_value.Set("event_callback", function_dict.DeepCopy()); + value.Set("event_callback", base::MakeUnique<base::Value>(function_dict)); + expected_value.Set("event_callback", + base::MakeUnique<base::Value>(function_dict)); FunctionType out; ASSERT_TRUE(FunctionType::Populate(value, &out)); @@ -59,7 +62,7 @@ { base::DictionaryValue value; base::DictionaryValue function_value; - value.Set("event_callback", function_value.DeepCopy()); + value.Set("event_callback", base::MakeUnique<base::Value>(function_value)); OptionalFunctionType out; ASSERT_TRUE(OptionalFunctionType::Populate(value, &out)); EXPECT_TRUE(out.event_callback.get()); @@ -67,7 +70,7 @@ { base::DictionaryValue value; base::DictionaryValue function_value; - value.Set("event_callback", function_value.DeepCopy()); + value.Set("event_callback", base::MakeUnique<base::Value>(function_value)); OptionalFunctionType out; ASSERT_TRUE(OptionalFunctionType::Populate(value, &out)); EXPECT_TRUE(out.event_callback.get()); @@ -85,7 +88,7 @@ { base::DictionaryValue value; base::DictionaryValue function_value; - value.Set("event_callback", function_value.DeepCopy()); + value.Set("event_callback", base::MakeUnique<base::Value>(function_value)); OptionalFunctionType out; ASSERT_TRUE(OptionalFunctionType::Populate(value, &out));
diff --git a/tools/json_schema_compiler/test/objects_unittest.cc b/tools/json_schema_compiler/test/objects_unittest.cc index b00ea35..9bc8e5e 100644 --- a/tools/json_schema_compiler/test/objects_unittest.cc +++ b/tools/json_schema_compiler/test/objects_unittest.cc
@@ -9,6 +9,8 @@ #include <utility> #include "base/json/json_writer.h" +#include "base/memory/ptr_util.h" +#include "base/values.h" #include "testing/gtest/include/gtest/gtest.h" #include "tools/json_schema_compiler/test/objects_movable.h" #include "tools/json_schema_compiler/test/objects_movable_json.h" @@ -19,16 +21,15 @@ TEST(JsonSchemaCompilerObjectsTest, ObjectParamParamsCreate) { { - std::unique_ptr<base::ListValue> strings(new base::ListValue()); + auto strings = base::MakeUnique<base::ListValue>(); strings->AppendString("one"); strings->AppendString("two"); - std::unique_ptr<base::DictionaryValue> info_value( - new base::DictionaryValue()); - info_value->Set("strings", strings.release()); - info_value->Set("integer", new base::Value(5)); - info_value->Set("boolean", new base::Value(true)); + auto info_value = base::MakeUnique<base::DictionaryValue>(); + info_value->Set("strings", std::move(strings)); + info_value->SetInteger("integer", 5); + info_value->SetBoolean("boolean", true); - std::unique_ptr<base::ListValue> params_value(new base::ListValue()); + auto params_value = base::MakeUnique<base::ListValue>(); params_value->Append(std::move(info_value)); std::unique_ptr<ObjectParam::Params> params( ObjectParam::Params::Create(*params_value)); @@ -40,15 +41,14 @@ EXPECT_TRUE(params->info.boolean); } { - std::unique_ptr<base::ListValue> strings(new base::ListValue()); + auto strings = base::MakeUnique<base::ListValue>(); strings->AppendString("one"); strings->AppendString("two"); - std::unique_ptr<base::DictionaryValue> info_value( - new base::DictionaryValue()); - info_value->Set("strings", strings.release()); - info_value->Set("integer", new base::Value(5)); + auto info_value = base::MakeUnique<base::DictionaryValue>(); + info_value->Set("strings", std::move(strings)); + info_value->SetInteger("integer", 5); - std::unique_ptr<base::ListValue> params_value(new base::ListValue()); + auto params_value = base::MakeUnique<base::ListValue>(); params_value->Append(std::move(info_value)); std::unique_ptr<ObjectParam::Params> params( ObjectParam::Params::Create(*params_value));
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index e8bd10f..0746325 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -28441,6 +28441,8 @@ <int value="6" label="NoMatchingPaymentMethod - Deprecated"/> <int value="7" label="NoSupportedPaymentMethod - Deprecated"/> <int value="8" label="Other"/> + <int value="9" label="User Navigation"/> + <int value="10" label="Merchant Navigation"/> </enum> <enum name="PaymentRequestCanMakePaymentEffectOnShow" type="int">
diff --git a/tools/perf/benchmarks/benchmark_smoke_unittest.py b/tools/perf/benchmarks/benchmark_smoke_unittest.py index 2460783e..7effd6d 100644 --- a/tools/perf/benchmarks/benchmark_smoke_unittest.py +++ b/tools/perf/benchmarks/benchmark_smoke_unittest.py
@@ -123,14 +123,6 @@ for benchmark in all_benchmarks: if sys.modules[benchmark.__module__] in _BLACK_LIST_TEST_MODULES: continue - # TODO(tonyg): Smoke doesn't work with session_restore yet. - if (benchmark.Name().startswith('session_restore') or - benchmark.Name().startswith('skpicture_printer')): - continue - - if hasattr(benchmark, 'generated_profile_archive'): - # We'd like to test these, but don't know how yet. - continue class BenchmarkSmokeTest(unittest.TestCase): pass
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py index 7697ced..4dd75c7 100755 --- a/tools/perf/core/perf_data_generator.py +++ b/tools/perf/core/perf_data_generator.py
@@ -693,7 +693,9 @@ # Devices which are broken right now. Tests will not be scheduled on them. # Please add a comment with a bug for replacing the device. -BLACKLISTED_DEVICES = [] +BLACKLISTED_DEVICES = [ + 'build47-b1--device4', # crbug.com/731168 +] # List of benchmarks that are to never be run with reference builds.
diff --git a/ui/app_list/search/history_data_store.cc b/ui/app_list/search/history_data_store.cc index a0e1b29..0f4a3152 100644 --- a/ui/app_list/search/history_data_store.cc +++ b/ui/app_list/search/history_data_store.cc
@@ -128,7 +128,7 @@ void HistoryDataStore::Init(base::DictionaryValue* cached_dict) { DCHECK(cached_dict); cached_dict->SetString(kKeyVersion, kCurrentVersion); - cached_dict->Set(kKeyAssociations, new base::DictionaryValue); + cached_dict->Set(kKeyAssociations, base::MakeUnique<base::DictionaryValue>()); } void HistoryDataStore::Flush(
diff --git a/ui/login/account_picker/md_user_pod_row.css b/ui/login/account_picker/md_user_pod_row.css index 23c3764b..9ffe3aa7 100644 --- a/ui/login/account_picker/md_user_pod_row.css +++ b/ui/login/account_picker/md_user_pod_row.css
@@ -211,7 +211,7 @@ /* This should be 15.6px - the equivalent of 14px at 90% scale. */ flex: auto; font-family: "Roboto"; - font-size: 26px; + font-size: 24px; outline: none; overflow: hidden; text-align: center; @@ -219,7 +219,6 @@ white-space: nowrap; } -.learn-more-container, .auth-container, .password-entry-container, .reauth-hint-container { @@ -227,6 +226,7 @@ } .input-line { + display: none; opacity: 0.34; position: absolute; stroke: #FFFFFF; @@ -243,7 +243,9 @@ } .pod[auth-type='offlinePassword'].focused .password-entry-container, -.pod[auth-type='forceOfflinePassword'].focused .password-entry-container { +.pod[auth-type='forceOfflinePassword'].focused .password-entry-container, +.pod[auth-type='offlinePassword'].focused .input-line, +.pod[auth-type='forceOfflinePassword'].focused .input-line { display: flex; flex: auto; } @@ -637,7 +639,7 @@ display: flex; flex-direction: column; font-size: 13px; - margin: 10px 0 0 12px; + margin: 3px 0 0 12px; width: 220px; } @@ -781,83 +783,52 @@ /**** Public account user pod rules *******************************************/ -.pod.public-account.expanded { - height: 230px; - width: 500px; +.public-account-expanded > * { + display: none; } -.pod.public-account.expanded.advanced { - height: 280px; - width: 610px; +.public-account-expanded .pod { + display: none; } -.pod.public-account.focused .name-container { - display: flex; -} - -.pod.public-account.expanded .name-container { - display: flex; -} - -.pod.public-account .learn-more-container { +.public-account-expanded podrow, +.public-account-expanded .pod.public-account.expanded { display: block; - flex: none; } -.pod.public-account .learn-more { - top: 22px; +.pod.public-account.expanded { + background-color: rgba(0, 0, 0, 0.56); + border-radius: 2px; + height: 324px; + width: 622px; } .expanded-pane { display: none; } -.pod.public-account.animating .expanded-pane, .pod.public-account.expanded .expanded-pane { + border-left: 0.5px solid rgba(255, 255, 255, .34); + color: #FFF; display: block; - font-size: 12px; - margin: 10px; + font-family: "Roboto"; + font-size: 13px; + height: 324px; + left: 322px; overflow: hidden; + position: absolute; + top: 0; + width: 300px; z-index: 1; } -.expanded-pane-contents { - display: flex; - flex-direction: column; - float: right; - height: 213px; - width: 490px; -} - -.pod.public-account.transitioning-to-advanced .expanded-pane-contents { - transition: width 180ms; -} - -.pod.public-account.expanded.advanced .expanded-pane-contents { - height: 263px; - width: 600px; -} - -html[dir=rtl] .expanded-pane-contents { +html[dir=rtl] .expanded-pane { float: left; } -.side-container { - -webkit-margin-start: 200px; - flex: auto; -} - -.expanded-pane-name { - font-size: 19px; - margin-bottom: 11px; - margin-top: -2px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - .expanded-pane-container { - color: grey; + margin-left: 28px; + margin-right: 28px; } .reminder { @@ -868,26 +839,23 @@ display: none; } -.pod.public-account.transitioning-to-advanced .language-and-input-section { - display: block; - opacity: 0; - transition: opacity 180ms ease 180ms; -} - .pod.public-account.expanded.advanced .language-and-input-section { display: block; + margin-left: 28px; + margin-right: 28px; + margin-top: 37px; opacity: 1; } .select-with-label { display: flex; + flex-direction: column; margin-top: 20px; } .language-select-label, .keyboard-select-label { - flex: none; - margin-top: 3px; + opacity: .34; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -895,7 +863,9 @@ } .select-container { - flex: auto; + height: 16px; + margin-top: 5px; + width: 178px; } .language-select, @@ -903,45 +873,72 @@ width: 100%; } -.bottom-container { - -webkit-margin-start: 20px; - align-items: center; - display: flex; - flex-direction: row-reverse; - flex: none; - font-size: 13px; - justify-content: space-between; - margin-bottom: 4px; -} - -.expanded-pane-learn-more-container, .enter-button { flex: none; } -.expanded-pane-learn-more, -.pod.public-account .learn-more { - background-image: url(../../webui/resources/images/business.svg); - background-size: 18px; - height: 18px; - margin-top: -10px; - position: relative; - width: 18px; +.pod .public-account-info-container { + display: none; } -.expanded-pane-learn-more { - top: 5px; +.pod.public-account .public-account-info-container { + display: block; + position: absolute; + top: 230px; } -.info { - flex: auto; - margin: -10px 25px; +.public-account-info-container .learn-more { + --iron-icon-height: 12px; + --iron-icon-width: 12px; + display: block; + opacity: .67; + padding: 0; + position: absolute; +} + +.public-account-info-container .info { + color: rgba(255, 255, 255, .67); + font-family: "Roboto"; + font-size: 13px; overflow: hidden; + padding-left: 8px; + position: absolute; text-overflow: ellipsis; white-space: nowrap; } +.pod.public-account .button-container { + background: rgba(255, 255, 255, .17); + border-radius: 50%; + display: none; + height: 40px; + left: 133px; + position: absolute; + top: 59px; + width: 40px; +} + +.pod.public-account .button-container.forced, +.pod.public-account.hovered .button-container, +.pod.public-account.focused .button-container { + display: block; +} + +.pod.public-account.expanded .button-container { + display: none; +} + +.public-account-submit-button { + color: #FFF; + opacity: 1; + padding: 10px 7px 8px 11px; +} + .monitoring-container { + margin-top: 106px; +} + +.advanced .monitoring-container { margin-top: 35px; } @@ -950,6 +947,12 @@ text-decoration: none; } +.monitoring-learn-more:focus, +.language-and-input:focus { + font-weight: bold; + outline: none; +} + .monitoring-dialog-container .cr-dialog-shield { background: black; opacity: 0.5; @@ -961,18 +964,11 @@ .monitoring-dialog-container .cr-dialog-frame { height: 170px; - left: -46px; padding: 0px; position: relative; - top: -24px; width: 430px; } -.monitoring-dialog-container.advanced .cr-dialog-frame { - left: -110px; - top: 0px; -} - .monitoring-dialog-container .cr-dialog-close { color: grey; height: 34px; @@ -1004,7 +1000,7 @@ } .language-and-input-container { - -webkit-margin-end: 25px; + margin-top: 20px; flex: none; } @@ -1013,25 +1009,21 @@ text-decoration: none; } -.pod.public-account.expanded.advanced .language-and-input-container { - display: none; +.enter-button-container { + background-color: #4285F4; + border-radius: 50%; + bottom: 28px; + height: 40px; + position: absolute; + right: 28px; + width: 40px; } -.enter-button { - background-color: rgb(66, 133, 244); - color: white; - font-size: 12px; - text-transform: none; -} - -.enter-button.keyboard-focus { - font-weight: normal; -} - -.horizontal-line { - border-bottom: 1px double #cccccc; - bottom: 8px; - position: relative; +.language-and-input-dropdown { + height: 16px; + margin-left: 6px; + padding: 0; + width: 16px; } /* Animations for the animated ellipsis: */ @@ -1080,6 +1072,12 @@ height: 618px; } +.pod.public-account.expanded .large-pod { + left: 8px; + position: absolute; + top: 8px; +} + .small-pod { height: 74px; width: 304px;
diff --git a/ui/login/account_picker/md_user_pod_row.js b/ui/login/account_picker/md_user_pod_row.js index 6338b8ab..6d6b0b0 100644 --- a/ui/login/account_picker/md_user_pod_row.js +++ b/ui/login/account_picker/md_user_pod_row.js
@@ -16,13 +16,13 @@ var CROS_EXTRA_SMALL_POD_WIDTH = 282; var DESKTOP_POD_WIDTH = 180; var MD_DESKTOP_POD_WIDTH = 160; - var PUBLIC_EXPANDED_BASIC_WIDTH = 500; - var PUBLIC_EXPANDED_ADVANCED_WIDTH = 610; + var PUBLIC_EXPANDED_WIDTH = 622; var CROS_POD_HEIGHT = 346; var CROS_SMALL_POD_HEIGHT = 74; var CROS_EXTRA_SMALL_POD_HEIGHT = 60; var DESKTOP_POD_HEIGHT = 226; var MD_DESKTOP_POD_HEIGHT = 200; + var PUBLIC_EXPANDED_HEIGHT = 324; var POD_ROW_PADDING = 10; var DESKTOP_ROW_PADDING = 32; var CUSTOM_ICON_CONTAINER_SIZE = 40; @@ -30,6 +30,7 @@ var SCROLL_MASK_HEIGHT = 112; var BANNER_MESSAGE_WIDTH = 520; var CROS_POD_HEIGHT_WITH_PIN = 618; + var PUBLIC_SESSION_ICON_WIDTH = 12; /** * The maximum number of users that each pod placement method can handle. @@ -1152,6 +1153,14 @@ }, /** + * Returns true if it's a public session pod. + * @type {boolean} + */ + get isPublicSessionPod() { + return this.classList.contains('public-account'); + }, + + /** * Sets the pod style. * @param {UserPod.Style} style Style set to the pod. */ @@ -2087,6 +2096,11 @@ if (this.parentNode.disabled) return; + // Click events on public session pods should only be handled by their + // overriding handler. + if (this.isPublicSessionPod) + return; + if (this.getPodStyle() != UserPod.Style.LARGE) { $('pod-row').switchMainPod(this); return; @@ -2173,6 +2187,12 @@ __proto__: UserPod.prototype, /** + * Keeps track of the pod's original position before it's expanded. + * @type {Object} + */ + lastPosition: {left: 'unset', top: 'unset'}, + + /** * "Enter" button in expanded side pane. * @type {!HTMLButtonElement} */ @@ -2192,6 +2212,11 @@ }, set expanded(expanded) { + if (this.getPodStyle() != UserPod.Style.LARGE) { + console.error( + 'Attempt to expand a public session pod when it is not large.'); + return; + } if (this.expanded == expanded) return; @@ -2203,26 +2228,10 @@ // environments where users are likely to want to choose among locales. if (this.querySelector('.language-select').multipleRecommendedLocales) this.classList.add('advanced'); - this.usualLeft = this.left; - this.makeSpaceForExpandedPod_(); - } else if (typeof(this.usualLeft) != 'undefined') { - this.left = this.usualLeft; + } else { + this.classList.remove('advanced'); } - - var self = this; - this.classList.add('animating'); - this.addEventListener('transitionend', function f(e) { - self.removeEventListener('transitionend', f); - self.classList.remove('animating'); - - // Accessibility focus indicator does not move with the focused - // element. Sends a 'focus' event on the currently focused element - // so that accessibility focus indicator updates its location. - if (document.activeElement) - document.activeElement.dispatchEvent(new Event('focus')); - }); - // Guard timer set to animation duration + 20ms. - ensureTransitionEndEvent(this, 200); + this.parentNode.handlePublicPodExpansion(this, expanded); }, get advanced() { @@ -2259,10 +2268,6 @@ learnMore.addEventListener('click', this.handleLearnMoreEvent); learnMore.addEventListener('keydown', this.handleLearnMoreEvent); - learnMore = this.querySelector('.expanded-pane-learn-more'); - learnMore.addEventListener('click', this.handleLearnMoreEvent); - learnMore.addEventListener('keydown', this.handleLearnMoreEvent); - var languageSelect = this.querySelector('.language-select'); languageSelect.tabIndex = UserPodTabOrder.POD_INPUT; languageSelect.manuallyChanged = false; @@ -2277,10 +2282,15 @@ keyboardSelect.tabIndex = UserPodTabOrder.POD_INPUT; keyboardSelect.loadedLocale = null; - var languageAndInput = this.querySelector('.language-and-input'); - languageAndInput.tabIndex = UserPodTabOrder.POD_INPUT; - languageAndInput.addEventListener('click', - this.transitionToAdvanced_.bind(this)); + var languageAndInputLink = this.querySelector('.language-and-input'); + languageAndInputLink.tabIndex = UserPodTabOrder.POD_INPUT; + languageAndInputLink.addEventListener( + 'click', this.transitionToAdvanced_.bind(this)); + + var languageAndInputIcon = + this.querySelector('.language-and-input-dropdown'); + languageAndInputIcon.addEventListener( + 'click', this.transitionToAdvanced_.bind(this)); var monitoringLearnMore = this.querySelector('.monitoring-learn-more'); monitoringLearnMore.tabIndex = UserPodTabOrder.POD_INPUT; @@ -2323,8 +2333,6 @@ /** @override **/ update: function() { UserPod.prototype.update.call(this); - this.querySelector('.expanded-pane-name').textContent = - this.user_.displayName; this.querySelector('.info').textContent = loadTimeData.getStringF('publicAccountInfoFormat', this.user_.enterpriseDomain); @@ -2409,38 +2417,12 @@ stopEventPropagation(event); }, - makeSpaceForExpandedPod_: function() { - var width = this.classList.contains('advanced') ? - PUBLIC_EXPANDED_ADVANCED_WIDTH : PUBLIC_EXPANDED_BASIC_WIDTH; - var isDesktopUserManager = Oobe.getInstance().displayType == - DISPLAY_TYPE.DESKTOP_USER_MANAGER; - var rowPadding = isDesktopUserManager ? DESKTOP_ROW_PADDING : - POD_ROW_PADDING; - if (this.left + width > $('pod-row').offsetWidth - rowPadding) - this.left = $('pod-row').offsetWidth - rowPadding - width; - }, - /** * Transition the expanded pod from the basic to the advanced view. */ transitionToAdvanced_: function() { - var pod = this; - var languageAndInputSection = - this.querySelector('.language-and-input-section'); - this.classList.add('transitioning-to-advanced'); - setTimeout(function() { - pod.classList.add('advanced'); - pod.makeSpaceForExpandedPod_(); - languageAndInputSection.addEventListener('transitionend', - function observer() { - languageAndInputSection.removeEventListener('transitionend', - observer); - pod.classList.remove('transitioning-to-advanced'); - pod.querySelector('.language-select').focus(); - }); - // Guard timer set to animation duration + 20ms. - ensureTransitionEndEvent(languageAndInputSection, 380); - }, 0); + this.classList.add('advanced'); + // TODO(wzang): Add transition animation when its spec becomes available. }, /** @@ -2496,7 +2478,7 @@ } chrome.send('getPublicSessionKeyboardLayouts', [this.user.username, selectedLocale]); - }, + }, /** * Populates the keyboard layout "select" element with a list of layouts. @@ -3415,6 +3397,9 @@ this.touchViewEnabled_ = isTouchViewEnabled; this.pods.forEach(function(pod, index) { pod.actionBoxAreaElement.classList.toggle('forced', isTouchViewEnabled); + if (pod.isPublicSessionPod) + pod.querySelector('.button-container') + .classList.toggle('forced', isTouchViewEnabled); }); }, @@ -3576,12 +3561,11 @@ */ placeSinglePod_: function() { this.mainPod_.setPodStyle(UserPod.Style.LARGE); - this.mainPod_.left = (this.screenSize.width - CROS_POD_WIDTH) / 2; - this.mainPod_.top = (this.screenSize.height - CROS_POD_HEIGHT) / 2; + this.centerPod_(this.mainPod_, CROS_POD_WIDTH, CROS_POD_HEIGHT); }, /** - * Called when there are two users pods. + * Called when the number of pods is within the POD_ROW_LIMIT. * @private */ placePodsOnPodRow_: function() { @@ -3603,7 +3587,7 @@ }, /** - * Called when there are more than two user pods. + * Called when the number of pods exceeds the POD_ROW_LIMIT. * @private */ placePodsOnContainer_: function() { @@ -3685,8 +3669,8 @@ }, /** - * Called when there are more than 6 user pods in landscape mode, or more - * than 10 user pods in portrait mode. + * Called when the LANDSCAPE_MODE_LIMIT or PORTRAIT_MODE_LIMIT is exceeded + * and the scrollable container is shown. * @private */ placePodsOnScrollableContainer_: function() { @@ -3791,10 +3775,8 @@ // the last position in the scrollable container, a bottom padding // was added to ensure a symmetric layout. pod.style.paddingBottom = cr.ui.toCssPx(0); - // Remove the switch animation that might be added earlier. - pod.imageElement.classList.remove('switch-image-animation'); - pod.smallPodImageElement.classList.remove('switch-image-animation'); } + this.clearPodsAnimation_(); this.hideEmptyArea_(); // Clear error bubbles whenever pod placement is happening, i.e., after // orientation change, showing or hiding virtual keyboard, and user @@ -3862,26 +3844,58 @@ pod.nameElement.style.width = cr.ui.toCssPx(CROS_POD_WIDTH); nameArea.style.left = cr.ui.toCssPx(0); } + // Update info container area for public session pods. + if (pod.isPublicSessionPod) { + var infoElement = pod.querySelector('.info'); + var infoIcon = pod.querySelector('.learn-more'); + var totalWidth = PUBLIC_SESSION_ICON_WIDTH + infoElement.offsetWidth; + var infoLeftMargin = (CROS_POD_WIDTH - totalWidth) / 2; + if (infoLeftMargin > 0) { + infoIcon.style.left = cr.ui.toCssPx(infoLeftMargin); + infoElement.style.left = + cr.ui.toCssPx(infoLeftMargin + PUBLIC_SESSION_ICON_WIDTH); + } else { + infoIcon.style.left = cr.ui.toCssPx(0); + infoElement.style.left = cr.ui.toCssPx(PUBLIC_SESSION_ICON_WIDTH); + infoElement.style.width = cr.ui.toCssPx( + CROS_POD_WIDTH - PUBLIC_SESSION_ICON_WIDTH - + infoElement.style.paddingLeft); + } + // If the public session pod is already expanded, make sure it's + // still centered. + if (pod.expanded) + this.centerPod_(pod, PUBLIC_EXPANDED_WIDTH, PUBLIC_EXPANDED_HEIGHT); + } // Update action box menu position to ensure it doesn't overlap with // elements outside the pod. var actionBoxMenu = pod.querySelector('.action-box-menu'); var actionBoxButton = pod.querySelector('.action-box-button'); - actionBoxMenu.style.top = - cr.ui.toCssPx(actionBoxButton.offsetHeight); + var MENU_TOP_PADDING = 7; if (this.isPortraitMode_() && pods.length > 1) { // Confine the menu inside the pod when it may overlap with outside // elements. actionBoxMenu.style.left = 'auto'; actionBoxMenu.style.right = cr.ui.toCssPx(0); + actionBoxMenu.style.top = + cr.ui.toCssPx(actionBoxButton.offsetHeight + MENU_TOP_PADDING); + } else if (!this.isPortraitMode_() && this.isScreenShrinked_()) { + // Prevent the virtual keyboard from blocking the remove user button. + actionBoxMenu.style.left = cr.ui.toCssPx( + pod.nameElement.offsetWidth + actionBoxButton.offsetWidth); + actionBoxMenu.style.right = 'auto'; + actionBoxMenu.style.top = cr.ui.toCssPx(0); } else { actionBoxMenu.style.left = cr.ui.toCssPx( pod.nameElement.offsetWidth + actionBoxButton.style.marginLeft); actionBoxMenu.style.right = 'auto'; + actionBoxMenu.style.top = + cr.ui.toCssPx(actionBoxButton.offsetHeight + MENU_TOP_PADDING); } // Add ripple animation. var actionBoxRippleEffect = pod.querySelector('.action-box-button.ripple-circle'); - actionBoxRippleEffect.style.left = actionBoxMenu.style.left; + actionBoxRippleEffect.style.left = cr.ui.toCssPx( + pod.nameElement.offsetWidth + actionBoxButton.style.marginLeft); actionBoxRippleEffect.style.top = cr.ui.toCssPx(actionBoxButton.style.marginTop); // Adjust the vertical position of the pod if pin keyboard is shown. @@ -3891,9 +3905,7 @@ // Update the position of the sign-in banner if it's shown. if ($('signin-banner').textContent.length != 0) { var bannerContainer = $('signin-banner-container1'); - var BANNER_TOP_PADDING = this.isScreenShrinked_() ? 0 : 38; - bannerContainer.style.top = cr.ui.toCssPx( - this.mainPod_.top + CROS_POD_HEIGHT + BANNER_TOP_PADDING); + bannerContainer.style.top = cr.ui.toCssPx(this.mainPod_.top / 2); if (this.pods.length <= POD_ROW_LIMIT) { bannerContainer.style.left = cr.ui.toCssPx((this.screenSize.width - BANNER_MESSAGE_WIDTH) / 2); @@ -3907,12 +3919,67 @@ }, /** + * Handles required UI changes when a public session pod toggles the + * expanded state. + * @param {UserPod} pod Public session pod. + * @param {boolean} expanded Whether the pod is expanded or not. + */ + handlePublicPodExpansion: function(pod, expanded) { + // Hide all other elements in the account picker if the pod is expanded. + this.parentNode.classList.toggle('public-account-expanded', expanded); + if (expanded) { + this.centerPod_(pod, PUBLIC_EXPANDED_WIDTH, PUBLIC_EXPANDED_HEIGHT); + } else { + // Return the pod to its last position. + pod.left = pod.lastPosition.left; + pod.top = pod.lastPosition.top; + // Pod placement has already finished by this point, but we still need + // to make sure that the styles of all the elements in the pod row are + // updated before being shown. + this.handleAfterPodPlacement_(); + this.clearPodsAnimation_(); + } + }, + + /** + * Called when a pod needs to be centered. + * @param {UserPod} pod Pod to be centered. + * @param {number} podWidth The pod width. + * @param {number} podHeight The pod height. + * @private + */ + centerPod_: function(pod, podWidth, podHeight) { + // The original position of a public session pod is recorded in case of + // future need. + if (pod.isPublicSessionPod) + pod.lastPosition = {left: pod.left, top: pod.top}; + // Avoid using offsetWidth and offsetHeight in case the pod is not fully + // loaded yet. + pod.left = (this.screenSize.width - podWidth) / 2; + pod.top = (this.screenSize.height - podHeight) / 2; + }, + + /** + * Clears animation classes that may be added earlier to ensure a clean + * state. + * @private + */ + clearPodsAnimation_: function() { + var pods = this.pods; + for (var pod of pods) { + pod.imageElement.classList.remove('switch-image-animation'); + pod.smallPodImageElement.classList.remove('switch-image-animation'); + } + }, + + /** * Called when a small or extra small pod is clicked to trigger the switch * with the main pod. + * @param {UserPod} pod Pod to be switched with the main pod. */ switchMainPod: function(pod) { if (this.disabled) { - console.error('Cannot change main pod while sign-in UI is disabled.'); + console.error('Cannot switch main pod while sign-in UI is disabled.'); return; } if (!this.mainPod_) { @@ -4267,6 +4334,10 @@ this.focusedPod_, true /* force */, true /* opt_skipInputFocus */); this.focusedPod_.userTypeBubbleElement.classList.remove('bubble-shown'); this.focusedPod_.isActionBoxMenuHovered = false; + // If the click is outside the public session pod, still focus on it + // but do not expand it any more. + if (this.focusedPod_.isPublicSessionPod) + this.focusedPod_.expanded = false; } }, @@ -4395,7 +4466,9 @@ } break; case 'Enter': - if (this.focusedPod_) { + // Keydown events on public session pods should only be handled by + // their own handler. + if (this.focusedPod_ && !this.focusedPod_.isPublicSessionPod) { var targetTag = e.target.tagName; if (e.target == this.focusedPod_.passwordElement || (this.focusedPod_.pinKeyboard &&
diff --git a/ui/login/account_picker/md_user_pod_template.html b/ui/login/account_picker/md_user_pod_template.html index 82ee6c51..95ec15a 100644 --- a/ui/login/account_picker/md_user_pod_template.html +++ b/ui/login/account_picker/md_user_pod_template.html
@@ -15,19 +15,23 @@ See http://goo.gl/Y1OdAq for instructions on adding additional icons. --> <g id="arrow-forward" stroke="none" stroke-width="1"> - <polygon id="arrow" points="10.5 4 9.354375 5.145625 13.888125 9.6875 4 9.6875 4 11.3126 13.888125 11.3125 9.354375 15.854375 10.5 17 17 10.5"></polygon> + <polygon id="arrow" points="10.5 4 9.354375 5.145625 13.888125 9.6875 4 9.6875 4 11.3126 13.888125 11.3125 9.354375 15.854375 10.5 17 17 10.5"></polygon> </g> <g id="dropdown" fill="#FFFFFF" stroke="none" stroke-width="1" fill-rule="evenodd" opacity="0.34"> - <polygon points="16.59 8.59 12 13.17 7.41 8.59 6 10 12 16 18 10"></polygon> + <polygon points="16.59 8.59 12 13.17 7.41 8.59 6 10 12 16 18 10"></polygon> </g> <g id="legacy-supervised-badge"> - <path d="M16.5,13.5 C17.42,13.5 18.16,12.7533333 18.16,11.8333333 C18.16,10.9133333 17.42,10.1666667 16.5,10.1666667 C15.58,10.1666667 14.8333333,10.9133333 14.8333333,11.8333333 C14.8333333,12.7533333 15.58,13.5 16.5,13.5 Z M11.5,12.8333333 C12.6066667,12.8333333 13.4933333,11.94 13.4933333,10.8333333 C13.4933333,9.72666667 12.6066667,8.83333333 11.5,8.83333333 C10.3933333,8.83333333 9.5,9.72666667 9.5,10.8333333 C9.5,11.94 10.3933333,12.8333333 11.5,12.8333333 Z M16.5,14.8333333 C15.28,14.8333333 12.8333333,15.4466667 12.8333333,16.6666667 L12.8333333,18.1666667 L20.1666667,18.1666667 L20.1666667,16.6666667 C20.1666667,15.4466667 17.72,14.8333333 16.5,14.8333333 Z M11.5,14.1666667 C9.94666667,14.1666667 6.83333333,14.9466667 6.83333333,16.5 L6.83333333,18.1666667 L11.5,18.1666667 L11.5,16.6666667 C11.5,16.1 11.72,15.1066667 13.08,14.3533333 C12.5,14.2333333 11.94,14.1666667 11.5,14.1666667 Z" id="Shape" fill="#000000" fill-rule="nonzero" opacity="0.34"></path> + <path d="M16.5,13.5 C17.42,13.5 18.16,12.7533333 18.16,11.8333333 C18.16,10.9133333 17.42,10.1666667 16.5,10.1666667 C15.58,10.1666667 14.8333333,10.9133333 14.8333333,11.8333333 C14.8333333,12.7533333 15.58,13.5 16.5,13.5 Z M11.5,12.8333333 C12.6066667,12.8333333 13.4933333,11.94 13.4933333,10.8333333 C13.4933333,9.72666667 12.6066667,8.83333333 11.5,8.83333333 C10.3933333,8.83333333 9.5,9.72666667 9.5,10.8333333 C9.5,11.94 10.3933333,12.8333333 11.5,12.8333333 Z M16.5,14.8333333 C15.28,14.8333333 12.8333333,15.4466667 12.8333333,16.6666667 L12.8333333,18.1666667 L20.1666667,18.1666667 L20.1666667,16.6666667 C20.1666667,15.4466667 17.72,14.8333333 16.5,14.8333333 Z M11.5,14.1666667 C9.94666667,14.1666667 6.83333333,14.9466667 6.83333333,16.5 L6.83333333,18.1666667 L11.5,18.1666667 L11.5,16.6666667 C11.5,16.1 11.72,15.1066667 13.08,14.3533333 C12.5,14.2333333 11.94,14.1666667 11.5,14.1666667 Z" id="Shape" fill="#000000" fill-rule="nonzero" opacity="0.34"></path> </g> <g id="signed-in-badge"> - <polygon id="Shape" fill="#000000" fill-rule="nonzero" opacity="0.34" points="11.5 16.28 8.72 13.5 7.77333333 14.44 11.5 18.1666667 19.5 10.1666667 18.56 9.22666667"></polygon> + <polygon id="Shape" fill="#000000" fill-rule="nonzero" opacity="0.34" points="11.5 16.28 8.72 13.5 7.77333333 14.44 11.5 18.1666667 19.5 10.1666667 18.56 9.22666667"></polygon> </g> <g id="caps-lock"> - <path d="M2.5,4.49188419 C2.5,3.39179693 3.39339733,2.5 4.49188419,2.5 L15.5081158,2.5 C16.6082031,2.5 17.5,3.39339733 17.5,4.49188419 L17.5,15.5081158 C17.5,16.6082031 16.6066027,17.5 15.5081158,17.5 L4.49188419,17.5 C3.39179693,17.5 2.5,16.6066027 2.5,15.5081158 L2.5,4.49188419 Z M10,7.47368421 L13.825,11.5 L15,10.2631579 L10,5 L5,10.2631579 L6.175,11.5 L10,7.47368421 Z M5,15 L15,15 L15,13.5 L5,13.5 L5,15 Z" id="Combined-Shape" fill="#FFFFFF"></path> + <path d="M2.5,4.49188419 C2.5,3.39179693 3.39339733,2.5 4.49188419,2.5 L15.5081158,2.5 C16.6082031,2.5 17.5,3.39339733 17.5,4.49188419 L17.5,15.5081158 C17.5,16.6082031 16.6066027,17.5 15.5081158,17.5 L4.49188419,17.5 C3.39179693,17.5 2.5,16.6066027 2.5,15.5081158 L2.5,4.49188419 Z M10,7.47368421 L13.825,11.5 L15,10.2631579 L10,5 L5,10.2631579 L6.175,11.5 L10,7.47368421 Z M5,15 L15,15 L15,13.5 L5,13.5 L5,15 Z" id="Combined-Shape" fill="#FFFFFF"></path> + </g> + <g id="public-session-icon"> + <path d="M16,17 L18,17 L18,15 L16,15 L16,17 Z M16,13 L18,13 L18,11 L16,11 L16,13 Z M20,19 L12,19 L12,17 L14,17 L14,15 L12,15 L12,13 L14,13 L14,11 L12,11 L12,9 L20,9 L20,19 Z M8,7 L10,7 L10,5 L8,5 L8,7 Z M8,11 L10,11 L10,9 L8,9 L8,11 Z M8,15 L10,15 L10,13 L8,13 L8,15 Z M8,19 L10,19 L10,17 L8,17 L8,19 Z M4,7 L6,7 L6,5 L4,5 L4,7 Z M4,11 L6,11 L6,9 L4,9 L4,11 Z M4,15 L6,15 L6,13 L4,13 L4,15 Z M4,19 L6,19 L6,17 L4,17 L4,19 Z M12,7 L12,3 L2,3 L2,21 L22,21 L22,7 L12,7 Z" id="Page-1" fill="#FFFFFF"></path> + <!--<path d="M8,9 L9,9 L9,8 L8,8 L8,9 Z M8,7 L9,7 L9,6 L8,6 L8,7 Z M4,4 L5,4 L5,3 L4,3 L4,4 Z M4,6 L5,6 L5,5 L4,5 L4,6 Z M4,8 L5,8 L5,7 L4,7 L4,8 Z M4,10 L5,10 L5,9 L4,9 L4,10 Z M2,4 L3,4 L3,3 L2,3 L2,4 Z M2,6 L3,6 L3,5 L2,5 L2,6 Z M2,8 L3,8 L3,7 L2,7 L2,8 Z M2,10 L3,10 L3,9 L2,9 L2,10 Z M6,4 L6,2 L1,2 L1,11 L11,11 L11,4 L6,4 Z M10,10 L6,10 L6,9 L7,9 L7,8 L6,8 L6,7 L7,7 L7,6 L6,6 L6,5 L10,5 L10,10 Z" id="Page-1" fill="#FFFFFF"></path>--> </g> </defs> </svg> @@ -54,9 +58,6 @@ </if> <div class="main-pane"> <div class="name-container"> - <div class="learn-more-container"> - <div class="learn-more"></div> - </div> <div class="name"></div> <div class="action-box-area"> <paper-icon-button class="action-box-button" disabled @@ -167,6 +168,17 @@ </svg> </div> </div> + <div class="public-account-info-container"> + <iron-icon class="learn-more" icon="user-pod:public-session-icon"> + </iron-icon> + <div class="info"></div> + <div class="button-container"> + <paper-icon-button class="public-account-submit-button expand-button" + aria-label="$i18n{submitButtonAccessibleName}" + icon="user-pod:arrow-forward" tabindex="-1"> + </paper-icon-button> + </div> + </div> </div> <div class="user-image-gradient-area"> </div> @@ -205,55 +217,48 @@ appended. --> <div id="public-account-user-pod-extras-template" hidden> <div class="expanded-pane"> - <div class="expanded-pane-contents"> - <div class="side-container"> - <div class="expanded-pane-name"></div> - <div class="expanded-pane-container"> - <div class="expanded-pane-learn-more-container"> - <div class="expanded-pane-learn-more"></div> - </div> - <div class="info"></div> - <div class="monitoring-container"> - <span class="monitoring-warning"> - $i18n{publicAccountMonitoringWarning} - </span> - <a class="monitoring-learn-more" href="#" role="button"> - $i18n{publicAccountLearnMore} - </a> - </div> - <div class="reminder">$i18n{publicAccountReminder}</div> - <div class="language-and-input-section"> - <div class="select-with-label"> - <label class="language-select-label"> - $i18n{publicSessionSelectLanguage} - </label> - <div class="select-container"> - <select class="language-select"></select> - </div> - </div> - <div class="select-with-label"> - <label class="keyboard-select-label"> - $i18n{publicSessionSelectKeyboard} - </label> - <div class="select-container"> - <select class="keyboard-select"></select> - </div> - </div> - </div> + <div class="expanded-pane-container"> + <div class="monitoring-container"> + <span class="monitoring-warning"> + $i18n{publicAccountMonitoringWarning} + </span> + <a class="monitoring-learn-more" href="#" role="button"> + $i18n{publicAccountLearnMore} + </a> + </div> + <div class="reminder">$i18n{publicAccountReminder}</div> + <div class="language-and-input-container"> + <a class="language-and-input" href="#" role="button"> + $i18n{publicSessionLanguageAndInput} + </a> + <paper-icon-button class="language-and-input-dropdown" + icon="user-pod:dropdown"> + </paper-icon-button> + </div> + </div> + <div class="language-and-input-section"> + <div class="select-with-label"> + <label class="language-select-label"> + $i18n{publicSessionSelectLanguage} + </label> + <div class="select-container"> + <select class="language-select"></select> </div> </div> - <div class="horizontal-line"></div> - <div class="bottom-container"> - <paper-button raised class="enter-button" - aria-label="$i18n{publicAccountEnterAccessibleName}"> - $i18n{publicAccountEnter} - </paper-button> - <div class="language-and-input-container"> - <a class="language-and-input" href="#" role="button"> - $i18n{publicSessionLanguageAndInput} - </a> + <div class="select-with-label"> + <label class="keyboard-select-label"> + $i18n{publicSessionSelectKeyboard} + </label> + <div class="select-container"> + <select class="keyboard-select"></select> </div> </div> </div> + <div class="enter-button-container"> + <paper-icon-button class="public-account-submit-button enter-button" + aria-label="$i18n{publicAccountEnterAccessibleName}" + icon="user-pod:arrow-forward" tabindex="-1"> + </paper-icon-button> + </div> </div> </div>